SpyBara
Go Premium

Documentation 2026-09-30 23:00 UTC to 2026-10-01 21:59 UTC

66 files changed +4,058 −333. View all changes and history on the product overview
2026
Thu 1 21:59

admin-setup.md +1 −0

Details

106| [Désactiver la synchronisation claude.ai](/docs/fr/settings-reference#syncclaudeaiskills) | Arrêter Claude Code de charger les [skills](/docs/fr/skills#how-synced-skills-behave) et [plugins](/docs/fr/plugins/loading#synced-plugins) que vos développeurs activent sur claude.ai. Si vous désactivez les Skills pour votre organisation sur claude.ai, Claude Code arrête la synchronisation des deux, et sur v2.1.273 ou ultérieur, il supprime également ceux qu'il a déjà synchronisés. Pour arrêter l'un ou l'autre sans désactiver les Skills, définissez sa clé sur `false` dans les paramètres gérés | `syncClaudeAiSkills`, `syncClaudeAiPlugins` |106| [Désactiver la synchronisation claude.ai](/docs/fr/settings-reference#syncclaudeaiskills) | Arrêter Claude Code de charger les [skills](/docs/fr/skills#how-synced-skills-behave) et [plugins](/docs/fr/plugins/loading#synced-plugins) que vos développeurs activent sur claude.ai. Si vous désactivez les Skills pour votre organisation sur claude.ai, Claude Code arrête la synchronisation des deux, et sur v2.1.273 ou ultérieur, il supprime également ceux qu'il a déjà synchronisés. Pour arrêter l'un ou l'autre sans désactiver les Skills, définissez sa clé sur `false` dans les paramètres gérés | `syncClaudeAiSkills`, `syncClaudeAiPlugins` |

107| [Restrictions des hooks](/docs/fr/settings-reference#allowmanagedhooksonly) | Restreindre les hooks qui s'exécutent et restreindre les URL des hooks HTTP ; consultez [ce qui s'exécute sous `allowManagedHooksOnly`](/docs/fr/settings-reference#what-runs-under-allowmanagedhooksonly) pour la liste complète des effets | `allowManagedHooksOnly`, `allowedHttpHookUrls` |107| [Restrictions des hooks](/docs/fr/settings-reference#allowmanagedhooksonly) | Restreindre les hooks qui s'exécutent et restreindre les URL des hooks HTTP ; consultez [ce qui s'exécute sous `allowManagedHooksOnly`](/docs/fr/settings-reference#what-runs-under-allowmanagedhooksonly) pour la liste complète des effets | `allowManagedHooksOnly`, `allowedHttpHookUrls` |

108| [Application de la connexion](/docs/fr/settings-reference#forceloginmethod) | Restreindre la connexion à une méthode spécifique ou à une organisation Anthropic. La restriction de méthode s'applique sur l'extension VS Code, Agent SDK, `claude setup-token`, et `/install-github-app`, et l'écran de connexion interactif du terminal, accessible via `/login` ou l'intégration au premier lancement, présélectionne la méthode sans l'appliquer ; Claude Code vérifie l'organisation pour les connexions de compte claude.ai dans le terminal, l'extension VS Code et Agent SDK, et ne la vérifie pas pour les connexions Claude Console ou pour la connexion [gateway](/docs/fr/claude-apps-gateway). Avant v2.1.212, seules les connexions au terminal appliquaient l'une ou l'autre clé. Lorsqu'elle est définie, les sessions authentifiées par `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, ou `apiKeyHelper` sont bloquées au démarrage ; les sessions des fournisseurs cloud ne sont pas affectées sauf si l'une de ces informations d'identification, ou une clé API enregistrée par une connexion Claude Console antérieure, est également présente | `forceLoginMethod`, `forceLoginOrgUUID` |108| [Application de la connexion](/docs/fr/settings-reference#forceloginmethod) | Restreindre la connexion à une méthode spécifique ou à une organisation Anthropic. La restriction de méthode s'applique sur l'extension VS Code, Agent SDK, `claude setup-token`, et `/install-github-app`, et l'écran de connexion interactif du terminal, accessible via `/login` ou l'intégration au premier lancement, présélectionne la méthode sans l'appliquer ; Claude Code vérifie l'organisation pour les connexions de compte claude.ai dans le terminal, l'extension VS Code et Agent SDK, et ne la vérifie pas pour les connexions Claude Console ou pour la connexion [gateway](/docs/fr/claude-apps-gateway). Avant v2.1.212, seules les connexions au terminal appliquaient l'une ou l'autre clé. Lorsqu'elle est définie, les sessions authentifiées par `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, ou `apiKeyHelper` sont bloquées au démarrage ; les sessions des fournisseurs cloud ne sont pas affectées sauf si l'une de ces informations d'identification, ou une clé API enregistrée par une connexion Claude Console antérieure, est également présente | `forceLoginMethod`, `forceLoginOrgUUID` |

109| [Restrictions de fournisseur](/docs/fr/settings-reference#allowedproviders) | Limiter les fournisseurs d'API qu'une machine peut utiliser. Une session sur un fournisseur qui n'est pas répertorié est refusée au démarrage, à la connexion et lorsqu'elle contacte ensuite l'API. Nécessite Claude Code v2.1.285 ou ultérieur | `allowedProviders` |

109| [Désactiver la vue agent](/docs/fr/agent-view#how-background-sessions-are-hosted) | Désactiver `claude agents`, `--bg`, `/background`, et le superviseur à la demande | `disableAgentView` |110| [Désactiver la vue agent](/docs/fr/agent-view#how-background-sessions-are-hosted) | Désactiver `claude agents`, `--bg`, `/background`, et le superviseur à la demande | `disableAgentView` |

110| [Configurer le lanceur d'entreprise](/docs/fr/corporate-launcher) | Préfixer le [superviseur d'agent d'arrière-plan](/docs/fr/agent-view#how-background-sessions-are-hosted), ses workers, et les [autres processus d'arrière-plan couverts](/docs/fr/corporate-launcher#what-the-launcher-covers) avec un lanceur d'entreprise requis au lieu de désactiver la vue agent | `processWrapper` |111| [Configurer le lanceur d'entreprise](/docs/fr/corporate-launcher) | Préfixer le [superviseur d'agent d'arrière-plan](/docs/fr/agent-view#how-background-sessions-are-hosted), ses workers, et les [autres processus d'arrière-plan couverts](/docs/fr/corporate-launcher#what-the-launcher-covers) avec un lanceur d'entreprise requis au lieu de désactiver la vue agent | `processWrapper` |

111| [Restrictions de modèle](/docs/fr/model-config#restrict-model-selection) | `availableModels` filtre les modèles qui apparaissent dans le sélecteur. L'ajout de `enforceAvailableModels` contraint également le modèle par défaut sélectionné automatiquement. Consultez [couverture de surface](/docs/fr/model-config#surface-coverage) pour voir comment ce paramètre atteint l'interface CLI, web et IDE | `availableModels`, `enforceAvailableModels` |112| [Restrictions de modèle](/docs/fr/model-config#restrict-model-selection) | `availableModels` filtre les modèles qui apparaissent dans le sélecteur. L'ajout de `enforceAvailableModels` contraint également le modèle par défaut sélectionné automatiquement. Consultez [couverture de surface](/docs/fr/model-config#surface-coverage) pour voir comment ce paramètre atteint l'interface CLI, web et IDE | `availableModels`, `enforceAvailableModels` |

Details

418 ```418 ```

419</CodeGroup>419</CodeGroup>

420 420 

421Pour confirmer le blocage, enregistrez le rappel sous `PreToolUse` avec un matcher `Write|Edit` et demandez à l'agent de créer un fichier sous `/etc` : le résultat de l'outil Write dans le flux de messages contient `Writing to /etc is not allowed`, et aucun fichier n'est créé.

422 

421<h3 id="auto-approve-specific-tools">423<h3 id="auto-approve-specific-tools">

422 Approuver automatiquement des outils spécifiques424 Approuver automatiquement des outils spécifiques

423</h3>425</h3>


468 470 

469Quand un événement se déclenche, tous les hooks correspondants s'exécutent en parallèle. Pour les décisions de permission, le résultat le plus restrictif gagne : un seul `deny` bloque l'appel d'outil indépendamment de ce que les autres hooks retournent. Parce que l'ordre d'exécution est non-déterministe, écrivez chaque hook pour agir indépendamment plutôt que de compter sur l'exécution préalable d'un autre hook.471Quand un événement se déclenche, tous les hooks correspondants s'exécutent en parallèle. Pour les décisions de permission, le résultat le plus restrictif gagne : un seul `deny` bloque l'appel d'outil indépendamment de ce que les autres hooks retournent. Parce que l'ordre d'exécution est non-déterministe, écrivez chaque hook pour agir indépendamment plutôt que de compter sur l'exécution préalable d'un autre hook.

470 472 

471L'exemple ci-dessous enregistre trois vérifications indépendantes pour chaque appel d'outil :473L'exemple ci-dessous enregistre trois vérifications indépendantes pour chaque appel d'outil. Les noms de hook qu'il contient, tels que `audit_logger` en Python ou `auditLogger` en TypeScript, représentent des rappels que vous définissez :

472 474 

473<CodeGroup>475<CodeGroup>

474 ```python Python theme={null}476 ```python Python theme={null}


500 Filtrer avec des matchers multi-outils502 Filtrer avec des matchers multi-outils

501</h3>503</h3>

502 504 

503Utilisez des matchers multi-outils pour partager un rappel entre outils connexes. Cet exemple enregistre trois matchers avec des portées différentes :505Utilisez des matchers multi-outils pour partager un rappel entre outils connexes. Cet exemple enregistre trois matchers avec des portées différentes, et chaque hook qu'il nomme représente un rappel que vous définissez :

504 506 

505* Une liste exacte séparée par des barres (`Write|Edit|NotebookEdit`) déclenche `file_security_hook` uniquement pour les outils de modification de fichiers.507* Une liste exacte séparée par des barres (`Write|Edit|NotebookEdit`) déclenche `file_security_hook` uniquement pour les outils de modification de fichiers.

506* Une regex (`^mcp__`) déclenche `mcp_audit_hook` pour tout outil MCP dont le nom commence par `mcp__`.508* Une regex (`^mcp__`) déclenche `mcp_audit_hook` pour tout outil MCP dont le nom commence par `mcp__`.


585 ```587 ```

586</CodeGroup>588</CodeGroup>

587 589 

590Pour confirmer que le hook se déclenche, enregistrez le rappel et demandez à l'agent de déléguer une petite tâche à un sous-agent, comme lister les fichiers du répertoire courant : quand le sous-agent se termine, le rappel affiche les lignes `[SUBAGENT] Completed:` avec l'ID du sous-agent et le chemin de sa transcription.

591 

588<h3 id="make-http-requests-from-hooks">592<h3 id="make-http-requests-from-hooks">

589 Effectuer des requêtes HTTP à partir des hooks593 Effectuer des requêtes HTTP à partir des hooks

590</h3>594</h3>

Details

121 121 

122Les modes de permission offrent un contrôle global sur la façon dont Claude utilise les outils. Vous pouvez définir le mode de permission lors de l'appel de `query()` ou le modifier dynamiquement pendant les sessions de streaming.122Les modes de permission offrent un contrôle global sur la façon dont Claude utilise les outils. Vous pouvez définir le mode de permission lors de l'appel de `query()` ou le modifier dynamiquement pendant les sessions de streaming.

123 123 

124Si vous n'en définissez pas un, Claude Code choisit le mode de permission de démarrage selon les règles dans [Quel mode une session démarre](/docs/fr/permission-modes#which-mode-a-session-starts-in) :

125 

126* Un `permissions.defaultMode` à partir des [fichiers de paramètres](/docs/fr/settings#where-settings-live) de la session lorsqu'un s'applique

127* Sinon la valeur par défaut intégrée, qui peut être [mode auto](/docs/fr/permission-modes#eliminate-prompts-with-auto-mode)

128 

129Une session qui démarre en mode auto supprime les règles d'autorisation larges telles qu'une entrée `Bash` nue, comme [Comment le mode auto évalue les actions](/docs/fr/permission-modes#how-auto-mode-evaluates-actions) le décrit. Si votre application s'appuie sur le mode `default` ou sur une telle règle, passez `default` explicitement.

130 

131Avant TypeScript Agent SDK v0.3.286, l'omission de `permissionMode` était la même que de passer `default`.

132 

124<h3 id="available-modes">133<h3 id="available-modes">

125 Modes disponibles134 Modes disponibles

126</h3>135</h3>

agent-sdk/python.md +242 −68

Details

517 async def set_model(self, model: str | None = None) -> None517 async def set_model(self, model: str | None = None) -> None

518 async def rewind_files(self, user_message_id: str) -> None518 async def rewind_files(self, user_message_id: str) -> None

519 async def get_mcp_status(self) -> McpStatusResponse519 async def get_mcp_status(self) -> McpStatusResponse

520 async def get_context_usage(self) -> ContextUsageResponse

520 async def reconnect_mcp_server(self, server_name: str) -> None521 async def reconnect_mcp_server(self, server_name: str) -> None

521 async def toggle_mcp_server(self, server_name: str, enabled: bool) -> None522 async def toggle_mcp_server(self, server_name: str, enabled: bool) -> None

522 async def stop_task(self, task_id: str) -> None523 async def stop_task(self, task_id: str) -> None


540| `set_model(model)` | Change le modèle pour la session actuelle. Passez `None` pour réinitialiser au [modèle par défaut de Claude Code](/docs/fr/model-config) |541| `set_model(model)` | Change le modèle pour la session actuelle. Passez `None` pour réinitialiser au [modèle par défaut de Claude Code](/docs/fr/model-config) |

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

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

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

543| `reconnect_mcp_server(server_name)` | Réessaye de se connecter à un serveur MCP qui a échoué ou a été déconnecté |545| `reconnect_mcp_server(server_name)` | Réessaye de se connecter à un serveur MCP qui a échoué ou a été déconnecté |

544| `toggle_mcp_server(server_name, enabled)` | Active ou désactive un serveur MCP en cours de session. La désactivation supprime ses outils |546| `toggle_mcp_server(server_name, enabled)` | Active ou désactive un serveur MCP en cours de session. La désactivation supprime ses outils |

545| `stop_task(task_id)` | Arrête une tâche de fond en cours d'exécution. Un [`TaskNotificationMessage`](#tasknotificationmessage) avec le statut `"stopped"` suit dans le flux de messages |547| `stop_task(task_id)` | Arrête une tâche de fond en cours d'exécution. Un [`TaskNotificationMessage`](#tasknotificationmessage) avec le statut `"stopped"` suit dans le flux de messages |


616 Exemple - Entrée en streaming avec ClaudeSDKClient618 Exemple - Entrée en streaming avec ClaudeSDKClient

617</h4>619</h4>

618 620 

621`query()` accepte également un itérable asynchrone de dicts de messages utilisateur, vous permettant d'assembler le prompt au moment de l'envoi ou d'inclure des blocs de contenu tels que des images. Claude Code commence à répondre au premier message cédé dès qu'il arrive, sans attendre que l'itérable se termine, et `receive_response()` s'arrête au `ResultMessage` qui termine cette réponse. Mettez tout ce que Claude doit lire avant de répondre dans un seul message, comme le fait ce générateur, et associez chaque appel `query()` à sa propre boucle `receive_response()`.

622 

619```python theme={null}623```python theme={null}

620import asyncio624import asyncio

621from claude_agent_sdk import ClaudeSDKClient625from claude_agent_sdk import ClaudeSDKClient

622 626 

623 627 

624async def message_stream():628async def message_stream():

625 """Generate messages dynamically."""629 """Assemble the prompt at send time and yield it as one user message."""

626 yield {630 readings = {"Temperature": "25°C", "Humidity": "60%"}

627 "type": "user",631 data = ", ".join(f"{name}: {value}" for name, value in readings.items())

628 "message": {"role": "user", "content": "Analyze the following data:"},

629 }

630 await asyncio.sleep(0.5)

631 yield {

632 "type": "user",

633 "message": {"role": "user", "content": "Temperature: 25°C, Humidity: 60%"},

634 }

635 await asyncio.sleep(0.5)

636 yield {632 yield {

637 "type": "user",633 "type": "user",

638 "message": {"role": "user", "content": "What patterns do you see?"},634 "message": {

635 "role": "user",

636 "content": f"Analyze the following sensor data and describe any patterns you see: {data}",

637 },

639 }638 }

640 639 

641 640 


1607| `scope` | `str` (optional) | Portée de la configuration |1606| `scope` | `str` (optional) | Portée de la configuration |

1608| `tools` | `list` (optional) | Outils fournis par ce serveur, chacun avec les champs `name`, `description`, et `annotations` |1607| `tools` | `list` (optional) | Outils fournis par ce serveur, chacun avec les champs `name`, `description`, et `annotations` |

1609 1608 

1609<h3 id="contextusageresponse">

1610 `ContextUsageResponse`

1611</h3>

1612 

1613Réponse de [`ClaudeSDKClient.get_context_usage()`](#methods). Ceci est la même charge utile que Claude Code rend pour la commande `/context` dans une session interactive, donc aux côtés des comptages de tokens elle porte des champs d'affichage tels que `color` et `gridRows` que Claude Code utilise pour dessiner la grille d'utilisation `/context`.

1614 

1615Claude Code construit cette charge utile en envoyant plusieurs requêtes à l'API de [comptage de tokens](https://platform.claude.com/docs/en/build-with-claude/token-counting). Ces requêtes n'apparaissent pas dans le flux de messages, donc le suivi des coûts qui lit le flux ne les verra pas. Sur l'API Anthropic, le comptage de tokens n'est pas facturé.

1616 

1617```python theme={null}

1618class ContextUsageResponse(TypedDict):

1619 categories: list[ContextUsageCategory]

1620 totalTokens: int

1621 maxTokens: int

1622 rawMaxTokens: int

1623 percentage: float

1624 model: str

1625 isAutoCompactEnabled: bool

1626 memoryFiles: list[dict[str, Any]]

1627 mcpTools: list[dict[str, Any]]

1628 agents: list[dict[str, Any]]

1629 gridRows: list[list[dict[str, Any]]]

1630 autoCompactThreshold: NotRequired[int]

1631 deferredBuiltinTools: NotRequired[list[dict[str, Any]]]

1632 systemTools: NotRequired[list[dict[str, Any]]]

1633 systemPromptSections: NotRequired[list[dict[str, Any]]]

1634 slashCommands: NotRequired[dict[str, Any]]

1635 skills: NotRequired[dict[str, Any]] # skill usage with frontmatter breakdown

1636 messageBreakdown: NotRequired[dict[str, Any]] # message tokens by type

1637 apiUsage: NotRequired[dict[str, Any] | None]

1638```

1639 

1640Chaque entrée `ContextUsageCategory` porte `name`, `tokens`, `color`, et un drapeau optionnel `isDeferred`. `totalTokens` est l'utilisation de contexte actuelle de la session, et `maxTokens` est la fenêtre contre laquelle l'utilisation est mesurée. Cette fenêtre est la fenêtre de contexte du modèle, ou la fenêtre de compaction automatique inférieure quand une s'applique, et `rawMaxTokens` porte la même valeur que `maxTokens`. `apiUsage` contient l'utilisation de la dernière réponse API, pas un total cumulé pour la session. Claude Code laisse les clés optionnelles `deferredBuiltinTools`, `systemTools`, et `systemPromptSections` non définies, donc attendez-vous à ce qu'elles soient absentes même si le type les déclare.

1641 

1610<h3 id="sdkpluginconfig">1642<h3 id="sdkpluginconfig">

1611 `SdkPluginConfig`1643 `SdkPluginConfig`

1612</h3>1644</h3>


2712 2744 

2713Documentation des schémas d'entrée/sortie pour tous les outils Claude Code intégrés. Bien que le SDK Python n'exporte pas ceux-ci en tant que types, ils représentent la structure des entrées et sorties d'outils dans les messages.2745Documentation des schémas d'entrée/sortie pour tous les outils Claude Code intégrés. Bien que le SDK Python n'exporte pas ceux-ci en tant que types, ils représentent la structure des entrées et sorties d'outils dans les messages.

2714 2746 

2747Chaque sortie affichée est la valeur que vous lisez à partir de [`UserMessage.tool_use_result`](#usermessage) pour cet outil. Les noms de clés apparaissent exactement comme Claude Code les émet. Une clé annotée `| None` avec un commentaire « présent quand » ou « optionnel » est omise quand elle ne s'applique pas.

2748 

2715<h3 id="agent">2749<h3 id="agent">

2716 Agent2750 Agent

2717</h3>2751</h3>


2885 2919 

2886**Nom de l'outil :** `Bash`2920**Nom de l'outil :** `Bash`

2887 2921 

2888Pour ce qui définit le plafond au premier plan, voir [Limites de délai d'attente et de sortie](/docs/fr/tools-reference#timeout-and-output-limits). Pour la limite de temps en arrière-plan, voir [Commandes en arrière-plan](/docs/fr/tools-reference#background-commands).2922Pour ce qui définit le plafond au premier plan, voir [Limites de délai d'attente et de sortie](/docs/fr/tools-reference#timeout-and-output-limits). Pour la limite de temps en arrière-plan, voir [Limite de temps pour les commandes en arrière-plan](/docs/fr/tools-reference#time-limit-for-background-commands).

2889 2923 

2890**Entrée :**2924**Entrée :**

2891 2925 


2962 2996 

2963```python theme={null}2997```python theme={null}

2964{2998{

2965 "message": str, # Confirmation message2999 "filePath": str, # The file that was edited

2966 "replacements": int, # Number of replacements made3000 "oldString": str, # The text that was replaced

2967 "file_path": str, # File path that was edited3001 "newString": str, # The text that replaced it

3002 "originalFile": str | None, # File contents before the edit

3003 "structuredPatch": [ # Diff hunks for the change

3004 {

3005 "oldStart": int,

3006 "oldLines": int,

3007 "newStart": int,

3008 "newLines": int,

3009 "lines": list[str],

3010 }

3011 ],

3012 "userModified": bool, # Whether the user changed the proposed edit before accepting it

3013 "replaceAll": bool, # Whether all occurrences were replaced

3014 "gitDiff": { # Optional git diff summary for the file

3015 "filename": str,

3016 "status": "modified" | "added",

3017 "additions": int,

3018 "deletions": int,

3019 "changes": int,

3020 "patch": str,

3021 "repository": str | None, # GitHub owner/repo when available

3022 } | None,

2968}3023}

2969```3024```

2970 3025 


2984}3039}

2985```3040```

2986 3041 

2987**Sortie (fichiers texte) :**3042La sortie prend l'une des formes suivantes selon ce que Claude a lu. Vérifiez la clé `type` pour les distinguer.

3043 

3044**Sortie (type : `"text"`) :**

3045 

3046```python theme={null}

3047{

3048 "type": "text",

3049 "file": {

3050 "filePath": str, # The file that was read

3051 "content": str, # The returned content

3052 "numLines": int, # Number of lines in the returned content

3053 "startLine": int, # Line number the content starts at

3054 "totalLines": int, # Total number of lines in the file

3055 "truncatedByTokenCap": bool | None, # Present and True when a whole-file read exceeded the token cap and content is the first page

3056 },

3057}

3058```

3059 

3060**Sortie (type : `"image"`) :**

3061 

3062```python theme={null}

3063{

3064 "type": "image",

3065 "file": {

3066 "base64": str, # Base64-encoded image data

3067 "type": "image/jpeg" | "image/png" | "image/gif" | "image/webp", # Image MIME type

3068 "originalSize": int, # Original file size in bytes

3069 "dimensions": { # Optional sizing info for coordinate mapping

3070 "originalWidth": int | None, # Optional; original width in pixels

3071 "originalHeight": int | None, # Optional; original height in pixels

3072 "displayWidth": int | None, # Optional; width after resizing

3073 "displayHeight": int | None, # Optional; height after resizing

3074 } | None,

3075 },

3076}

3077```

3078 

3079**Sortie (type : `"notebook"`) :**

3080 

3081```python theme={null}

3082{

3083 "type": "notebook",

3084 "file": {

3085 "filePath": str, # The notebook that was read

3086 "cells": list, # Notebook cells

3087 },

3088}

3089```

3090 

3091**Sortie (type : `"pdf"`) :**

3092 

3093```python theme={null}

3094{

3095 "type": "pdf",

3096 "file": {

3097 "filePath": str, # The PDF that was read

3098 "base64": str, # Base64-encoded PDF data

3099 "originalSize": int, # File size in bytes

3100 },

3101}

3102```

3103 

3104**Sortie (type : `"parts"`) :**

2988 3105 

2989```python theme={null}3106```python theme={null}

2990{3107{

2991 "content": str, # File contents with line numbers3108 "type": "parts",

2992 "total_lines": int, # Total number of lines in file3109 "file": {

2993 "lines_returned": int, # Lines actually returned3110 "filePath": str, # The PDF that was read

3111 "originalSize": int, # File size in bytes

3112 "count": int, # Number of pages extracted as images

3113 "outputDir": str, # Directory containing the extracted page images

3114 },

3115 "firstPage": int | None, # Optional document page number of the first extracted page

2994}3116}

2995```3117```

2996 3118 

2997**Sortie (images) :**3119**Sortie (type : `"file_unchanged"`) :**

2998 3120 

2999```python theme={null}3121```python theme={null}

3000{3122{

3001 "image": str, # Base64 encoded image data3123 "type": "file_unchanged", # The file is unchanged since Claude last read it in this session, so the content isn't repeated

3002 "mime_type": str, # Image MIME type3124 "file": {

3003 "file_size": int, # File size in bytes3125 "filePath": str,

3126 },

3127 "source": "seeded" | None, # Present when the earlier copy came from a CLAUDE.md or memory file loaded at startup rather than a Read call

3004}3128}

3005```3129```

3006 3130 


3023 3147 

3024```python theme={null}3148```python theme={null}

3025{3149{

3026 "message": str, # Success message3150 "type": "create" | "update", # Whether the write created a new file or overwrote an existing one

3027 "bytes_written": int, # Number of bytes written3151 "filePath": str, # The file that was written

3028 "file_path": str, # File path that was written3152 "content": str, # The content that was written

3153 "structuredPatch": [ # Diff hunks; empty for a new file, when nothing changed, or when Claude Code skipped the diff

3154 {

3155 "oldStart": int,

3156 "oldLines": int,

3157 "newStart": int,

3158 "newLines": int,

3159 "lines": list[str],

3160 }

3161 ],

3162 "originalFile": str | None, # Previous content; None for a new file or when the previous content was too large to include

3163 "gitDiff": { # Optional git diff summary for the file

3164 "filename": str,

3165 "status": "modified" | "added",

3166 "additions": int,

3167 "deletions": int,

3168 "changes": int,

3169 "patch": str,

3170 "repository": str | None, # GitHub owner/repo when available

3171 } | None,

3172 "userModified": bool | None, # Optional; whether the user edited the proposed content before accepting it

3029}3173}

3030```3174```

3031 3175 


3048 3192 

3049```python theme={null}3193```python theme={null}

3050{3194{

3051 "matches": list[str], # Array of matching file paths3195 "durationMs": int, # Time taken to run the search, in milliseconds

3052 "count": int, # Number of matches found3196 "numFiles": int, # Number of paths returned, after any truncation

3053 "search_path": str, # Search directory used3197 "filenames": list[str], # Matching file paths

3198 "truncated": bool, # Whether the results were truncated at the 100-file limit

3199 "totalMatches": int | None, # Optional total number of matching files before truncation; a lower bound when countIsComplete is False

3200 "countIsComplete": bool | None, # Optional; whether totalMatches is exact

3054}3201}

3055```3202```

3056 3203 

3204`totalMatches` et `countIsComplete` nécessitent Claude Code v2.1.191 ou ultérieur.

3205 

3057<h3 id="grep">3206<h3 id="grep">

3058 Grep3207 Grep

3059</h3>3208</h3>


3074 "-B": int | None, # Lines to show before each match3223 "-B": int | None, # Lines to show before each match

3075 "-A": int | None, # Lines to show after each match3224 "-A": int | None, # Lines to show after each match

3076 "-C": int | None, # Lines to show before and after3225 "-C": int | None, # Lines to show before and after

3226 "context": int | None, # Lines to show before and after; -C is an alias

3227 "-o": bool | None, # Print only the matched parts of each line

3077 "head_limit": int | None, # Limit output to first N lines/entries3228 "head_limit": int | None, # Limit output to first N lines/entries

3229 "offset": int | None, # Skip first N lines/entries before applying head_limit

3078 "multiline": bool | None, # Enable multiline mode3230 "multiline": bool | None, # Enable multiline mode

3079}3231}

3080```3232```

3081 3233 

3082**Sortie (mode contenu) :**3234**Sortie :**

3083 3235 

3084```python theme={null}3236```python theme={null}

3085{3237{

3086 "matches": [3238 "mode": "content" | "files_with_matches" | "count" | None, # The output mode that was used

3087 {3239 "numFiles": int, # Number of files in the result; always 0 in content mode

3088 "file": str,3240 "filenames": list[str], # Matching files in files_with_matches mode; empty in the other modes

3089 "line_number": int | None,3241 "content": str | None, # Matching lines in content mode, or per-file counts in count mode

3090 "line": str,3242 "numLines": int | None, # Number of lines in content, present in content mode

3091 "before_context": list[str] | None,3243 "numMatches": int | None, # Total match count, present in count mode

3092 "after_context": list[str] | None,3244 "totalFiles": int | None, # Optional total before head_limit and offset, in files_with_matches mode

3093 }3245 "totalLines": int | None, # Optional total before head_limit and offset, in content mode

3094 ],3246 "appliedLimit": int | None, # Present when head_limit truncated the result

3095 "total_matches": int,3247 "appliedOffset": int | None, # Present when an offset was applied

3096}3248}

3097```3249```

3098 3250 

3099**Sortie (mode fichiers\_avec\_correspondances) :**3251Grep retourne cette forme de dict dans chaque mode de sortie. Les clés optionnelles présentes dépendent de `output_mode`.

3100 3252 

3101```python theme={null}3253`totalFiles` nécessite Claude Code v2.1.208 ou ultérieur. `totalLines` nécessite Claude Code v2.1.210 ou ultérieur.

3102{

3103 "files": list[str], # Files containing matches

3104 "count": int, # Number of files with matches

3105}

3106```

3107 3254 

3108<h3 id="notebookedit">3255<h3 id="notebookedit">

3109 NotebookEdit3256 NotebookEdit


3127 3274 

3128```python theme={null}3275```python theme={null}

3129{3276{

3130 "message": str, # Success message3277 "new_source": str, # The source written to the cell

3131 "edit_type": "replaced" | "inserted" | "deleted", # Type of edit performed3278 "old_source": str | None, # Previous cell source, present for replace and delete

3132 "cell_id": str | None, # Cell ID that was affected3279 "cell_id": str | None, # ID of the edited cell, when available

3133 "total_cells": int, # Total cells in notebook after edit3280 "cell_type": "code" | "markdown", # The cell type

3281 "language": str, # The notebook's programming language

3282 "edit_mode": str, # The edit mode that was used

3283 "error": str | None, # Error message when the operation failed

3284 "notebook_path": str, # The notebook file

3285 "original_file": str, # Notebook content before the edit

3286 "updated_file": str, # Notebook content after the edit

3134}3287}

3135```3288```

3136 3289 


3228 3381 

3229```python theme={null}3382```python theme={null}

3230{3383{

3231 "message": str, # Success message3384 "oldTodos": [ # The todo list before the update

3232 "stats": {"total": int, "pending": int, "in_progress": int, "completed": int},3385 {

3386 "content": str,

3387 "status": "pending" | "in_progress" | "completed",

3388 "activeForm": str,

3389 }

3390 ],

3391 "newTodos": [ # The todo list after the update

3392 {

3393 "content": str,

3394 "status": "pending" | "in_progress" | "completed",

3395 "activeForm": str,

3396 }

3397 ],

3233}3398}

3234```3399```

3235 3400 


3401 3566 

3402```python theme={null}3567```python theme={null}

3403{3568{

3404 "message": str, # Confirmation message3569 "plan": str | None, # The plan that was presented to the user

3405 "approved": bool | None, # Whether user approved the plan3570 "isAgent": bool, # True when a subagent called the tool

3571 "filePath": str | None, # Present when the plan was saved to a file

3572 "hasTaskTool": bool | None, # Optional; whether the Agent tool is available in the current context

3573 "planWasEdited": bool | None, # Present and True when the user edited the plan before approving

3574 "awaitingLeaderApproval": bool | None, # Present and True when a teammate sent the plan to the team lead for approval

3575 "requestId": str | None, # Optional ID of that approval request

3406}3576}

3407```3577```

3408 3578 


3420}3590}

3421```3591```

3422 3592 

3593Le résultat est une liste plutôt qu'un dict, donc `tool_use_result` contient une `list` pour cet outil.

3594 

3423**Sortie :**3595**Sortie :**

3424 3596 

3425```python theme={null}3597```python theme={null}

3426{3598[ # One entry per resource

3427 "resources": [

3428 {3599 {

3429 "uri": str,3600 "uri": str, # Resource URI

3430 "name": str,3601 "name": str, # Resource name

3431 "description": str | None,3602 "mimeType": str | None, # Optional MIME type

3432 "mimeType": str | None,3603 "description": str | None, # Optional description

3433 "server": str,3604 "server": str, # Server that provides this resource

3434 }3605 }

3435 ],3606]

3436 "total": int,

3437}

3438```3607```

3439 3608 

3440<h3 id="readmcpresource">3609<h3 id="readmcpresource">


3457```python theme={null}3626```python theme={null}

3458{3627{

3459 "contents": [3628 "contents": [

3460 {"uri": str, "mimeType": str | None, "text": str | None, "blob": str | None}3629 {

3630 "uri": str, # Resource URI

3631 "mimeType": str | None, # Optional MIME type

3632 "text": str | None, # Text content, or a note about the binary content

3633 "blobSavedTo": str | None, # Present when Claude Code saved binary content to disk; path of the saved file

3634 }

3461 ],3635 ],

3462 "server": str,3636 "error": str | None, # Present when the server couldn't read the resource

3463}3637}

3464```3638```

3465 3639 

Details

575| `outputFormat` | `{ type: 'json_schema', schema: JSONSchema }` | `undefined` | Définir le format de sortie pour les résultats de l'agent. Voir [Sorties structurées](/docs/fr/agent-sdk/structured-outputs) pour les détails |575| `outputFormat` | `{ type: 'json_schema', schema: JSONSchema }` | `undefined` | Définir le format de sortie pour les résultats de l'agent. Voir [Sorties structurées](/docs/fr/agent-sdk/structured-outputs) pour les détails |

576| `outputStyle` | `string` | `undefined` | Pas un champ `Options`. Définissez `outputStyle` dans l'objet [`settings`](/docs/fr/settings) en ligne ou un fichier de paramètres à la place. Voir [Activer un style de sortie](/docs/fr/agent-sdk/modifying-system-prompts#activate-an-output-style) |576| `outputStyle` | `string` | `undefined` | Pas un champ `Options`. Définissez `outputStyle` dans l'objet [`settings`](/docs/fr/settings) en ligne ou un fichier de paramètres à la place. Voir [Activer un style de sortie](/docs/fr/agent-sdk/modifying-system-prompts#activate-an-output-style) |

577| `pathToClaudeCodeExecutable` | `string` | Résolu automatiquement à partir du binaire natif groupé | Chemin vers l'exécutable Claude Code. Nécessaire uniquement si les dépendances optionnelles ont été ignorées lors de l'installation ou si votre plateforme ne figure pas dans l'ensemble pris en charge |577| `pathToClaudeCodeExecutable` | `string` | Résolu automatiquement à partir du binaire natif groupé | Chemin vers l'exécutable Claude Code. Nécessaire uniquement si les dépendances optionnelles ont été ignorées lors de l'installation ou si votre plateforme ne figure pas dans l'ensemble pris en charge |

578| `permissionMode` | [`PermissionMode`](#permissionmode) | `'default'` | Mode de permission pour la session |578| `permissionMode` | [`PermissionMode`](#permissionmode) | `undefined` | Mode de permission pour la session. Si vous l'omettez, la session peut démarrer en mode auto. Voir [Modes de permission](/docs/fr/agent-sdk/permissions#permission-modes) pour savoir comment Claude Code choisit le mode de permission de démarrage |

579| `permissionPromptToolName` | `string` | `undefined` | Nom de l'outil MCP pour les invites de permission |579| `permissionPromptToolName` | `string` | `undefined` | Nom de l'outil MCP pour les invites de permission |

580| `permissionPrompts` | `'host' \| 'none'` | `'host'` | Qui répond aux invites de permission : `'host'` les achemine vers votre rappel [`canUseTool`](#canusetool) ou l'outil `permissionPromptToolName`, et `'none'` [refuse les appels qui auraient invité](/docs/fr/agent-sdk/permissions#how-permissions-are-evaluated). Nécessite Claude Code v2.1.259 ou ultérieur |580| `permissionPrompts` | `'host' \| 'none'` | `'host'` | Qui répond aux invites de permission : `'host'` les achemine vers votre rappel [`canUseTool`](#canusetool) ou l'outil `permissionPromptToolName`, et `'none'` [refuse les appels qui auraient invité](/docs/fr/agent-sdk/permissions#how-permissions-are-evaluated). Nécessite Claude Code v2.1.259 ou ultérieur |

581| `persistSession` | `boolean` | `true` | Quand `false`, désactive la persistance de session sur disque. Les sessions ne peuvent pas être reprises plus tard |581| `persistSession` | `boolean` | `true` | Quand `false`, désactive la persistance de session sur disque. Les sessions ne peuvent pas être reprises plus tard |


709| `supportedModels()` | Retourne les modèles disponibles avec les informations d'affichage |709| `supportedModels()` | Retourne les modèles disponibles avec les informations d'affichage |

710| `supportedAgents()` | Retourne les sous-agents disponibles en tant que [`AgentInfo`](#agentinfo)`[]` |710| `supportedAgents()` | Retourne les sous-agents disponibles en tant que [`AgentInfo`](#agentinfo)`[]` |

711| `mcpServerStatus()` | Retourne l'état des serveurs MCP connectés en tant que [`McpServerStatus`](#mcpserverstatus)`[]` |711| `mcpServerStatus()` | Retourne l'état des serveurs MCP connectés en tant que [`McpServerStatus`](#mcpserverstatus)`[]` |

712| `getContextUsage(opts?)` | Retourne une [`SDKControlGetContextUsageResponse`](#sdkcontrolgetcontextusageresponse) ventilant l'utilisation de la fenêtre de contexte de la session par catégorie, compétence et outil. Avec la valeur par défaut `detail`, c'est les mêmes données que `/context` affiche dans une session interactive. L'[option `detail`](#sdkcontrolgetcontextusageresponse) nécessite Agent SDK v0.3.257 ou ultérieur |712| `getContextUsage(opts?)` | Retourne une [`SDKControlGetContextUsageResponse`](#sdkcontrolgetcontextusageresponse) ventilant l'utilisation de la fenêtre de contexte de la session par catégorie, compétence et outil. Avec la valeur par défaut `detail`, c'est les mêmes données que `/context` affiche dans une session interactive, calculées avec des demandes d'API de comptage de tokens qui n'apparaissent pas dans le flux de messages ; voir [comment ces demandes sont gérées](#sdkcontrolgetcontextusageresponse). L'[option `detail`](#sdkcontrolgetcontextusageresponse) nécessite Agent SDK v0.3.257 ou ultérieur |

713| `readFile(path, options?)` | Lit un fichier du système de fichiers de la session. Claude Code résout le chemin par rapport à `cwd` ; [Ce que `readFile()` peut lire](#what-readfile-can-read) liste les fichiers qu'il sert. Passez `{ maxBytes }` pour modifier le plafond de lecture (par défaut 1 Mo, plafond 10 Mo) et `{ encoding: 'base64' }` pour les fichiers binaires tels que les images. Se résout avec une [`SDKControlReadFileResponse`](#sdkcontrolreadfileresponse), ou `null` sur refus de permission, un fichier manquant, ou une erreur de transport. Nécessite TypeScript SDK v0.2.121 ou ultérieur |713| `readFile(path, options?)` | Lit un fichier du système de fichiers de la session. Claude Code résout le chemin par rapport à `cwd` ; [Ce que `readFile()` peut lire](#what-readfile-can-read) liste les fichiers qu'il sert. Passez `{ maxBytes }` pour modifier le plafond de lecture (par défaut 1 Mo, plafond 10 Mo) et `{ encoding: 'base64' }` pour les fichiers binaires tels que les images. Se résout avec une [`SDKControlReadFileResponse`](#sdkcontrolreadfileresponse), ou `null` sur refus de permission, un fichier manquant, ou une erreur de transport. Nécessite TypeScript SDK v0.2.121 ou ultérieur |

714| `reloadPlugins(options?)` | Recharge les plugins à partir du disque, donc les plugins que vous installez ou modifiez en milieu de session atteignent la session en cours d'exécution. Se résout avec une [`SDKControlReloadPluginsResponse`](#sdkcontrolreloadpluginsresponse) listant les commandes, sous-agents, plugins et état du serveur MCP de la session. Nécessite Agent SDK v0.2.85 ou ultérieur. L'[option `holdOnCacheImpact`](#sdkcontrolreloadpluginsresponse) nécessite Agent SDK v0.3.268 ou ultérieur |714| `reloadPlugins(options?)` | Recharge les plugins à partir du disque, donc les plugins que vous installez ou modifiez en milieu de session atteignent la session en cours d'exécution. Se résout avec une [`SDKControlReloadPluginsResponse`](#sdkcontrolreloadpluginsresponse) listant les commandes, sous-agents, plugins et état du serveur MCP de la session. Nécessite Agent SDK v0.2.85 ou ultérieur. L'[option `holdOnCacheImpact`](#sdkcontrolreloadpluginsresponse) nécessite Agent SDK v0.3.268 ou ultérieur |

715| `reloadSkills()` | Recharge les compétences à partir du disque, donc les compétences que vous ajoutez ou modifiez en milieu de session deviennent disponibles pour la session en cours d'exécution. Se résout avec une [`SDKControlReloadSkillsResponse`](#sdkcontrolreloadskillsresponse) listant les compétences disponibles après le rechargement. Nécessite Agent SDK v0.3.163 ou ultérieur |715| `reloadSkills()` | Recharge les compétences à partir du disque, donc les compétences que vous ajoutez ou modifiez en milieu de session deviennent disponibles pour la session en cours d'exécution. Se résout avec une [`SDKControlReloadSkillsResponse`](#sdkcontrolreloadskillsresponse) listant les compétences disponibles après le rechargement. Nécessite Agent SDK v0.3.163 ou ultérieur |

716| `reloadOutputStyles()` | Relit les [styles de sortie](/docs/fr/output-styles) à partir du disque, donc un fichier de style que vous ajoutez ou modifiez en milieu de session devient disponible pour la session en cours d'exécution. Se résout avec une [`SDKControlReloadOutputStylesResponse`](#sdkcontrolreloadoutputstylesresponse) listant les noms de style disponibles après le rechargement. Nécessite Agent SDK v0.3.261 ou ultérieur |716| `reloadOutputStyles()` | Relit les [styles de sortie](/docs/fr/output-styles) à partir du disque, donc un fichier de style que vous ajoutez ou modifiez en milieu de session devient disponible pour la session en cours d'exécution. Se résout avec une [`SDKControlReloadOutputStylesResponse`](#sdkcontrolreloadoutputstylesresponse) listant les noms de style disponibles après le rechargement. Nécessite Agent SDK v0.3.261 ou ultérieur |

717| `accountInfo()` | Retourne les informations de compte |717| `accountInfo()` | Retourne les informations de compte |

718| `reconnectMcpServer(serverName)` | Reconnecter un serveur MCP par nom. Si le nom correspond également à une entrée dans 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()`, pas l'entrée du fichier de paramètres. Cet ordre de résolution nécessite Claude Code v2.1.257 ou ultérieur |718| `reconnectMcpServer(serverName)` | Reconnecter un serveur MCP par nom. Si le nom correspond également à une entrée dans 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()`, pas l'entrée du fichier de paramètres. Cet ordre de résolution nécessite Claude Code v2.1.257 ou ultérieur |

719| `toggleMcpServer(serverName, enabled)` | Activer ou désactiver un serveur MCP par nom, avec la même résolution de nom que `reconnectMcpServer()`. La désactivation déconnecte le serveur |719| `toggleMcpServer(serverName, enabled)` | Activer ou désactiver un serveur MCP par nom, avec la même résolution de nom que `reconnectMcpServer()`. La désactivation d'un serveur stdio, SSE ou HTTP le déconnecte et supprime ses outils ; pour un serveur que vous avez ajouté en milieu de session avec `setMcpServers()`, la suppression des outils nécessite Claude Code v2.1.285 ou ultérieur |

720| `setMcpServers(servers)` | Remplacer dynamiquement l'ensemble des serveurs MCP pour cette session. Se résout avec un [`McpSetServersResult`](#mcpsetserversresult) nommant les serveurs qui ont été ajoutés et supprimés, et toute erreur |720| `setMcpServers(servers)` | Remplacer dynamiquement l'ensemble des serveurs MCP pour cette session. Se résout avec un [`McpSetServersResult`](#mcpsetserversresult) nommant les serveurs qui ont été ajoutés et supprimés, et toute erreur |

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

722| `streamInput(stream)` | Diffuser les messages d'entrée vers la requête pour les conversations multi-tours |722| `streamInput(stream)` | Diffuser les messages d'entrée vers la requête pour les conversations multi-tours |


909 909 

910Type de retour de [`getContextUsage()`](#query-object). Avec la valeur par défaut `detail`, c'est la même charge utile que Claude Code affiche pour la commande `/context` dans une session interactive, donc à côté des comptes de tokens, elle porte des champs d'affichage tels que `color` et `gridRows` que Claude Code utilise pour dessiner la grille d'utilisation `/context`.910Type de retour de [`getContextUsage()`](#query-object). Avec la valeur par défaut `detail`, c'est la même charge utile que Claude Code affiche pour la commande `/context` dans une session interactive, donc à côté des comptes de tokens, elle porte des champs d'affichage tels que `color` et `gridRows` que Claude Code utilise pour dessiner la grille d'utilisation `/context`.

911 911 

912L'argument optionnel `detail` de la méthode choisit comment Claude Code compte chaque catégorie. Avec la valeur par défaut, `'full'`, Claude Code compte chaque catégorie avec des demandes d'API de comptage de tokens. Passez `{ detail: 'summary' }` pour obtenir une réponse de l'utilisation de la dernière réponse et des estimations locales à la place. Aucune demande de comptage de tokens ne sort, et les nombres par catégorie sont approximatifs. L'argument `detail` nécessite Agent SDK v0.3.257 ou ultérieur.912L'argument optionnel `detail` de la méthode choisit comment Claude Code compte chaque catégorie. L'argument `detail` nécessite Agent SDK v0.3.257 ou ultérieur.

913 

914* **`'full'`** : la valeur par défaut. Claude Code compte chaque catégorie avec des demandes d'API de [comptage de tokens](https://platform.claude.com/docs/en/build-with-claude/token-counting). Ces demandes n'apparaissent pas dans le flux de messages, donc le suivi des coûts qui lit le flux ne les verra pas. Sur l'API Anthropic, le comptage de tokens n'est pas facturé.

915* **`'summary'`** : passez `{ detail: 'summary' }` pour obtenir une réponse de l'utilisation de la dernière réponse et des estimations locales à la place. Aucune demande de comptage de tokens ne sort, et les nombres par catégorie sont approximatifs.

913 916 

914Quand vous envoyez `/context` comme invite au lieu d'appeler la méthode, Claude Code joint une charge utile [`SDKContextUsage`](#sdkcontextusage) au champ `context_usage` du message assistant qui livre le résultat. Ce champ nécessite Agent SDK v0.3.232 ou ultérieur.917Quand vous envoyez `/context` comme invite au lieu d'appeler la méthode, Claude Code joint une charge utile [`SDKContextUsage`](#sdkcontextusage) au champ `context_usage` du message assistant qui livre le résultat. Ce champ nécessite Agent SDK v0.3.232 ou ultérieur.

915 918 


1015* `memoryFiles` liste chaque fichier de mémoire chargé avec son coût.1018* `memoryFiles` liste chaque fichier de mémoire chargé avec son coût.

1016* `skills.skillFrontmatter` attribue les tokens de la liste des compétences à chaque compétence incluse. Les comptes par compétence mesurent chaque entrée de liste de compétences comme Claude Code l'envoie réellement, ce qui peut être plus court que le frontmatter complet de la compétence. Comparez `skills.totalSkills` avec `skills.includedSkills` pour voir si chaque compétence découverte a fait son chemin dans la liste.1019* `skills.skillFrontmatter` attribue les tokens de la liste des compétences à chaque compétence incluse. Les comptes par compétence mesurent chaque entrée de liste de compétences comme Claude Code l'envoie réellement, ce qui peut être plus court que le frontmatter complet de la compétence. Comparez `skills.totalSkills` avec `skills.includedSkills` pour voir si chaque compétence découverte a fait son chemin dans la liste.

1017 1020 

1018`totalTokens` est l'utilisation de contexte actuelle de la session, et `maxTokens` est la fenêtre par rapport à laquelle l'utilisation est mesurée. Cette fenêtre est la fenêtre de contexte du modèle, ou la fenêtre de compaction automatique inférieure quand une s'applique. `rawMaxTokens` porte la même valeur que `maxTokens`, et `percentage` est `totalTokens` en pourcentage arrondi de cette fenêtre.1021`totalTokens` est l'utilisation de contexte actuelle de la session, et `maxTokens` est la fenêtre par rapport à laquelle l'utilisation est mesurée. Cette fenêtre est la fenêtre de contexte du modèle, ou la fenêtre de compaction automatique inférieure quand une s'applique. `rawMaxTokens` porte la même valeur que `maxTokens`, et `percentage` est `totalTokens` en pourcentage arrondi de cette fenêtre. `apiUsage` contient l'utilisation de la dernière réponse API, pas un total cumulé pour la session.

1019 1022 

1020Claude Code laisse les diagnostics optionnels `deferredBuiltinTools`, `systemTools`, et `systemPromptSections` non définis, donc attendez-vous à ce qu'ils soient absents même si le type les déclare.1023Claude Code laisse les diagnostics optionnels `deferredBuiltinTools`, `systemTools`, et `systemPromptSections` non définis, donc attendez-vous à ce qu'ils soient absents même si le type les déclare.

1021 1024 


1849```typescript theme={null}1852```typescript theme={null}

1850type SDKStartupFailureReason =1853type SDKStartupFailureReason =

1851 | "org_pin_api_key_conflict"1854 | "org_pin_api_key_conflict"

1855 | "provider_not_allowed"

1852 | "org_verify_failed"1856 | "org_verify_failed"

1853 | "org_pin_mismatch"1857 | "org_pin_mismatch"

1854 | "managed_settings_invalid"1858 | "managed_settings_invalid"


1871| Valeur | Ce qui a arrêté la session |1875| Valeur | Ce qui a arrêté la session |

1872| :- | :- |1876| :- | :- |

1873| `org_pin_api_key_conflict` | Les paramètres gérés [nécessitent une connexion de première partie ou Cloud gateway](/docs/fr/authentication#restrict-login-to-your-organization), et une clé API Anthropic, un jeton d'authentification ou un `apiKeyHelper` est configuré à la place |1877| `org_pin_api_key_conflict` | Les paramètres gérés [nécessitent une connexion de première partie ou Cloud gateway](/docs/fr/authentication#restrict-login-to-your-organization), et une clé API Anthropic, un jeton d'authentification ou un `apiKeyHelper` est configuré à la place |

1878| `provider_not_allowed` | Les paramètres gérés [listent les fournisseurs API que cette machine peut utiliser](/docs/fr/settings-reference#allowedproviders), et la session est configurée pour un fournisseur qui ne figure pas dans la liste, ou pour un point de terminaison que les paramètres ne fixent pas. Nécessite Claude Code v2.1.285 ou ultérieur |

1874| `org_verify_failed` | L'organisation de la connexion n'a pas pu être vérifiée par rapport à la broche, par exemple en raison d'une défaillance réseau ou d'un jeton révoqué |1879| `org_verify_failed` | L'organisation de la connexion n'a pas pu être vérifiée par rapport à la broche, par exemple en raison d'une défaillance réseau ou d'un jeton révoqué |

1875| `org_pin_mismatch` | La connexion appartient à une organisation que la broche ne permet pas |1880| `org_pin_mismatch` | La connexion appartient à une organisation que la broche ne permet pas |

1876| `managed_settings_invalid` | Les paramètres de politique gérés n'ont pas pu être lus, la broche ne nomme aucune organisation, ou [les restrictions de modèle gérées](/docs/fr/errors#managed-settings-block-the-default-model) ne laissent aucun modèle autorisé pour l'option Par défaut |1881| `managed_settings_invalid` | Les paramètres de politique gérés n'ont pas pu être lus, la broche ne nomme aucune organisation, ou [les restrictions de modèle gérées](/docs/fr/errors#managed-settings-block-the-default-model) ne laissent aucun modèle autorisé pour l'option Par défaut |


2120 `SDKContextUsage`2125 `SDKContextUsage`

2121</h3>2126</h3>

2122 2127 

2123Forme structurée du rapport `/context`, portée comme `context_usage` sur le [`SDKAssistantMessage`](#sdkassistantmessage) qui livre un résultat `/context`. Agent SDK v0.3.232 et ultérieur exportent le type. Contrairement à [`SDKControlGetContextUsageResponse`](#sdkcontrolgetcontextusageresponse), il porte uniquement les données nécessaires pour rendre la ventilation d'utilisation, sans champs d'affichage comme `color` et `gridRows`.2128Forme structurée du rapport `/context`, portée comme `context_usage` sur le [`SDKAssistantMessage`](#sdkassistantmessage) qui livre un résultat `/context`. Agent SDK v0.3.232 et ultérieur exportent le type. Contrairement à [`SDKControlGetContextUsageResponse`](#sdkcontrolgetcontextusageresponse), il porte uniquement les données nécessaires pour rendre la ventilation d'utilisation, sans champs d'affichage comme `color` et `gridRows`. Claude Code calcule le rapport avec des demandes d'API de comptage de jetons qui n'apparaissent pas dans le flux de messages ; voir [comment ces demandes sont gérées](#sdkcontrolgetcontextusageresponse).

2124 2129 

2125```typescript theme={null}2130```typescript theme={null}

2126type SDKContextUsage = {2131type SDKContextUsage = {


3239};3244};

3240```3245```

3241 3246 

3242Exécute les commandes Bash avec délai d'expiration optionnel et exécution en arrière-plan. Le répertoire de travail persiste entre les commandes, y compris les commandes exécutées dans les tours ultérieurs d'une session multi-tour ; l'état du shell tel que les variables d'environnement exportées ne persiste pas. Pour les limites sur les changements de répertoire qui persistent, voir [Ce qui persiste entre les commandes](/docs/fr/tools-reference#what-persists-between-commands). Pour ce qui définit le plafond de premier plan, voir [Délai d'expiration et limites de sortie](/docs/fr/tools-reference#timeout-and-output-limits). Pour la limite de temps en arrière-plan, voir [Commandes en arrière-plan](/docs/fr/tools-reference#background-commands).3247Exécute les commandes Bash avec délai d'expiration optionnel et exécution en arrière-plan. Le répertoire de travail persiste entre les commandes, y compris les commandes exécutées dans les tours ultérieurs d'une session multi-tour ; l'état du shell tel que les variables d'environnement exportées ne persiste pas. Pour les limites sur les changements de répertoire qui persistent, voir [Ce qui persiste entre les commandes](/docs/fr/tools-reference#what-persists-between-commands). Pour ce qui définit le plafond de premier plan, voir [Délai d'expiration et limites de sortie](/docs/fr/tools-reference#timeout-and-output-limits). Pour la limite de temps en arrière-plan, voir [Limite de temps pour les commandes en arrière-plan](/docs/fr/tools-reference#time-limit-for-background-commands).

3243 3248 

3244<h3 id="monitor">3249<h3 id="monitor">

3245 Monitor3250 Monitor


3930Les arguments des outils MCP sont un objet ouvert : chaque serveur définit ses propres paramètres, donc le type ne place aucune contrainte sur les noms de champs ou les valeurs. Consultez le schéma d'outil du serveur pour les champs qu'un outil spécifique accepte.3935Les arguments des outils MCP sont un objet ouvert : chaque serveur définit ses propres paramètres, donc le type ne place aucune contrainte sur les noms de champs ou les valeurs. Consultez le schéma d'outil du serveur pour les champs qu'un outil spécifique accepte.

3931 3936 

3932<h2 id="tool-output-types">3937<h2 id="tool-output-types">

3933 Types de sortie d'outil3938 Types de sortie d'outils

3934</h2>3939</h2>

3935 3940 

3936Documentation des schémas de sortie pour tous les outils Claude Code intégrés. Ces types sont exportés depuis `@anthropic-ai/claude-agent-sdk/sdk-tools` et représentent les données de réponse réelles retournées par chaque outil.3941Documentation des schémas de sortie pour tous les outils Claude Code intégrés. Ces types sont exportés depuis `@anthropic-ai/claude-agent-sdk/sdk-tools` et représentent les données de réponse réelles renvoyées par chaque outil.

3937 3942 

3938<h3 id="tooloutputschemas">3943<h3 id="tooloutputschemas">

3939 `ToolOutputSchemas`3944 `ToolOutputSchemas`

3940</h3>3945</h3>

3941 3946 

3942Union de types de sortie d'outil exportés depuis `@anthropic-ai/claude-agent-sdk/sdk-tools` ; les membres incluent :3947Union des types de sortie d'outils exportés depuis `@anthropic-ai/claude-agent-sdk/sdk-tools` ; les membres incluent :

3943 3948 

3944```typescript theme={null}3949```typescript theme={null}

3945type ToolOutputSchemas =3950type ToolOutputSchemas =


4057 };4062 };

4058```4063```

4059 4064 

4060Retourne le résultat du sous-agent. Discriminé sur le champ `status` : `"completed"` pour les tâches terminées, `"async_launched"` pour les tâches de fond, et `"remote_launched"` pour les tâches que Claude Code a envoyées à une session cloud distante, où `sessionUrl` renvoie à cette session et `taskId` l'identifie.4065Retourne le résultat du sous-agent. Discriminé sur le champ `status` : `"completed"` pour les tâches terminées, `"async_launched"` pour les tâches en arrière-plan, et `"remote_launched"` pour les tâches que Claude Code a envoyées à une session cloud, où `sessionUrl` renvoie à cette session et `taskId` l'identifie.

4061 4066 

4062Sur la variante `completed`, `resolvedModel` nomme le modèle sur lequel le sous-agent a démarré, qui peut différer du modèle demandé en entrée `model` lorsque [`availableModels`](/docs/fr/model-config#restrict-model-selection) ou une autre substitution s'applique. Ce champ nécessite Claude Code v2.1.174 ou ultérieur. Sur `async_launched`, il nomme le modèle en cours d'utilisation lorsque la tâche est passée en arrière-plan.4067Sur la variante `completed`, `resolvedModel` nomme le modèle sur lequel le sous-agent a démarré, qui peut différer du `model` d'entrée demandé lorsque [`availableModels`](/docs/fr/model-config#restrict-model-selection) ou une autre substitution s'applique. Ce champ nécessite Claude Code v2.1.174 ou ultérieur. Sur `async_launched`, il nomme le modèle en cours d'utilisation lorsque la tâche est passée en arrière-plan.

4063 4068 

4064`modelsUsed` énumère les modèles utilisés par le sous-agent, dans l'ordre. Le champ est présent uniquement lorsqu'un changement de modèle en cours d'exécution s'est produit, et un modèle apparaît à nouveau lorsque l'exécution a basculé vers lui. Sur `async_launched`, la liste couvre les modèles utilisés avant la mise en arrière-plan. À la fois `modelsUsed` et le comportement de mise en arrière-plan de `resolvedModel` nécessitent Claude Code v2.1.212 ou ultérieur.4069`modelsUsed` énumère les modèles utilisés par le sous-agent, dans l'ordre. Le champ n'est présent que lorsqu'un changement de modèle en cours d'exécution s'est produit, et un modèle réapparaît lorsque l'exécution a basculé vers lui. Sur `async_launched`, la liste couvre les modèles utilisés avant la mise en arrière-plan. À la fois `modelsUsed` et le comportement de mise en arrière-plan de `resolvedModel` nécessitent Claude Code v2.1.212 ou ultérieur.

4065 4070 

4066Si Claude Code [a conservé le worktree isolé du sous-agent](/docs/fr/worktrees#isolate-subagents-with-worktrees), `worktreePath` sur le résultat `completed` est l'endroit où le trouver. `worktreeBranch` est sa branche, présente lorsque Claude Code a créé le worktree avec git.4071Si Claude Code [a conservé le worktree isolé du sous-agent](/docs/fr/worktrees#isolate-subagents-with-worktrees), `worktreePath` sur le résultat `completed` indique où le trouver. `worktreeBranch` est sa branche, présente lorsque Claude Code a créé le worktree avec git.

4067 4072 

4068Claude Code remplit `usage` et `totalTokens` à partir de la dernière demande API du sous-agent, pas de l'ensemble de l'exécution, donc `usage.service_tier` est la chaîne de niveau de service que l'API a signalée sur cette demande. Lorsqu'il est présent, `usage.output_tokens_details.thinking_tokens` est le nombre de jetons de sortie de cette demande qui étaient des jetons de réflexion. Le champ `output_tokens_details` nécessite TypeScript SDK v0.3.228 ou ultérieur, qui regroupe Claude Code v2.1.228.4073Claude Code remplit `usage` et `totalTokens` à partir de la dernière requête API du sous-agent, pas de l'ensemble de l'exécution, donc `usage.service_tier` est la chaîne de niveau de service que l'API a signalée sur cette requête. Lorsqu'il est présent, `usage.output_tokens_details.thinking_tokens` est le nombre de jetons de sortie de cette requête qui étaient des jetons de réflexion. Le champ `output_tokens_details` nécessite TypeScript SDK v0.3.228 ou ultérieur, qui regroupe Claude Code v2.1.228.

4069 4074 

4070`usage.output_tokens_details` correspond à [`Usage.output_tokens_details`](#usage) en signification, limité à cette dernière demande, mais chaque niveau est optionnel ici. Protégez à la fois l'objet et le champ, par exemple `usage.output_tokens_details?.thinking_tokens ?? 0`, plutôt que de le lire directement.4075`usage.output_tokens_details` correspond à [`Usage.output_tokens_details`](#usage) en signification, limité à cette dernière requête, mais chaque niveau est optionnel ici. Protégez à la fois l'objet et le champ, par exemple `usage.output_tokens_details?.thinking_tokens ?? 0`, plutôt que de le lire directement.

4071 4076 

4072Avant v2.1.207, le type publié était plus étroit. Il omettait `worktreePath`, `worktreeBranch`, `citations`, `toolStats.frameCount`, et les champs d'utilisation `inference_geo`, `speed` et `iterations`, et il typait `service_tier` comme `"standard" | "priority" | "batch"`. Les champs que le type marque comme optionnels peuvent être absents sur les résultats enregistrés par les versions antérieures.4077Avant v2.1.207, le type publié était plus étroit. Il omettait `worktreePath`, `worktreeBranch`, `citations`, `toolStats.frameCount`, et les champs d'utilisation `inference_geo`, `speed` et `iterations`, et il tapait `service_tier` comme `"standard" | "priority" | "batch"`. Les champs que le type marque comme optionnels peuvent être absents sur les résultats enregistrés par les versions antérieures.

4073 4078 

4074<h3 id="askuserquestion-2">4079<h3 id="askuserquestion-2">

4075 AskUserQuestion4080 AskUserQuestion


4133};4138};

4134```4139```

4135 4140 

4136Les champs `stdout`, `stderr` et `backgroundTaskId` portent :4141Les champs `stdout`, `stderr` et `backgroundTaskId` contiennent :

4137 4142 

4138| Champ | Ce qu'il porte |4143| Champ | Ce qu'il contient |

4139| - | - |4144| - | - |

4140| `stdout` | La sortie standard et la sortie d'erreur de la commande, fusionnées en un seul flux entrelacé |4145| `stdout` | La sortie standard et la sortie d'erreur de la commande, fusionnées en un seul flux entrelacé |

4141| `stderr` | Les avis que l'outil lui-même ajoute, comme une réinitialisation du répertoire de travail du shell, pas la sortie d'erreur de la commande |4146| `stderr` | Les avis que l'outil lui-même ajoute, comme une réinitialisation du répertoire de travail du shell, pas la sortie d'erreur de la commande |

4142| `backgroundTaskId` | Présent pour les commandes de fond |4147| `backgroundTaskId` | Présent pour les commandes en arrière-plan |

4143 4148 

4144`timedOutAfterMs` est le délai d'expiration en millisecondes, défini lorsque la commande a atteint son délai d'expiration et s'est déplacée en arrière-plan plutôt que de démarrer explicitement. `backgroundCwdHint` est défini lorsque la commande mise en arrière-plan contenait une fonction intégrée de changement de répertoire telle que `cd`, `pushd`, `popd` ou `chdir`, et note que le répertoire de travail de la session n'a pas changé. Les deux champs nécessitent Claude Code v2.1.210 ou ultérieur.4149`timedOutAfterMs` est le délai d'expiration en millisecondes, défini lorsque la commande a atteint son délai d'expiration et s'est déplacée en arrière-plan plutôt que de démarrer explicitement. `backgroundCwdHint` est défini lorsque la commande mise en arrière-plan contenait un builtin de changement de répertoire tel que `cd`, `pushd`, `popd` ou `chdir`, et note que le répertoire de travail de la session n'a pas changé. Les deux champs nécessitent Claude Code v2.1.210 ou ultérieur.

4145 4150 

4146Lorsqu'un sous-agent s'exécutant au premier plan possède une commande mise en arrière-plan, la commande [se termine lorsque ce sous-agent donne sa réponse finale](/docs/fr/tools-reference#background-commands). Claude Code définit `backgroundEndsWithFinalResponse` à `true` sur de telles commandes, et omet le champ lorsque la commande survit au tour, comme les commandes démarrées par la conversation principale ou par les sous-agents de fond. Le champ nécessite Claude Code v2.1.227 ou ultérieur.4151Lorsqu'un sous-agent s'exécutant au premier plan possède une commande mise en arrière-plan, la commande [se termine lorsque l'exécution de ce sous-agent se termine](/docs/fr/tools-reference#when-a-background-command-stops). Claude Code définit `backgroundEndsWithFinalResponse` à `true` sur de telles commandes, et omet le champ lorsque la commande survit au tour, comme les commandes démarrées par la conversation principale ou par les sous-agents en arrière-plan. Le champ nécessite Claude Code v2.1.227 ou ultérieur.

4147 4152 

4148Claude Code définit `gitOperation.commit.branch` à la branche nommée dans la ligne de résumé du commit git, et l'omet pour un commit effectué sur une HEAD détachée. Le champ nécessite Agent SDK v0.3.227 ou ultérieur. Claude Code signale une commande `gh pr reopen` comme l'action PR `reopened`, ce qui nécessite Agent SDK v0.3.234 ou ultérieur.4153Claude Code définit `gitOperation.commit.branch` sur la branche nommée dans la ligne de résumé du commit git, et l'omet pour un commit effectué sur un HEAD détaché. Le champ nécessite Agent SDK v0.3.227 ou ultérieur. Claude Code signale une commande `gh pr reopen` comme l'action PR `reopened`, ce qui nécessite Agent SDK v0.3.234 ou ultérieur.

4149 4154 

4150<h3 id="monitor-2">4155<h3 id="monitor-2">

4151 Monitor4156 Monitor


4161};4166};

4162```4167```

4163 4168 

4164Retourne l'ID de tâche de fond pour le moniteur en cours d'exécution. Utilisez cet ID avec `TaskStop` pour annuler la surveillance plus tôt.4169Retourne l'ID de la tâche en arrière-plan pour le moniteur en cours d'exécution. Utilisez cet ID avec `TaskStop` pour annuler la surveillance plus tôt.

4165 4170 

4166<h3 id="edit-2">4171<h3 id="edit-2">

4167 Edit4172 Edit


4308};4313};

4309```4314```

4310 4315 

4311Retourne le résultat d'écriture avec les informations de diff structuré. Ce que `originalFile` et `structuredPatch` contiennent dépend de l'écriture :4316Retourne le résultat de l'écriture avec les informations de diff structuré. Ce que `originalFile` et `structuredPatch` contiennent dépend de l'écriture :

4312 4317 

4313* Pour un fichier nouvellement créé, `originalFile` est null et `structuredPatch` est vide4318* Pour un fichier nouvellement créé, `originalFile` est null et `structuredPatch` est vide

4314* Sur une réécriture, `originalFile` porte le contenu précédent, sauf lorsque ce contenu est plus grand qu'environ 10 Mo : Claude Code ignore alors le diff et retourne `originalFile` null et `structuredPatch` vide4319* Sur une réécriture, `originalFile` contient le contenu précédent, sauf lorsque ce contenu est plus grand qu'environ 10 Mo : Claude Code omet alors le diff et retourne `originalFile` null et `structuredPatch` vide

4315* `structuredPatch` est également vide lorsque l'écriture n'a rien changé ou que le diff a expiré4320* `structuredPatch` est également vide lorsque l'écriture n'a rien changé ou que le diff a expiré

4316 4321 

4317<h3 id="glob-2">4322<h3 id="glob-2">


4356};4361};

4357```4362```

4358 4363 

4359Retourne les résultats de recherche. La forme varie selon `mode` : liste de fichiers, contenu avec correspondances ou comptages de correspondances. En mode `count`, `numFiles` et `numMatches` sont des totaux sur l'ensemble des résultats, pas la tranche paginée. Avant v2.1.208, une `head_limit` ou un `offset` qui tronquait les entrées énumérées tronquait également ces totaux.4364Retourne les résultats de la recherche. La forme varie selon `mode` : liste de fichiers, contenu avec correspondances, ou comptages de correspondances. En mode `count`, `numFiles` et `numMatches` sont des totaux sur l'ensemble des résultats, pas la tranche paginée. Avant v2.1.208, une `head_limit` ou un `offset` qui tronquait les entrées listées tronquait également ces totaux.

4360 4365 

4361`totalFiles` nécessite Claude Code v2.1.208 ou ultérieur et signale le nombre total de résultats avant la pagination `head_limit` et `offset` en mode `files_with_matches`. `totalLines` nécessite Claude Code v2.1.210 ou ultérieur et signale le nombre total de lignes avant la pagination en mode `content`.4366`totalFiles` nécessite Claude Code v2.1.208 ou ultérieur et signale le nombre total de résultats avant la pagination `head_limit` et `offset` en mode `files_with_matches`. `totalLines` nécessite Claude Code v2.1.210 ou ultérieur et signale le nombre total de lignes avant la pagination en mode `content`.

4362 4367 


4375};4380};

4376```4381```

4377 4382 

4378Retourne la confirmation après l'arrêt de la tâche de fond.4383Retourne une confirmation après l'arrêt de la tâche en arrière-plan.

4379 4384 

4380<h3 id="notebookedit-2">4385<h3 id="notebookedit-2">

4381 NotebookEdit4386 NotebookEdit


4398};4403};

4399```4404```

4400 4405 

4401Retourne le résultat de l'édition du carnet avec le contenu du fichier original et mis à jour.4406Retourne le résultat de l'édition du notebook avec les contenus de fichier original et mis à jour.

4402 4407 

4403<h3 id="webfetch-2">4408<h3 id="webfetch-2">

4404 WebFetch4409 WebFetch


4424 4429 

4425Retourne le contenu récupéré avec le statut HTTP et les métadonnées.4430Retourne le contenu récupéré avec le statut HTTP et les métadonnées.

4426 4431 

4427`artifactRead` est l'enregistrement propre de Claude Code d'une lecture d'artefact, présent uniquement lorsque Claude a récupéré un artefact que la session peut publier. Claude Code le relit lorsqu'une session reprend afin qu'une publication ultérieure s'appuie sur la bonne version ; votre code n'a pas besoin d'agir dessus. `slug` nomme l'artefact, `ver` est la version que la lecture a enregistrée et est absent lorsqu'elle n'en a enregistré aucune, et `seeded: false` marque une lecture dont la source complète n'a pas atteint Claude. Le champ `seeded` nécessite Agent SDK v0.3.239 ou ultérieur.4432`artifactRead` est le propre enregistrement de Claude Code d'une lecture d'artefact, présent uniquement lorsque Claude a récupéré un artefact que la session peut publier. Claude Code le relit lorsqu'une session reprend afin qu'une publication ultérieure s'appuie sur la bonne version ; votre code n'a pas besoin d'agir dessus. `slug` nomme l'artefact, `ver` est la version que la lecture a enregistrée et est absent lorsqu'elle n'en a enregistré aucune, et `seeded: false` marque une lecture dont la source complète n'a pas atteint Claude. Le champ `seeded` nécessite Agent SDK v0.3.239 ou ultérieur.

4428 4433 

4429<h3 id="websearch-2">4434<h3 id="websearch-2">

4430 WebSearch4435 WebSearch


4447};4452};

4448```4453```

4449 4454 

4450Retourne les résultats de recherche du web.4455Retourne les résultats de la recherche sur le web.

4451 4456 

4452<h3 id="workflow-2">4457<h3 id="workflow-2">

4453 Workflow4458 Workflow


4471};4476};

4472```4477```

4473 4478 

4474Retourne immédiatement après que l'outil accepte l'invocation. Le résultat final arrive plus tard en tant que complément de tâche. Vérifiez `error` avant de traiter l'exécution comme démarrée : un script qui échoue sa vérification de syntaxe retourne `status: "async_launched"` avec `error` défini, et ne s'exécute jamais.4479Retourne immédiatement après que l'outil accepte l'invocation. Le résultat final arrive plus tard comme une fin de tâche. Vérifiez `error` avant de traiter l'exécution comme démarrée : un script qui échoue sa vérification de syntaxe retourne `status: "async_launched"` avec `error` défini, et ne s'exécute jamais.

4475 4480 

4476| Champ | Type | Description |4481| Champ | Type | Description |

4477| - | - | - |4482| - | - | - |

4478| `status` | `"async_launched" \| "remote_launched"` | L'outil a accepté l'invocation. `"async_launched"` pour les exécutions en processus, `"remote_launched"` pour les exécutions envoyées à une session distante au lieu de s'exécuter en processus |4483| `status` | `"async_launched" \| "remote_launched"` | L'outil a accepté l'invocation. `"async_launched"` pour les exécutions en processus, `"remote_launched"` pour les exécutions envoyées à une session cloud au lieu de s'exécuter en processus |

4479| `taskId` | `string` | Identifiant de tâche de fond pour l'exécution |4484| `taskId` | `string` | Identifiant de tâche en arrière-plan pour l'exécution |

4480| `taskType` | `"local_workflow" \| "remote_agent"` | Type de tâche de la tâche de fond enregistrée, correspondant au bras `status` |4485| `taskType` | `"local_workflow" \| "remote_agent"` | Type de tâche de la tâche en arrière-plan enregistrée, correspondant au bras `status` |

4481| `workflowName` | `string` | Le `meta.name` du script de workflow |4486| `workflowName` | `string` | Le `meta.name` du script de workflow |

4482| `runId` | `string` | Identifiant d'exécution de workflow à transmettre en tant que `resumeFromRunId` lors d'une invocation ultérieure. Absent pour les exécutions `remote_launched`, où l'URL de la session cloud est la poignée de reprise |4487| `runId` | `string` | Identifiant d'exécution de workflow à passer comme `resumeFromRunId` sur une invocation ultérieure. Absent pour les exécutions `remote_launched`, où l'URL de la session cloud est la poignée de reprise |

4483| `summary` | `string` | Description d'une ligne de ce que fait le workflow |4488| `summary` | `string` | Description d'une ligne de ce que fait le workflow |

4484| `transcriptDir` | `string` | Répertoire où les transcriptions de sous-agent sont écrites pendant l'exécution |4489| `transcriptDir` | `string` | Répertoire où les transcriptions de sous-agent sont écrites pendant l'exécution |

4485| `scriptPath` | `string` | Chemin du script de workflow persisté pour cette exécution. Modifiez-le et transmettez-le en tant que `scriptPath` pour réexécuter sans renvoyer le script |4490| `scriptPath` | `string` | Chemin du script de workflow persisté pour cette exécution. Modifiez-le et renvoyez-le comme `scriptPath` pour réexécuter sans renvoyer le script |

4486| `sessionUrl` | `string` | URL de la session cloud, définie lorsque `status` est `"remote_launched"` |4491| `sessionUrl` | `string` | URL de la session cloud, définie lorsque `status` est `"remote_launched"` |

4487| `warning` | `string` | Avertissement non bloquant, comme l'état git local divergeant de la branche poussée qu'une session cloud clonera |4492| `warning` | `string` | Avertissement non bloquant, tel que l'état git local divergeant de la branche poussée qu'une session cloud clonera |

4488| `error` | `string` | Défini lorsque le script échoue sa vérification de syntaxe. Lorsqu'il est présent, l'exécution n'a pas démarré malgré le statut lancé |4493| `error` | `string` | Défini lorsque le script échoue sa vérification de syntaxe. Lorsqu'il est présent, l'exécution n'a pas démarré malgré le statut lancé |

4489 4494 

4490<h3 id="todowrite-2">4495<h3 id="todowrite-2">


4523 4528 

4524 Cet ensemble par défaut s'applique dans Claude Code v2.1.268 et versions ultérieures, que le SDK TypeScript Agent regroupe à partir de v0.3.268.4529 Cet ensemble par défaut s'applique dans Claude Code v2.1.268 et versions ultérieures, que le SDK TypeScript Agent regroupe à partir de v0.3.268.

4525 4530 

4526 Consultez [Disponibilité du modèle](/docs/fr/agent-sdk/todo-tracking#model-availability) pour vous inscrire.4531 Voir [Disponibilité du modèle](/docs/fr/agent-sdk/todo-tracking#model-availability) pour vous inscrire.

4527</Note>4532</Note>

4528 4533 

4529<h3 id="taskcreate-2">4534<h3 id="taskcreate-2">


4623};4628};

4624```4629```

4625 4630 

4626Retourne l'état du plan après la sortie du mode de planification.4631Retourne l'état du plan après la sortie du mode plan.

4627 4632 

4628<h3 id="listmcpresources-2">4633<h3 id="listmcpresources-2">

4629 ListMcpResources4634 ListMcpResources


4641}>;4646}>;

4642```4647```

4643 4648 

4644Retourne un tableau de ressources MCP disponibles.4649Retourne un tableau des ressources MCP disponibles.

4645 4650 

4646<h3 id="readmcpresource-2">4651<h3 id="readmcpresource-2">

4647 ReadMcpResource4652 ReadMcpResource


4712};4717};

4713```4718```

4714 4719 

4715Retourne une confirmation que le mode de planification a été activé.4720Retourne une confirmation que le mode plan a été activé.

4716 4721 

4717<h3 id="croncreate-2">4722<h3 id="croncreate-2">

4718 CronCreate4723 CronCreate


4729};4734};

4730```4735```

4731 4736 

4732Retourne l'ID du travail et une description lisible par l'homme de la planification.4737Retourne l'ID du travail et une description lisible par l'homme de l'horaire.

4733 4738 

4734<h3 id="crondelete-2">4739<h3 id="crondelete-2">

4735 CronDelete4740 CronDelete


4878 };4883 };

4879```4884```

4880 4885 

4881Retourne l'`url` de la page publiée et le `path` local qui a été publié pour l'action de publication, avec `updated` défini à true lorsque la publication a redéployé un artefact existant, et `warnings` portant tous les avis au moment de la publication. L'action de liste retourne les lignes `artifacts` à la place, avec `truncated` défini lorsque plus d'artefacts existent que la limite demandée. Sur les listes dont la portée n'est pas `"mine"`, chaque ligne porte `rel` marquant si l'utilisateur possède l'artefact ou s'il lui a été partagé, et la `scope` de la sortie enregistre quelle portée non définie par défaut a produit la liste ; les deux sont absents sur les listes par défaut.4886Retourne l'`url` de la page publiée et le `path` local qui a été publié pour l'action de publication, avec `updated` défini à true lorsque la publication a redéployé un artefact existant, et `warnings` contenant tous les avis au moment de la publication. L'action de liste retourne les lignes `artifacts` à la place, avec `truncated` défini lorsque plus d'artefacts existent que la limite demandée. Sur les listes dont la portée n'est pas `"mine"`, chaque ligne porte `rel` marquant si l'utilisateur possède l'artefact ou s'il lui a été partagé, et la `scope` de la sortie enregistre quelle portée non-défaut a produit la liste ; les deux sont absents sur les listes par défaut.

4882 4887 

4883<h3 id="projects-2">4888<h3 id="projects-2">

4884 Projects4889 Projects


4961};4966};

4962```4967```

4963 4968 

4964Retourne les enfants directs de la ressource de répertoire. Les sous-répertoires apparaissent avec mimeType `"inode/directory"` ; `error` porte un message lisible par l'homme lorsque le serveur n'a pas pu énumérer le répertoire.4969Retourne les enfants directs de la ressource de répertoire. Les sous-répertoires apparaissent avec mimeType `"inode/directory"` ; `error` contient un message lisible par l'homme lorsque le serveur n'a pas pu lister le répertoire.

4965 4970 

4966<h3 id="refreshmcptools-2">4971<h3 id="refreshmcptools-2">

4967 RefreshMcpTools4972 RefreshMcpTools

agent-view.md +2 −20

Details

8 8 

9La vue agent, ouverte avec `claude agents`, est un seul écran pour toutes vos sessions en arrière-plan : ce qui s'exécute, ce qui a besoin de votre intervention, et ce qui est terminé. Lancez de nouvelles sessions, observez leur état en un coup d'œil au lieu de faire défiler les transcriptions, et intervenez uniquement quand l'une d'elles a besoin de vous. Chaque session en arrière-plan est une conversation Claude Code complète qui continue de s'exécuter sans terminal attaché, vous pouvez donc l'ouvrir, répondre et partir quand vous le souhaitez.9La vue agent, ouverte avec `claude agents`, est un seul écran pour toutes vos sessions en arrière-plan : ce qui s'exécute, ce qui a besoin de votre intervention, et ce qui est terminé. Lancez de nouvelles sessions, observez leur état en un coup d'œil au lieu de faire défiler les transcriptions, et intervenez uniquement quand l'une d'elles a besoin de vous. Chaque session en arrière-plan est une conversation Claude Code complète qui continue de s'exécuter sans terminal attaché, vous pouvez donc l'ouvrir, répondre et partir quand vous le souhaitez.

10 10 

11<img src="https://mintcdn.com/claude-code/1B48Qz2Z9hac4SLG/images/agent-view-light.png?fit=max&auto=format&n=1B48Qz2Z9hac4SLG&q=85&s=7a186c96ed47d6700d084d77e786be65" className="dark:hidden" alt="Vue agent dans un terminal : l'en-tête affiche Claude Code v2.1.140, le modèle, le répertoire de travail et un résumé du nombre. Les sessions sont regroupées sous Nécessite une intervention, En cours d'exécution et Terminé, avec une entrée de lancement en bas et un pied de page avec des indices de clavier." width="1772" height="780" data-path="images/agent-view-light.png" />11<img src="https://mintcdn.com/claude-code/HDAmBwgbrZVk0pOt/images/agent-view-light.png?fit=max&auto=format&n=HDAmBwgbrZVk0pOt&q=85&s=d6905012bee31f3e6b3920b09c05dd02" className="dark:hidden" alt="Vue agent dans un terminal. Une ligne en haut compte les sessions en attente d'entrée, en cours de travail et terminées. Quatre sessions sont regroupées sous Nécessite une intervention, En cours d'exécution et Terminé. Chaque ligne affiche le nom de la session, son dernier statut ou sa dernière question, et une heure. En bas se trouvent une entrée pour décrire une nouvelle tâche et une ligne d'indices de clavier." width="1872" height="680" data-path="images/agent-view-light.png" />

12 12 

13<img src="https://mintcdn.com/claude-code/1B48Qz2Z9hac4SLG/images/agent-view-dark.png?fit=max&auto=format&n=1B48Qz2Z9hac4SLG&q=85&s=a5bed7434bae368faea3a8f023b52aa2" className="hidden dark:block" alt="Vue agent dans un terminal : l'en-tête affiche Claude Code v2.1.140, le modèle, le répertoire de travail et un résumé du nombre. Les sessions sont regroupées sous Nécessite une intervention, En cours d'exécution et Terminé, avec une entrée de lancement en bas et un pied de page avec des indices de clavier." width="1772" height="780" data-path="images/agent-view-dark.png" />13<img src="https://mintcdn.com/claude-code/HDAmBwgbrZVk0pOt/images/agent-view-dark.png?fit=max&auto=format&n=HDAmBwgbrZVk0pOt&q=85&s=fc3c195bfc57e313ced1f1beb36cee93" className="hidden dark:block" alt="Vue agent dans un terminal. Une ligne en haut compte les sessions en attente d'entrée, en cours de travail et terminées. Quatre sessions sont regroupées sous Nécessite une intervention, En cours d'exécution et Terminé. Chaque ligne affiche le nom de la session, son dernier statut ou sa dernière question, et une heure. En bas se trouvent une entrée pour décrire une nouvelle tâche et une ligne d'indices de clavier." width="1872" height="680" data-path="images/agent-view-dark.png" />

14 14 

15Utilisez la vue agent quand vous avez plusieurs tâches indépendantes sur lesquelles Claude peut travailler sans que vous regardiez chaque étape. Lancez une correction de bug, un examen de pull request et une enquête sur un test instable sous forme de trois lignes, continuez à travailler dans une autre fenêtre et vérifiez quand une ligne indique qu'elle a besoin de vous ou qu'elle a un résultat.15Utilisez la vue agent quand vous avez plusieurs tâches indépendantes sur lesquelles Claude peut travailler sans que vous regardiez chaque étape. Lancez une correction de bug, un examen de pull request et une enquête sur un test instable sous forme de trois lignes, continuez à travailler dans une autre fenêtre et vérifiez quand une ligne indique qu'elle a besoin de vous ou qu'elle a un résultat.

16 16 


958 958 

959Claude Code ne redémarre jamais une ligne exécutant une [shell command](#run-a-shell-command), depuis `Entrée` ou depuis `claude attach`, car cela exécuterait la commande à nouveau ; le message de la ligne et `claude attach` disent tous deux que la commande n'est pas exécutée à nouveau.959Claude Code ne redémarre jamais une ligne exécutant une [shell command](#run-a-shell-command), depuis `Entrée` ou depuis `claude attach`, car cela exécuterait la commande à nouveau ; le message de la ligne et `claude attach` disent tous deux que la commande n'est pas exécutée à nouveau.

960 960 

961<h4 id="terminal-host-died">

962 L'hôte du terminal est mort

963</h4>

964 

965Sur Linux et WSL, le superviseur vérifie chaque processus hôte toutes les quelques secondes, que vous ouvriez la session ou non, et marque la session comme échouée quand le processus a quitté mais sa connexion au superviseur ne s'est jamais fermée.

966 

967* Dans la vue agent, la ligne affiche `terminal host process died — press Enter to restart`. Appuyez sur `Entrée` dessus et Claude Code redémarre la session sur un processus hôte frais.

968* Depuis le shell, `claude attach <id>` redémarre une session déjà marquée comme échouée. Sinon, il rapporte la cause et se termine, vous disant d'exécuter `claude attach <id>` à nouveau.

969 

970<h4 id="session-isn’t-responding">

971 La session ne répond pas

972</h4>

973 

974Quand le superviseur accepte une ouverture mais qu'aucune sortie n'arrive pendant environ dix secondes, Claude Code termine la tentative et propose un redémarrage. Une session qui s'est simplement figée, par exemple lors du sommeil de la machine, n'atteint pas cette offre : le superviseur la [redémarre à l'ouverture](#read-session-state) lui-même.

975 

976* Dans la vue agent, le pied de page affiche `Press enter again to restart this session — it isn't responding (its conversation is saved and resumes).` Appuyez sur `Entrée` sur la même ligne à nouveau et Claude Code arrête le processus qui ne répond pas et redémarre la session ; il n'arrête rien sans ce deuxième appui.

977* Depuis le shell, `claude attach <id>` rapporte la cause et se termine, vous disant d'exécuter `claude stop <id>`, puis `claude attach <id>`.

978 

979<h3 id="a-session-fails-before-starting-with-a-possibly-low-memory-note">961<h3 id="a-session-fails-before-starting-with-a-possibly-low-memory-note">

980 Une session échoue avant de démarrer avec une note `possibly low memory`962 Une session échoue avant de démarrer avec une note `possibly low memory`

981</h3>963</h3>

Details

384 384 

385Les alias de modèle tels que `opus` n'agissent pas comme des épingles, et il en va de même pour un ID de modèle que Claude Code ne reconnaît pas, comme un ARN de profil d'inférence d'application.385Les alias de modèle tels que `opus` n'agissent pas comme des épingles, et il en va de même pour un ID de modèle que Claude Code ne reconnaît pas, comme un ARN de profil d'inférence d'application.

386 386 

387Lorsque ces vérifications trouvent un modèle que votre compte ne peut pas invoquer, Claude Code mémorise le refus sur cette machine pendant jusqu'à un jour, et les lancements pendant ce temps ignorent le modèle mémorisé sans demander à Amazon Bedrock à nouveau. Claude Code vérifie un refus mémorisé d'un modèle par défaut actuel à nouveau au lancement une fois dix minutes se sont écoulées depuis la dernière vérification, de sorte qu'une valeur par défaut que votre administrateur réactive revient. Pour désactiver la mémoire, définissez [`CLAUDE_CODE_SKIP_MODEL_ACCESS_MEMORY=1`](/docs/fr/env-vars).

388 

389<h3 id="when-a-model-is-disabled-mid-session">

390 Lorsqu'un modèle est désactivé en cours de session

391</h3>

392 

393Si votre compte perd l'accès au modèle sur lequel votre session s'exécute, par exemple parce qu'un administrateur le désactive dans votre compte Amazon Bedrock, Claude Code bascule la session vers un autre modèle au lieu d'échouer à chaque demande, et affiche `Switched to <fallback> because <model> is not available`. Il essaie les mêmes modèles que le basculement au démarrage : les versions antérieures du même niveau d'abord et, pour une session Opus sans version Opus disponible, le modèle Sonnet par défaut.

394 

395Le basculement s'applique uniquement à un niveau que vous n'avez pas épinglé, la même condition que le basculement au démarrage. Une session sur une version spécifique que vous avez choisie, ou sur un [ARN de profil d'inférence d'application](#map-each-model-version-to-an-inference-profile), conserve son modèle et, sans chaîne de modèle de basculement, la demande échoue à la place. En [mode auto](/docs/fr/permission-modes#enable-auto-mode-on-bedrock-agent-platform-or-foundry), Claude Code bascule uniquement vers un modèle que le mode auto supporte sur Amazon Bedrock. Si aucun de ces modèles n'est disponible non plus, la demande échoue avec [AWS authentication failed](/docs/fr/errors#aws-authentication-failed) et un conseil pour activer le modèle.

396 

397Une [chaîne de modèle de basculement](/docs/fr/model-config#fallback-model-chains) que vous configurez remplace le basculement de niveau : sur ces refus Claude Code bascule vers votre basculement configuré à la place. Pour que les demandes refusées échouent plutôt que de basculer, définissez [`CLAUDE_CODE_DISABLE_MODEL_ACCESS_FALLBACK=1`](/docs/fr/env-vars). Une chaîne de basculement que vous avez configurée bascule toujours sur ces refus ; supprimez également la chaîne si vous voulez que chaque demande refusée échoue.

398 

387<h2 id="cross-region-inference-profile-prefixes">399<h2 id="cross-region-inference-profile-prefixes">

388 Préfixes de profil d'inférence inter-régions400 Préfixes de profil d'inférence inter-régions

389</h2>401</h2>

artifacts.md +1 −1

Details

398| [Variable d'environnement](/docs/fr/env-vars) | Définissez `CLAUDE_CODE_DISABLE_ARTIFACT=1` |398| [Variable d'environnement](/docs/fr/env-vars) | Définissez `CLAUDE_CODE_DISABLE_ARTIFACT=1` |

399| [Règle de permission](/docs/fr/permissions) | Ajoutez `Artifact` à `permissions.deny` |399| [Règle de permission](/docs/fr/permissions) | Ajoutez `Artifact` à `permissions.deny` |

400 400 

401Une fois que vous désactivez les artefacts dans un fichier [`--settings`](/docs/fr/cli-reference#cli-flags) ou avec `CLAUDE_CODE_DISABLE_ARTIFACT`, ou que votre administrateur les désactive dans les [paramètres gérés](/docs/fr/server-managed-settings), aucun fichier de paramètres ne peut les réactiver. Avant la v2.1.242, un fichier plus haut dans la [pile de précédence](/docs/fr/settings#settings-precedence) pouvait réactiver les artefacts même lorsqu'un fichier de précédence inférieure définissait `"enableArtifact": false`.401Une fois que vous désactivez les artefacts dans un fichier [`--settings`](/docs/fr/cli-reference#cli-flags) ou avec `CLAUDE_CODE_DISABLE_ARTIFACT`, ou que votre administrateur les désactive dans les [paramètres gérés](/docs/fr/server-managed-settings), aucun fichier de paramètres ne peut les réactiver.

402 402 

403Vous pouvez également définir `"enableArtifact": false` dans le fichier `.claude/settings.json` ou `.claude/settings.local.json` d'un projet pour désactiver les artefacts pour les sessions de ce projet. Un `"enableArtifact": true` dans l'un ou l'autre fichier ne les réactive pas. Le respect de la clé dans les paramètres du projet et locaux nécessite Claude Code v2.1.242 ou une version ultérieure.403Vous pouvez également définir `"enableArtifact": false` dans le fichier `.claude/settings.json` ou `.claude/settings.local.json` d'un projet pour désactiver les artefacts pour les sessions de ce projet. Un `"enableArtifact": true` dans l'un ou l'autre fichier ne les réactive pas. Le respect de la clé dans les paramètres du projet et locaux nécessite Claude Code v2.1.242 ou une version ultérieure.

404 404 

Details

176 176 

177Si vous définissez `forceLoginOrgUUID` dans un fichier de paramètres, Claude Code cesse d'offrir la [connexion Console sans clé](#sign-in-without-an-api-key) dans les sessions auxquelles ce fichier s'applique et crée une clé API à la place. Pour diriger les développeurs vers la connexion claude.ai à la place, définissez `forceLoginMethod` sur `"claudeai"`.177Si vous définissez `forceLoginOrgUUID` dans un fichier de paramètres, Claude Code cesse d'offrir la [connexion Console sans clé](#sign-in-without-an-api-key) dans les sessions auxquelles ce fichier s'applique et crée une clé API à la place. Pour diriger les développeurs vers la connexion claude.ai à la place, définissez `forceLoginMethod` sur `"claudeai"`.

178 178 

179Sur Claude Code v2.1.212 ou version ultérieure, chaque chemin de connexion répertorié ici applique `forceLoginMethod`. Sur l'écran de connexion interactif du terminal, accessible par `/login` ou l'intégration au premier démarrage, Claude Code présélectionne une méthode `claudeai` ou `console` sans l'appliquer, donc même avec `forceLoginMethod` défini sur `"claudeai"`, un développeur peut toujours compléter une connexion Console là. Les chemins diffèrent sur `forceLoginOrgUUID` :179Sur Claude Code v2.1.212 ou version ultérieure, chaque chemin de connexion répertorié ici applique `forceLoginMethod`. Sur l'écran de connexion interactif du terminal, accessible par `/login` ou l'intégration au premier démarrage, Claude Code présélectionne une méthode `claudeai` ou `console` sans l'appliquer, donc même avec `forceLoginMethod` défini sur `"claudeai"`, un développeur peut toujours compléter une connexion Console là.

180 

181Les chemins diffèrent sur `forceLoginOrgUUID` :

180 182 

181* **Connexions terminales, [extension VS Code](/docs/fr/vs-code) et Agent SDK** : vérifiez `forceLoginOrgUUID` pour les connexions de compte claude.ai183* **Connexions terminales, [extension VS Code](/docs/fr/vs-code) et Agent SDK** : vérifiez `forceLoginOrgUUID` pour les connexions de compte claude.ai

182* **`claude setup-token` et `/install-github-app`** : appliquez uniquement `forceLoginMethod`, afin qu'ils puissent créer un jeton dans une organisation différente184* **`claude setup-token` et `/install-github-app`** : appliquez uniquement `forceLoginMethod`, afin qu'ils puissent créer un jeton dans une organisation différente


192* **Sessions de fournisseur cloud telles que Amazon Bedrock** : bloquées uniquement tant qu'une clé `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN` ou `apiKeyHelper`, ou une clé API enregistrée par une connexion Claude Console antérieure, est toujours présente sur la machine. Supprimez-la et la session démarre. Ces sessions s'authentifient auprès de votre fournisseur cloud, dont les politiques d'accès les gouvernent194* **Sessions de fournisseur cloud telles que Amazon Bedrock** : bloquées uniquement tant qu'une clé `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN` ou `apiKeyHelper`, ou une clé API enregistrée par une connexion Claude Console antérieure, est toujours présente sur la machine. Supprimez-la et la session démarre. Ces sessions s'authentifient auprès de votre fournisseur cloud, dont les politiques d'accès les gouvernent

193* **[Profil Anthropic ou identifiants de fédération](#anthropic-profiles-and-federation-credentials)** : non bloqués sauf si une clé `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN` ou `apiKeyHelper`, ou une clé API enregistrée par une connexion Claude Console antérieure, est également présente sur la machine. Les clés ne vérifient pas à quelle organisation le profil appartient195* **[Profil Anthropic ou identifiants de fédération](#anthropic-profiles-and-federation-credentials)** : non bloqués sauf si une clé `ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN` ou `apiKeyHelper`, ou une clé API enregistrée par une connexion Claude Console antérieure, est également présente sur la machine. Les clés ne vérifient pas à quelle organisation le profil appartient

194 196 

197<h3 id="restrict-which-api-providers-a-machine-may-use">

198 Restreindre les fournisseurs d'API qu'une machine peut utiliser

199</h3>

200 

201[`allowedProviders`](/docs/fr/settings-reference#allowedproviders) dans les [paramètres gérés](/docs/fr/managed-settings) répertorie les services via lesquels une machine gérée peut accéder à Claude, tels que l'API Anthropic, Amazon Bedrock ou une passerelle LLM. Il complète `forceLoginMethod` et `forceLoginOrgUUID`, qui gouvernent le compte qu'une session utilise lorsqu'elle communique avec Anthropic. Nécessite Claude Code v2.1.285 ou version ultérieure.

202 

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

204{

205 "forceLoginMethod": "claudeai",

206 "forceLoginOrgUUID": ["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"],

207 "allowedProviders": ["anthropic", "bedrock"]

208}

209```

210 

211Avec ce fichier, un développeur connecté à votre organisation claude.ai ou configuré pour Amazon Bedrock démarre normalement. Une session configurée pour tout autre fournisseur est refusée au démarrage, et une session en cours d'exécution qui bascule vers un autre est refusée à sa prochaine demande. [Managed settings don't allow this API provider](/docs/fr/errors#managed-settings-dont-allow-this-api-provider) affiche chaque message.

212 

213* **Autoriser une passerelle LLM ou un proxy** : listez `"customEndpoint"` et définissez l'URL de la passerelle dans le bloc `env` géré de la même source. La [référence des paramètres](/docs/fr/settings-reference#allowedproviders) répertorie chaque valeur et indique quelles variables de point de terminaison nécessitent une épingle `env` gérée.

214* **Déployer sur des machines gérées** : mettez la liste dans la source gérée qui porte le reste de votre politique. La note [Scope](/docs/fr/settings-reference#allowedproviders) de l'entrée indique comment une liste gérée par serveur se combine avec elle.

215* **Paramètres gérés par serveur uniquement** : une liste que vous définissez uniquement dans les [paramètres gérés par serveur](/docs/fr/server-managed-settings) ne s'applique qu'aux sessions qui récupèrent les paramètres de votre organisation, donc traitez-la comme une commodité pour les machines que vous ne pouvez pas atteindre avec la gestion des appareils, pas comme une application. [Platform availability](/docs/fr/server-managed-settings#platform-availability) répertorie les sessions qui les récupèrent.

216 

195<h2 id="credential-management">217<h2 id="credential-management">

196 Gestion des identifiants218 Gestion des identifiants

197</h2>219</h2>

Details

285 Modifier les règles depuis `/permissions`285 Modifier les règles depuis `/permissions`

286</h2>286</h2>

287 287 

288Pour afficher et modifier les règles du classificateur sans ouvrir un fichier de paramètres, exécutez [`/permissions`](/docs/fr/permissions#manage-permissions) et sélectionnez l'onglet **Auto mode**. L'onglet nécessite Claude Code v2.1.246 ou une version ultérieure, et il n'apparaît que lorsque [le mode auto est disponible](/docs/fr/permission-modes#eliminate-prompts-with-auto-mode) pour votre session.288Pour afficher et modifier les règles du classificateur et les entrées `environment` sans ouvrir un fichier de paramètres, exécutez [`/permissions`](/docs/fr/permissions#manage-permissions) et sélectionnez l'onglet **Auto mode**. L'onglet nécessite Claude Code v2.1.246 ou une version ultérieure, et il n'apparaît que lorsque [le mode auto est disponible](/docs/fr/permission-modes#eliminate-prompts-with-auto-mode) pour votre session.

289 289 

290L'onglet répertorie les entrées `allow`, `soft_deny`, `hard_deny` et `environment` de chacune des [portées que le classificateur lit](#where-the-classifier-reads-configuration), et indique si les règles intégrées sont en vigueur pour chaque section. Claude Code affiche les entrées des [paramètres gérés](/docs/fr/server-managed-settings) ou l'indicateur `--settings` en lecture seule, et enregistre chaque modification que vous apportez à l'onglet dans `~/.claude/settings.json`. À partir de l'onglet, vous pouvez :290Claude Code affiche les entrées des [paramètres gérés](/docs/fr/server-managed-settings) ou l'indicateur `--settings` en lecture seule, et enregistre chaque modification que vous apportez à l'onglet dans `~/.claude/settings.json`.

291 

292* Ajouter, modifier ou supprimer des règles dans les sections `allow`, `soft_deny` et `hard_deny`. Lorsque vous ajoutez la première règle à une section, Claude Code insère également `"$defaults"` afin que les [règles intégrées](#override-the-block-and-allow-rules) restent en vigueur.

293* Désactiver ou réactiver les règles intégrées pour `allow`, `soft_deny` ou `hard_deny`. Claude Code enregistre le choix en ajoutant ou en supprimant `"$defaults"` dans votre liste pour cette section, donc une section a besoin d'au moins une règle de votre part avant que vous puissiez désactiver ses règles intégrées.

294* Modifier les entrées `environment` en tant que document unique dans votre éditeur. Si vous n'avez pas encore configuré d'entrées `environment`, Claude Code vous demande d'abord si vous souhaitez remplacer l'environnement intégré, puis ouvre l'éditeur sur le texte intégré complet. Lorsque vous enregistrez, Claude Code remplace votre tableau `autoMode.environment` par le document. Incluez la ligne `"$defaults"` pour [conserver les entrées intégrées](#define-trusted-infrastructure).

295 291 

296<h2 id="route-all-shell-commands-through-the-classifier">292<h2 id="route-all-shell-commands-through-the-classifier">

297 Acheminer toutes les commandes shell via le classificateur293 Acheminer toutes les commandes shell via le classificateur

Details

1388 1388 

1389`parentSettingsBehavior: "merge"` maintient le fonctionnement de la livraison de la liste d'autorisation de sortie de Claude Desktop vers ses sessions Claude Code intégrées ; [Deliver policy to Claude Desktop sessions](/docs/fr/claude-apps-gateway#deliver-policy-to-claude-desktop-sessions) explique le mécanisme et où l'opt-in doit se situer.1389`parentSettingsBehavior: "merge"` maintient le fonctionnement de la livraison de la liste d'autorisation de sortie de Claude Desktop vers ses sessions Claude Code intégrées ; [Deliver policy to Claude Desktop sessions](/docs/fr/claude-apps-gateway#deliver-policy-to-claude-desktop-sessions) explique le mécanisme et où l'opt-in doit se situer.

1390 1390 

1391Pour empêcher les développeurs de contourner la passerelle avec une variable de fournisseur cloud ou un `ANTHROPIC_BASE_URL` personnel, ajoutez `"allowedProviders": ["gateway"]` au même fichier. Claude Code refuse alors chaque session sur la machine qui n'est pas configurée pour une passerelle Cloud, et n'admet une passerelle que lorsqu'il s'agit de celle que `forceLoginGatewayUrl` nomme ou d'une dont l'URL est définie par le bloc `env` du fichier comme `ANTHROPIC_BASE_URL`. `claude gateway` refuse de s'exécuter sur une machine qui définit la liste, donc gardez la clé hors de l'hôte de la passerelle. Voir l'entrée [`allowedProviders`](/docs/fr/settings-reference#allowedproviders) dans la référence des paramètres. Nécessite Claude Code v2.1.285 ou ultérieur.

1392 

1391Déployez le fichier `managed-settings.json` sur chaque appareil, généralement via votre plateforme MDM. Le chemin du fichier diffère selon la plateforme. Voir [où chaque mécanisme stocke la stratégie](/docs/fr/managed-settings#where-each-mechanism-stores-the-policy).1393Déployez le fichier `managed-settings.json` sur chaque appareil, généralement via votre plateforme MDM. Le chemin du fichier diffère selon la plateforme. Voir [où chaque mécanisme stocke la stratégie](/docs/fr/managed-settings#where-each-mechanism-stores-the-policy).

1392 1394 

1393Par défaut, une stratégie de registre sur Windows ou un plist de préférences gérées sur macOS remplace le fichier `managed-settings.json` plutôt que de le fusionner avec lui, à l'exception des [clés d'exception et des vérifications entre sources ci-dessus](#precedence-with-other-managed-sources). Les trois clés de cet extrait suivent la règle de source de priorité la plus élevée, donc les flottes qui livrent la stratégie via Group Policy ou les profils de configuration doivent placer les trois dans ce mécanisme à la place.1395Par défaut, une stratégie de registre sur Windows ou un plist de préférences gérées sur macOS remplace le fichier `managed-settings.json` plutôt que de le fusionner avec lui, à l'exception des [clés d'exception et des vérifications entre sources ci-dessus](#precedence-with-other-managed-sources). Les trois clés de cet extrait suivent la règle de source de priorité la plus élevée, donc les flottes qui livrent la stratégie via Group Policy ou les profils de configuration doivent placer les trois dans ce mécanisme à la place.

Details

1561| `paste-cache/` | Contenu des grands collages |1561| `paste-cache/` | Contenu des grands collages |

1562| `image-cache/<session>/` | Images jointes enregistrées par Claude Code v2.1.274 et antérieures. Les versions ultérieures enregistrent les images collées et jointes en dehors de `~/.claude`, dans un répertoire `images/` pour chaque session sous le répertoire temporaire que [`CLAUDE_CODE_TMPDIR`](/docs/fr/env-vars) contrôle. Le balayage supprime les répertoires restants des autres sessions ici, quel que soit leur âge. |1562| `image-cache/<session>/` | Images jointes enregistrées par Claude Code v2.1.274 et antérieures. Les versions ultérieures enregistrent les images collées et jointes en dehors de `~/.claude`, dans un répertoire `images/` pour chaque session sous le répertoire temporaire que [`CLAUDE_CODE_TMPDIR`](/docs/fr/env-vars) contrôle. Le balayage supprime les répertoires restants des autres sessions ici, quel que soit leur âge. |

1563| `uploads/<session>/` | Fichiers que vous joignez depuis le web ou l'application mobile, et photos que vous joignez depuis l'application mobile, lors de la messagerie d'une session [Remote Control](/docs/fr/remote-control). Une pièce jointe à une [session cloud](/docs/fr/claude-code-on-the-web) est enregistrée dans l'environnement cloud propre de cette session, pas sur votre machine. |1563| `uploads/<session>/` | Fichiers que vous joignez depuis le web ou l'application mobile, et photos que vous joignez depuis l'application mobile, lors de la messagerie d'une session [Remote Control](/docs/fr/remote-control). Une pièce jointe à une [session cloud](/docs/fr/claude-code-on-the-web) est enregistrée dans l'environnement cloud propre de cette session, pas sur votre machine. |

1564| `dev-mods/<session>/` | [Mods que Claude a écrits](/docs/fr/plugins/mods/create#ask-claude-for-a-mod) pendant la session |

1564| `session-env/` | Métadonnées d'environnement par session |1565| `session-env/` | Métadonnées d'environnement par session |

1565| `tasks/` | Listes de tâches écrites par les outils de tâche, un répertoire par liste |1566| `tasks/` | Listes de tâches écrites par les outils de tâche, un répertoire par liste |

1566| `shell-snapshots/` | Alias, fonctions et options shell capturés au démarrage et appliqués par l'[outil Bash](/docs/fr/tools-reference#bash-tool-behavior) à chaque commande. Supprimés à la fermeture normale. Le balayage efface tous ceux restants après un crash. |1567| `shell-snapshots/` | Alias, fonctions et options shell capturés au démarrage et appliqués par l'[outil Bash](/docs/fr/tools-reference#bash-tool-behavior) à chaque commande. Supprimés à la fermeture normale. Le balayage efface tous ceux restants après un crash. |

Details

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

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

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

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

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

88| `--disallowedTools`, `--disallowed-tools` | Règles de refus. Un nom d'outil nu supprime les outils correspondants du contexte de Claude : `"Edit"` supprime Edit, `"*"` supprime tous les outils, et `"mcp__*"` supprime tous les outils MCP. Une règle délimitée telle que `Bash(rm *)` laisse l'outil disponible et refuse uniquement les appels correspondants [tels qu'écrits](/docs/fr/permissions#bash-rule-limits). Une règle nommant [`EndConversation`](/docs/fr/tools-reference#endconversation-tool-behavior) ne peut pas le supprimer tant que tout autre outil reste | `"Bash(git log *)" "Bash(git diff *)" "Edit"` |89| `--disallowedTools`, `--disallowed-tools` | Règles de refus. Un nom d'outil nu supprime les outils correspondants du contexte de Claude : `"Edit"` supprime Edit, `"*"` supprime tous les outils, et `"mcp__*"` supprime tous les outils MCP. Une règle délimitée telle que `Bash(rm *)` laisse l'outil disponible et refuse uniquement les appels correspondants [tels qu'écrits](/docs/fr/permissions#bash-rule-limits). Une règle nommant [`EndConversation`](/docs/fr/tools-reference#endconversation-tool-behavior) ne peut pas le supprimer tant que tout autre outil reste | `"Bash(git log *)" "Bash(git diff *)" "Edit"` |

89| `--effort` | Définir le [niveau d'effort](/docs/fr/model-config#adjust-effort-level) pour la session actuelle. Options : `low`, `medium`, `high`, `xhigh`, `max`, ou `ultracode`. Les niveaux disponibles dépendent du modèle. `ultracode` demande l'effort `xhigh` avec [ultracode](/docs/fr/workflows#let-claude-decide-with-ultracode) activé, et nécessite Claude Code v2.1.203 ou ultérieur. Remplace les paramètres [`modelSettings`](/docs/fr/settings-reference#modelsettings) et [`effortLevel`](/docs/fr/settings-reference#effortlevel) pour cette session et ne persiste pas | `claude --effort high` |90| `--effort` | Définir le [niveau d'effort](/docs/fr/model-config#adjust-effort-level) pour la session actuelle. Options : `low`, `medium`, `high`, `xhigh`, `max`, ou `ultracode`. Les niveaux disponibles dépendent du modèle. `ultracode` demande l'effort `xhigh` avec [ultracode](/docs/fr/workflows#let-claude-decide-with-ultracode) activé, et nécessite Claude Code v2.1.203 ou ultérieur. Remplace les paramètres [`modelSettings`](/docs/fr/settings-reference#modelsettings) et [`effortLevel`](/docs/fr/settings-reference#effortlevel) pour cette session et ne persiste pas | `claude --effort high` |


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

112| `--no-session-persistence` | Désactiver la persistance de session afin que les sessions ne soient pas enregistrées sur le disque et ne puissent pas être reprises. Mode impression uniquement. La variable d'environnement [`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](/docs/fr/env-vars) fait la même chose dans n'importe quel mode | `claude -p --no-session-persistence "query"` |113| `--no-session-persistence` | Désactiver la persistance de session afin que les sessions ne soient pas enregistrées sur le disque et ne puissent pas être reprises. Mode impression uniquement. La variable d'environnement [`CLAUDE_CODE_SKIP_PROMPT_HISTORY`](/docs/fr/env-vars) fait la même chose dans n'importe quel mode | `claude -p --no-session-persistence "query"` |

113| `--output-format` | Spécifier le format de sortie pour le mode impression (options : `text`, `json`, `stream-json`) | `claude -p "query" --output-format json` |114| `--output-format` | Spécifier le format de sortie pour le mode impression (options : `text`, `json`, `stream-json`) | `claude -p "query" --output-format json` |

114| `--permission-mode` | Commencer dans un [mode de permission](/docs/fr/permission-modes) spécifié. Accepte `default`, `acceptEdits`, `plan`, `auto`, `dontAsk`, `bypassPermissions`, ou `manual` comme alias pour `default`. L'alias `manual` sélectionne le mode de permission que l'interface utilisateur étiquette Manuel et nécessite Claude Code v2.1.200 ou ultérieur ; `claude --help` le répertorie à la place de `default`, et les deux valeurs fonctionnent. Remplace `defaultMode` des fichiers de paramètres. Sans ce drapeau ou `--dangerously-skip-permissions`, une nouvelle session démarre dans le mode de permission décrit dans [quel mode de permission une session démarre](/docs/fr/permission-modes#which-mode-a-session-starts-in). Pour `-p`, c'est `default` lorsque rien n'est configuré | `claude --permission-mode plan` |115| `--permission-mode` | Commencer dans un [mode de permission](/docs/fr/permission-modes) spécifié. Accepte `default`, `acceptEdits`, `plan`, `auto`, `dontAsk`, `bypassPermissions`, ou `manual` comme alias pour `default`. L'alias `manual` sélectionne le mode de permission que l'interface utilisateur étiquette Manuel et nécessite Claude Code v2.1.200 ou ultérieur ; `claude --help` le répertorie à la place de `default`, et les deux valeurs fonctionnent. Remplace `defaultMode` des fichiers de paramètres. Sans ce drapeau ou `--dangerously-skip-permissions`, une nouvelle session démarre dans le mode de permission décrit dans [quel mode de permission une session démarre](/docs/fr/permission-modes#which-mode-a-session-starts-in), qui couvre également ce qu'une exécution `-p` démarre | `claude --permission-mode plan` |

115| `--permission-prompt-tool` | Spécifier un outil MCP pour gérer les invites de permission en mode non interactif. Claude Code attend que le serveur MCP de cet outil se connecte avant d'exécuter le premier tour, jusqu'au délai d'expiration de démarrage [`MCP_TIMEOUT`](/docs/fr/env-vars), 30 secondes par défaut. <br /><br />L'outil d'invite ne peut pas approuver un outil MCP marqué comme [nécessitant une interaction utilisateur](/docs/fr/mcp#require-approval-for-a-specific-tool) : Claude Code convertit un résultat `allow` pour celui-ci en refus. Cette restriction nécessite Claude Code v2.1.199 ou ultérieur | `claude -p --permission-prompt-tool mcp_auth_tool "query"` |116| `--permission-prompt-tool` | Spécifier un outil MCP pour gérer les invites de permission en mode non interactif. Claude Code attend que le serveur MCP de cet outil se connecte avant d'exécuter le premier tour, jusqu'au délai d'expiration de démarrage [`MCP_TIMEOUT`](/docs/fr/env-vars), 30 secondes par défaut. <br /><br />L'outil d'invite ne peut pas approuver un outil MCP marqué comme [nécessitant une interaction utilisateur](/docs/fr/mcp#require-approval-for-a-specific-tool) : Claude Code convertit un résultat `allow` pour celui-ci en refus. Cette restriction nécessite Claude Code v2.1.199 ou ultérieur | `claude -p --permission-prompt-tool mcp_auth_tool "query"` |

116| `--permission-prompts` | Définir qui répond aux invites de permission en mode impression. Avec le `host` par défaut, Claude Code les envoie à l'hôte du SDK Agent ou à l'outil `--permission-prompt-tool`. Passez `none` lorsque personne ne peut répondre, et Claude Code les refuse à la place. Voir [Désactiver les invites de permission dans les exécutions sans surveillance](/docs/fr/headless#turn-off-permission-prompts-in-unattended-runs). Nécessite Claude Code v2.1.259 ou ultérieur | `claude -p --permission-prompts none "query"` |117| `--permission-prompts` | Définir qui répond aux invites de permission en mode impression. Avec le `host` par défaut, Claude Code les envoie à l'hôte du SDK Agent ou à l'outil `--permission-prompt-tool`. Passez `none` lorsque personne ne peut répondre, et Claude Code les refuse à la place. Voir [Désactiver les invites de permission dans les exécutions sans surveillance](/docs/fr/headless#turn-off-permission-prompts-in-unattended-runs). Nécessite Claude Code v2.1.259 ou ultérieur | `claude -p --permission-prompts none "query"` |

117| `--plugin-dir` | Charger un plugin à partir d'un répertoire ou d'une archive `.zip`, ou plusieurs à partir d'un [dossier de plugins](/docs/fr/plugins/create#load-a-directory-or-archive-for-one-session), pour cette session uniquement. Chaque drapeau prend un chemin. Répétez le drapeau pour plus de chemins : `--plugin-dir A --plugin-dir B.zip`. Passer un dossier de plugins nécessite Claude Code v2.1.265 ou ultérieur | `claude --plugin-dir ./my-plugin` |118| `--plugin-dir` | Charger un plugin à partir d'un répertoire ou d'une archive `.zip`, ou plusieurs à partir d'un [dossier de plugins](/docs/fr/plugins/create#load-a-directory-or-archive-for-one-session), pour cette session uniquement. Chaque drapeau prend un chemin. Répétez le drapeau pour plus de chemins : `--plugin-dir A --plugin-dir B.zip`. Passer un dossier de plugins nécessite Claude Code v2.1.265 ou ultérieur | `claude --plugin-dir ./my-plugin` |

118| `--plugin-url` | Récupérer une archive `.zip` de plugin à partir d'une URL pour cette session uniquement. Répétez le drapeau pour plusieurs plugins, ou passez des URL séparées par des espaces dans une seule valeur entre guillemets | `claude --plugin-url https://example.com/plugin.zip` |119| `--plugin-url` | Récupérer une archive `.zip` de plugin à partir d'une URL pour cette session uniquement. Répétez le drapeau pour plusieurs plugins, ou passez des URL séparées par des espaces dans une seule valeur entre guillemets | `claude --plugin-url https://example.com/plugin.zip` |

119| `--print`, `-p` | Imprimer la réponse sans mode interactif (voir la [documentation du SDK Agent](/docs/fr/agent-sdk/overview) pour les détails d'utilisation programmatique) | `claude -p "query"` |120| `--print`, `-p` | Imprimer la réponse sans mode interactif (voir la [documentation du SDK Agent](/docs/fr/agent-sdk/overview) pour les détails d'utilisation programmatique). Pour `--resume` sur une session en arrière-plan qui s'exécute toujours, voir [Reprendre une session](/docs/fr/sessions#resume-a-running-background-session) | `claude -p "query"` |

120| `--prompt-suggestions` | Émettre un message `prompt_suggestion` avec une prédiction du prochain message utilisateur après chaque tour qui en génère un ; les très courtes conversations peuvent n'en produire aucune. Nécessite `--print`, `--output-format stream-json`, et `--verbose`. Voir [Suggestions d'invite](/docs/fr/interactive-mode#prompt-suggestions) | `claude -p --prompt-suggestions --output-format stream-json --verbose "query"` |121| `--prompt-suggestions` | Émettre un message `prompt_suggestion` avec une prédiction du prochain message utilisateur après chaque tour qui en génère un ; les très courtes conversations peuvent n'en produire aucune. Nécessite `--print`, `--output-format stream-json`, et `--verbose`. Voir [Suggestions d'invite](/docs/fr/interactive-mode#prompt-suggestions) | `claude -p --prompt-suggestions --output-format stream-json --verbose "query"` |

121| `--ref <branch>` | Avec `--environment`, baser le checkout de la nouvelle session sur une ref nommée au lieu du `HEAD` local | `claude -p "Run the smoke test" --environment ccpool_abc123 --ref main` |122| `--ref <branch>` | Avec `--environment`, baser le checkout de la nouvelle session sur une ref nommée au lieu du `HEAD` local | `claude -p "Run the smoke test" --environment ccpool_abc123 --ref main` |

122| `--remote` | Alias déprécié pour `--cloud`, y compris le formulaire de session existante | `claude --remote "Fix the login bug"` |123| `--remote` | Alias déprécié pour `--cloud`, y compris le formulaire de session existante | `claude --remote "Fix the login bug"` |


124| `--remote-control-session-name-prefix <prefix>` | Préfixe pour les noms de session [Remote Control](/docs/fr/remote-control) générés automatiquement lorsqu'aucun nom explicite n'est défini. Par défaut, le nom d'hôte de votre machine, produisant des noms comme `myhost-graceful-unicorn`. Définissez `CLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIX` pour le même effet | `claude remote-control --remote-control-session-name-prefix dev-box` |125| `--remote-control-session-name-prefix <prefix>` | Préfixe pour les noms de session [Remote Control](/docs/fr/remote-control) générés automatiquement lorsqu'aucun nom explicite n'est défini. Par défaut, le nom d'hôte de votre machine, produisant des noms comme `myhost-graceful-unicorn`. Définissez `CLAUDE_REMOTE_CONTROL_SESSION_NAME_PREFIX` pour le même effet | `claude remote-control --remote-control-session-name-prefix dev-box` |

125| `--replay-user-messages` | Ré-émettre les messages utilisateur de stdin sur stdout pour la reconnaissance. Nécessite `--input-format stream-json` et `--output-format stream-json` | `claude -p --input-format stream-json --output-format stream-json --verbose --replay-user-messages` |126| `--replay-user-messages` | Ré-émettre les messages utilisateur de stdin sur stdout pour la reconnaissance. Nécessite `--input-format stream-json` et `--output-format stream-json` | `claude -p --input-format stream-json --output-format stream-json --verbose --replay-user-messages` |

126| `--restricted` | Démarrer en mode restreint. Utilisez-le lorsqu'un harnais d'évaluation pilote `claude` sur une machine partagée et que Claude Code ne doit pas exécuter de commandes ou lire les paramètres utilisateur et projet de cette machine. Claude Code supprime les outils intégrés qui exécutent des commandes ou du code, et WebFetch, à moins que vous les nomiez individuellement dans `--tools`, pas via la présélection `default`. Il confine également les outils de fichier intégrés aux [répertoires de travail](/docs/fr/permissions#working-directories), charge uniquement les [paramètres gérés](/docs/fr/managed-settings) et `--settings`, refuse [`bypassPermissions`](/docs/fr/permission-modes#skip-all-checks-with-bypasspermissions-mode), et [refuse de créer des sessions cloud](/docs/fr/errors#cloud-sessions-cannot-be-created-from-a-restricted-session). Nécessite Claude Code v2.1.248 ou ultérieur | `claude --restricted -p "query"` |127| `--restricted` | Démarrer en mode restreint. Utilisez-le lorsqu'un harnais d'évaluation pilote `claude` sur une machine partagée et que Claude Code ne doit pas exécuter de commandes ou lire les paramètres utilisateur et projet de cette machine. Claude Code supprime les outils intégrés qui exécutent des commandes ou du code, et WebFetch, à moins que vous les nomiez individuellement dans `--tools`, pas via la présélection `default`. Il confine également les outils de fichier intégrés aux [répertoires de travail](/docs/fr/permissions#working-directories), charge uniquement les [paramètres gérés](/docs/fr/managed-settings) et `--settings`, refuse [`bypassPermissions`](/docs/fr/permission-modes#skip-all-checks-with-bypasspermissions-mode), et [refuse de créer des sessions cloud](/docs/fr/errors#cloud-sessions-cannot-be-created-from-a-restricted-session). Nécessite Claude Code v2.1.248 ou ultérieur | `claude --restricted -p "query"` |

127| `--resume`, `-r` | Reprendre une session spécifique par ID ou nom, ou afficher un sélecteur interactif pour choisir une session. À la place d'un ID, vous pouvez passer le chemin absolu vers le fichier de [transcription](/docs/fr/sessions#where-transcripts-are-stored) `.jsonl` d'une session. Le sélecteur et la recherche par nom incluent les sessions qui ont ajouté ce répertoire avec `/add-dir`. Lorsque vous transmettez un ID de session, Claude Code recherche le répertoire du projet actuel et ses git worktrees, puis tous les autres projets sur cette machine. Avant v2.1.223, la recherche d'ID couvrait uniquement le répertoire du projet actuel et ses git worktrees. Les [sessions en arrière-plan](/docs/fr/agent-view) apparaissent dans le sélecteur marquées avec `bg` | `claude --resume auth-refactor` |128| `--resume`, `-r` | Reprendre une session spécifique par ID ou nom, ou afficher un sélecteur interactif pour choisir une session. À la place d'un ID, vous pouvez passer le chemin absolu vers le fichier de [transcription](/docs/fr/sessions#where-transcripts-are-stored) `.jsonl` d'une session. Le sélecteur et la recherche par nom incluent les sessions qui ont ajouté ce répertoire avec `/add-dir`. Lorsque vous transmettez un ID de session, Claude Code recherche le répertoire du projet actuel et ses git worktrees, puis tous les autres projets sur cette machine. Avant v2.1.223, la recherche d'ID couvrait uniquement le répertoire du projet actuel et ses git worktrees. Les [sessions en arrière-plan](/docs/fr/agent-view) apparaissent dans le sélecteur marquées avec `bg`. Reprendre une session qui s'exécute toujours [ouvre cette session](/docs/fr/sessions#resume-a-running-background-session) dans ce terminal via `claude attach`, et une invite que vous transmettez sur la ligne de commande lui est envoyée en tant que son prochain tour. Avant v2.1.285, Claude Code refusait et affichait la commande `claude attach` à exécuter à la place | `claude --resume auth-refactor` |

128| `--safe-mode` | Démarrer avec toutes les personnalisations désactivées pour dépanner une configuration cassée : CLAUDE.md, skills, plugins, hooks, serveurs MCP, commandes et agents personnalisés, styles de sortie, workflows, thèmes personnalisés, liaisons de touches personnalisées, commandes de ligne d'état et de suggestion de fichiers, serveurs LSP, et mémoire automatique ne se chargent pas. L'authentification, la sélection du modèle, les outils intégrés et les permissions fonctionnent normalement, ce qui diffère de [`--bare`](/docs/fr/headless#start-faster-with-bare-mode). La politique des paramètres gérés s'applique toujours, y compris les hooks configurés par la politique, la ligne d'état et les commandes de suggestion de fichiers ; les plugins gérés, les skills gérés, le CLAUDE.md géré et les serveurs MCP configurés par la politique ne se chargent pas. Utile pour vérifier si une personnalisation est ce qui déclenche le [basculement automatique du modèle](/docs/fr/model-config#automatic-model-fallback). Définit [`CLAUDE_CODE_SAFE_MODE`](/docs/fr/env-vars) | `claude --safe-mode` |129| `--safe-mode` | Démarrer avec toutes les personnalisations désactivées pour dépanner une configuration cassée : CLAUDE.md, skills, plugins, hooks, serveurs MCP, commandes et agents personnalisés, styles de sortie, workflows, thèmes personnalisés, liaisons de touches personnalisées, commandes de ligne d'état et de suggestion de fichiers, serveurs LSP, et mémoire automatique ne se chargent pas. L'authentification, la sélection du modèle, les outils intégrés et les permissions fonctionnent normalement, ce qui diffère de [`--bare`](/docs/fr/headless#start-faster-with-bare-mode). La politique des paramètres gérés s'applique toujours, y compris les hooks configurés par la politique, la ligne d'état et les commandes de suggestion de fichiers ; les plugins gérés, les skills gérés, le CLAUDE.md géré et les serveurs MCP configurés par la politique ne se chargent pas. Utile pour vérifier si une personnalisation est ce qui déclenche le [basculement automatique du modèle](/docs/fr/model-config#automatic-model-fallback). Définit [`CLAUDE_CODE_SAFE_MODE`](/docs/fr/env-vars) | `claude --safe-mode` |

129| `--session-id` | Utiliser un ID de session spécifique pour la conversation (doit être un UUID valide) | `claude --session-id "550e8400-e29b-41d4-a716-446655440000"` |130| `--session-id` | Utiliser un ID de session spécifique pour la conversation (doit être un UUID valide) | `claude --session-id "550e8400-e29b-41d4-a716-446655440000"` |

130| `--setting-sources` | Liste séparée par des virgules des sources de paramètres à charger (`user`, `project`, `local`). Voir [agent view](/docs/fr/agent-view#what-carries-over-when-you-background) et [agent teams](/docs/fr/agent-teams#context-and-communication) pour les sessions que vous démarrez à partir de celle-ci qui héritent de la liste | `claude --setting-sources user,project` |131| `--setting-sources` | Liste séparée par des virgules des sources de paramètres à charger (`user`, `project`, `local`). Voir [agent view](/docs/fr/agent-view#what-carries-over-when-you-background) et [agent teams](/docs/fr/agent-teams#context-and-communication) pour les sessions que vous démarrez à partir de celle-ci qui héritent de la liste | `claude --setting-sources user,project` |


149 150 

150| Drapeau | Comportement | Exemple |151| Drapeau | Comportement | Exemple |

151| :- | :- | :- |152| :- | :- | :- |

152| `--system-prompt` | Remplace l'invite par défaut entière | `claude --system-prompt "You are a Python expert"` |153| `--system-prompt` | Remplace l'invite système entière par défaut | `claude --system-prompt "You are a Python expert"` |

153| `--system-prompt-file` | Remplace par le contenu du fichier | `claude --system-prompt-file ./prompts/review.txt` |154| `--system-prompt-file` | Remplace par le contenu du fichier | `claude --system-prompt-file ./prompts/review.txt` |

154| `--append-system-prompt` | Ajoute à l'invite par défaut | `claude --append-system-prompt "Always use TypeScript"` |155| `--append-system-prompt` | Ajoute à l'invite système par défaut | `claude --append-system-prompt "Always use TypeScript"` |

155| `--append-system-prompt-file` | Ajoute le contenu du fichier à l'invite par défaut | `claude --append-system-prompt-file ./style-rules.txt` |156| `--append-system-prompt-file` | Ajoute le contenu du fichier à l'invite système par défaut | `claude --append-system-prompt-file ./style-rules.txt` |

156| `--system-prompt-snapshot` | Avec `off`, reconstruit l'invite à chaque requête. Avec `on`, la valeur par défaut, réutilise une invite enregistrée où [l'enregistrement s'applique](#system-prompt-flags-in-resumed-conversations) | `claude --append-system-prompt "Draft rules" --system-prompt-snapshot off` |157| `--system-prompt-snapshot` | Avec `off`, reconstruit l'invite à chaque requête. Avec `on`, la valeur par défaut, réutilise une invite enregistrée où [l'enregistrement s'applique](#system-prompt-flags-in-resumed-conversations) | `claude --append-system-prompt "Draft rules" --system-prompt-snapshot off` |

157 158 

158`--system-prompt` et `--system-prompt-file` s'excluent mutuellement. Les drapeaux d'ajout peuvent être combinés avec l'un ou l'autre drapeau de remplacement.159`--system-prompt` et `--system-prompt-file` s'excluent mutuellement. Les drapeaux d'ajout peuvent être combinés avec l'un ou l'autre drapeau de remplacement.

159 160 

160Lorsque le texte de remplacement combine des instructions qui sont les mêmes à chaque exécution avec un contexte qui change par exécution, ajoutez une ligne contenant uniquement `__SYSTEM_PROMPT_DYNAMIC_BOUNDARY__` entre les instructions et le contexte. Claude Code divise l'invite à la première telle ligne et supprime cette ligne, de sorte que la partie au-dessus reste mise en cache tandis que la partie au-dessous change. Nécessite Claude Code v2.1.275 ou ultérieur. [Mettre en cache la partie statique d'une invite personnalisée](/docs/fr/agent-sdk/modifying-system-prompts#cache-the-static-part-of-a-custom-prompt) répertorie les configurations où la division s'applique.161Lorsque le texte de remplacement combine des instructions qui sont les mêmes à chaque exécution avec un contexte qui change par exécution, ajoutez une ligne contenant uniquement `__SYSTEM_PROMPT_DYNAMIC_BOUNDARY__` entre les instructions et le contexte. Claude Code divise l'invite à la première telle ligne et supprime cette ligne, de sorte que la partie au-dessus reste mise en cache tandis que la partie au-dessous change. Nécessite Claude Code v2.1.275 ou ultérieur. [Mettre en cache la partie statique d'une invite personnalisée](/docs/fr/agent-sdk/modifying-system-prompts#cache-the-static-part-of-a-custom-prompt) répertorie les configurations où la division s'applique.

161 162 

162Choisissez en fonction de la question de savoir si l'identité par défaut de Claude Code convient toujours à votre tâche. Utilisez un drapeau d'ajout lorsque Claude doit rester un assistant de codage qui suit également vos règles supplémentaires : instructions par invocation, formatage de sortie, ou contexte de domaine pour un script `-p`. L'ajout préserve les conseils d'outils par défaut, les instructions de sécurité et les conventions de codage, vous ne fournissez donc que ce qui diffère. Utilisez un drapeau de remplacement lorsque la surface, l'identité ou le modèle de permission diffère de celui de Claude Code, comme un agent non-codage dans un pipeline qu'aucun humain ne regarde. Le remplacement supprime l'intégralité de l'invite par défaut, y compris les conseils d'outils et les instructions de sécurité, vous êtes donc responsable de tout ce que votre tâche nécessite toujours.163Choisissez en fonction de la question de savoir si l'identité par défaut de Claude Code convient toujours à votre tâche. Utilisez un drapeau d'ajout lorsque Claude doit rester un assistant de codage qui suit également vos règles supplémentaires : instructions par invocation, formatage de sortie, ou contexte de domaine pour un script `-p`. L'ajout préserve les conseils d'outils par défaut, les instructions de sécurité et les conventions de codage, vous ne fournissez donc que ce qui diffère. Utilisez un drapeau de remplacement lorsque la surface, l'identité ou le modèle de permission diffère de celui de Claude Code, comme un agent non-codage dans un pipeline qu'aucun humain ne regarde. Le remplacement supprime l'intégralité de l'invite système par défaut, y compris les conseils d'outils et les instructions de sécurité, vous êtes donc responsable de tout ce que votre tâche nécessite toujours.

163 164 

164Pour les personas persistants que vous pouvez basculer et partager dans un projet, utilisez les [styles de sortie](/docs/fr/output-styles). Pour les conventions de projet que Claude doit toujours suivre, utilisez [CLAUDE.md](/docs/fr/memory). Le [guide du SDK Agent sur les invites système](/docs/fr/agent-sdk/modifying-system-prompts#decide-on-a-starting-point) couvre la même décision plus en profondeur.165Pour les personas persistants que vous pouvez basculer et partager dans un projet, utilisez les [styles de sortie](/docs/fr/output-styles). Pour les conventions de projet que Claude doit toujours suivre, utilisez [CLAUDE.md](/docs/fr/memory). Le [guide du SDK Agent sur les invites système](/docs/fr/agent-sdk/modifying-system-prompts#decide-on-a-starting-point) couvre la même décision plus en profondeur.

165 166 

Details

439 439 

440* **Commandes que Claude exécute** : un environnement cloud ne définit pas son propre délai d'expiration de commande, donc les défauts de l'outil Bash s'appliquent. Claude attend 2 minutes pour une commande par défaut et peut demander jusqu'à 10 minutes.440* **Commandes que Claude exécute** : un environnement cloud ne définit pas son propre délai d'expiration de commande, donc les défauts de l'outil Bash s'appliquent. Claude attend 2 minutes pour une commande par défaut et peut demander jusqu'à 10 minutes.

441 441 

442 Quand une commande atteint son [délai d'expiration](/docs/fr/tools-reference#timeout-and-output-limits), Claude Code [la déplace en arrière-plan](/docs/fr/tools-reference#background-commands) au lieu de l'arrêter, sauf si la commande commence par `sleep`. Une commande déplacée de cette façon peut continuer à s'exécuter pendant jusqu'à 30 minutes supplémentaires avant que Claude Code l'arrête à son [délai d'expiration en arrière-plan](/docs/fr/tools-reference#background-commands). Définir `BASH_DEFAULT_TIMEOUT_MS` au-dessus de `1800000` millisecondes allonge cette limite ainsi que le défaut de premier plan.442 Quand une commande atteint son [délai d'expiration](/docs/fr/tools-reference#timeout-and-output-limits), Claude Code [la déplace en arrière-plan](/docs/fr/tools-reference#foreground-commands-that-move-to-the-background) au lieu de l'arrêter, sauf si la commande commence par `sleep`. Une commande déplacée de cette façon peut continuer à s'exécuter pendant jusqu'à 30 minutes supplémentaires avant que Claude Code l'arrête à son [délai d'expiration en arrière-plan](/docs/fr/tools-reference#time-limit-for-background-commands). Définir `BASH_DEFAULT_TIMEOUT_MS` au-dessus de `1800000` millisecondes allonge cette limite ainsi que le défaut de premier plan.

443* **Crochets SessionStart** : Claude Code annule un crochet `command` après 600 secondes sauf si vous définissez [`timeout`](/docs/fr/hooks#common-fields), en secondes, sur l'entrée du crochet. Claude Code n'applique pas le délai d'expiration sur un crochet que vous exécutez avec [`async: true`](/docs/fr/hooks#run-hooks-in-the-background).443* **Crochets SessionStart** : Claude Code annule un crochet `command` après 600 secondes sauf si vous définissez [`timeout`](/docs/fr/hooks#common-fields), en secondes, sur l'entrée du crochet. Claude Code n'applique pas le délai d'expiration sur un crochet que vous exécutez avec [`async: true`](/docs/fr/hooks#run-hooks-in-the-background).

444* **Script de configuration** : un script qui prend plus que environ cinq minutes n'est pas mis en cache. [Exigences du script](#script-requirements) couvre comment rester en dessous de cela.444* **Script de configuration** : un script qui prend plus que environ cinq minutes n'est pas mis en cache. [Exigences du script](#script-requirements) couvre comment rester en dessous de cela.

445* **Sessions inactives** : après quelques minutes sans activité, la VM d'une session s'arrête avec ses fichiers sauvegardés, et une VM arrêtée peut être réclamée ultérieurement. [Définir les variables d'environnement](#set-environment-variables) décrit ce qu'une session récupère dans chaque cas, et [Environnement expiré](/docs/fr/claude-code-on-the-web#environment-expired) couvre comment rouvrir une session dont la VM a été réclamée.445* **Sessions inactives** : après quelques minutes sans activité, la VM d'une session s'arrête avec ses fichiers sauvegardés, et une VM arrêtée peut être réclamée ultérieurement. [Définir les variables d'environnement](#set-environment-variables) décrit ce qu'une session récupère dans chaque cas, et [Environnement expiré](/docs/fr/claude-code-on-the-web#environment-expired) couvre comment rouvrir une session dont la VM a été réclamée.

commands.md +1 −1

Details

132| `/remote-control` | Rendre cette session disponible pour [Remote Control](/docs/fr/remote-control) à partir de claude.ai. L'exécuter sans connexion affiche que Remote Control nécessite un abonnement claude.ai et vous indique comment vous connecter ; avant la v2.1.206, il signalait `Unknown command: /remote-control`. Alias : `/rc` |132| `/remote-control` | Rendre cette session disponible pour [Remote Control](/docs/fr/remote-control) à partir de claude.ai. L'exécuter sans connexion affiche que Remote Control nécessite un abonnement claude.ai et vous indique comment vous connecter ; avant la v2.1.206, il signalait `Unknown command: /remote-control`. Alias : `/rc` |

133| `/remote-env` | Choisir l'[environnement cloud](/docs/fr/cloud-environments#select-an-environment-from-the-cli) par défaut pour les sessions cloud que vous démarrez à partir de l'interface de ligne de commande |133| `/remote-env` | Choisir l'[environnement cloud](/docs/fr/cloud-environments#select-an-environment-from-the-cli) par défaut pour les sessions cloud que vous démarrez à partir de l'interface de ligne de commande |

134| `/rename [name]` | Renommer la session actuelle et afficher le nom sur la barre d'invite. Sans nom, génère automatiquement un à partir de l'historique de conversation. Également disponible en mode non interactif (`-p`) ; nécessite Claude Code v2.1.205 ou ultérieur. À partir de chaque surface de renommage, y compris claude.ai et l'application de bureau, Claude Code remplace les caractères de contrôle et invisibles dans le nouveau nom par des espaces et limite le nom à 200 caractères. Si le nom est vide une fois les caractères invisibles supprimés, Claude Code le rejette et affiche `That name is empty once invisible characters are removed. Usage: /rename <name>`. Le remplacement de caractères et la limite de longueur nécessitent Claude Code v2.1.221 ou ultérieur. Si une autre session en direct sur cette machine utilise déjà un nom que vous passez, Claude Code applique [une variante de celui-ci](/docs/fr/sessions#name-your-sessions) à la place |134| `/rename [name]` | Renommer la session actuelle et afficher le nom sur la barre d'invite. Sans nom, génère automatiquement un à partir de l'historique de conversation. Également disponible en mode non interactif (`-p`) ; nécessite Claude Code v2.1.205 ou ultérieur. À partir de chaque surface de renommage, y compris claude.ai et l'application de bureau, Claude Code remplace les caractères de contrôle et invisibles dans le nouveau nom par des espaces et limite le nom à 200 caractères. Si le nom est vide une fois les caractères invisibles supprimés, Claude Code le rejette et affiche `That name is empty once invisible characters are removed. Usage: /rename <name>`. Le remplacement de caractères et la limite de longueur nécessitent Claude Code v2.1.221 ou ultérieur. Si une autre session en direct sur cette machine utilise déjà un nom que vous passez, Claude Code applique [une variante de celui-ci](/docs/fr/sessions#name-your-sessions) à la place |

135| `/resume [session]` | Reprendre une conversation par ID ou nom, ou ouvrir le sélecteur de session. Les [sessions en arrière-plan](/docs/fr/agent-view) apparaissent dans le sélecteur marquées avec `bg` ; une qui est encore en cours d'exécution ne peut pas être reprise ici, donc attachez-vous à partir de `claude agents` ou arrêtez-la d'abord. Alias : `/continue` |135| `/resume [session]` | Reprendre une conversation par ID ou nom, ou ouvrir le sélecteur de session. Les [sessions en arrière-plan](/docs/fr/agent-view) apparaissent dans le sélecteur marquées avec `bg`. Reprendre une qui est encore en cours d'exécution, à partir du sélecteur ou par ID ou nom, [ouvre cette session](/docs/fr/sessions#resume-a-running-background-session) : votre conversation actuelle se déplace en arrière-plan et ce terminal s'attache à celle en cours d'exécution. Appuyez sur `←` sur une invite vide pour revenir à la vue agent, qui répertorie également la conversation que vous avez laissée. Avant la v2.1.285, Claude Code refusait et vous disait d'ouvrir la session avec `claude attach` ou de l'arrêter d'abord. Alias : `/continue` |

136| `/review [low\|medium\|high\|xhigh\|max\|ultra] [--fix] [--comment] [pr#\|branch\|path]` | Alias de [`/code-review`](/docs/fr/code-review#review-a-diff-locally) : examine le diff actuel, ou un numéro de demande de fusion, une branche ou un chemin que vous passez, tel que `/review 1234`, et prend les mêmes niveaux d'effort et drapeaux. Sans niveau donné, l'examen réutilise le dernier niveau `low` à `max` que vous avez tapé ; consultez [Examiner un diff localement](/docs/fr/code-review#review-a-diff-locally) pour les règles exactes. Pour un examen cloud approfondi, utilisez [`/code-review ultra`](/docs/fr/ultrareview). Avant la v2.1.223, `/review` était une commande distincte qui exécutait un examen unique en lecture seule d'une demande de fusion GitHub par numéro, répertoriant les demandes de fusion ouvertes à choisir lorsqu'elle était exécutée sans argument ; de la v2.1.186 à la v2.1.201, elle exécutait le même moteur multi-agents que `/code-review medium` |136| `/review [low\|medium\|high\|xhigh\|max\|ultra] [--fix] [--comment] [pr#\|branch\|path]` | Alias de [`/code-review`](/docs/fr/code-review#review-a-diff-locally) : examine le diff actuel, ou un numéro de demande de fusion, une branche ou un chemin que vous passez, tel que `/review 1234`, et prend les mêmes niveaux d'effort et drapeaux. Sans niveau donné, l'examen réutilise le dernier niveau `low` à `max` que vous avez tapé ; consultez [Examiner un diff localement](/docs/fr/code-review#review-a-diff-locally) pour les règles exactes. Pour un examen cloud approfondi, utilisez [`/code-review ultra`](/docs/fr/ultrareview). Avant la v2.1.223, `/review` était une commande distincte qui exécutait un examen unique en lecture seule d'une demande de fusion GitHub par numéro, répertoriant les demandes de fusion ouvertes à choisir lorsqu'elle était exécutée sans argument ; de la v2.1.186 à la v2.1.201, elle exécutait le même moteur multi-agents que `/code-review medium` |

137| `/rewind` | Rembobiner la conversation et/ou le code à un point antérieur, ou résumer à partir d'un message sélectionné. Consultez [checkpointing](/docs/fr/checkpointing). Alias : `/checkpoint`, `/undo` |137| `/rewind` | Rembobiner la conversation et/ou le code à un point antérieur, ou résumer à partir d'un message sélectionné. Consultez [checkpointing](/docs/fr/checkpointing). Alias : `/checkpoint`, `/undo` |

138| `/run` | **[Skill](/docs/fr/skills#bundled-skills).** Lancer et piloter l'application de votre projet pour voir un changement fonctionner, pas seulement passer les tests. Consultez [Exécuter et vérifier votre application](/docs/fr/skills#run-and-verify-your-app) |138| `/run` | **[Skill](/docs/fr/skills#bundled-skills).** Lancer et piloter l'application de votre projet pour voir un changement fonctionner, pas seulement passer les tests. Consultez [Exécuter et vérifier votre application](/docs/fr/skills#run-and-verify-your-app) |

Details

1634 1634 

1635Si vous avez besoin d'une fenêtre plus grande plutôt qu'une conversation plus petite, les modèles Fable, Sonnet 5 et versions ultérieures, Opus 4.6 et versions ultérieures, et Sonnet 4.6 supportent une fenêtre de contexte de 1 million de jetons. Consultez [Contexte étendu](/docs/fr/model-config#extended-context) pour la disponibilité par plan et comment sélectionner une variante de modèle `[1m]`. La compaction fonctionne de la même manière à la limite plus grande.1635Si vous avez besoin d'une fenêtre plus grande plutôt qu'une conversation plus petite, les modèles Fable, Sonnet 5 et versions ultérieures, Opus 4.6 et versions ultérieures, et Sonnet 4.6 supportent une fenêtre de contexte de 1 million de jetons. Consultez [Contexte étendu](/docs/fr/model-config#extended-context) pour la disponibilité par plan et comment sélectionner une variante de modèle `[1m]`. La compaction fonctionne de la même manière à la limite plus grande.

1636 1636 

1637Sonnet 5.5 et Sonnet 5 s'exécutent avec la fenêtre de contexte 1M et n'ont pas de variante `[1m]` à sélectionner. Consultez [Fenêtre de contexte Sonnet 5.5 et Sonnet 5](/docs/fr/model-config#sonnet-5-5-and-sonnet-5-context-window) pour leurs seuils de compaction automatique et l'exception de la passerelle LLM.1637Sonnet 5.5 et Sonnet 5 s'exécutent avec la fenêtre de contexte 1M et n'ont pas de variante `[1m]` à sélectionner. Consultez [Fenêtre de contexte Sonnet 5.5 et Sonnet 5](/docs/fr/model-config#sonnet-5-5-and-sonnet-5-context-window) pour leurs seuils de compaction automatique, et [la fenêtre de contexte derrière une passerelle](/docs/fr/model-config#context-window-behind-a-gateway) pour savoir comment Claude Code dimensionne la fenêtre quand vous définissez `ANTHROPIC_BASE_URL` sur une [passerelle LLM](/docs/fr/llm-gateway).

1638 1638 

1639Le point où la compaction automatique s'exécute dépend de votre modèle et de votre configuration. Consultez [Default auto-compact thresholds](/docs/fr/model-config#default-auto-compact-thresholds) pour les limites par modèle, et [Correct the window for a gateway or custom model ID](/docs/fr/model-config#correct-the-window-for-a-gateway-or-custom-model-id) si Claude Code suppose la mauvaise fenêtre pour votre ID de modèle, comme un alias de [passerelle LLM](/docs/fr/llm-gateway).1639Le point où la compaction automatique s'exécute dépend de votre modèle et de votre configuration. Consultez [Default auto-compact thresholds](/docs/fr/model-config#default-auto-compact-thresholds) pour les limites par modèle, et [Correct the window for a gateway or custom model ID](/docs/fr/model-config#correct-the-window-for-a-gateway-or-custom-model-id) si Claude Code suppose la mauvaise fenêtre pour votre ID de modèle, comme un alias de [passerelle LLM](/docs/fr/llm-gateway).

1640 1640 

costs.md +1 −1

Details

51 51 

52Les défauts, les reconstructions attendues, et les parties chaudes ou froides de la ligne signifient ce qui suit :52Les défauts, les reconstructions attendues, et les parties chaudes ou froides de la ligne signifient ce qui suit :

53 53 

54* **Misses** : demandes qui ont retraité le contenu que le cache contenait déjà, avec l'heure du dernier défaut et le nombre de tokens que ces demandes ont réécrits dans le cache. Claude Code compte une demande comme un défaut quand la demande a retraité plus de 5 % et au moins 2 000 tokens de ce qu'elle aurait pu lire à partir du cache. [Les actions qui invalident le cache](/docs/fr/prompt-caching#actions-that-invalidate-the-cache) énumèrent les causes habituelles. Quand Claude Code peut identifier une cause probable du dernier défaut, la ligne la nomme aussi, par exemple `likely cause: tool definitions changed`. Le texte de cause probable nécessite Claude Code v2.1.260 ou version ultérieure.54* **Misses** : demandes qui ont retraité le contenu que le cache contenait déjà, avec l'heure du dernier défaut et le nombre de tokens que ces demandes ont réécrits dans le cache. [Les actions qui invalident le cache](/docs/fr/prompt-caching#actions-that-invalidate-the-cache) énumèrent les causes habituelles. Quand Claude Code peut identifier une cause probable du dernier défaut, la ligne la nomme aussi, par exemple `likely cause: tool definitions changed`. Le texte de cause probable nécessite Claude Code v2.1.260 ou version ultérieure.

55* **Expected rebuilds** : quand Claude Code a lui-même réécrit la conversation, par [compaction](/docs/fr/prompt-caching#compacting-the-conversation) ou en supprimant les anciens résultats d'outils du contexte, il compte le même type de défaut comme une reconstruction attendue à la place. Cette partie n'apparaît qu'après qu'au moins une reconstruction attendue s'est produite.55* **Expected rebuilds** : quand Claude Code a lui-même réécrit la conversation, par [compaction](/docs/fr/prompt-caching#compacting-the-conversation) ou en supprimant les anciens résultats d'outils du contexte, il compte le même type de défaut comme une reconstruction attendue à la place. Cette partie n'apparaît qu'après qu'au moins une reconstruction attendue s'est produite.

56* **Warm or cold** : si le préfixe mis en cache se trouve toujours dans sa [durée de vie du cache](/docs/fr/prompt-caching#cache-lifetime), avec le TTL en vigueur. Quand le cache est froid, la ligne affiche depuis combien de temps la session est inactive. Quand aucune réponse n'a rapporté de tokens de cache, la ligne se termine par `no prompt caching reported by the API` à la place.56* **Warm or cold** : si le préfixe mis en cache se trouve toujours dans sa [durée de vie du cache](/docs/fr/prompt-caching#cache-lifetime), avec le TTL en vigueur. Quand le cache est froid, la ligne affiche depuis combien de temps la session est inactive. Quand aucune réponse n'a rapporté de tokens de cache, la ligne se termine par `no prompt caching reported by the API` à la place.

57 57 

desktop.md +8 −0

Details

967 967 

968Pour déplacer une session CLI dans Desktop, exécutez `/desktop` dans le terminal. Claude enregistre votre session et l'ouvre dans l'application de bureau, puis quitte la CLI. Cette commande est disponible sur macOS et Windows x64 quand vous êtes connecté avec un abonnement Claude. Elle n'est pas disponible avec l'authentification par clé API ou sur Amazon Bedrock, Google Cloud's Agent Platform ou Microsoft Foundry.968Pour déplacer une session CLI dans Desktop, exécutez `/desktop` dans le terminal. Claude enregistre votre session et l'ouvre dans l'application de bureau, puis quitte la CLI. Cette commande est disponible sur macOS et Windows x64 quand vous êtes connecté avec un abonnement Claude. Elle n'est pas disponible avec l'authentification par clé API ou sur Amazon Bedrock, Google Cloud's Agent Platform ou Microsoft Foundry.

969 969 

970Depuis votre shell, [`claude --desktop`](/docs/fr/cli-reference#cli-flags) ouvre Desktop directement sans démarrer une session terminal. Cela nécessite Claude Code v2.1.285 ou ultérieur et a les mêmes exigences de plateforme et de connexion que `/desktop`. Sans autres arguments, il ouvre Desktop dans le répertoire courant. Pour ouvrir une session CLI existante dans Desktop, ajoutez `--continue` pour la conversation la plus récente dans ce répertoire, ou `--resume` avec l'ID de session que `/status` affiche :

971 

972```bash theme={null}

973claude --desktop --resume <session-id>

974```

975 

976Claude Code affiche `Opening session <session-id> in Claude Desktop`, la session s'ouvre dans l'application, et la commande se termine. Un nom de session ne fonctionne pas à la place de l'ID. Claude Code ne déplace pas une session qui est ouverte dans un autre terminal ou qui s'exécute toujours en arrière-plan. Si Claude Desktop n'est pas installé, la commande affiche un lien de téléchargement et se termine.

977 

970Vous pouvez également reprendre une session CLI depuis Desktop avec `/resume`. La commande est disponible dans les sessions locales, pas dans les sessions SSH, WSL ou cloud.978Vous pouvez également reprendre une session CLI depuis Desktop avec `/resume`. La commande est disponible dans les sessions locales, pas dans les sessions SSH, WSL ou cloud.

971 979 

972Pour continuer une session terminal dans Desktop :980Pour continuer une session terminal dans Desktop :

desktop-linux.md +12 −0

Details

163 163 

164Si `claude-desktop` se ferme avec ce message, vous l'avez lancé en tant que root. Connectez-vous en tant qu'utilisateur régulier et lancez-le à partir de là.164Si `claude-desktop` se ferme avec ce message, vous l'avez lancé en tant que root. Connectez-vous en tant qu'utilisateur régulier et lancez-le à partir de là.

165 165 

166<h3 id="your-sign-in-won’t-be-saved-on-this-device">

167 Votre connexion ne sera pas enregistrée sur cet appareil

168</h3>

169 

170Claude Desktop enregistre votre connexion dans le trousseau de clés de votre bureau, tel que GNOME Keyring ou KDE Wallet. S'il ne peut pas accéder à un trousseau de clés déverrouillé, votre connexion n'est pas enregistrée et vous vous connectez à nouveau chaque fois que vous lancez l'application. Choisissez le cas qui correspond à votre système :

171 

172* **Aucun trousseau de clés installé, sur un bureau autre que KDE Plasma** : si vous avez installé avec `--no-install-recommends`, ou sur une image minimale qui ignore les paquets recommandés, apt n'a pas installé de trousseau de clés. Installez GNOME Keyring avec `sudo apt install gnome-keyring`.

173* **KDE Plasma avec GNOME Keyring également installé** : KDE Wallet est fourni avec le bureau Plasma. Les deux trousseaux de clés entrent en conflit, et Claude Desktop peut afficher cet avis même si KDE Wallet fonctionne. Supprimez le supplémentaire avec `sudo apt remove gnome-keyring`, puis redémarrez votre ordinateur.

174* **Trousseau de clés installé mais verrouillé** : déverrouillez-le.

175 

176Après la correction, redémarrez l'application et connectez-vous. Ensuite, quittez et lancez-la à nouveau pour confirmer que l'application s'ouvre avec vous toujours connecté.

177 

166<h3 id="cowork-isn’t-available">178<h3 id="cowork-isn’t-available">

167 Cowork n'est pas disponible179 Cowork n'est pas disponible

168</h3>180</h3>

env-vars.md +7 −5

Details

56 </Tab>56 </Tab>

57</Tabs>57</Tabs>

58 58 

59La ligne d'assignation n'affiche rien en cas de succès, donc confirmez que la variable est définie en l'affichant dans le même shell avant d'exécuter `claude` :59La ligne d'assignation n'affiche rien en cas de succès. Pour confirmer que la variable est définie, affichez-la dans le même shell :

60 60 

61<Tabs>61<Tabs>

62 <Tab title="macOS, Linux, WSL">62 <Tab title="macOS, Linux, WSL">


127Les variables numériques telles que les délais d'expiration, les budgets de jetons et les nombres de tentatives acceptent la notation scientifique et les orthographes avec séparateurs de chiffres en plus des chiffres simples, sauf si la ligne d'une variable indique qu'elle n'accepte que des chiffres simples. Par exemple, Claude Code lit `2e3` comme 2000 et `64_000` comme 64000. Avant la v2.1.211, ces orthographes pouvaient définir silencieusement une valeur beaucoup plus petite, comme `1e6` définissant un délai d'expiration à 1.127Les variables numériques telles que les délais d'expiration, les budgets de jetons et les nombres de tentatives acceptent la notation scientifique et les orthographes avec séparateurs de chiffres en plus des chiffres simples, sauf si la ligne d'une variable indique qu'elle n'accepte que des chiffres simples. Par exemple, Claude Code lit `2e3` comme 2000 et `64_000` comme 64000. Avant la v2.1.211, ces orthographes pouvaient définir silencieusement une valeur beaucoup plus petite, comme `1e6` définissant un délai d'expiration à 1.

128 128 

129<Note>129<Note>

130 Pour les variables qui activent ou désactivent un comportement, définissez `1` ou `true` pour l'activer et `0` ou `false` pour le désactiver, en n'importe quelle casse.130 Pour les variables qui activent ou désactivent un comportement, définissez `1`, `true`, `yes` ou `on` pour l'activer et `0`, `false`, `no` ou `off` pour le désactiver, en n'importe quelle casse.

131 131 

132 Certaines variables ne lisent que si vous les avez définies, donc toute valeur non vide, y compris `0`, active le comportement, et vous désactivez le comportement en supprimant la variable ou en la définissant sur une valeur vide. Ces variables fonctionnent de cette façon :132 Certaines variables ne lisent que si vous les avez définies, donc toute valeur non vide, y compris `0`, active le comportement, et vous désactivez le comportement en supprimant la variable ou en la définissant sur une valeur vide. Ces variables fonctionnent de cette façon :

133 133 


192| `API_FORCE_IDLE_TIMEOUT` | Remplacez le délai d'inactivité du corps de 5 minutes qui interrompt une réponse de modèle en continu lorsqu'aucun octet n'arrive. Définissez sur `0` pour désactiver le délai d'expiration, par exemple lorsqu'une [passerelle](/docs/fr/llm-gateway) lente ou un modèle local fait une pause plus longue que 5 minutes entre les chunks, ou `1` pour le maintenir activé pour chaque fournisseur. Lorsqu'il n'est pas défini, le délai d'expiration est actif sur les fournisseurs autres que l'API Anthropic directe, [Claude Platform on AWS](/docs/fr/claude-platform-on-aws) et Amazon Bedrock avec `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` défini. Les [chiens de garde de flux](/docs/fr/network-config#streaming-idle-watchdogs) s'exécutent indépendamment et interrompent une longue pause silencieuse même lorsque vous définissez `0` ici |192| `API_FORCE_IDLE_TIMEOUT` | Remplacez le délai d'inactivité du corps de 5 minutes qui interrompt une réponse de modèle en continu lorsqu'aucun octet n'arrive. Définissez sur `0` pour désactiver le délai d'expiration, par exemple lorsqu'une [passerelle](/docs/fr/llm-gateway) lente ou un modèle local fait une pause plus longue que 5 minutes entre les chunks, ou `1` pour le maintenir activé pour chaque fournisseur. Lorsqu'il n'est pas défini, le délai d'expiration est actif sur les fournisseurs autres que l'API Anthropic directe, [Claude Platform on AWS](/docs/fr/claude-platform-on-aws) et Amazon Bedrock avec `CLAUDE_ENABLE_BYTE_WATCHDOG_BEDROCK=1` défini. Les [chiens de garde de flux](/docs/fr/network-config#streaming-idle-watchdogs) s'exécutent indépendamment et interrompent une longue pause silencieuse même lorsque vous définissez `0` ici |

193| `API_TIMEOUT_MS` | Délai d'expiration pour les requêtes API en millisecondes (par défaut : 600000, ou 10 minutes ; maximum : 2147483647). Augmentez ceci lorsque les requêtes expirent sur les réseaux lents ou lors du routage via un proxy. Les valeurs au-dessus du maximum débordent du minuteur sous-jacent et causent l'échec immédiat des requêtes |193| `API_TIMEOUT_MS` | Délai d'expiration pour les requêtes API en millisecondes (par défaut : 600000, ou 10 minutes ; maximum : 2147483647). Augmentez ceci lorsque les requêtes expirent sur les réseaux lents ou lors du routage via un proxy. Les valeurs au-dessus du maximum débordent du minuteur sous-jacent et causent l'échec immédiat des requêtes |

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

195| `BASH_DEFAULT_TIMEOUT_MS` | Délai d'expiration par défaut pour une commande Bash ou PowerShell au premier plan, en millisecondes (par défaut : 120000, ou 2 minutes). Un délai par défaut plus long que 30 minutes devient également la [limite de temps par défaut pour les commandes d'arrière-plan](/docs/fr/tools-reference#background-commands). La limite de temps d'arrière-plan nécessite Claude Code v2.1.285 ou ultérieur |195| `BASH_DEFAULT_TIMEOUT_MS` | Délai d'expiration par défaut pour une commande Bash ou PowerShell au premier plan, en millisecondes (par défaut : 120000, ou 2 minutes). Un délai par défaut plus long que 30 minutes devient également la [limite de temps par défaut pour les commandes d'arrière-plan](/docs/fr/tools-reference#time-limit-for-background-commands). La limite de temps d'arrière-plan nécessite Claude Code v2.1.285 ou ultérieur |

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

197| `BASH_MAX_TIMEOUT_MS` | Délai d'expiration maximum que le modèle peut définir pour une commande Bash ou PowerShell au premier plan, en millisecondes (par défaut : 600000, ou 10 minutes). Le plafond effectif est le plus grand de ceci et de `BASH_DEFAULT_TIMEOUT_MS`. Un plafond effectif plus long que 2 heures devient également le maximum [limite de temps pour les commandes d'arrière-plan](/docs/fr/tools-reference#background-commands). La limite de temps d'arrière-plan nécessite Claude Code v2.1.285 ou ultérieur |197| `BASH_MAX_TIMEOUT_MS` | Délai d'expiration maximum que le modèle peut définir pour une commande Bash ou PowerShell au premier plan, en millisecondes (par défaut : 600000, ou 10 minutes). Le plafond effectif est le plus grand de ceci et de `BASH_DEFAULT_TIMEOUT_MS`. Un plafond effectif plus long que 2 heures devient également le maximum [limite de temps pour les commandes d'arrière-plan](/docs/fr/tools-reference#time-limit-for-background-commands). La limite de temps d'arrière-plan nécessite Claude Code v2.1.285 ou ultérieur |

198| `BETA_TRACING_ENDPOINT` | Point de terminaison OTLP pour [le traçage bêta détaillé](/docs/fr/monitoring-usage#traces-beta) : avec `ENABLE_BETA_TRACING_DETAILED=1`, les journaux et les traces vont là au lieu des exportateurs configurés. Définissez-le dans votre shell, vos paramètres utilisateur ou vos paramètres gérés. Ignoré dans [les paramètres de projet et locaux](/docs/fr/settings-reference#variables-claude-code-ignores-in-env) |198| `BETA_TRACING_ENDPOINT` | Point de terminaison OTLP pour [le traçage bêta détaillé](/docs/fr/monitoring-usage#traces-beta) : avec `ENABLE_BETA_TRACING_DETAILED=1`, les journaux et les traces vont là au lieu des exportateurs configurés. Définissez-le dans votre shell, vos paramètres utilisateur ou vos paramètres gérés. Ignoré dans [les paramètres de projet et locaux](/docs/fr/settings-reference#variables-claude-code-ignores-in-env) |

199| `CCR_FORCE_BUNDLE` | Définissez sur `1` pour forcer [`claude --cloud`](/docs/fr/claude-code-on-the-web#send-local-repositories-without-github) à regrouper et télécharger votre référentiel local au lieu de le cloner à partir de son distant |199| `CCR_FORCE_BUNDLE` | Définissez sur `1` pour forcer [`claude --cloud`](/docs/fr/claude-code-on-the-web#send-local-repositories-without-github) à regrouper et télécharger votre référentiel local au lieu de le cloner à partir de son distant |

200| `CLAUDECODE` | Définissez sur `1` dans les sous-processus que Claude Code génère (outils Bash et PowerShell, sessions tmux, commandes [hook](/docs/fr/hooks), commandes [ligne d'état](/docs/fr/statusline), sous-processus [serveur MCP](/docs/fr/mcp) stdio). Les extensions IDE définissent également ceci dans leurs terminaux intégrés. Utilisez pour détecter quand un script s'exécute à l'intérieur d'un sous-processus généré par Claude Code. Pour vérifier si le processus actuel a été généré directement par un appel d'outil ou un hook, plutôt qu'à l'intérieur d'un serveur MCP stdio que Claude Code a démarré, utilisez `CLAUDE_CODE_CHILD_SESSION` à la place |200| `CLAUDECODE` | Définissez sur `1` dans les sous-processus que Claude Code génère (outils Bash et PowerShell, sessions tmux, commandes [hook](/docs/fr/hooks), commandes [ligne d'état](/docs/fr/statusline), sous-processus [serveur MCP](/docs/fr/mcp) stdio). Les extensions IDE définissent également ceci dans leurs terminaux intégrés. Utilisez pour détecter quand un script s'exécute à l'intérieur d'un sous-processus généré par Claude Code. Pour vérifier si le processus actuel a été généré directement par un appel d'outil ou un hook, plutôt qu'à l'intérieur d'un serveur MCP stdio que Claude Code a démarré, utilisez `CLAUDE_CODE_CHILD_SESSION` à la place |


263| `CLAUDE_CODE_DISABLE_FILE_CHECKPOINTING` | Définissez sur `1` pour désactiver le [point de contrôle](/docs/fr/checkpointing) de fichier. La commande `/rewind` ne pourra pas restaurer les modifications de code. Remplace le paramètre [`fileCheckpointingEnabled`](/docs/fr/settings-reference#filecheckpointingenabled) |263| `CLAUDE_CODE_DISABLE_FILE_CHECKPOINTING` | Définissez sur `1` pour désactiver le [point de contrôle](/docs/fr/checkpointing) de fichier. La commande `/rewind` ne pourra pas restaurer les modifications de code. Remplace le paramètre [`fileCheckpointingEnabled`](/docs/fr/settings-reference#filecheckpointingenabled) |

264| `CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS` | Définissez sur `1` pour supprimer les instructions de flux de travail de commit et PR intégrées et l'instantané d'état git du contexte de Claude. Utile lors de l'utilisation de vos propres compétences de flux de travail git. A la priorité sur le paramètre [`includeGitInstructions`](/docs/fr/settings-reference#includegitinstructions) lorsqu'il est défini |264| `CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS` | Définissez sur `1` pour supprimer les instructions de flux de travail de commit et PR intégrées et l'instantané d'état git du contexte de Claude. Utile lors de l'utilisation de vos propres compétences de flux de travail git. A la priorité sur le paramètre [`includeGitInstructions`](/docs/fr/settings-reference#includegitinstructions) lorsqu'il est défini |

265| `CLAUDE_CODE_DISABLE_LEGACY_MODEL_REMAP` | Définissez sur `1` pour empêcher le remappage automatique d'Opus 4.0 et 4.1 à la version Opus actuelle sur l'API Anthropic. Utilisez lorsque vous souhaitez intentionnellement épingler un modèle plus ancien. Le remappage ne s'exécute pas sur Amazon Bedrock, Google Cloud's Agent Platform ou Microsoft Foundry |265| `CLAUDE_CODE_DISABLE_LEGACY_MODEL_REMAP` | Définissez sur `1` pour empêcher le remappage automatique d'Opus 4.0 et 4.1 à la version Opus actuelle sur l'API Anthropic. Utilisez lorsque vous souhaitez intentionnellement épingler un modèle plus ancien. Le remappage ne s'exécute pas sur Amazon Bedrock, Google Cloud's Agent Platform ou Microsoft Foundry |

266| `CLAUDE_CODE_DISABLE_MODEL_ACCESS_FALLBACK` | Définissez sur `1` pour arrêter Claude Code sur [Amazon Bedrock](/docs/fr/amazon-bedrock#when-a-model-is-disabled-mid-session) et [Google Cloud's Agent Platform](/docs/fr/google-vertex-ai#when-a-model-is-disabled-mid-session) de basculer vers un modèle plus ancien lorsque votre compte perd l'accès au modèle d'une session au milieu de la session ; la requête refusée échoue immédiatement à la place. Une [chaîne de modèle de secours](/docs/fr/model-config#fallback-model-chains) que vous configurez bascule toujours sur ce refus, et les [vérifications du modèle de démarrage](/docs/fr/amazon-bedrock#startup-model-checks) basculent toujours au lancement. Nécessite Claude Code v2.1.285 ou ultérieur |

266| `CLAUDE_CODE_DISABLE_MOUSE` | Définissez sur `1` pour désactiver le suivi de la souris en [rendu plein écran](/docs/fr/fullscreen). Le défilement au clavier avec `PgUp` et `PgDn` fonctionne toujours. Utilisez ceci pour garder le comportement de copie à la sélection natif de votre terminal |267| `CLAUDE_CODE_DISABLE_MOUSE` | Définissez sur `1` pour désactiver le suivi de la souris en [rendu plein écran](/docs/fr/fullscreen). Le défilement au clavier avec `PgUp` et `PgDn` fonctionne toujours. Utilisez ceci pour garder le comportement de copie à la sélection natif de votre terminal |

267| `CLAUDE_CODE_DISABLE_MOUSE_CLICKS` | Définissez sur `1` pour désactiver le clic, le glissement et la gestion du survol en [rendu plein écran](/docs/fr/fullscreen) tout en gardant le défilement à la molette de la souris. Utilisez ceci lorsque vous souhaitez que le défilement à la molette fonctionne à l'intérieur de Claude Code mais que vous ne souhaitez pas que les clics positionnent le curseur, développent la sortie de l'outil ou ouvrent les liens. `CLAUDE_CODE_DISABLE_MOUSE` a la priorité lorsque les deux sont définis. Nécessite Claude Code v2.1.195 ou ultérieur |268| `CLAUDE_CODE_DISABLE_MOUSE_CLICKS` | Définissez sur `1` pour désactiver le clic, le glissement et la gestion du survol en [rendu plein écran](/docs/fr/fullscreen) tout en gardant le défilement à la molette de la souris. Utilisez ceci lorsque vous souhaitez que le défilement à la molette fonctionne à l'intérieur de Claude Code mais que vous ne souhaitez pas que les clics positionnent le curseur, développent la sortie de l'outil ou ouvrent les liens. `CLAUDE_CODE_DISABLE_MOUSE` a la priorité lorsque les deux sont définis. Nécessite Claude Code v2.1.195 ou ultérieur |

268| `CLAUDE_CODE_DISABLE_MTLS_RELOAD_ON_STALE_CONNECTION` | Définissez sur `1` pour empêcher Claude Code de relire le [certificat client mTLS et la clé](/docs/fr/network-config#mtls-authentication) lorsqu'une requête API échoue avec une erreur au niveau de la connexion, comme une réinitialisation de connexion ou une erreur de poignée de main TLS. Avec le rechargement désactivé, Claude Code charge les fichiers pivotés uniquement lorsqu'il applique ensuite les paramètres ou au prochain démarrage. Nécessite Claude Code v2.1.232 ou ultérieur |269| `CLAUDE_CODE_DISABLE_MTLS_RELOAD_ON_STALE_CONNECTION` | Définissez sur `1` pour empêcher Claude Code de relire le [certificat client mTLS et la clé](/docs/fr/network-config#mtls-authentication) lorsqu'une requête API échoue avec une erreur au niveau de la connexion, comme une réinitialisation de connexion ou une erreur de poignée de main TLS. Avec le rechargement désactivé, Claude Code charge les fichiers pivotés uniquement lorsqu'il applique ensuite les paramètres ou au prochain démarrage. Nécessite Claude Code v2.1.232 ou ultérieur |


355| `CLAUDE_CODE_PROJECT_DIR_NAME` | Défini avec `CLAUDE_CONFIG_DIR` pour choisir le nom du répertoire `projects/` où Claude Code stocke les transcriptions et la mémoire automatique de cette session, à la place d'un dérivé du chemin du répertoire de travail. Par exemple, démarrer Claude Code avec `CLAUDE_CONFIG_DIR=/srv/tenant-a CLAUDE_CODE_PROJECT_DIR_NAME=work claude` les stocke sous `/srv/tenant-a/projects/work/`. Claude Code ignore cette variable lorsque `CLAUDE_CONFIG_DIR` n'est pas défini, et la lit uniquement à partir de l'environnement à partir duquel vous démarrez `claude`, jamais à partir d'un bloc `env` du fichier de paramètres. Voir [Nommer le répertoire du projet vous-même](/docs/fr/sessions#name-the-project-directory-yourself). Nécessite Claude Code v2.1.234 ou ultérieur |356| `CLAUDE_CODE_PROJECT_DIR_NAME` | Défini avec `CLAUDE_CONFIG_DIR` pour choisir le nom du répertoire `projects/` où Claude Code stocke les transcriptions et la mémoire automatique de cette session, à la place d'un dérivé du chemin du répertoire de travail. Par exemple, démarrer Claude Code avec `CLAUDE_CONFIG_DIR=/srv/tenant-a CLAUDE_CODE_PROJECT_DIR_NAME=work claude` les stocke sous `/srv/tenant-a/projects/work/`. Claude Code ignore cette variable lorsque `CLAUDE_CONFIG_DIR` n'est pas défini, et la lit uniquement à partir de l'environnement à partir duquel vous démarrez `claude`, jamais à partir d'un bloc `env` du fichier de paramètres. Voir [Nommer le répertoire du projet vous-même](/docs/fr/sessions#name-the-project-directory-yourself). Nécessite Claude Code v2.1.234 ou ultérieur |

356| `CLAUDE_CODE_PROMPT_CACHE_TTL` | Définissez `5m` ou `1h`, les seules valeurs que Claude Code accepte, pour choisir la [TTL du cache d'invite](/docs/fr/prompt-caching#cache-lifetime) pour la conversation principale : vos tours interactifs, `-p` et SDK, plus les assistants qui s'exécutent en ligne avec eux. A la priorité sur le paramètre `promptCacheTtl` et sur `ENABLE_PROMPT_CACHING_1H`, et `FORCE_PROMPT_CACHING_5M` le remplace. L'API facture les écritures de cache d'une heure à un taux plus élevé. Nécessite Claude Code v2.1.242 ou ultérieur |357| `CLAUDE_CODE_PROMPT_CACHE_TTL` | Définissez `5m` ou `1h`, les seules valeurs que Claude Code accepte, pour choisir la [TTL du cache d'invite](/docs/fr/prompt-caching#cache-lifetime) pour la conversation principale : vos tours interactifs, `-p` et SDK, plus les assistants qui s'exécutent en ligne avec eux. A la priorité sur le paramètre `promptCacheTtl` et sur `ENABLE_PROMPT_CACHING_1H`, et `FORCE_PROMPT_CACHING_5M` le remplace. L'API facture les écritures de cache d'une heure à un taux plus élevé. Nécessite Claude Code v2.1.242 ou ultérieur |

357| `CLAUDE_CODE_PROPAGATE_TRACEPARENT` | Définissez sur `1` pour propager le contexte de trace W3C lorsque `ANTHROPIC_BASE_URL` pointe vers un proxy personnalisé. La propagation couvre l'en-tête `traceparent` sur les requêtes de modèle et MCP HTTP et la variable d'environnement `TRACEPARENT` pour les sous-processus Bash, PowerShell et hook. Par défaut, la propagation est activée uniquement lorsqu'elle est connectée directement à l'API Anthropic. Ajouté dans v2.1.152. Voir [Traces (bêta)](/docs/fr/monitoring-usage#traces-beta) |358| `CLAUDE_CODE_PROPAGATE_TRACEPARENT` | Définissez sur `1` pour propager le contexte de trace W3C lorsque `ANTHROPIC_BASE_URL` pointe vers un proxy personnalisé. La propagation couvre l'en-tête `traceparent` sur les requêtes de modèle et MCP HTTP et la variable d'environnement `TRACEPARENT` pour les sous-processus Bash, PowerShell et hook. Par défaut, la propagation est activée uniquement lorsqu'elle est connectée directement à l'API Anthropic. Ajouté dans v2.1.152. Voir [Traces (bêta)](/docs/fr/monitoring-usage#traces-beta) |

358| `CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST` | Défini par les plates-formes hôtes qui intègrent Claude Code et gèrent le routage du fournisseur de modèles en son nom. Lorsqu'il est défini, Claude Code ignore les variables de sélection du fournisseur, de point de terminaison et d'authentification telles que `CLAUDE_CODE_USE_BEDROCK`, `ANTHROPIC_BASE_URL` et `ANTHROPIC_API_KEY` dans les fichiers de paramètres, afin que les paramètres utilisateur ne puissent pas remplacer le routage de l'hôte. Claude Code ignore également les clés de sélection de modèle telles que `model`, `fallbackModel` et `modelOverrides` dans les [paramètres gérés](/docs/fr/managed-settings), quelle que soit la source gérée qui les livre, afin que la configuration du modèle de l'hôte ait la priorité sur une épingle de modèle obsolète. Claude Code ignore également les variables de sélection de modèle telles que `ANTHROPIC_MODEL` et la famille `ANTHROPIC_DEFAULT_*_MODEL` dans un bloc `env` géré ; une liste d'autorisation [`availableModels`](/docs/fr/model-config#restrict-model-selection) dans les paramètres gérés s'applique toujours sauf si l'hôte fournit la sienne. Claude Code ignore également l'opt-out de télémétrie automatique qu'il applique autrement sur les fournisseurs tiers tels que Amazon Bedrock, Claude Platform on AWS, Google Cloud's Agent Platform et Microsoft Foundry, afin que la télémétrie suive l'opt-out standard `DISABLE_TELEMETRY`. Voir [Comportements par défaut par fournisseur API](/docs/fr/data-usage#default-behaviors-by-api-provider) |359| `CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST` | Défini par les plates-formes hôtes qui intègrent Claude Code et gèrent le routage du fournisseur de modèles en son nom. Lorsqu'il est défini, Claude Code ignore les variables de sélection du fournisseur, de point de terminaison et d'authentification telles que `CLAUDE_CODE_USE_BEDROCK`, `ANTHROPIC_BASE_URL` et `ANTHROPIC_API_KEY` dans les fichiers de paramètres, afin que les paramètres utilisateur ne puissent pas remplacer le routage de l'hôte. Claude Code ignore également les clés de sélection de modèle telles que `model`, `fallbackModel` et `modelOverrides` dans les [paramètres gérés](/docs/fr/managed-settings), quelle que soit la source gérée qui les livre, afin que la configuration du modèle de l'hôte ait la priorité sur une épingle de modèle obsolète. Claude Code ignore également les variables de sélection de modèle telles que `ANTHROPIC_MODEL` et la famille `ANTHROPIC_DEFAULT_*_MODEL` dans un bloc `env` géré ; une liste d'autorisation [`availableModels`](/docs/fr/settings-reference#availablemodels) dans les paramètres gérés s'applique toujours sauf si l'hôte fournit la sienne. Claude Code ignore également l'opt-out de télémétrie automatique qu'il applique autrement sur les fournisseurs tiers tels que Amazon Bedrock, Claude Platform on AWS, Google Cloud's Agent Platform et Microsoft Foundry, afin que la télémétrie suive l'opt-out standard `DISABLE_TELEMETRY`. Voir [Comportements par défaut par fournisseur API](/docs/fr/data-usage#default-behaviors-by-api-provider) |

359| `CLAUDE_CODE_PROXY_RESOLVES_HOSTS` | Définissez sur `1` pour permettre au proxy d'effectuer la résolution DNS au lieu de l'appelant. Opt-in pour les environnements où le proxy doit gérer la résolution du nom d'hôte |360| `CLAUDE_CODE_PROXY_RESOLVES_HOSTS` | Définissez sur `1` pour permettre au proxy d'effectuer la résolution DNS au lieu de l'appelant. Opt-in pour les environnements où le proxy doit gérer la résolution du nom d'hôte |

360| `CLAUDE_CODE_REMOTE` | Défini automatiquement sur `true` lorsque Claude Code s'exécute en tant que [session cloud](/docs/fr/claude-code-on-the-web). Lisez ceci à partir d'un crochet ou d'un script de configuration pour détecter si vous êtes dans une session cloud |361| `CLAUDE_CODE_REMOTE` | Défini automatiquement sur `true` lorsque Claude Code s'exécute en tant que [session cloud](/docs/fr/claude-code-on-the-web). Lisez ceci à partir d'un crochet ou d'un script de configuration pour détecter si vous êtes dans une session cloud |

361| `CLAUDE_CODE_REMOTE_SESSION_ID` | Défini automatiquement dans les [sessions cloud](/docs/fr/claude-code-on-the-web) à l'ID de la session actuelle. Lisez ceci pour construire un lien vers la transcription de la session. Voir [Lier la sortie à la session](/docs/fr/cloud-environments#link-output-back-to-the-session) |362| `CLAUDE_CODE_REMOTE_SESSION_ID` | Défini automatiquement dans les [sessions cloud](/docs/fr/claude-code-on-the-web) à l'ID de la session actuelle. Lisez ceci pour construire un lien vers la transcription de la session. Voir [Lier la sortie à la session](/docs/fr/cloud-environments#link-output-back-to-the-session) |


381| `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK` | Définissez sur `1` pour ignorer la vérification de disponibilité du [mode rapide](/docs/fr/fast-mode#use-fast-mode-behind-proxies-and-llm-gateways) côté client, pour les proxies qui interceptent la requête de la vérification plutôt que de la refuser. L'API rejette toujours les requêtes en mode rapide lorsque votre organisation a le mode rapide désactivé |382| `CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK` | Définissez sur `1` pour ignorer la vérification de disponibilité du [mode rapide](/docs/fr/fast-mode#use-fast-mode-behind-proxies-and-llm-gateways) côté client, pour les proxies qui interceptent la requête de la vérification plutôt que de la refuser. L'API rejette toujours les requêtes en mode rapide lorsque votre organisation a le mode rapide désactivé |

382| `CLAUDE_CODE_SKIP_FOUNDRY_AUTH` | Ignorez l'authentification Azure pour Microsoft Foundry, pour un proxy ou une passerelle qui injecte son propre en-tête `Authorization`. Claude Code envoie les requêtes sans identifiant Azure et préserve l'en-tête `Authorization` que vous fournissez, par exemple via `ANTHROPIC_CUSTOM_HEADERS`. Ignoré lorsque `ANTHROPIC_FOUNDRY_API_KEY` ou `ANTHROPIC_FOUNDRY_AUTH_TOKEN` est défini. Avant v2.1.203, cette variable laissait le client Microsoft Foundry incapable d'envoyer des requêtes sauf si une clé API était également définie |383| `CLAUDE_CODE_SKIP_FOUNDRY_AUTH` | Ignorez l'authentification Azure pour Microsoft Foundry, pour un proxy ou une passerelle qui injecte son propre en-tête `Authorization`. Claude Code envoie les requêtes sans identifiant Azure et préserve l'en-tête `Authorization` que vous fournissez, par exemple via `ANTHROPIC_CUSTOM_HEADERS`. Ignoré lorsque `ANTHROPIC_FOUNDRY_API_KEY` ou `ANTHROPIC_FOUNDRY_AUTH_TOKEN` est défini. Avant v2.1.203, cette variable laissait le client Microsoft Foundry incapable d'envoyer des requêtes sauf si une clé API était également définie |

383| `CLAUDE_CODE_SKIP_MANTLE_AUTH` | Ignorez l'authentification AWS pour Amazon Bedrock Mantle (par exemple, lors de l'utilisation d'une passerelle LLM) |384| `CLAUDE_CODE_SKIP_MANTLE_AUTH` | Ignorez l'authentification AWS pour Amazon Bedrock Mantle (par exemple, lors de l'utilisation d'une passerelle LLM) |

385| `CLAUDE_CODE_SKIP_MODEL_ACCESS_MEMORY` | Les [vérifications du modèle de démarrage](/docs/fr/amazon-bedrock#startup-model-checks) sur [Amazon Bedrock](/docs/fr/amazon-bedrock) et [Google Cloud's Agent Platform](/docs/fr/google-vertex-ai) se souviennent sur cette machine quels modèles ils ont trouvé que votre compte ne peut pas invoquer, pendant jusqu'à un jour. Définissez sur `1` pour désactiver cette mémoire. Nécessite Claude Code v2.1.285 ou ultérieur |

384| `CLAUDE_CODE_SKIP_PROMPT_HISTORY` | Définissez sur `1` pour ignorer l'écriture de l'historique des invites et des transcriptions de session sur le disque. Les sessions démarrées avec cette variable définie n'apparaissent pas dans `--resume`, `--continue` ou l'historique de la flèche vers le haut. Utile pour les sessions de script éphémères |386| `CLAUDE_CODE_SKIP_PROMPT_HISTORY` | Définissez sur `1` pour ignorer l'écriture de l'historique des invites et des transcriptions de session sur le disque. Les sessions démarrées avec cette variable définie n'apparaissent pas dans `--resume`, `--continue` ou l'historique de la flèche vers le haut. Utile pour les sessions de script éphémères |

385| `CLAUDE_CODE_SKIP_VERTEX_AUTH` | Ignorez l'authentification Google pour Google Cloud's Agent Platform (par exemple, lors de l'utilisation d'une passerelle LLM) |387| `CLAUDE_CODE_SKIP_VERTEX_AUTH` | Ignorez l'authentification Google pour Google Cloud's Agent Platform (par exemple, lors de l'utilisation d'une passerelle LLM) |

386| `CLAUDE_CODE_STARTUP_FAILURE_RESULTS` | Définissez sur `1` pour qu'une session démarrée avec `--output-format stream-json` écrive un [message de résultat nommant pourquoi Claude Code a refusé de démarrer](/docs/fr/agent-sdk/typescript#startup_failure_reason) pour les défaillances de démarrage qui se terminent autrement avec stderr seul. Nécessite Claude Code v2.1.274 ou ultérieur |388| `CLAUDE_CODE_STARTUP_FAILURE_RESULTS` | Définissez sur `1` pour qu'une session démarrée avec `--output-format stream-json` écrive un [message de résultat nommant pourquoi Claude Code a refusé de démarrer](/docs/fr/agent-sdk/typescript#startup_failure_reason) pour les défaillances de démarrage qui se terminent autrement avec stderr seul. Nécessite Claude Code v2.1.274 ou ultérieur |

errors.md +62 −34

Details

322| `Transcript writes are failing (...)` | [Avertissements d'enregistrement de session](#transcript-writes-are-failing) |322| `Transcript writes are failing (...)` | [Avertissements d'enregistrement de session](#transcript-writes-are-failing) |

323| `Transcript saving is off — CLAUDE_CODE_SKIP_PROMPT_HISTORY is set` | [Avertissements d'enregistrement de session](#transcript-saving-is-off-skip-prompt-history) |323| `Transcript saving is off — CLAUDE_CODE_SKIP_PROMPT_HISTORY is set` | [Avertissements d'enregistrement de session](#transcript-saving-is-off-skip-prompt-history) |

324| `Transcript saving is off — inherited CLAUDE_CODE_CHILD_SESSION marker` | [Avertissements d'enregistrement de session](#transcript-saving-is-off-child-session-marker) |324| `Transcript saving is off — inherited CLAUDE_CODE_CHILD_SESSION marker` | [Avertissements d'enregistrement de session](#transcript-saving-is-off-child-session-marker) |

325| `Claude Code's fullscreen renderer didn't finish starting last time on this machine` / `Claude Code's fullscreen renderer has repeatedly failed to start on this machine` | [Avertissements de configuration](#fullscreen-failed-start-notice) |325| `Claude Code's fullscreen renderer didn't finish starting last time on this machine` / `Claude Code's fullscreen renderer has repeatedly failed to start on this machine` | [Rendu en plein écran](/docs/fr/fullscreen#fullscreen-renderer-didnt-finish-starting) |

326| `Claude Code exited after an unrecoverable interface error (...)` | [Avertissements de configuration](#exited-after-an-unrecoverable-interface-error) |326| `Claude Code exited after an unrecoverable interface error (...)` | [Avertissements de configuration](#exited-after-an-unrecoverable-interface-error) |

327| `Agent descriptions are over the 15.0k-token limit` | [Avertissements de configuration](#agent-descriptions-are-over-the-15000-token-limit) |327| `Agent descriptions are over the 15.0k-token limit` | [Avertissements de configuration](#agent-descriptions-are-over-the-15000-token-limit) |

328| `Not loaded: rename <path>, then restart — its name uses "<name>", a name reserved for the skills synced from your claude.ai account` | [Avertissements de configuration](#a-skill-command-or-workflow-wasnt-loaded-because-its-name-is-reserved) |328| `Not loaded: rename <path>, then restart — its name uses "<name>", a name reserved for the skills synced from your claude.ai account` | [Avertissements de configuration](#a-skill-command-or-workflow-wasnt-loaded-because-its-name-is-reserved) |


331| `Remote managed settings failed to load (<cause>)` | [Avertissements de configuration](#remote-managed-settings-failed-to-load) |331| `Remote managed settings failed to load (<cause>)` | [Avertissements de configuration](#remote-managed-settings-failed-to-load) |

332| `Managed settings were not approved; exiting without applying them.` | [Avertissements de configuration](#managed-settings-were-not-approved) |332| `Managed settings were not approved; exiting without applying them.` | [Avertissements de configuration](#managed-settings-were-not-approved) |

333| `Claude Code can't start: your organization's managed settings block the default model` / `Claude Code can't start: your organization allows only the models listed in "availableModels"` | [Avertissements de configuration](#managed-settings-block-the-default-model) |333| `Claude Code can't start: your organization's managed settings block the default model` / `Claude Code can't start: your organization allows only the models listed in "availableModels"` | [Avertissements de configuration](#managed-settings-block-the-default-model) |

334| `Your organization's managed settings allow Claude Code to use: <providers>` | [Avertissements de configuration](#managed-settings-dont-allow-this-api-provider) |

335| `Your organization's managed settings allow Claude Code to use no API provider at all` | [Avertissements de configuration](#managed-settings-dont-allow-this-api-provider) |

334| `MCP server <name> is blocked by enterprise managed policy` | [Avertissements de configuration](#mcp-server-is-blocked-by-enterprise-managed-policy) |336| `MCP server <name> is blocked by enterprise managed policy` | [Avertissements de configuration](#mcp-server-is-blocked-by-enterprise-managed-policy) |

335| `Managed settings document could not be parsed as a JSON object; none of its settings are in effect. Fix or remove it.` | [Avertissements de configuration](#managed-settings-document-could-not-be-parsed) |337| `Managed settings document could not be parsed as a JSON object; none of its settings are in effect. Fix or remove it.` | [Avertissements de configuration](#managed-settings-document-could-not-be-parsed) |

336| `Managed settings drop-in directory could not be read` | [Avertissements de configuration](#managed-settings-document-could-not-be-parsed) |338| `Managed settings drop-in directory could not be read` | [Avertissements de configuration](#managed-settings-document-could-not-be-parsed) |

339| `Unable to read managed policy settings` | [Avertissements de configuration](#unable-to-read-managed-policy-settings) |

337| `otelHeadersHelper failed; telemetry is not being exported. See /status: ...` | [Avertissements de configuration](#otelheadershelper-failed) |340| `otelHeadersHelper failed; telemetry is not being exported. See /status: ...` | [Avertissements de configuration](#otelheadershelper-failed) |

338| `"crossSessionInbound" must be one of "accept", "hold", "refuse"` | [Avertissements de configuration](#crosssessioninbound-must-be-one-of-accept-hold-refuse) |341| `"crossSessionInbound" must be one of "accept", "hold", "refuse"` | [Avertissements de configuration](#crosssessioninbound-must-be-one-of-accept-hold-refuse) |

339| `headersHelper not run — this workspace has no persisted trust` | [Avertissements de configuration](#headershelper-not-run) |342| `headersHelper not run — this workspace has no persisted trust` | [Avertissements de configuration](#headershelper-not-run) |


3208"gmail" is Anthropic-hosted and doesn't support local OAuth. Connect it via Settings → Connectors on claude.ai (requires `claude login`), then it'll be available here automatically.3211"gmail" is Anthropic-hosted and doesn't support local OAuth. Connect it via Settings → Connectors on claude.ai (requires `claude login`), then it'll be available here automatically.

3209```3212```

3210 3213 

3211Claude Code correspond à ces hôtes par URL, donc le message apparaît lorsqu'un serveur que vous avez ajouté avec `claude mcp add` ou dans `.mcp.json` pointe vers l'un d'eux.

3212 

3213**Que faire :**3214**Que faire :**

3214 3215 

3215* Supprimez votre entrée avec `claude mcp remove <name>`, afin qu'elle ne puisse pas masquer le connecteur claude.ai à la même URL3216* Supprimez votre entrée avec `claude mcp remove <name>`, afin qu'elle ne puisse pas masquer le connecteur claude.ai à la même URL


3657 Impossible d'ouvrir Claude Desktop3658 Impossible d'ouvrir Claude Desktop

3658</h3>3659</h3>

3659 3660 

3660Vous avez exécuté [`/desktop`](/docs/fr/desktop#coming-from-the-cli), ou son alias `/app`, et la commande système que Claude Code utilise pour ouvrir Claude Desktop a échoué. La session reste dans le terminal.3661Vous avez exécuté [`/desktop`](/docs/fr/desktop#coming-from-the-cli) ou son alias `/app` dans une session, ou [`claude --desktop`](/docs/fr/cli-reference#cli-flags) dans votre shell, et la commande système que Claude Code utilise pour ouvrir Claude Desktop a échoué. Après `/desktop`, la session reste dans le terminal ; `claude --desktop` imprime le message sans le préfixe `Error:` et se termine avec le statut 1.

3662 

3663Le texte entre parenthèses nomme la commande qui a échoué, avec son code de sortie et la première ligne de sa sortie d'erreur lorsqu'elle l'a produite. Sur macOS cette commande est `open`, comme dans cet exemple ; sur Windows c'est `rundll32` :

3661 3664 

3662```text theme={null}3665```text theme={null}

3663Error: Couldn't open Claude Desktop (`open` exited 1: LSOpenURLsWithRole() failed for the URL claude://resume?session=<session-id> with error -10814). Open Claude Desktop and run /desktop again.3666Error: Couldn't open Claude Desktop (`open` exited 1: LSOpenURLsWithRole() failed for the URL claude://resume?session=<session-id> with error -10814). Open Claude Desktop and try again.

3664```3667```

3665 3668 

3666**Que faire :**3669**Que faire :**

3667 3670 

3668* Ouvrez Claude Desktop vous-même, puis exécutez `/desktop` à nouveau3671* Ouvrez Claude Desktop vous-même, puis exécutez `/desktop` ou `claude --desktop` à nouveau

3669* Pour lire la sortie d'erreur complète de cette commande, activez la journalisation de débogage avec `/debug`, exécutez `/desktop` à nouveau, et vérifiez le journal de débogage3672* Pour lire la sortie d'erreur complète de la commande qui a échoué, activez la journalisation de débogage avec `/debug` et exécutez `/desktop` à nouveau, ou exécutez `claude --desktop --debug-file <path>`, puis vérifiez le journal de débogage

3670 3673 

3671Avant la v2.1.275, le message était `Failed to open Claude Desktop. Please try opening it manually.` et ne disait pas ce qui a échoué.3674Avant la v2.1.285, le message se terminait par `Open Claude Desktop and run /desktop again.` Avant la v2.1.275, c'était `Failed to open Claude Desktop. Please try opening it manually.` et ne disait pas ce qui a échoué.

3672 3675 

3673<h3 id="terminal-setup-left-your-zed-keymap-unchanged">3676<h3 id="terminal-setup-left-your-zed-keymap-unchanged">

3674 /terminal-setup a laissé votre keymap Zed inchangée3677 /terminal-setup a laissé votre keymap Zed inchangée


3921commands path escapes plugin directory: ./commands\deploy.md — its path contains a backslash, which is not resolved reliably on this platform3924commands path escapes plugin directory: ./commands\deploy.md — its path contains a backslash, which is not resolved reliably on this platform

3922```3925```

3923 3926 

3924Avant v2.1.251, Claude Code chargeait un chemin `commands` déclaré dans une entrée de marketplace même quand il pointait en dehors du répertoire du plugin. Claude Code rejetait déjà les chemins déclarés dans `plugin.json` et les autres chemins de composant dans une entrée de marketplace.3927Avant v2.1.251, Claude Code chargeait un chemin `commands` déclaré dans une entrée de marketplace même quand il pointait en dehors du répertoire du plugin.

3925 3928 

3926Avant v2.1.257, la vérification ne regardait que l'orthographe du chemin, pas où un lien symbolique mène.3929Avant v2.1.257, la vérification ne regardait que l'orthographe du chemin, pas où un lien symbolique mène.

3927 3930 


4001* `Failed to load marketplace configuration` : le fichier n'est pas un JSON valide, ou ne peut pas être lu. Un fichier vide échoue de cette façon aussi.4004* `Failed to load marketplace configuration` : le fichier n'est pas un JSON valide, ou ne peut pas être lu. Un fichier vide échoue de cette façon aussi.

4002* `Marketplace configuration file is corrupted` : le fichier est un JSON valide mais son contenu ne correspond pas au schéma du registre.4005* `Marketplace configuration file is corrupted` : le fichier est un JSON valide mais son contenu ne correspond pas au schéma du registre.

4003 4006 

4004Un fichier manquant n'est pas un échec : Claude Code le traite comme un registre sans marketplaces.

4005 

4006Avec un fichier vide, `claude plugin install` rapporte :4007Avec un fichier vide, `claude plugin install` rapporte :

4007 4008 

4008```text theme={null}4009```text theme={null}


4626terminal host process died — press Enter to restart4627terminal host process died — press Enter to restart

4627```4628```

4628 4629 

4629Si vous ouvrez la ligne avant que la vérification ne s'exécute, le pied de page affiche `This session's terminal host process died (the conversation is saved) — press Enter to restart it` et la ligne devient échouée.

4630 

4631À partir du shell, `claude attach <id>` redémarre une session déjà marquée comme échouée pour un hôte mort, et sinon imprime la cause et quitte :4630À partir du shell, `claude attach <id>` redémarre une session déjà marquée comme échouée pour un hôte mort, et sinon imprime la cause et quitte :

4632 4631 

4633```text theme={null}4632```text theme={null}


5023 5022 

5024Claude Code écrit la plupart de ces messages sur stderr, et non dans la conversation, et les écrit principalement au démarrage. Une entrée le précise quand son message apparaît ailleurs, par exemple dans le journal de débogage ou comme un avis de démarrage dans la vue de conversation, ou à un autre moment, par exemple la [ligne de diagnostic de modèle non reconnu](#unrecognized-model-id-on-a-request) au moment de la requête.5023Claude Code écrit la plupart de ces messages sur stderr, et non dans la conversation, et les écrit principalement au démarrage. Une entrée le précise quand son message apparaît ailleurs, par exemple dans le journal de débogage ou comme un avis de démarrage dans la vue de conversation, ou à un autre moment, par exemple la [ligne de diagnostic de modèle non reconnu](#unrecognized-model-id-on-a-request) au moment de la requête.

5025 5024 

5026<h3 id="fullscreen-failed-start-notice">

5027 Le rendu en plein écran n'a pas terminé le démarrage

5028</h3>

5029 

5030Une session [plein écran](/docs/fr/fullscreen) précédente sur cette machine s'est fermée avant de terminer le démarrage, donc Claude Code démarre cette session sur le rendu classique et imprime l'un de ces avis :

5031 

5032```text theme={null}

5033Claude Code's fullscreen renderer didn't finish starting last time on this machine, so this launch is using the classic renderer. It will try fullscreen again next launch; /tui default keeps the classic renderer.

5034 

5035Claude Code's fullscreen renderer has repeatedly failed to start on this machine, so it has been turned off here. Run /tui fullscreen to try it again (this also resets after an update).

5036```

5037 

5038**À faire :**

5039 

5040* Suivez [Rendu en plein écran](/docs/fr/fullscreen#fullscreen-renderer-didnt-finish-starting). Cela indique quel avis vous recevez, ce que Claude Code fait dans les sessions ultérieures, et comment réessayer le plein écran ou conserver le rendu classique.

5041* Si la session qui s'est fermée a imprimé un message de sortie, consultez [Claude Code s'est fermé après une erreur d'interface irrécupérable](#exited-after-an-unrecoverable-interface-error) pour voir ce qu'elle nomme.

5042 

5043Avant la v2.1.236, Claude Code n'imprimait aucun avis et continuait à démarrer les sessions en rendu plein écran après un démarrage échoué.

5044 

5045<h3 id="exited-after-an-unrecoverable-interface-error">5025<h3 id="exited-after-an-unrecoverable-interface-error">

5046 Claude Code s'est fermé après une erreur d'interface irrécupérable5026 Claude Code s'est fermé après une erreur d'interface irrécupérable

5047</h3>5027</h3>


5193* Si vous administrez les paramètres, ajoutez un modèle que vos utilisateurs peuvent exécuter à `availableModels`, ou réduisez les entrées `deniedModels` qui bloquent chaque secours. [Bloquer des modèles ou des versions spécifiques](/docs/fr/model-config#block-specific-models-or-versions) décrit comment l'option Par défaut rétrograde5173* Si vous administrez les paramètres, ajoutez un modèle que vos utilisateurs peuvent exécuter à `availableModels`, ou réduisez les entrées `deniedModels` qui bloquent chaque secours. [Bloquer des modèles ou des versions spécifiques](/docs/fr/model-config#block-specific-models-or-versions) décrit comment l'option Par défaut rétrograde

5194* Si vous ne les administrez pas, envoyez le message à votre administrateur. Vos propres fichiers de paramètres ne peuvent pas élargir une liste `availableModels` ou `deniedModels` gérée5174* Si vous ne les administrez pas, envoyez le message à votre administrateur. Vos propres fichiers de paramètres ne peuvent pas élargir une liste `availableModels` ou `deniedModels` gérée

5195 5175 

5176<h3 id="managed-settings-dont-allow-this-api-provider">

5177 Les paramètres gérés ne permettent pas ce fournisseur d'API

5178</h3>

5179 

5180Les [paramètres gérés](/docs/fr/managed-settings) de votre organisation définissent une liste [`allowedProviders`](/docs/fr/settings-reference#allowedproviders), et le fournisseur d'API de la session n'est pas sur la liste ou la session utilise un point de terminaison qui n'est pas épinglé de la façon que cette entrée exige. Claude Code refuse au démarrage, avant une connexion, ou quand la session contacte ensuite l'API. Le message commence par les fournisseurs autorisés :

5181 

5182```text theme={null}

5183Your organization's managed settings allow Claude Code to use: Anthropic API, Amazon Bedrock.

5184```

5185 

5186Quand la liste est vide, le message lit à la place :

5187 

5188```text theme={null}

5189Your organization's managed settings allow Claude Code to use no API provider at all (allowedProviders is an empty list), so it cannot start on this machine.

5190```

5191 

5192Quand chaque entrée n'est pas reconnue, la parenthèse lit `(allowedProviders lists only unrecognized entries)` à la place.

5193 

5194**À faire :**

5195 

5196* Suivez les étapes `To continue:` du message

5197* Si vous administrez les paramètres, les lignes du message commençant par `Admins:` nomment l'entrée à ajouter ou la valeur à épingler, et l'entrée [`allowedProviders`](/docs/fr/settings-reference#allowedproviders) indique quel bloc `env` de quelle source peut l'épingler

5198 

5196<h3 id="mcp-server-is-blocked-by-enterprise-managed-policy">5199<h3 id="mcp-server-is-blocked-by-enterprise-managed-policy">

5197 Le serveur MCP est bloqué par la politique gérée par l'entreprise5200 Le serveur MCP est bloqué par la politique gérée par l'entreprise

5198</h3>5201</h3>


5246* Si vous administrez la machine, corrigez le document nommé pour qu'il s'analyse comme un objet JSON, ou supprimez le fichier, le profil ou la valeur du registre. Un `managed-settings.json` vide compte comme `{}` et ne bloque pas le lancement.5249* Si vous administrez la machine, corrigez le document nommé pour qu'il s'analyse comme un objet JSON, ou supprimez le fichier, le profil ou la valeur du registre. Un `managed-settings.json` vide compte comme `{}` et ne bloque pas le lancement.

5247* Si vous ne le faites pas, demandez à votre administrateur de corriger le document déployé. Rien dans vos propres fichiers de paramètres ne cause ou n'efface cette erreur.5250* Si vous ne le faites pas, demandez à votre administrateur de corriger le document déployé. Rien dans vos propres fichiers de paramètres ne cause ou n'efface cette erreur.

5248 5251 

5252<h3 id="unable-to-read-managed-policy-settings">

5253 Impossible de lire les paramètres de politique gérée

5254</h3>

5255 

5256Votre organisation déploie des [paramètres gérés](/docs/fr/managed-settings), et l'une des sources déployées existe mais n'a pas pu être lue, pour une raison telle qu'une erreur d'E/S plutôt que le système d'exploitation refusant la lecture. Sans autre source d'administrateur fournissant une politique, Claude Code se ferme au démarrage plutôt que de s'exécuter sans la politique que la source peut porter :

5257 

5258```text theme={null}

5259Unable to read managed policy settings.

5260This machine may require organization login enforcement, but the policy file failed to load.

5261Contact your administrator.

5262 

5263Detail: <source>: <reason>

5264```

5265 

5266Dans le même état, les flux de connexion, les requêtes API d'une session déjà en cours d'exécution, et le serveur [`claude gateway`](/docs/fr/claude-apps-gateway) sont refusés avec une variante de la première ligne qui nomme [`allowedProviders`](/docs/fr/settings-reference#allowedproviders).

5267 

5268Une lecture que le système d'exploitation a refusée, par exemple sur un fichier root uniquement, ne produit pas cette sortie : [la session démarre sans les politiques de cette source](/docs/fr/managed-settings#find-entries-claude-code-dropped). Pour une source qui ne peut pas être analysée, Claude Code se ferme avec [un message différent nommant la source](#managed-settings-document-could-not-be-parsed).

5269 

5270**À faire :**

5271 

5272* Si vous administrez la machine, corrigez le problème que la ligne `Detail:` nomme pour que la source déployée puisse être lue, ou supprimez la source

5273* Si vous ne le faites pas, envoyez le message à votre administrateur. Rien dans vos propres fichiers de paramètres ne cause ou n'efface cette erreur

5274 

5275Avant la v2.1.285, seules les sessions connectées avec les identifiants claude.ai ou Claude Console se fermaient avec ce message, et une lecture que le système d'exploitation a refusée le produisait aussi.

5276 

5249<h3 id="otelheadershelper-failed">5277<h3 id="otelheadershelper-failed">

5250 otelHeadersHelper a échoué5278 otelHeadersHelper a échoué

5251</h3>5279</h3>


5458 Les réponses semblent de qualité inférieure à la normale5486 Les réponses semblent de qualité inférieure à la normale

5459</h2>5487</h2>

5460 5488 

5461Si les réponses de Claude semblent moins performantes que prévu mais qu'aucune erreur n'est affichée, la cause est généralement l'état de la conversation plutôt que le modèle lui-même. Claude Code ne change pas silencieusement les versions de modèle. Il peut basculer vers un modèle de secours dans trois cas spécifiques :5489Si les réponses de Claude semblent moins performantes que prévu mais qu'aucune erreur n'est affichée, la cause est généralement l'état de la conversation plutôt que le modèle lui-même. Claude Code ne change pas silencieusement les versions de modèle. Il peut basculer vers un modèle de secours dans ces cas :

5462 5490 

5463* Un [`--fallback-model`](/docs/fr/cli-reference#cli-flags) configuré prend le relais après une erreur de disponibilité, pour ce tour uniquement, avec un avis dans la transcription5491* Un [`--fallback-model`](/docs/fr/cli-reference#cli-flags) configuré prend le relais après une erreur de disponibilité, pour ce tour uniquement, avec un avis dans la transcription

5464* Une vérification de démarrage d'Amazon Bedrock ou de la plateforme Agent de Google Cloud détecte que votre modèle par défaut n'est pas disponible5492* Une vérification de démarrage d'Amazon Bedrock ou de la plateforme Agent de Google Cloud détecte que votre modèle par défaut n'est pas disponible, ou votre compte [perd l'accès à celui-ci en cours de session](/docs/fr/amazon-bedrock#when-a-model-is-disabled-mid-session)

5465* Le [basculement automatique du modèle](/docs/fr/model-config#automatic-model-fallback) sur Fable 5.1, Fable 5, Opus 5.5, Sonnet 5.5 et Opus 5 déplace la session vers le modèle de secours de la catégorie signalée, lorsque cette catégorie en possède un, et affiche un avis dans la transcription5493* Le [basculement automatique du modèle](/docs/fr/model-config#automatic-model-fallback) sur Fable 5.1, Fable 5, Opus 5.5, Sonnet 5.5 et Opus 5 déplace la session vers le modèle de secours de la catégorie signalée, lorsque cette catégorie en possède un, et affiche un avis dans la transcription

5466 5494 

5467La vérification de sélection du modèle ci-dessous détecte les deuxième et troisième cas ; le premier apparaît comme un avis de transcription plutôt qu'un changement de `/model`. La [configuration du modèle](/docs/fr/model-config) explique quand chaque basculement s'applique.5495La vérification de sélection du modèle ci-dessous détecte les deuxième et troisième cas ; le premier apparaît comme un avis de transcription plutôt qu'un changement de `/model`. La [configuration du modèle](/docs/fr/model-config) explique quand chaque basculement s'applique.

Details

293 293 

294Les alias de modèle tels que `opus` n'agissent pas comme des épingles, et il en va de même pour un ID de modèle que Claude Code ne reconnaît pas.294Les alias de modèle tels que `opus` n'agissent pas comme des épingles, et il en va de même pour un ID de modèle que Claude Code ne reconnaît pas.

295 295 

296Lorsque ces vérifications trouvent un modèle que votre projet ne peut pas invoquer, Claude Code mémorise le refus sur cette machine pendant jusqu'à un jour, et au cours de ce laps de temps, il ignore le modèle mémorisé sans demander à Agent Platform à nouveau. Claude Code vérifie un refus mémorisé d'un modèle par défaut actuel à nouveau au lancement une fois dix minutes se sont écoulées depuis la dernière vérification, de sorte qu'une valeur par défaut que votre administrateur réactive revient. Pour désactiver la mémoire, définissez [`CLAUDE_CODE_SKIP_MODEL_ACCESS_MEMORY=1`](/docs/fr/env-vars).

297 

298<h3 id="when-a-model-is-disabled-mid-session">

299 Lorsqu'un modèle est désactivé en cours de session

300</h3>

301 

302Si votre projet perd l'accès au modèle sur lequel votre session s'exécute, par exemple parce qu'un administrateur le désactive dans [Model Garden](https://console.cloud.google.com/vertex-ai/model-garden), Claude Code bascule la session vers un autre modèle au lieu d'échouer à chaque demande, et affiche `Switched to <fallback> because <model> is not available`. Il essaie les mêmes modèles que le retour au démarrage : les versions antérieures du même niveau d'abord et, pour une session Opus sans version Opus disponible, le modèle Sonnet par défaut.

303 

304Le basculement s'applique uniquement à un niveau que vous n'avez pas épinglé, la même condition que le retour au démarrage. Une session sur une version spécifique que vous avez choisie conserve son modèle et, sans une chaîne de modèle de secours, la demande échoue à la place. En [mode auto](/docs/fr/permission-modes#enable-auto-mode-on-bedrock-agent-platform-or-foundry), Claude Code bascule uniquement vers un modèle que le mode auto supporte sur Agent Platform. Si aucun de ces modèles n'est disponible non plus, la demande échoue.

305 

306Une [chaîne de modèle de secours](/docs/fr/model-config#fallback-model-chains) que vous configurez remplace le basculement de niveau : sur ces refus, Claude Code bascule vers votre secours configuré à la place. Pour que les demandes refusées échouent plutôt que de basculer, définissez [`CLAUDE_CODE_DISABLE_MODEL_ACCESS_FALLBACK=1`](/docs/fr/env-vars). Une chaîne de secours que vous avez configurée bascule toujours sur ces refus ; supprimez également la chaîne si vous voulez que chaque demande refusée échoue.

307 

296<h2 id="iam-configuration">308<h2 id="iam-configuration">

297 Configuration IAM309 Configuration IAM

298</h2>310</h2>

headless.md +2 −2

Details

296 Approuver automatiquement les outils296 Approuver automatiquement les outils

297</h3>297</h3>

298 298 

299Utilisez `--allowedTools` pour permettre à Claude d'utiliser certains outils sans demander. Cet exemple exécute une suite de tests et corrige les défaillances, permettant à Claude d'exécuter des commandes Bash et de lire/modifier des fichiers sans demander la permission :299Utilisez `--allowedTools` pour permettre à Claude d'utiliser certains outils sans demander. Lister `Read` et `Edit` permet à Claude de lire et modifier des fichiers sans demander la permission. Lister `Bash` fait de même pour les commandes shell, sauf dans une exécution qui démarre en [mode auto](/docs/fr/permission-modes#how-auto-mode-evaluates-actions), où Claude Code supprime une entrée `Bash` nue comme règle d'autorisation large et le mode auto évalue chaque commande à la place. Cet exemple exécute une suite de tests et corrige les défaillances avec ces trois outils listés :

300 300 

301```bash theme={null}301```bash theme={null}

302claude -p "Run the test suite and fix any failures" \302claude -p "Run the test suite and fix any failures" \

303 --allowedTools "Bash,Read,Edit"303 --allowedTools "Bash,Read,Edit"

304```304```

305 305 

306Pour définir une base de référence pour la session entière au lieu de lister les outils individuels, passez un [mode de permission](/docs/fr/permission-modes). Pour `-p`, le [mode de permission de démarrage intégré](/docs/fr/permission-modes#which-mode-a-session-starts-in) est Manual sur tous les plans, donc passez le mode de permission que vous souhaitez :306Pour définir une base de référence pour la session entière au lieu de lister les outils individuels, passez un [mode de permission](/docs/fr/permission-modes). Une exécution où rien ne définit un mode de permission prend le [mode de permission de démarrage intégré](/docs/fr/permission-modes#which-mode-a-session-starts-in), qui peut être `auto`, donc passez celui que vous souhaitez :

307 307 

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

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

hooks.md +3 −3

Details

12 12 

13Les hooks sont des commandes shell définies par l'utilisateur, des points de terminaison HTTP, des appels d'outils MCP, des prompts LLM ou des sous-agents qui s'exécutent automatiquement à des points spécifiques du cycle de vie de Claude Code. Claude Code déclenche les mêmes événements de hook partout où il s'exécute : les sessions dans le terminal, les extensions IDE, l'[application de bureau](/docs/fr/desktop-quickstart) et [Claude Code sur le web](/docs/fr/claude-code-on-the-web). Utilisez cette référence pour consulter les schémas d'événements, les options de configuration, les formats d'entrée/sortie JSON et les fonctionnalités avancées comme les hooks asynchrones, les hooks HTTP et les hooks d'outils MCP.13Les hooks sont des commandes shell définies par l'utilisateur, des points de terminaison HTTP, des appels d'outils MCP, des prompts LLM ou des sous-agents qui s'exécutent automatiquement à des points spécifiques du cycle de vie de Claude Code. Claude Code déclenche les mêmes événements de hook partout où il s'exécute : les sessions dans le terminal, les extensions IDE, l'[application de bureau](/docs/fr/desktop-quickstart) et [Claude Code sur le web](/docs/fr/claude-code-on-the-web). Utilisez cette référence pour consulter les schémas d'événements, les options de configuration, les formats d'entrée/sortie JSON et les fonctionnalités avancées comme les hooks asynchrones, les hooks HTTP et les hooks d'outils MCP.

14 14 

15Un plugin peut également enregistrer des hooks en tant que fonctions JavaScript que Claude Code appelle dans son propre processus, qui peuvent être dessinés dans l'interface ainsi qu'agir sur les événements. Un plugin qui le fait est un [mod](/docs/fr/plugins/mods/overview), et ces hooks de fonction sont couverts dans [Réagir aux événements](/docs/fr/plugins/mods/events) plutôt qu'ici. Les hooks sur cette page continuent de fonctionner aux côtés des mods.

16 

15<h2 id="hook-lifecycle">17<h2 id="hook-lifecycle">

16 Cycle de vie des hooks18 Cycle de vie des hooks

17</h2>19</h2>


453| `Bash(git *)` | `npm test && git push` | oui | chaque sous-commande est vérifiée ; `git push` correspond |455| `Bash(git *)` | `npm test && git push` | oui | chaque sous-commande est vérifiée ; `git push` correspond |

454| `Bash(rm *)` | `echo $(rm -rf /)` | oui | les commandes à l'intérieur de `$()` et des backticks sont vérifiées ; `rm -rf /` correspond |456| `Bash(rm *)` | `echo $(rm -rf /)` | oui | les commandes à l'intérieur de `$()` et des backticks sont vérifiées ; `rm -rf /` correspond |

455| `Bash(rm *)` | `echo $(date)` | non | aucune sous-commande ne correspond à `rm *` |457| `Bash(rm *)` | `echo $(date)` | non | aucune sous-commande ne correspond à `rm *` |

456| `Bash(cat *)` | `echo before $(date) after` | non | une substitution peut se situer à n'importe quelle position d'argument, donc la commande complète et `date` sont tous deux vérifiés ; aucun ne correspond à `cat *` |

457| `Bash(git *)` | `$TOOL git push` | oui | Claude Code ne peut pas dire à quoi le nom de la commande se développe, donc il exécute le hook |

458| `Bash(git push *)` | `echo $(date)` | oui | les modèles qui spécifient plus que le nom de la commande exécutent le hook de toute façon sur `$()`, les backticks ou `$VAR` |458| `Bash(git push *)` | `echo $(date)` | oui | les modèles qui spécifient plus que le nom de la commande exécutent le hook de toute façon sur `$()`, les backticks ou `$VAR` |

459 459 

460Lorsque Claude Code ne peut pas déterminer quelles commandes l'entrée Bash exécute, il exécute votre hook indépendamment du modèle. Parce que le filtre `if` est au mieux un effort, utilisez le [système de permission](/docs/fr/permissions) plutôt qu'un hook pour appliquer une autorisation ou un refus strict.460Lorsque Claude Code ne peut pas déterminer quelles commandes l'entrée Bash exécute, il exécute votre hook indépendamment du modèle. Parce que le filtre `if` est au mieux un effort, utilisez le [système de permission](/docs/fr/permissions) plutôt qu'un hook pour appliquer une autorisation ou un refus strict.


1938| :- | :- |1938| :- | :- |

1939| `permissionDecision` | `"allow"` ignore l'invite de permission, sauf pour les [actions qu'aucun mode n'approuve automatiquement](/docs/fr/permission-modes#actions-no-mode-auto-approves) et pour `AskUserQuestion` et `ExitPlanMode`, qui ont besoin de [`updatedInput` associé](#allow-with-updatedinput). `"deny"` empêche l'appel d'outil. `"ask"` demande à l'utilisateur de confirmer. `"defer"` quitte proprement pour que l'outil puisse être repris plus tard. Les [règles de refus et de demande](/docs/fr/permissions#manage-permissions) sont toujours évaluées indépendamment de ce que le hook retourne |1939| `permissionDecision` | `"allow"` ignore l'invite de permission, sauf pour les [actions qu'aucun mode n'approuve automatiquement](/docs/fr/permission-modes#actions-no-mode-auto-approves) et pour `AskUserQuestion` et `ExitPlanMode`, qui ont besoin de [`updatedInput` associé](#allow-with-updatedinput). `"deny"` empêche l'appel d'outil. `"ask"` demande à l'utilisateur de confirmer. `"defer"` quitte proprement pour que l'outil puisse être repris plus tard. Les [règles de refus et de demande](/docs/fr/permissions#manage-permissions) sont toujours évaluées indépendamment de ce que le hook retourne |

1940| `permissionDecisionReason` | Pour `"ask"`, montré à l'utilisateur mais pas Claude. Pour `"deny"`, montré à Claude. Pour `"allow"` et `"defer"`, écrit au [journal de débogage](#debug-hooks) uniquement |1940| `permissionDecisionReason` | Pour `"ask"`, montré à l'utilisateur mais pas Claude. Pour `"deny"`, montré à Claude. Pour `"allow"` et `"defer"`, écrit au [journal de débogage](#debug-hooks) uniquement |

1941| `updatedInput` | Modifie les paramètres d'entrée de l'outil avant l'exécution. Remplace l'objet d'entrée entier, donc incluez les champs inchangés aux côtés des champs modifiés. Claude Code évalue les règles de permission et l'[éligibilité de mise en arrière-plan automatique](/docs/fr/tools-reference#background-commands) d'une commande Bash contre l'entrée que votre hook retourne, pas l'entrée que Claude a envoyée. Combinez avec `"allow"` pour approuver automatiquement, ou `"ask"` pour montrer l'entrée modifiée à l'utilisateur. Pour `"defer"`, ignoré |1941| `updatedInput` | Modifie les paramètres d'entrée de l'outil avant l'exécution. Remplace l'objet d'entrée entier, donc incluez les champs inchangés aux côtés des champs modifiés. Claude Code évalue les règles de permission et l'[éligibilité de mise en arrière-plan automatique](/docs/fr/tools-reference#foreground-commands-that-move-to-the-background) d'une commande Bash contre l'entrée que votre hook retourne, pas l'entrée que Claude a envoyée. Combinez avec `"allow"` pour approuver automatiquement, ou `"ask"` pour montrer l'entrée modifiée à l'utilisateur. Pour `"defer"`, ignoré |

1942| `additionalContext` | Chaîne ajoutée au contexte de Claude aux côtés du résultat d'outil. Ignoré quand `permissionDecision` est `"defer"`. Voir [Ajouter du contexte pour Claude](#add-context-for-claude) |1942| `additionalContext` | Chaîne ajoutée au contexte de Claude aux côtés du résultat d'outil. Ignoré quand `permissionDecision` est `"defer"`. Voir [Ajouter du contexte pour Claude](#add-context-for-claude) |

1943 1943 

1944Quand plusieurs hooks PreToolUse retournent des décisions différentes, la priorité est `deny` > `defer` > `ask` > `allow`.1944Quand plusieurs hooks PreToolUse retournent des décisions différentes, la priorité est `deny` > `defer` > `ask` > `allow`.

hooks-guide.md +3 −1

Details

1014 1014 

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

1016 1016 

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

1018 

1019Un [mod](/docs/fr/plugins/mods/overview) que vous installez et qui accroche `tool.check` peut approuver un appel que votre hook `PreToolUse` a bloqué, sauf si le hook se trouve dans les paramètres gérés. [Étendre les permissions avec les hooks](/docs/fr/permissions#extend-permissions-with-hooks) énumère les règles qui prévalent sur un mod.

1018 1020 

1019<h3 id="hook-not-firing">1021<h3 id="hook-not-firing">

1020 Hook ne se déclenche pas1022 Hook ne se déclenche pas

Details

346* Inviter Claude Code à exécuter une commande en arrière-plan346* Inviter Claude Code à exécuter une commande en arrière-plan

347* Appuyer sur `Ctrl+B` pour déplacer une invocation d'outil Bash régulière vers l'arrière-plan. Les utilisateurs de Tmux doivent appuyer sur `Ctrl+B` deux fois en raison de la touche de préfixe de tmux.347* Appuyer sur `Ctrl+B` pour déplacer une invocation d'outil Bash régulière vers l'arrière-plan. Les utilisateurs de Tmux doivent appuyer sur `Ctrl+B` deux fois en raison de la touche de préfixe de tmux.

348 348 

349Lorsqu'une commande atteint son délai d'expiration avant de se terminer, Claude Code la [déplace automatiquement vers l'arrière-plan](/docs/fr/tools-reference#background-commands) au lieu de l'arrêter, sauf si la commande commence par `sleep`. Pour modifier la durée pendant laquelle les commandes s'exécutent avant que cela ne se produise, définissez les [variables d'environnement de délai d'expiration Bash](/docs/fr/tools-reference#timeout-and-output-limits).349Lorsqu'une commande atteint son délai d'expiration avant de se terminer, Claude Code la [déplace automatiquement vers l'arrière-plan](/docs/fr/tools-reference#foreground-commands-that-move-to-the-background) au lieu de l'arrêter, sauf si la commande commence par `sleep`. Si vous avez désactivé les tâches en arrière-plan avec [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS`](/docs/fr/env-vars#variables) ou en démarrant en [mode bare](/docs/fr/headless#start-faster-with-bare-mode), la commande s'arrête à son délai d'expiration. Pour modifier le délai d'expiration, définissez les [variables d'environnement de délai d'expiration Bash](/docs/fr/tools-reference#timeout-and-output-limits).

350 350 

351**Fonctionnalités clés :**351**Fonctionnalités clés :**

352 352 


358* Sur macOS et Linux, Claude Code termine les tâches en arrière-plan en cours d'exécution lorsque le système d'exploitation signale une pression mémoire critique, à condition que la session soit inactive depuis au moins 30 minutes et qu'aucun tour ou sous-agent ne soit en cours d'exécution. Nécessite Claude Code v2.1.193 ou version ultérieure358* Sur macOS et Linux, Claude Code termine les tâches en arrière-plan en cours d'exécution lorsque le système d'exploitation signale une pression mémoire critique, à condition que la session soit inactive depuis au moins 30 minutes et qu'aucun tour ou sous-agent ne soit en cours d'exécution. Nécessite Claude Code v2.1.193 ou version ultérieure

359 * Le [journal de débogage](/docs/fr/debug-your-config) indique pourquoi les tâches ont été arrêtées, ou pourquoi un événement de pression les a laissées en cours d'exécution359 * Le [journal de débogage](/docs/fr/debug-your-config) indique pourquoi les tâches ont été arrêtées, ou pourquoi un événement de pression les a laissées en cours d'exécution

360 * Définissez [`CLAUDE_CODE_DISABLE_BG_SHELL_PRESSURE_REAP`](/docs/fr/env-vars) sur `1` pour désactiver les arrêts dus à la pression mémoire360 * Définissez [`CLAUDE_CODE_DISABLE_BG_SHELL_PRESSURE_REAP`](/docs/fr/env-vars) sur `1` pour désactiver les arrêts dus à la pression mémoire

361* Les commandes Bash et PowerShell en arrière-plan ont une limite de temps, comptée à partir du moment où la commande entre en arrière-plan : 30 minutes, ou le `timeout` que Claude demande lorsqu'il démarre une commande en arrière-plan, jusqu'à un maximum de 2 heures. Une commande qui se déplace vers l'arrière-plan pendant son exécution, par exemple avec `Ctrl+B`, obtient 30 minutes à partir du déplacement. Lorsqu'une commande atteint sa limite, Claude Code l'arrête et indique à Claude pourquoi, et Claude peut la redémarrer avec un `timeout` plus long si le travail en a encore besoin. Deux variables d'environnement augmentent les limites, en millisecondes, et aucune ne peut les raccourcir :361* Les commandes Bash et PowerShell en arrière-plan ont une limite de temps, comptée à partir du moment où la commande entre en arrière-plan : 30 minutes, ou le `timeout` que Claude demande lorsqu'il démarre une commande en arrière-plan, jusqu'à un maximum de 2 heures. Une commande qui se déplace vers l'arrière-plan pendant son exécution, par exemple avec `Ctrl+B`, obtient 30 minutes à partir du déplacement. Lorsqu'une commande atteint sa limite, Claude Code l'arrête et indique à Claude pourquoi, et Claude peut la redémarrer avec un `timeout` plus long si le travail en a encore besoin. Pour allonger les limites, voir [Augmenter la limite de temps pour les commandes en arrière-plan](/docs/fr/tools-reference#raise-the-time-limit-for-background-commands) dans la référence des outils

362 * Définissez [`BASH_DEFAULT_TIMEOUT_MS`](/docs/fr/env-vars) au-dessus de `1800000` pour remplacer la valeur par défaut de 30 minutes par cette valeur, pour les commandes déplacées également362* Une commande en arrière-plan qu'un [sous-agent](/docs/fr/sub-agents#run-subagents-in-foreground-or-background) au premier plan a démarrée se termine lorsque l'exécution de ce sous-agent se termine, qu'elle ait réussi, échoué ou ait été interrompue ; voir [Quand une commande en arrière-plan s'arrête](/docs/fr/tools-reference#when-a-background-command-stops) dans la référence des outils

363 * Définissez [`BASH_MAX_TIMEOUT_MS`](/docs/fr/env-vars) au-dessus de `7200000` pour augmenter le maximum de 2 heures. Définir `BASH_DEFAULT_TIMEOUT_MS` au-dessus de `7200000` l'augmente de la même manière

364* Une commande en arrière-plan qu'un [sous-agent](/docs/fr/sub-agents#run-subagents-in-foreground-or-background) au premier plan a démarrée se termine lorsque l'exécution de ce sous-agent se termine, qu'elle ait réussi, échoué ou ait été interrompue ; voir [Commandes en arrière-plan](/docs/fr/tools-reference#background-commands) dans la référence des outils

365 363 

366Pour désactiver toutes les fonctionnalités de tâche en arrière-plan, définissez la variable d'environnement `CLAUDE_CODE_DISABLE_BACKGROUND_TASKS` sur `1`. Voir [Variables d'environnement](/docs/fr/env-vars) pour plus de détails.364Pour désactiver toutes les fonctionnalités de tâche en arrière-plan, définissez la variable d'environnement [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS`](/docs/fr/env-vars#variables) sur `1`. Démarrer en [mode bare](/docs/fr/headless#start-faster-with-bare-mode) le désactive également.

367 365 

368**Commandes couramment mises en arrière-plan :**366**Commandes couramment mises en arrière-plan :**

369 367 

keybindings.md +1 −3

Details

545* Sous une disposition non-latine telle que le cyrillique, Claude Code fait correspondre les raccourcis Ctrl par la position de la touche en disposition US lorsque le terminal utilise le protocole clavier Kitty et signale cette position. Dans un tel terminal, avec une disposition russe active, appuyer sur Ctrl et la touche W physique déclenche `ctrl+w`. Dans un terminal qui ne signale pas la position, Claude Code fait correspondre ce que le terminal envoie pour la frappe : un code de contrôle ASCII déclenche le raccourci latin, et une frappe qui arrive en tant que caractère cyrillique ne correspond à aucune liaison545* Sous une disposition non-latine telle que le cyrillique, Claude Code fait correspondre les raccourcis Ctrl par la position de la touche en disposition US lorsque le terminal utilise le protocole clavier Kitty et signale cette position. Dans un tel terminal, avec une disposition russe active, appuyer sur Ctrl et la touche W physique déclenche `ctrl+w`. Dans un terminal qui ne signale pas la position, Claude Code fait correspondre ce que le terminal envoie pour la frappe : un code de contrôle ASCII déclenche le raccourci latin, et une frappe qui arrive en tant que caractère cyrillique ne correspond à aucune liaison

546* Sous les dispositions qui réorganisent les lettres latines, telles que AZERTY, Claude Code fait correspondre la lettre que la touche tape, donc appuyer sur Ctrl et la touche étiquetée A déclenche `ctrl+a`546* Sous les dispositions qui réorganisent les lettres latines, telles que AZERTY, Claude Code fait correspondre la lettre que la touche tape, donc appuyer sur Ctrl et la touche étiquetée A déclenche `ctrl+a`

547 547 

548Avant v2.1.247, appuyer sur un raccourci Ctrl sous une disposition non-latine ne déclenchait pas sa liaison dans les terminaux qui utilisent le protocole clavier Kitty, tels que Ghostty, Kitty, WezTerm et iTerm2.

549 

550<h3 id="chords">548<h3 id="chords">

551 Accords549 Accords

552</h3>550</h3>


697* Modificateurs mal orthographiés, tels que `ctl+k`. Claude Code supprime la partie qu'il ne reconnaît pas et applique la liaison à la frappe restante, `k` dans cet exemple.695* Modificateurs mal orthographiés, tels que `ctl+k`. Claude Code supprime la partie qu'il ne reconnaît pas et applique la liaison à la frappe restante, `k` dans cet exemple.

698* Noms de contexte invalides696* Noms de contexte invalides

699* Valeurs d'action invalides, telles qu'une action qui n'est pas une chaîne ou `null`697* Valeurs d'action invalides, telles qu'une action qui n'est pas une chaîne ou `null`

700* Noms d'action inconnus, tels qu'une faute de frappe d'une action enregistrée. Claude Code ignore la liaison et conserve toute liaison par défaut pour cette touche en vigueur. Avant v2.1.246, une liaison avec un nom d'action inconnu désactivait silencieusement cette touche698* Noms d'action inconnus, tels qu'une faute de frappe d'une action enregistrée. Claude Code ignore la liaison et conserve toute liaison par défaut pour cette touche en vigueur.

701* Conflits de raccourcis réservés699* Conflits de raccourcis réservés

702* Liaisons en double dans le même contexte700* Liaisons en double dans le même contexte

703 701 

llm-gateway.md +2 −0

Details

45 45 

46[Déployez une passerelle LLM pour votre organisation](/docs/fr/llm-gateway-rollout) parcourt chaque étape et montre les fichiers de configuration à distribuer à chacune. La passerelle est une partie de la configuration de l'organisation ; pour l'application des politiques, la visibilité de l'utilisation et les décisions de traitement des données, consultez [Configurez Claude Code pour votre organisation](/docs/fr/admin-setup).46[Déployez une passerelle LLM pour votre organisation](/docs/fr/llm-gateway-rollout) parcourt chaque étape et montre les fichiers de configuration à distribuer à chacune. La passerelle est une partie de la configuration de l'organisation ; pour l'application des politiques, la visibilité de l'utilisation et les décisions de traitement des données, consultez [Configurez Claude Code pour votre organisation](/docs/fr/admin-setup).

47 47 

48Pour faire d'une passerelle accessible via `ANTHROPIC_BASE_URL` la seule destination qu'une machine gérée peut utiliser, définissez [`allowedProviders`](/docs/fr/settings-reference#allowedproviders) à `["customEndpoint"]` dans le même fichier de paramètres gérés et mettez l'`ANTHROPIC_BASE_URL` de la passerelle dans le bloc `env` de ce fichier. Claude Code refuse alors une session pointée ailleurs, y compris directement vers Anthropic ou vers le propre proxy d'un développeur, et accepte `ANTHROPIC_BASE_URL` uniquement avec la valeur que vous y définissez. Pour une passerelle accessible via une variable de point de terminaison spécifique au fournisseur telle que `ANTHROPIC_BEDROCK_BASE_URL`, l'entrée `allowedProviders` indique quelle variable épingler. Nécessite Claude Code v2.1.285 ou ultérieur.

49 

48<h2 id="subscriptions-and-gateways">50<h2 id="subscriptions-and-gateways">

49 Abonnements et passerelles51 Abonnements et passerelles

50</h2>52</h2>

Details

310 310 

311Claude Code envoie la requête de découverte avec les deux en-têtes d'identifiant ci-dessous et omet un en-tête dont la valeur ne se résout pas. L'envoi des deux en-têtes nécessite Claude Code v2.1.248 ou version ultérieure. Les versions antérieures envoient uniquement `Authorization` lorsque `ANTHROPIC_AUTH_TOKEN` est défini et uniquement `x-api-key` sinon.311Claude Code envoie la requête de découverte avec les deux en-têtes d'identifiant ci-dessous et omet un en-tête dont la valeur ne se résout pas. L'envoi des deux en-têtes nécessite Claude Code v2.1.248 ou version ultérieure. Les versions antérieures envoient uniquement `Authorization` lorsque `ANTHROPIC_AUTH_TOKEN` est défini et uniquement `x-api-key` sinon.

312 312 

313* `Authorization` : `ANTHROPIC_AUTH_TOKEN` comme jeton porteur, sinon la valeur [`apiKeyHelper`](/docs/fr/llm-gateway-connect#rotate-credentials-with-apikeyhelper) comme jeton porteur. Dans ce cas, Claude Code attend que l'aide retourne avant d'envoyer la requête.313* `Authorization` : `ANTHROPIC_AUTH_TOKEN` comme jeton porteur, sinon la valeur [`apiKeyHelper`](/docs/fr/llm-gateway-connect#rotate-credentials-with-apikeyhelper) comme jeton porteur.

314* `x-api-key` : la clé API que Claude Code a résolue, telle que `ANTHROPIC_API_KEY`. Lorsqu'une valeur d'aide est la seule identifiant, cet en-tête la porte également, de sorte que la valeur arrive dans les deux en-têtes.314* `x-api-key` : la clé API que Claude Code a résolue, telle que `ANTHROPIC_API_KEY`. Lorsqu'une valeur d'aide est la seule identifiant, cet en-tête la porte également, de sorte que la valeur arrive dans les deux en-têtes.

315 315 

316Claude Code envoie également tous les en-têtes de `ANTHROPIC_CUSTOM_HEADERS`. Lorsqu'un en-tête personnalisé a une valeur non vide, Claude Code l'envoie à la place d'un en-tête intégré du même nom, en faisant correspondre les noms sans tenir compte de la casse.316Claude Code envoie également tous les en-têtes de `ANTHROPIC_CUSTOM_HEADERS`. Lorsqu'un en-tête personnalisé a une valeur non vide, Claude Code l'envoie à la place d'un en-tête intégré du même nom, en faisant correspondre les noms sans tenir compte de la casse.

Details

199 199 

200Les [clés de connexion à la passerelle](#choose-a-delivery-mechanism) suivent une règle séparée. Claude Code ne les lit jamais à partir des paramètres gérés par le serveur, donc pendant que les paramètres gérés par le serveur sont la source sélectionnée, la source d'administration la mieux classée sur la machine qui porte une clé de politique les fournit toujours. Une valeur dans une source d'administration classée en dessous de celle-ci, ou dans le registre HKCU, est ignorée.200Les [clés de connexion à la passerelle](#choose-a-delivery-mechanism) suivent une règle séparée. Claude Code ne les lit jamais à partir des paramètres gérés par le serveur, donc pendant que les paramètres gérés par le serveur sont la source sélectionnée, la source d'administration la mieux classée sur la machine qui porte une clé de politique les fournit toujours. Une valeur dans une source d'administration classée en dessous de celle-ci, ou dans le registre HKCU, est ignorée.

201 201 

202[`allowedProviders`](/docs/fr/settings-reference#allowedproviders) a sa propre règle : la note Scope de son entrée dit comment une liste définie sur la machine se combine avec une liste gérée par le serveur. Nécessite Claude Code v2.1.285 ou ultérieur.

203 

202Quand une source d'administration définit `allowManagedMcpServersOnly` ou une liste `allowedMcpServers` et que cette valeur n'est pas celle en vigueur, `/status` et `claude doctor` nomment cette source et cette clé.204Quand une source d'administration définit `allowManagedMcpServersOnly` ou une liste `allowedMcpServers` et que cette valeur n'est pas celle en vigueur, `/status` et `claude doctor` nomment cette source et cette clé.

203 205 

204<h3 id="compose-every-managed-source">206<h3 id="compose-every-managed-source">


353* Un fichier de paramètres gérés vide compte comme `{}`.355* Un fichier de paramètres gérés vide compte comme `{}`.

354* Une valeur malformée dans la clé de registre HKCU modifiable par l'utilisateur ne bloque jamais le lancement. Claude Code la signale comme un avis dans `/status` et `claude doctor` à la place.356* Une valeur malformée dans la clé de registre HKCU modifiable par l'utilisateur ne bloque jamais le lancement. Claude Code la signale comme un avis dans `/status` et `claude doctor` à la place.

355 357 

356Si un fichier de paramètres gérés, un fichier drop-in, ou un répertoire `managed-settings.d/` ne peut pas être lu et qu'aucune source d'administration ne fournit une politique, les sessions connectées avec des identifiants claude.ai ou Claude Console se terminent au démarrage avec un message pour contacter un administrateur.358Quand un fichier de paramètres gérés, un fichier drop-in, un répertoire `managed-settings.d/`, un profil MDM, ou une valeur de registre HKLM existe mais ne peut pas être lu, et qu'aucune source d'administration ne fournit une politique, ce qui se passe dépend de la raison de l'échec de la lecture :

359 

360* Si le système d'exploitation a refusé la lecture, par exemple sur un fichier réservé à root, chaque session démarre sans les politiques de cette source. `/status` et `claude doctor` enregistrent l'échec, et une exécution avec `-p` l'imprime également sur stderr.

361* Pour tout autre échec de lecture, comme une erreur d'E/S, chaque session se termine au démarrage avec [un message pour contacter un administrateur](/docs/fr/errors#unable-to-read-managed-policy-settings).

357 362 

358Pour trouver une entrée supprimée, regardez dans l'un de trois endroits :363Pour trouver une entrée supprimée, regardez dans l'un de trois endroits :

359 364 


387| Champ | Comportement quand présent mais invalide |392| Champ | Comportement quand présent mais invalide |

388| :- | :- |393| :- | :- |

389| `allowedMcpServers` | Appliquée comme une liste d'autorisation vide jusqu'à ce que la valeur soit corrigée, donc aucun serveur MCP que les utilisateurs ajoutent n'est admis. Les serveurs que votre organisation livre via [`managedMcpServers`](/docs/fr/settings-reference#managedmcpservers) se chargent toujours, et les serveurs `managed-mcp.json` se chargent selon [Comment un serveur est évalué](/docs/fr/managed-mcp#how-a-server-is-evaluated). Une entrée invalide individuelle est supprimée et le sous-ensemble valide est appliqué. |394| `allowedMcpServers` | Appliquée comme une liste d'autorisation vide jusqu'à ce que la valeur soit corrigée, donc aucun serveur MCP que les utilisateurs ajoutent n'est admis. Les serveurs que votre organisation livre via [`managedMcpServers`](/docs/fr/settings-reference#managedmcpservers) se chargent toujours, et les serveurs `managed-mcp.json` se chargent selon [Comment un serveur est évalué](/docs/fr/managed-mcp#how-a-server-is-evaluated). Une entrée invalide individuelle est supprimée et le sous-ensemble valide est appliqué. |

395| [`allowedProviders`](/docs/fr/settings-reference#allowedproviders) | Appliquée comme une liste d'autorisation vide jusqu'à ce que la valeur soit corrigée, donc chaque fournisseur d'API est refusé et Claude Code ne démarre pas sur la machine. Si seule une entrée individuelle n'est pas un nom de fournisseur connu, Claude Code supprime et signale cette entrée et applique le reste. |

390| `allowedHttpHookUrls` | Claude Code applique une [liste d'autorisation](/docs/fr/settings-reference#allowedhttphookurls) gérée vide jusqu'à ce que vous corrigiez la valeur, donc un hook HTTP s'exécute uniquement si un autre fichier de paramètres énumère son URL. Si seule une entrée individuelle est invalide, Claude Code supprime cette entrée et applique le reste. |396| `allowedHttpHookUrls` | Claude Code applique une [liste d'autorisation](/docs/fr/settings-reference#allowedhttphookurls) gérée vide jusqu'à ce que vous corrigiez la valeur, donc un hook HTTP s'exécute uniquement si un autre fichier de paramètres énumère son URL. Si seule une entrée individuelle est invalide, Claude Code supprime cette entrée et applique le reste. |

391| `httpHookAllowedEnvVars` | Claude Code applique une [liste d'autorisation](/docs/fr/settings-reference#httphookallowedenvvars) gérée vide jusqu'à ce que vous corrigiez la valeur, donc une variable d'en-tête est interpolée uniquement si un autre fichier de paramètres la nomme. Si seule une entrée individuelle est invalide, Claude Code supprime cette entrée et applique le reste. |397| `httpHookAllowedEnvVars` | Claude Code applique une [liste d'autorisation](/docs/fr/settings-reference#httphookallowedenvvars) gérée vide jusqu'à ce que vous corrigiez la valeur, donc une variable d'en-tête est interpolée uniquement si un autre fichier de paramètres la nomme. Si seule une entrée individuelle est invalide, Claude Code supprime cette entrée et applique le reste. |

392| `allowedChannelPlugins` | Claude Code applique une liste d'autorisation vide jusqu'à ce que vous corrigiez la valeur, donc aucun plugin de canal passé à `--channels` n'est admis. Si seule une entrée individuelle est invalide, il supprime cette entrée et applique le reste. |398| `allowedChannelPlugins` | Claude Code applique une liste d'autorisation vide jusqu'à ce que vous corrigiez la valeur, donc aucun plugin de canal passé à `--channels` n'est admis. Si seule une entrée individuelle est invalide, il supprime cette entrée et applique le reste. |


437 443 

438La plupart d'entre elles sont des verrous : la valeur qu'un verrou gouverne, comme les règles de permission ou `sandbox.network.allowedDomains`, est une clé ordinaire que n'importe quel niveau peut définir, et le verrou indique à Claude Code de n'honorer que la valeur gérée.444La plupart d'entre elles sont des verrous : la valeur qu'un verrou gouverne, comme les règles de permission ou `sandbox.network.allowedDomains`, est une clé ordinaire que n'importe quel niveau peut définir, et le verrou indique à Claude Code de n'honorer que la valeur gérée.

439 445 

440Le tableau couvre les contrôles de permission, de plugin et de livraison. Pour toute clé non listée ici, la colonne Scope de l'index de [référence des paramètres](/docs/fr/settings-reference#all-settings) indique si elle est réservée aux sources gérées ; les clés restantes réservées aux sources gérées incluent l'URL de connexion de la passerelle, la version, le navigateur, le simulateur mobile, l'hôte SSH, la session locale Desktop, le chemin binaire du sandbox, la tarification du modèle, la restriction du modèle et les contrôles CLAUDE.md.446Le tableau couvre les contrôles de permission, de plugin et de livraison. Pour toute clé non listée ici, la colonne Scope de l'index de [référence des paramètres](/docs/fr/settings-reference#all-settings) indique si elle est réservée aux sources gérées.

441 447 

442| Paramètre | Description |448| Paramètre | Description |

443| :- | :- |449| :- | :- |

mcp.md +6 −6

Details

273 273 

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

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

276* `⊘ Disabled for this project (re-enable via /mcp)` : un serveur que la liste [`disabledMcpServers`](#disable-a-server-without-removing-it) du projet nomme. Claude Code l'affiche à la fois dans `claude mcp list` et `claude mcp get <name>`. Réactivez le serveur à partir du panneau `/mcp`. Avant la v2.1.238, les deux commandes se connectaient à un serveur désactivé pour le vérifier et signalaient le résultat de la connexion.276* `⊘ Disabled for this project (re-enable via /mcp)` : un serveur que la liste [`disabledMcpServers`](#disable-a-server-without-removing-it) du projet nomme. Claude Code l'affiche à la fois dans `claude mcp list` et `claude mcp get <name>`. Réactivez le serveur à partir du panneau `/mcp`.

277 277 

278Les serveurs WebSocket n'apparaissent pas dans la sortie de `claude mcp list`. Utilisez `claude mcp get <name>` ou le panneau `/mcp` pour les vérifier.278Les serveurs WebSocket n'apparaissent pas dans la sortie de `claude mcp list`. Utilisez `claude mcp get <name>` ou le panneau `/mcp` pour les vérifier.

279 279 


321 321 

322* **Espaces blancs cachés** : Claude Code avertit lorsqu'une valeur de configuration MCP porte des espaces blancs cachés en début ou en fin, ce qui provient souvent du collage d'un jeton avec une nouvelle ligne de fin. Claude Code vérifie `command`, `url`, chaque entrée `args`, et les valeurs et noms de clés sous `env` et `headers`. Claude Code affiche l'avertissement dans la sortie de `claude mcp list` et dans `/mcp`, en nommant les champs affectés sans répéter leurs valeurs, par exemple `Leading or trailing whitespace in: headers.Authorization`. Claude Code ne supprime pas les espaces blancs et utilise les valeurs exactement telles qu'écrites, donc modifiez la configuration pour les supprimer.322* **Espaces blancs cachés** : Claude Code avertit lorsqu'une valeur de configuration MCP porte des espaces blancs cachés en début ou en fin, ce qui provient souvent du collage d'un jeton avec une nouvelle ligne de fin. Claude Code vérifie `command`, `url`, chaque entrée `args`, et les valeurs et noms de clés sous `env` et `headers`. Claude Code affiche l'avertissement dans la sortie de `claude mcp list` et dans `/mcp`, en nommant les champs affectés sans répéter leurs valeurs, par exemple `Leading or trailing whitespace in: headers.Authorization`. Claude Code ne supprime pas les espaces blancs et utilise les valeurs exactement telles qu'écrites, donc modifiez la configuration pour les supprimer.

323* **Même nom dans plus d'une portée** : si vous définissez le même nom de serveur dans plus d'une [scope](#mcp-installation-scopes) avec des points de terminaison différents, Claude Code avertit du conflit dans la sortie de `claude mcp list` et dans `/mcp`. Claude Code stocke les connexions OAuth par point de terminaison, donc lorsque vous authentifiez la définition qui se charge dans un projet, vous devez toujours vous connecter séparément dans un projet où une définition différente se charge. Conservez le point de terminaison que vous voulez et supprimez les autres avec `claude mcp remove <name> --scope <scope>`. Dans l'avertissement, Claude Code cite le point de terminaison de chaque portée tel qu'écrit dans votre configuration, avec les références [`${VAR}`](#environment-variable-expansion-in-mcp-json) non développées, donc il n'affiche jamais une valeur résolue telle qu'une clé API.323* **Même nom dans plus d'une portée** : si vous définissez le même nom de serveur dans plus d'une [scope](#mcp-installation-scopes) avec des points de terminaison différents, Claude Code avertit du conflit dans la sortie de `claude mcp list` et dans `/mcp`. Claude Code stocke les connexions OAuth par point de terminaison, donc lorsque vous authentifiez la définition qui se charge dans un projet, vous devez toujours vous connecter séparément dans un projet où une définition différente se charge. Conservez le point de terminaison que vous voulez et supprimez les autres avec `claude mcp remove <name> --scope <scope>`. Dans l'avertissement, Claude Code cite le point de terminaison de chaque portée tel qu'écrit dans votre configuration, avec les références [`${VAR}`](#environment-variable-expansion-in-mcp-json) non développées, donc il n'affiche jamais une valeur résolue telle qu'une clé API.

324* **Noms réservés** : Claude Code réserve les noms de ses serveurs intégrés, y compris `workspace`, `claude-in-chrome`, `computer-use`, `Claude Preview`, et `Claude Browser`. Si votre configuration définit un serveur avec un nom réservé, Claude Code le saute au moment du chargement et affiche un avertissement vous demandant de le renommer. `claude mcp add` rejette un nom réservé avec une erreur. `Claude Preview` et `Claude Browser` nomment tous deux le serveur intégré que le [volet d'aperçu de l'application de bureau Claude Code](/docs/fr/desktop#preview-your-app) utilise. Avant la v2.1.205, `Claude Browser` n'était pas réservé, donc un serveur configuré par l'utilisateur pouvait s'enregistrer sous ce nom.324* **Noms réservés** : Claude Code réserve les noms de ses serveurs intégrés, y compris `workspace`, `claude-in-chrome`, `computer-use`, `Claude Preview`, et `Claude Browser`. Si votre configuration définit un serveur avec un nom réservé, Claude Code le saute au moment du chargement et affiche un avertissement vous demandant de le renommer. `claude mcp add` rejette un nom réservé avec une erreur. `Claude Preview` et `Claude Browser` nomment tous deux le serveur intégré que le [volet d'aperçu de l'application de bureau Claude Code](/docs/fr/desktop#preview-your-app) utilise.

325* **Variable d'environnement manquante** : si une référence [`${VAR}`](#environment-variable-expansion-in-mcp-json) dans la configuration d'un serveur nomme une variable qui n'est pas définie et n'a pas de `:-default`, Claude Code avertit dans la sortie de `claude mcp list` et dans `/mcp`, en nommant la variable, et charge toujours le serveur avec le texte `${VAR}` non développé. Définissez la variable ou ajoutez un fallback `${VAR:-default}`. Dans l'`url` et les `headers` d'un serveur distant, certaines variables d'identifiants [lisent comme vides](#credential-variables-that-read-as-empty) à la place, sans avertissement.325* **Variable d'environnement manquante** : si une référence [`${VAR}`](#environment-variable-expansion-in-mcp-json) dans la configuration d'un serveur nomme une variable qui n'est pas définie et n'a pas de `:-default`, Claude Code avertit dans la sortie de `claude mcp list` et dans `/mcp`, en nommant la variable, et charge toujours le serveur avec le texte `${VAR}` non développé. Définissez la variable ou ajoutez un fallback `${VAR:-default}`. Dans l'`url` et les `headers` d'un serveur distant, certaines variables d'identifiants [lisent comme vides](#credential-variables-that-read-as-empty) à la place, sans avertissement.

326 326 

327<h4 id="tool-availability">327<h4 id="tool-availability">


417 Échecs de première connexion417 Échecs de première connexion

418</h4>418</h4>

419 419 

420Lorsque la première connexion d'un serveur HTTP ou SSE échoue avec une erreur transitoire, telle qu'une réponse 5xx, une connexion refusée, ou un délai d'expiration, Claude Code réessaie jusqu'à trois fois. Si la connexion échoue toujours, Claude Code marque le serveur comme défaillant. Claude Code réessaie de cette façon au démarrage et lorsqu'un serveur est ajouté en cours de session. Cela inclut un serveur que Claude Code ajoute à une [session cloud](/docs/fr/claude-code-on-the-web) à partir de sa configuration et un serveur que vous ajoutez avec la méthode [`setMcpServers()`](/docs/fr/agent-sdk/typescript) du Agent SDK.420Lorsque la première connexion d'un serveur HTTP ou SSE échoue avec une erreur transitoire, telle qu'une réponse 5xx, une connexion refusée, ou un délai d'expiration, Claude Code réessaie jusqu'à trois fois. Si la connexion échoue toujours, Claude Code marque le serveur comme défaillant.

421 421 

422Claude Code ne réessaie pas dans ces cas :422Claude Code ne réessaie pas dans ces cas :

423 423 


466 466 

467Un `timeout` par serveur d'au moins 1000 agit également comme un plancher sur le délai d'inactivité décrit ci-dessous : Claude Code n'abandonne jamais les appels d'outil de ce serveur pour inactivité plus tôt que le `timeout` par serveur. Nécessite Claude Code v2.1.203 ou ultérieur.467Un `timeout` par serveur d'au moins 1000 agit également comme un plancher sur le délai d'inactivité décrit ci-dessous : Claude Code n'abandonne jamais les appels d'outil de ce serveur pour inactivité plus tôt que le `timeout` par serveur. Nécessite Claude Code v2.1.203 ou ultérieur.

468 468 

469Un appel d'outil à un serveur MCP qui n'envoie aucune réponse et aucune notification de progression pendant la fenêtre d'inactivité abandonne avec une erreur au lieu d'attendre la limite de temps mur. Il s'applique à tous les types de serveurs sauf les serveurs IDE et les serveurs en processus du SDK. La fenêtre d'inactivité par défaut est de cinq minutes pour les serveurs HTTP, SSE, WebSocket, et [connecteur claude.ai](#use-mcp-servers-from-claude-ai), et de 30 minutes pour les serveurs stdio. Avant la v2.1.203, les serveurs stdio étaient exempts du délai d'inactivité.469Un appel d'outil à un serveur MCP qui n'envoie aucune réponse et aucune notification de progression pendant la fenêtre d'inactivité abandonne avec une erreur au lieu d'attendre la limite de temps mur. Le délai d'inactivité s'applique à tous les types de serveurs sauf les serveurs IDE et les serveurs en processus du SDK. La fenêtre d'inactivité par défaut est de cinq minutes pour les serveurs HTTP, SSE, WebSocket, et [connecteur claude.ai](#use-mcp-servers-from-claude-ai), et de 30 minutes pour les serveurs stdio. Avant la v2.1.203, les serveurs stdio étaient exempts du délai d'inactivité.

470 470 

471Définissez la variable d'environnement [`CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT`](/docs/fr/env-vars) en millisecondes pour changer la fenêtre d'inactivité, ou définissez-la à `0` pour désactiver la vérification.471Définissez la variable d'environnement [`CLAUDE_CODE_MCP_TOOL_IDLE_TIMEOUT`](/docs/fr/env-vars) en millisecondes pour changer la fenêtre d'inactivité, ou définissez-la à `0` pour désactiver la vérification.

472 472 


553 553 

554Les serveurs de plugins apparaissent dans `/mcp` avec des indicateurs montrant qu'ils proviennent de plugins.554Les serveurs de plugins apparaissent dans `/mcp` avec des indicateurs montrant qu'ils proviennent de plugins.

555 555 

556Pour un serveur stdio d'un plugin, `claude mcp get` imprime `Command: stdio`, une ligne `Args:` vide, et chaque variable d'environnement comme `NAME=[REDACTED]`. Les valeurs sont masquées car elles peuvent contenir des identifiants.

557 

556**Noms d'outils MCP des plugins** :558**Noms d'outils MCP des plugins** :

557 559 

558Les outils d'un serveur MCP regroupé dans un plugin incluent à la fois le nom du plugin et la clé du serveur dans leur nom appelable. La forme complète est `mcp__plugin_<plugin-name>_<server-name>__<tool-name>`, où tout caractère en dehors de `A-Z`, `a-z`, `0-9`, `_`, et `-` est remplacé par `_`. Pour le serveur `database-tools` regroupé dans un plugin nommé `my-plugin`, un outil `query` est appelable comme :560Les outils d'un serveur MCP regroupé dans un plugin incluent à la fois le nom du plugin et la clé du serveur dans leur nom appelable. La forme complète est `mcp__plugin_<plugin-name>_<server-name>__<tool-name>`, où tout caractère en dehors de `A-Z`, `a-z`, `0-9`, `_`, et `-` est remplacé par `_`. Pour le serveur `database-tools` regroupé dans un plugin nommé `my-plugin`, un outil `query` est appelable comme :


1456* Les noms de propriétés au niveau supérieur doivent faire entre 1 et 64 caractères et utiliser uniquement des lettres ASCII et des chiffres, `_`, `.` et `-`1458* Les noms de propriétés au niveau supérieur doivent faire entre 1 et 64 caractères et utiliser uniquement des lettres ASCII et des chiffres, `_`, `.` et `-`

1457* Le schéma doit être valide par rapport au méta-schéma JSON Schema draft 2020-12. Claude Code applique cette vérification aux schémas qui ne déclarent pas de `$schema` et aux schémas qui déclarent draft 2020-12. Un schéma qui déclare un autre dialecte ignore cette vérification, bien que la vérification du nom de propriété ci-dessus s'applique toujours1459* Le schéma doit être valide par rapport au méta-schéma JSON Schema draft 2020-12. Claude Code applique cette vérification aux schémas qui ne déclarent pas de `$schema` et aux schémas qui déclarent draft 2020-12. Un schéma qui déclare un autre dialecte ignore cette vérification, bien que la vérification du nom de propriété ci-dessus s'applique toujours

1458 1460 

1459Claude Code exécute les vérifications après la [réécriture du combinateur au niveau racine](#tool-input-schemas-with-a-root-level-combinator), sur le schéma qu'il enverrait réellement.

1460 

1461Lorsque Claude Code exclut un outil, il enregistre la raison dans le journal du serveur et indique à Claude quels outils il a exclus et pourquoi, afin que vous puissiez demander à Claude pourquoi un outil est manquant. Si vous corrigez le schéma sur le serveur, l'outil réapparaît la prochaine fois que Claude Code charge les outils du serveur.1461Lorsque Claude Code exclut un outil, il enregistre la raison dans le journal du serveur et indique à Claude quels outils il a exclus et pourquoi, afin que vous puissiez demander à Claude pourquoi un outil est manquant. Si vous corrigez le schéma sur le serveur, l'outil réapparaît la prochaine fois que Claude Code charge les outils du serveur.

1462 1462 

1463Claude Code active l'exclusion via un drapeau de fonctionnalité qu'il récupère auprès d'Anthropic. Sur un [déploiement où la récupération de drapeaux est désactivée](/docs/fr/env-vars#features-that-need-feature-flag-fetching), ou sur une machine dont les drapeaux n'ont jamais été reçus, comme une machine isolée du réseau, Claude Code exécute toujours les vérifications et enregistre dans le journal du serveur quel outil serait rejeté, mais envoie le schéma de l'outil à l'API de toute façon. L'API rejette une requête qui inclut ce schéma avec [une erreur 400 nommant l'outil par sa position](/docs/fr/errors#tool-input-schema-is-invalid). Avant la v2.1.216, aucun déploiement n'exécutait ces vérifications.1463Claude Code active l'exclusion via un drapeau de fonctionnalité qu'il récupère auprès d'Anthropic. Sur un [déploiement où la récupération de drapeaux est désactivée](/docs/fr/env-vars#features-that-need-feature-flag-fetching), ou sur une machine dont les drapeaux n'ont jamais été reçus, comme une machine isolée du réseau, Claude Code exécute toujours les vérifications et enregistre dans le journal du serveur quel outil serait rejeté, mais envoie le schéma de l'outil à l'API de toute façon. L'API rejette une requête qui inclut ce schéma avec [une erreur 400 nommant l'outil par sa position](/docs/fr/errors#tool-input-schema-is-invalid). Avant la v2.1.216, aucun déploiement n'exécutait ces vérifications.

Details

360 360 

361 Ce qui se passe ensuite vous indique où se trouve le problème :361 Ce qui se passe ensuite vous indique où se trouve le problème :

362 362 

363 * La commande démarre et attend l'entrée : le serveur lui-même fonctionne. Exécutez `claude mcp get <name>` et confirmez que la commande affichée là correspond à ce que vous venez d'exécuter. Si la commande affichée diffère de ce que vous avez tapé, vous avez probablement omis le séparateur `--` avant la commande du serveur. Supprimez le serveur et rajoutez-le avec `--` en place. Si vous avez écrit `.mcp.json` à la main, vérifiez sa syntaxe et son emplacement.363 * La commande démarre et attend l'entrée : le serveur lui-même fonctionne.

364 

365 Exécutez `claude mcp get <name>` et confirmez que la commande affichée là correspond à ce que vous venez d'exécuter. Si la commande affichée diffère de ce que vous avez tapé, vous avez probablement omis le séparateur `--` avant la commande du serveur. Supprimez le serveur et rajoutez-le avec `--` en place. Si vous avez écrit `.mcp.json` à la main, vérifiez sa syntaxe et son emplacement. Avant la v2.1.285, `claude mcp get` n'affichait aucune ligne `Command` pour une entrée stdio enregistrée sans champ `type`, comme une entrée `.mcp.json` écrite à la main. Sur ces versions, exécutez `claude mcp list` à la place, qui affiche la ligne de commande de toute façon.

364 * La commande génère une erreur : le message indique ce qui manque, comme Node.js ou un navigateur.366 * La commande génère une erreur : le message indique ce qui manque, comme Node.js ou un navigateur.

365 </Accordion>367 </Accordion>

366 368 

model-config.md +10 −5

Details

39| **`sonnet`** | Utilise le dernier modèle Sonnet pour les tâches de codage quotidiennes |39| **`sonnet`** | Utilise le dernier modèle Sonnet pour les tâches de codage quotidiennes |

40| **`opus`** | Utilise le dernier modèle Opus pour les tâches de raisonnement complexe |40| **`opus`** | Utilise le dernier modèle Opus pour les tâches de raisonnement complexe |

41| **`haiku`** | Utilise le modèle Haiku rapide et efficace pour les tâches simples |41| **`haiku`** | Utilise le modèle Haiku rapide et efficace pour les tâches simples |

42| **`sonnet[1m]`** | Utilise Sonnet avec une [fenêtre de contexte de 1 million de jetons](https://platform.claude.com/docs/en/build-with-claude/context-windows#context-window-sizes-by-model) pour les longues sessions. Aucun effet lorsque `sonnet` se résout déjà à Sonnet 5.5 ou Sonnet 5 avec leur fenêtre native de 1M ; derrière une [passerelle LLM](/docs/fr/llm-gateway), sélectionne la fenêtre de 1M pour ce modèle |42| **`sonnet[1m]`** | Utilise Sonnet avec une [fenêtre de contexte de 1 million de jetons](https://platform.claude.com/docs/en/build-with-claude/context-windows#context-window-sizes-by-model) pour les longues sessions. Aucun effet lorsque `sonnet` se résout déjà à Sonnet 5.5 ou Sonnet 5 avec leur fenêtre native de 1M |

43| **`opus[1m]`** | Utilise Opus avec une [fenêtre de contexte de 1 million de jetons](https://platform.claude.com/docs/en/build-with-claude/context-windows#context-window-sizes-by-model) pour les longues sessions |43| **`opus[1m]`** | Utilise Opus avec une [fenêtre de contexte de 1 million de jetons](https://platform.claude.com/docs/en/build-with-claude/context-windows#context-window-sizes-by-model) pour les longues sessions |

44| **`opusplan`** | Mode spécial qui utilise `opus` pendant le mode plan, puis bascule vers `sonnet` pour l'exécution |44| **`opusplan`** | Mode spécial qui utilise `opus` pendant le mode plan, puis bascule vers `sonnet` pour l'exécution |

45 45 


521 Chaînes de modèles de secours521 Chaînes de modèles de secours

522</h3>522</h3>

523 523 

524Quand le modèle principal est surchargé, indisponible ou retourne une autre erreur serveur non renouvelable, Claude Code peut basculer vers un modèle de secours au lieu d'échouer la demande. Les erreurs d'authentification, de facturation, de limite de débit, de taille de demande et de transport, et un [refus par la vérification de politique de votre organisation](/docs/fr/errors#automatic-retries), ne déclenchent jamais un basculement ; ceux-ci suivent leur gestion normale des tentatives et des erreurs.524Quand le modèle principal est surchargé, indisponible ou retourne une autre erreur serveur non renouvelable, Claude Code peut basculer vers un modèle de secours au lieu d'échouer la demande. Les erreurs d'authentification, de facturation, de limite de débit, de taille de demande et de transport, et un [refus par la vérification de politique de votre organisation](/docs/fr/errors#automatic-retries), ne déclenchent jamais un basculement ; ceux-ci suivent leur gestion normale des tentatives et des erreurs. Il bascule quand [Amazon Bedrock](/docs/fr/amazon-bedrock#when-a-model-is-disabled-mid-session) ou [Agent Platform de Google Cloud](/docs/fr/google-vertex-ai#when-a-model-is-disabled-mid-session) refuse un modèle que votre compte ne peut pas invoquer, ce que Claude Code traite comme le modèle étant indisponible plutôt que comme une erreur d'authentification.

525 525 

526Configurez un ou plusieurs modèles de secours et Claude Code les essaie dans l'ordre, affichant un avis quand il bascule. Le basculement dure uniquement pour le tour actuel, de sorte que votre prochain message essaie d'abord le modèle principal à nouveau. Claude Code limite les chaînes à trois modèles après suppression des doublons et ignore les entrées supplémentaires.526Configurez un ou plusieurs modèles de secours et Claude Code les essaie dans l'ordre, affichant un avis quand il bascule. Le basculement dure uniquement pour le tour actuel, de sorte que votre prochain message essaie d'abord le modèle principal à nouveau. Claude Code limite les chaînes à trois modèles après suppression des doublons et ignore les entrées supplémentaires.

527 527 


775 775 

776Claude Code vérifie ces exigences de plan uniquement quand il se connecte directement à l'API Anthropic. Si vous pointez `ANTHROPIC_BASE_URL` vers une [passerelle LLM](/docs/fr/llm-gateway#subscriptions-and-gateways) et votre connexion claude.ai enregistrée reste la credential active, Claude Code ne vérifie pas les crédits d'utilisation de votre plan. Les options `[1m]` restent disponibles dans `/model`, et la passerelle décide si la demande réussit. Avant la v2.1.229, Claude Code rejetait `/model sonnet[1m]` dans cette configuration quand il ne pouvait pas confirmer les crédits d'utilisation sur le compte.776Claude Code vérifie ces exigences de plan uniquement quand il se connecte directement à l'API Anthropic. Si vous pointez `ANTHROPIC_BASE_URL` vers une [passerelle LLM](/docs/fr/llm-gateway#subscriptions-and-gateways) et votre connexion claude.ai enregistrée reste la credential active, Claude Code ne vérifie pas les crédits d'utilisation de votre plan. Les options `[1m]` restent disponibles dans `/model`, et la passerelle décide si la demande réussit. Avant la v2.1.229, Claude Code rejetait `/model sonnet[1m]` dans cette configuration quand il ne pouvait pas confirmer les crédits d'utilisation sur le compte.

777 777 

778<span id="context-window-behind-a-gateway" />

779 

780Si vous définissez `ANTHROPIC_BASE_URL` sur une [passerelle LLM](/docs/fr/llm-gateway) ou un autre proxy, Claude Code donne à chaque modèle qu'il reconnaît la même fenêtre de contexte que le modèle a sur l'API Anthropic. Fable 5.1, Fable 5, Sonnet 5 et ultérieur, et Opus 4.7 et ultérieur obtiennent la fenêtre de 1M sans variante `[1m]` à sélectionner, et un modèle qui n'atteint 1M que via sa variante `[1m]`, comme Opus 4.6, s'exécute à 200K sans elle. Claude Code ne peut pas détecter une limite inférieure que la passerelle ou le serveur derrière elle applique. Si votre passerelle rejette les demandes au-dessus de 200K jetons, exécutez [`/autocompact 200k`](#set-the-auto-compact-window) de sorte que les sessions se compactent à cette limite.

781 

778Pour désactiver le contexte de 1M, définissez `CLAUDE_CODE_DISABLE_1M_CONTEXT=1`. Claude Code supprime les variantes de modèle de 1M du sélecteur de modèle. Sur les modèles avec une fenêtre de 1M native, comme Sonnet 5 et les modèles Fable, il traite également le modèle comme ayant une fenêtre de contexte de 200K :782Pour désactiver le contexte de 1M, définissez `CLAUDE_CODE_DISABLE_1M_CONTEXT=1`. Claude Code supprime les variantes de modèle de 1M du sélecteur de modèle. Sur les modèles avec une fenêtre de 1M native, comme Sonnet 5 et les modèles Fable, il traite également le modèle comme ayant une fenêtre de contexte de 200K :

779 783 

780* Avec la compaction automatique activée, les sessions se compactent à la limite de 200K via la [compaction automatique](#set-the-auto-compact-window). Définir la fenêtre de compaction automatique au-dessus de 200K ne lève pas la retenue, car Claude Code limite cette fenêtre à la fenêtre de contexte du modèle.784* Avec la compaction automatique activée, les sessions se compactent à la limite de 200K via la [compaction automatique](#set-the-auto-compact-window). Définir la fenêtre de compaction automatique au-dessus de 200K ne lève pas la retenue, car Claude Code limite cette fenêtre à la fenêtre de contexte du modèle.


803 807 

804Sur l'API Anthropic, Sonnet 5.5 et Sonnet 5 s'exécutent toujours avec la fenêtre de contexte de 1M. Il n'y a pas de variante de 200K, pas de suffixe `[1m]` à sélectionner, et aucun crédit d'utilisation requis sur aucun plan. Les sessions se compactent automatiquement avant que la fenêtre ne se remplisse, à environ 967K jetons par défaut ; définissez [`CLAUDE_CODE_AUTO_COMPACT_WINDOW`](/docs/fr/env-vars) pour choisir un seuil différent.808Sur l'API Anthropic, Sonnet 5.5 et Sonnet 5 s'exécutent toujours avec la fenêtre de contexte de 1M. Il n'y a pas de variante de 200K, pas de suffixe `[1m]` à sélectionner, et aucun crédit d'utilisation requis sur aucun plan. Les sessions se compactent automatiquement avant que la fenêtre ne se remplisse, à environ 967K jetons par défaut ; définissez [`CLAUDE_CODE_AUTO_COMPACT_WINDOW`](/docs/fr/env-vars) pour choisir un seuil différent.

805 809 

806Deux configurations budgètent la fenêtre à 200K à la place :810Claude Code donne à Sonnet 5.5 et Sonnet 5 la même fenêtre de 1M derrière une [passerelle LLM](/docs/fr/llm-gateway) ou un autre `ANTHROPIC_BASE_URL` personnalisé. Si votre passerelle applique une limite inférieure, voir [la fenêtre de contexte derrière une passerelle](#context-window-behind-a-gateway).

811 

812Ce paramètre budgète la fenêtre à 200K à la place :

807 813 

808* **Passerelle LLM** : quand `ANTHROPIC_BASE_URL` pointe vers une [passerelle](/docs/fr/llm-gateway), Claude Code ne peut pas vérifier le support de 1M. Pour utiliser la fenêtre complète, sélectionnez Sonnet 5.5 (1M context) dans le sélecteur de modèle, qui mappe à `sonnet[1m]`, ou exécutez `/model claude-sonnet-5[1m]` pour Sonnet 5.

809* **`CLAUDE_CODE_DISABLE_1M_CONTEXT=1`** : tient les sessions sur chaque modèle avec une fenêtre de 1M native à une fenêtre de 200K ; voir [Contexte étendu](#extended-context) pour comment la retenue est appliquée. Utile pour les déploiements qui ont besoin de limiter le contexte.814* **`CLAUDE_CODE_DISABLE_1M_CONTEXT=1`** : tient les sessions sur chaque modèle avec une fenêtre de 1M native à une fenêtre de 200K ; voir [Contexte étendu](#extended-context) pour comment la retenue est appliquée. Utile pour les déploiements qui ont besoin de limiter le contexte.

810 815 

811<h2 id="context-window-and-auto-compaction">816<h2 id="context-window-and-auto-compaction">


841* Les [sessions cloud](/docs/fr/claude-code-on-the-web) se compactent à mesure que la conversation approche de la limite du modèle846* Les [sessions cloud](/docs/fr/claude-code-on-the-web) se compactent à mesure que la conversation approche de la limite du modèle

842* Sonnet 4.6 et Opus 4.6 sans [contexte étendu](#extended-context) se compactent à la limite de 200 K, tout comme Opus 4.8 et versions ultérieures lorsqu'ils s'exécutent avec une fenêtre de contexte de 200 K, comme sur Amazon Bedrock, Google Cloud's Agent Platform et Microsoft Foundry847* Sonnet 4.6 et Opus 4.6 sans [contexte étendu](#extended-context) se compactent à la limite de 200 K, tout comme Opus 4.8 et versions ultérieures lorsqu'ils s'exécutent avec une fenêtre de contexte de 200 K, comme sur Amazon Bedrock, Google Cloud's Agent Platform et Microsoft Foundry

843* Lorsque vous définissez [`CLAUDE_CODE_DISABLE_1M_CONTEXT=1`](/docs/fr/env-vars), les modèles avec une fenêtre native de 1 M, comme Sonnet 5 et les modèles Fable, se compactent à la limite de 200 K848* Lorsque vous définissez [`CLAUDE_CODE_DISABLE_1M_CONTEXT=1`](/docs/fr/env-vars), les modèles avec une fenêtre native de 1 M, comme Sonnet 5 et les modèles Fable, se compactent à la limite de 200 K

844* Les modèles s'exécutant avec une fenêtre native de 1 M, comme Sonnet 5, les modèles Fable, et Opus 4.7 et versions ultérieures sur l'API Anthropic, se compactent avant que la fenêtre ne se remplisse, à environ 967 K jetons par défaut. Sur Amazon Bedrock, Google Cloud's Agent Platform et Microsoft Foundry, [Épingler les modèles pour les déploiements tiers](#pin-models-for-third-party-deployments) indique quels modèles s'exécutent avec cette fenêtre ; pour les configurations qui budgétisent Sonnet 5.5 et Sonnet 5 à 200 K à la place, consultez [Fenêtre de contexte Sonnet 5.5 et Sonnet 5](#sonnet-5-5-and-sonnet-5-context-window)849* Les modèles s'exécutant avec une fenêtre native de 1 M se compactent avant que la fenêtre ne se remplisse, à environ 967 K jetons par défaut. Sur l'API Anthropic, ceux-ci incluent Sonnet 5, les modèles Fable, et Opus 4.7 et versions ultérieures. Sur Amazon Bedrock, Google Cloud's Agent Platform et Microsoft Foundry, consultez [Épingler les modèles pour les déploiements tiers](#pin-models-for-third-party-deployments) pour savoir quels modèles s'exécutent avec cette fenêtre. Derrière une `ANTHROPIC_BASE_URL` personnalisée, consultez [la fenêtre de contexte derrière une passerelle](#context-window-behind-a-gateway)

845* Les sessions sur un ID de modèle que Claude Code ne reconnaît pas, comme un alias de [passerelle LLM](/docs/fr/llm-gateway), se compactent à la fenêtre de contexte que Claude Code suppose pour l'ID ; consultez [Corriger la fenêtre pour une passerelle ou un ID de modèle personnalisé](#correct-the-window-for-a-gateway-or-custom-model-id)850* Les sessions sur un ID de modèle que Claude Code ne reconnaît pas, comme un alias de [passerelle LLM](/docs/fr/llm-gateway), se compactent à la fenêtre de contexte que Claude Code suppose pour l'ID ; consultez [Corriger la fenêtre pour une passerelle ou un ID de modèle personnalisé](#correct-the-window-for-a-gateway-or-custom-model-id)

846 851 

847<h3 id="correct-the-window-for-a-gateway-or-custom-model-id">852<h3 id="correct-the-window-for-a-gateway-or-custom-model-id">

Details

1430* `error.type` : pourquoi Claude Code a arrêté la session. Présent uniquement sur les événements `refused` :1430* `error.type` : pourquoi Claude Code a arrêté la session. Présent uniquement sur les événements `refused` :

1431 * `"helper_failed"` : une [exécution d'assistant de politique a échoué](/docs/fr/settings-reference#helper-failures)1431 * `"helper_failed"` : une [exécution d'assistant de politique a échoué](/docs/fr/settings-reference#helper-failures)

1432 * `"policy_invalid"` : les paramètres gérés contiennent une erreur qui arrête Claude Code de démarrer, ou une source d'administration n'a pas pu se charger, donc Claude Code ne peut pas vérifier l'application de la connexion à l'organisation1432 * `"policy_invalid"` : les paramètres gérés contiennent une erreur qui arrête Claude Code de démarrer, ou une source d'administration n'a pas pu se charger, donc Claude Code ne peut pas vérifier l'application de la connexion à l'organisation

1433 * `"provider_not_allowed"` : la session utiliserait un fournisseur d'API, ou enverrait le trafic d'un fournisseur à un hôte, que la liste [`allowedProviders`](/docs/fr/settings-reference#allowedproviders) gérée ne permet pas. Nécessite Claude Code v2.1.285 ou ultérieur

1433 * `"consent_rejected"` : l'utilisateur a rejeté la [boîte de dialogue d'approbation de sécurité](/docs/fr/server-managed-settings#security-approval-dialogs) pour les paramètres gérés par le serveur1434 * `"consent_rejected"` : l'utilisateur a rejeté la [boîte de dialogue d'approbation de sécurité](/docs/fr/server-managed-settings#security-approval-dialogs) pour les paramètres gérés par le serveur

1434 * `"force_refresh_failed"` : la récupération de paramètres que [`forceRemoteSettingsRefresh`](/docs/fr/settings-reference#forceremotesettingsrefresh) nécessite a échoué1435 * `"force_refresh_failed"` : la récupération de paramètres que [`forceRemoteSettingsRefresh`](/docs/fr/settings-reference#forceremotesettingsrefresh) nécessite a échoué

1435 * `"gateway_rejected"` : une [passerelle d'applications Claude](/docs/fr/claude-apps-gateway) a répondu au chargement des paramètres gérés avec HTTP 4031436 * `"gateway_rejected"` : une [passerelle d'applications Claude](/docs/fr/claude-apps-gateway) a répondu au chargement des paramètres gérés avec HTTP 403

Details

246| `storage.googleapis.com` | Programme d'installation natif et mise à jour automatique native sur les versions antérieures à 2.1.116 |246| `storage.googleapis.com` | Programme d'installation natif et mise à jour automatique native sur les versions antérieures à 2.1.116 |

247| `registry.npmjs.org` | Installations de plugins (récupération de packages de plugins source npm et installation des dépendances de packages Node.js des plugins), serveurs MCP lancés avec `npx` et le registre de packages pour les installations npm et bun de Claude Code lui-même |247| `registry.npmjs.org` | Installations de plugins (récupération de packages de plugins source npm et installation des dépendances de packages Node.js des plugins), serveurs MCP lancés avec `npx` et le registre de packages pour les installations npm et bun de Claude Code lui-même |

248| `bridge.claudeusercontent.com` | Extension [Claude in Chrome](/docs/fr/chrome) WebSocket bridge |248| `bridge.claudeusercontent.com` | Extension [Claude in Chrome](/docs/fr/chrome) WebSocket bridge |

249| `*.frame.claudeusercontent.com` | Lectures de contenu [Artifact](/docs/fr/artifacts). L'interface de ligne de commande récupère les fichiers d'un artifact depuis cet hôte lorsque Claude en ouvre un, et uniquement lorsque l'outil Artifact est [disponible](/docs/fr/artifacts#availability) pour votre compte. Pour désactiver l'outil et supprimer cette exigence, définissez [`"enableArtifact": false`](/docs/fr/settings-reference#enableartifact) ou [`CLAUDE_CODE_DISABLE_ARTIFACT=1`](/docs/fr/env-vars) ; Claude Code honore également le paramètre [`disableArtifact`](/docs/fr/settings-reference#disableartifact) déprécié. Consultez [Désactiver les artifacts](/docs/fr/artifacts#disable-artifacts) pour voir comment ces paramètres interagissent |249| `*.frame.claudeusercontent.com` | Lectures de contenu [Artifact](/docs/fr/artifacts). L'interface de ligne de commande récupère les fichiers d'un artifact depuis cet hôte lorsque Claude en ouvre un, et uniquement lorsque l'outil Artifact est [disponible](/docs/fr/artifacts#availability) pour votre compte. Pour désactiver l'outil et supprimer cette exigence, définissez [`"enableArtifact": false`](/docs/fr/settings-reference#enableartifact) ou [`CLAUDE_CODE_DISABLE_ARTIFACT=1`](/docs/fr/env-vars) |

250| `github.com` | Clonage des [marketplaces de plugins](/docs/fr/plugins/overview) et des plugins hébergés sur GitHub, y compris la marketplace officielle Anthropic, via HTTPS ou SSH. Pour cloner les sources GitHub `owner/repo` via HTTPS uniquement, définissez [`CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`](/docs/fr/env-vars) |250| `github.com` | Clonage des [marketplaces de plugins](/docs/fr/plugins/overview) et des plugins hébergés sur GitHub, y compris la marketplace officielle Anthropic, via HTTPS ou SSH. Pour cloner les sources GitHub `owner/repo` via HTTPS uniquement, définissez [`CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1`](/docs/fr/env-vars) |

251| `raw.githubusercontent.com` | Flux de changelog pour [`/release-notes`](/docs/fr/commands). Dans les sessions interactives, Claude Code le récupère également en arrière-plan au démarrage lorsque son changelog en cache ne couvre pas encore la version en cours d'exécution, par exemple au premier démarrage après une mise à jour ; les sessions non interactives et cloud ne le récupèrent jamais |251| `raw.githubusercontent.com` | Flux de changelog pour [`/release-notes`](/docs/fr/commands). Dans les sessions interactives, Claude Code le récupère également en arrière-plan au démarrage lorsque son changelog en cache ne couvre pas encore la version en cours d'exécution, par exemple au premier démarrage après une mise à jour ; les sessions non interactives et cloud ne le récupèrent jamais |

252| `*-review.googlesource.com` | Recherche de changement Gerrit sur les checkouts `googlesource.com`. Lorsqu'une session d'onglet Claude Desktop Code démarre ou reprend sur un checkout [approuvé](/docs/fr/permissions#project-allow-rules-and-workspace-trust) dont l'`origin` est un hôte `googlesource.com`, Claude Code demande anonymement au serveur `-review` de cet hôte le changement ouvert correspondant au `Change-Id` de HEAD, une fois par démarrage ou reprise. Les autres types de sessions ignorent la recherche, et aucun autre hôte Gerrit n'est contacté. Facultatif : désactiver avec [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](/docs/fr/env-vars) |252| `*-review.googlesource.com` | Recherche de changement Gerrit sur les checkouts `googlesource.com`. Lorsqu'une session d'onglet Claude Desktop Code démarre ou reprend sur un checkout [approuvé](/docs/fr/permissions#project-allow-rules-and-workspace-trust) dont l'`origin` est un hôte `googlesource.com`, Claude Code demande anonymement au serveur `-review` de cet hôte le changement ouvert correspondant au `Change-Id` de HEAD, une fois par démarrage ou reprise. Les autres types de sessions ignorent la recherche, et aucun autre hôte Gerrit n'est contacté. Facultatif : désactiver avec [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](/docs/fr/env-vars) |

Details

86| Comment vous exécutez Claude Code | Mode de permission de démarrage intégré |86| Comment vous exécutez Claude Code | Mode de permission de démarrage intégré |

87| :- | :- |87| :- | :- |

88| Un fichier de paramètres définit `disableAutoMode` sur `"disable"` | `default` |88| Un fichier de paramètres définit `disableAutoMode` sur `"disable"` | `default` |

89| `claude -p` ou le [SDK Agent](/docs/fr/agent-sdk/permissions) | `default` |89| `claude -p` ou le [SDK Agent](/docs/fr/agent-sdk/permissions#permission-modes) | `default` dans les sessions qui [récupèrent les drapeaux de fonctionnalité](/docs/fr/env-vars#features-that-need-feature-flag-fetching). Dans les sessions qui ne le font pas, comme sur un fournisseur tiers ou avec la télémétrie désactivée, `auto` avec Claude Code v2.1.285 ou version ultérieure et `default` sur les versions antérieures. Une session dans une organisation dont la politique refuse la valeur par défaut `auto` démarre dans `default` à la place |

90| Dans un terminal ou via l'[extension VS Code](/docs/fr/vs-code) | `auto` avec Claude Code v2.1.283 ou version ultérieure ; sur les versions antérieures, `auto` sur les plans Pro, Max ou Team dans les sessions qui [récupèrent les drapeaux de fonctionnalité](/docs/fr/env-vars#features-that-need-feature-flag-fetching), et `default` sinon |90| Dans un terminal ou via l'[extension VS Code](/docs/fr/vs-code) | `auto` avec Claude Code v2.1.283 ou version ultérieure ; sur les versions antérieures, `auto` sur les plans Pro, Max ou Team dans les sessions qui [récupèrent les drapeaux de fonctionnalité](/docs/fr/env-vars#features-that-need-feature-flag-fetching), et `default` sinon |

91 91 

92Dans votre [première session après une installation ou une mise à niveau](/docs/fr/env-vars#first-session-after-an-install-or-upgrade), Claude Code peut choisir le mode de permission de démarrage avant l'arrivée de ses drapeaux de fonctionnalité. Cette session peut démarrer dans un mode de permission différent de celui que le tableau indique, et votre session suivante correspond au tableau.92Dans votre [première session après une installation ou une mise à niveau](/docs/fr/env-vars#first-session-after-an-install-or-upgrade), Claude Code peut choisir le mode de permission de démarrage avant l'arrivée de ses drapeaux de fonctionnalité. Cette session peut démarrer dans un mode de permission différent de celui que le tableau indique, et votre session suivante correspond au tableau.


98* Dans un terminal, une fois, en haut de la session98* Dans un terminal, une fois, en haut de la session

99* Dans l'extension VS Code, sous forme de carte sur l'écran de nouvelle conversation qui reste jusqu'à ce que vous la fermiez99* Dans l'extension VS Code, sous forme de carte sur l'écran de nouvelle conversation qui reste jusqu'à ce que vous la fermiez

100 100 

101Sur les plans Pro, Max et Team, si votre `~/.claude/settings.json` définit un `defaultMode` autre que `auto` et qu'aucun autre fichier de paramètres n'en définit un, vos sessions continuent à démarrer dans ce mode. Claude Code demande une fois, dans le terminal ou dans l'extension VS Code, si vous souhaitez modifier le paramètre en mode auto. Si vous refusez, votre paramètre reste tel quel.101Si votre `~/.claude/settings.json` définit un `defaultMode` autre que `auto` et qu'aucun autre fichier de paramètres n'en définit un, vos sessions continuent à démarrer dans ce mode. Sur les plans Pro, Max et Team, et dans les sessions qui [ne récupèrent pas les drapeaux de fonctionnalité](/docs/fr/env-vars#features-that-need-feature-flag-fetching), Claude Code demande une fois, dans le terminal ou dans l'extension VS Code, si vous souhaitez modifier le paramètre en mode auto. Si vous refusez, votre paramètre reste tel quel.

102 102 

103<h3 id="start-in-a-different-mode">103<h3 id="start-in-a-different-mode">

104 Démarrer dans un mode de permission différent104 Démarrer dans un mode de permission différent


295 295 

296Avec Claude Code v2.1.283 ou ultérieur, le mode auto est le [mode de permission intégré de démarrage](#which-mode-a-session-starts-in) pour les sessions de terminal interactif et VS Code sur tous les plans et fournisseurs. Sur les versions antérieures, c'est le mode de permission intégré de démarrage uniquement sur les plans Pro, Max et Team.296Avec Claude Code v2.1.283 ou ultérieur, le mode auto est le [mode de permission intégré de démarrage](#which-mode-a-session-starts-in) pour les sessions de terminal interactif et VS Code sur tous les plans et fournisseurs. Sur les versions antérieures, c'est le mode de permission intégré de démarrage uniquement sur les plans Pro, Max et Team.

297 297 

298Le classificateur examine également chaque message que Claude envoie à un autre agent avec [`SendMessage`](/docs/fr/tools-reference), qu'il s'agisse de texte brut ou d'un message [d'équipe d'agents](/docs/fr/agent-teams) structuré, avant que Claude Code le livre, à la fois en mode auto et en [mode plan pendant que le classificateur examine les commandes](#analyze-before-you-edit-with-plan-mode) ; l'examen d'envoi nécessite Claude Code v2.1.222 ou ultérieur.298Le classificateur examine également chaque message que Claude envoie à un autre agent avec [`SendMessage`](/docs/fr/tools-reference), qu'il s'agisse de texte brut ou d'un message d'[équipe d'agents](/docs/fr/agent-teams) structuré, avant que Claude Code le livre, à la fois en mode auto et en [mode plan tandis que le classificateur examine les commandes](#analyze-before-you-edit-with-plan-mode) ; l'examen d'envoi nécessite Claude Code v2.1.222 ou ultérieur.

299 299 

300Par défaut, le classificateur n'examine pas les suppressions `rm` et `rmdir` ciblant un chemin critique, comme `rm -rf /` ou `rm -rf ~`. [Chemins critiques](#critical-paths) couvre ce qui leur arrive dans chaque mode de permission.300Par défaut, le classificateur n'examine pas les suppressions `rm` et `rmdir` ciblant un chemin critique, comme `rm -rf /` ou `rm -rf ~`. [Chemins critiques](#critical-paths) couvre ce qui leur arrive dans chaque mode de permission.

301 301 


309 309 

310* **Plan** : Tous les plans.310* **Plan** : Tous les plans.

311* **Organisation** : sur Team et Enterprise, le mode auto est disponible par défaut. Les administrateurs peuvent le désactiver pour l'organisation en définissant `permissions.disableAutoMode` sur `"disable"` dans les [paramètres gérés](/docs/fr/managed-settings).311* **Organisation** : sur Team et Enterprise, le mode auto est disponible par défaut. Les administrateurs peuvent le désactiver pour l'organisation en définissant `permissions.disableAutoMode` sur `"disable"` dans les [paramètres gérés](/docs/fr/managed-settings).

312* **Modèle** : sur l'API Anthropic et [Claude Platform sur AWS](/docs/fr/claude-platform-on-aws), Claude Opus 4.6 ou ultérieur, Sonnet 4.6 ou ultérieur, ou un [modèle Fable](/docs/fr/model-config#work-with-fable). Sur Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry et les sessions [passerelle d'applications Claude](/docs/fr/claude-apps-gateway) connectées, uniquement Claude Sonnet 5 ou ultérieur, Opus 4.7 ou ultérieur, et les modèles Fable. Les modèles plus anciens, y compris Sonnet 4.5, Opus 4.5, Haiku et les modèles claude-3, ne sont pas pris en charge sur aucun fournisseur.312* **Modèle** : sur l'API Anthropic et [Claude Platform sur AWS](/docs/fr/claude-platform-on-aws), Claude Opus 4.6 ou ultérieur, Sonnet 4.6 ou ultérieur, ou un [modèle Fable](/docs/fr/model-config#work-with-fable). Sur Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry et les sessions de [passerelle d'applications Claude](/docs/fr/claude-apps-gateway) connectées, uniquement Claude Sonnet 5 ou ultérieur, Opus 4.7 ou ultérieur, et les modèles Fable. Les modèles plus anciens, y compris Sonnet 4.5, Opus 4.5, Haiku et les modèles claude-3, ne sont pas pris en charge sur aucun fournisseur.

313* **Fournisseur** : disponible par défaut sur l'API Anthropic, Claude Platform sur AWS, Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry et les sessions passerelle d'applications Claude connectées.313* **Fournisseur** : disponible par défaut sur l'API Anthropic, Claude Platform sur AWS, Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry et les sessions de passerelle d'applications Claude connectées.

314 314 

315Si Claude Code signale que le mode auto n'est pas disponible, vérifiez d'abord ces exigences et si un fichier de paramètres définit [`disableAutoMode`](/docs/fr/settings-reference#disableautomode). Anthropic peut également avoir désactivé le mode auto côté serveur, ou le serveur peut avoir rejeté le mode auto pour votre compte. Une session qui a reçu l'une ou l'autre réponse garde le mode auto désactivé jusqu'à la fin de la session, alors démarrez une nouvelle session plus tard.315Si Claude Code signale que le mode auto n'est pas disponible, vérifiez d'abord ces exigences et si un fichier de paramètres définit [`disableAutoMode`](/docs/fr/settings-reference#disableautomode). Anthropic peut également avoir désactivé le mode auto côté serveur, ou le serveur peut avoir rejeté le mode auto pour votre compte. Une session qui a reçu l'une ou l'autre réponse garde le mode auto désactivé jusqu'à la fin de la session, alors démarrez une nouvelle session plus tard.

316 316 

317Un message distinct qui nomme un modèle et dit que le mode auto « ne peut pas déterminer la sécurité » d'une action signifie qu'une demande de classificateur a échoué. Cet échec est généralement transitoire, mais sur Amazon Bedrock, il peut se répéter jusqu'à ce que votre compte puisse invoquer le modèle nommé. Consultez la [référence d'erreur](/docs/fr/errors#auto-mode-cannot-determine-the-safety-of-an-action) pour les causes et ce qu'il faut faire.317Un message distinct qui nomme un modèle et dit que le mode auto « ne peut pas déterminer la sécurité » d'une action signifie qu'une demande de classificateur a échoué. Cet échec est généralement transitoire, mais sur Amazon Bedrock, il peut se répéter jusqu'à ce que votre compte puisse invoquer le modèle nommé. Consultez la [référence d'erreur](/docs/fr/errors#auto-mode-cannot-determine-the-safety-of-an-action) pour les causes et ce qu'il faut faire.

318 318 

319Si vous définissez `defaultMode: "auto"` dans les [paramètres](/docs/fr/settings-reference#all-settings) et qu'une session de terminal démarre en mode Manual sans erreur, le paramètre se trouve probablement dans `.claude/settings.json` ou `.claude/settings.local.json`. `auto` ne prend pas effet à partir de ces fichiers. Déplacez-le vers `~/.claude/settings.json`. Pour une conversation que l'extension VS Code a démarrée, vérifiez plutôt la liste propre de l'extension dans [Basculer les modes de permission](#switch-permission-modes).319Si vous définissez `defaultMode: "auto"` dans les [paramètres](/docs/fr/settings-reference#all-settings) et qu'une session de terminal démarre en mode Manual sans erreur, le paramètre est probablement dans `.claude/settings.json` ou `.claude/settings.local.json`. `auto` ne prend pas effet à partir de ces fichiers. Déplacez-le vers `~/.claude/settings.json`. Pour une conversation que l'extension VS Code a démarrée, vérifiez plutôt la liste propre de l'extension dans [Basculer les modes de permission](#switch-permission-modes).

320 320 

321<h3 id="enable-auto-mode-on-bedrock-agent-platform-or-foundry">321<h3 id="enable-auto-mode-on-bedrock-agent-platform-or-foundry">

322 Mode auto sur Bedrock, Agent Platform ou Foundry322 Mode auto sur Bedrock, Agent Platform ou Foundry

323</h3>323</h3>

324 324 

325Sur [Amazon Bedrock](/docs/fr/amazon-bedrock), [Google Cloud's Agent Platform](/docs/fr/google-vertex-ai), [Microsoft Foundry](/docs/fr/microsoft-foundry) et les sessions [passerelle d'applications Claude](/docs/fr/claude-apps-gateway) connectées, le mode auto est disponible par défaut. Avec Claude Code v2.1.283 ou ultérieur, c'est aussi le [mode de permission intégré de démarrage](#which-mode-a-session-starts-in) pour les sessions de terminal interactif et [VS Code](/docs/fr/vs-code). Pour choisir vous-même le mode de permission de démarrage, définissez `permissions.defaultMode` comme le décrit [Démarrer dans un mode de permission différent](#start-in-a-different-mode), ou choisissez un mode de permission dans l'indicateur de mode de l'extension VS Code.325Sur [Amazon Bedrock](/docs/fr/amazon-bedrock), [Google Cloud's Agent Platform](/docs/fr/google-vertex-ai), [Microsoft Foundry](/docs/fr/microsoft-foundry) et les sessions de [passerelle d'applications Claude](/docs/fr/claude-apps-gateway) connectées, le mode auto est disponible par défaut. Quand rien d'autre ne définit un mode de permission, c'est aussi le [mode de permission intégré de démarrage](#which-mode-a-session-starts-in), sur les versions que le tableau de cette section énumère. Pour choisir vous-même le mode de permission de démarrage, définissez `permissions.defaultMode` comme le décrit [Démarrer dans un mode de permission différent](#start-in-a-different-mode), ou choisissez un mode de permission dans l'indicateur de mode de l'extension VS Code.

326 326 

327Seuls Claude Sonnet 5 ou ultérieur, Opus 4.7 ou ultérieur, et les modèles Fable sont pris en charge sur ces fournisseurs. Sur tout autre modèle, la session démarre en Manual à la place.327Seuls Claude Sonnet 5 ou ultérieur, Opus 4.7 ou ultérieur, et les modèles Fable sont pris en charge sur ces fournisseurs. Sur tout autre modèle, la session démarre en Manual à la place.

328 328 


337En mode auto, Claude Code peut demander au serveur de vérifier les actions que [l'ordre de décision](#how-the-classifier-evaluates-actions) envoie pour examen, dans le cadre des demandes de modèle de la session, à la place d'envoyer ses propres demandes de classificateur. Ces sessions demandent :337En mode auto, Claude Code peut demander au serveur de vérifier les actions que [l'ordre de décision](#how-the-classifier-evaluates-actions) envoie pour examen, dans le cadre des demandes de modèle de la session, à la place d'envoyer ses propres demandes de classificateur. Ces sessions demandent :

338 338 

339* **Une connexion directe à l'API Anthropic** : dans une session de terminal interactif, sur tous les plans claude.ai et sur les comptes qui utilisent l'API Claude, au fur et à mesure qu'Anthropic le déploie. Nécessite Claude Code v2.1.271 ou ultérieur sur les plans Pro, Max et Team, et v2.1.278 ou ultérieur sur les plans Enterprise et les comptes Claude API. À partir de v2.1.282, une session qui [ne récupère pas les drapeaux de fonctionnalité](/docs/fr/env-vars#features-that-need-feature-flag-fetching), par exemple parce que vous avez désactivé la télémétrie, demande au serveur par défaut dans n'importe quel type de session.339* **Une connexion directe à l'API Anthropic** : dans une session de terminal interactif, sur tous les plans claude.ai et sur les comptes qui utilisent l'API Claude, au fur et à mesure qu'Anthropic le déploie. Nécessite Claude Code v2.1.271 ou ultérieur sur les plans Pro, Max et Team, et v2.1.278 ou ultérieur sur les plans Enterprise et les comptes Claude API. À partir de v2.1.282, une session qui [ne récupère pas les drapeaux de fonctionnalité](/docs/fr/env-vars#features-that-need-feature-flag-fetching), par exemple parce que vous avez désactivé la télémétrie, demande au serveur par défaut dans n'importe quel type de session.

340* **Un fournisseur cloud, ou une passerelle LLM ou un proxy** : sur [Claude Platform sur AWS](/docs/fr/claude-platform-on-aws), Amazon Bedrock, Google Cloud's Agent Platform et Microsoft Foundry, et chaque fois que vous pointez `ANTHROPIC_BASE_URL` vers une [passerelle LLM ou un proxy](/docs/fr/llm-gateway), quel que soit votre plan. Demander par défaut nécessite Claude Code v2.1.278 ou ultérieur.340* **Un fournisseur cloud, une passerelle LLM ou un proxy** : sur [Claude Platform sur AWS](/docs/fr/claude-platform-on-aws), Amazon Bedrock, Google Cloud's Agent Platform et Microsoft Foundry, et chaque fois que vous pointez `ANTHROPIC_BASE_URL` vers une [passerelle LLM ou un proxy](/docs/fr/llm-gateway), quel que soit votre plan. Demander par défaut nécessite Claude Code v2.1.278 ou ultérieur.

341* **Une session [passerelle d'applications Claude](/docs/fr/claude-apps-gateway) connectée** : nécessite Claude Code v2.1.280 ou ultérieur341* **Une session de [passerelle d'applications Claude](/docs/fr/claude-apps-gateway) connectée** : nécessite Claude Code v2.1.280 ou ultérieur

342 342 

343Où le serveur examine les actions, ses verdicts les décident. Deux autres résultats sont possibles :343Où le serveur examine les actions, ses verdicts les décident. Deux autres résultats sont possibles :

344 344 

345* **Le serveur n'examine pas la session** : une réponse se termine sans résultats d'examen, ou le serveur répond qu'il n'examine pas cette session. Les causes les plus courantes sont une passerelle LLM ou un proxy qui supprime la demande d'examen ou les résultats, et une plateforme, une région ou des identifiants qui n'ont pas encore de vérifications côté serveur. Claude Code revient à ses propres demandes de classificateur. Une fois que ce retour en arrière tient pour le reste de la session, il affiche un [avis sur les frais de demande de classificateur](/docs/fr/auto-mode-classifier-billing) sur les comptes où ces demandes sont facturées.345* **Le serveur n'examine pas la session** : une réponse se termine sans résultats d'examen, ou le serveur répond qu'il n'examine pas cette session. Les causes les plus courantes sont une passerelle LLM ou un proxy qui abandonne la demande d'examen ou les résultats, et une plateforme, une région ou des identifiants qui n'ont pas encore de vérifications côté serveur. Claude Code revient à ses propres demandes de classificateur. Une fois que ce retour en arrière tient pour le reste de la session, il affiche un [avis sur les frais de demande de classificateur](/docs/fr/auto-mode-classifier-billing) sur les comptes où ces demandes sont facturées.

346* **Le serveur ne donne pas de verdict pour une action** : Claude Code refuse l'action plutôt que de l'exécuter sans examen. Sur n'importe quelle connexion, cela se produit quand la réponse se termine avant l'arrivée des résultats d'examen ou que les résultats arrivent sous une forme que Claude Code ne peut pas lire. Une passerelle LLM ou un proxy qui raccourcit les réponses ou réécrit les résultats peut causer l'un ou l'autre. Sur une connexion directe à l'API Anthropic, cela se produit également quand la vérification du serveur échoue pour l'action, par exemple en dépassant le délai d'attente. [Le serveur n'a pas retourné de verdict de sécurité](/docs/fr/errors#the-server-returned-no-safety-verdict) couvre le message de refus, ce qui se passe quand les refus se répètent, et ce qu'il faut faire.346* **Le serveur ne donne pas de verdict pour une action** : Claude Code refuse l'action plutôt que de l'exécuter sans examen. Sur n'importe quelle connexion, cela se produit quand la réponse se termine avant l'arrivée des résultats d'examen ou que les résultats arrivent sous une forme que Claude Code ne peut pas lire. Une passerelle LLM ou un proxy qui raccourcit les réponses ou réécrit les résultats peut causer l'un ou l'autre. Sur une connexion directe à l'API Anthropic, cela se produit également quand la vérification du serveur échoue pour l'action, par exemple en dépassant le délai d'attente. [Le serveur n'a pas retourné de verdict de sécurité](/docs/fr/errors#the-server-returned-no-safety-verdict) couvre le message de refus, ce qui se passe quand les refus se répètent, et ce qu'il faut faire.

347 347 

348Pour ignorer la demande au serveur et toujours utiliser les propres demandes de classificateur de Claude Code, définissez [`CLAUDE_CODE_AUTO_MODE_SERVER=0`](/docs/fr/env-vars). Sur une connexion directe à l'API Anthropic, la variable nécessite Claude Code v2.1.281 ou ultérieur. La définir sur `1` active l'examen du serveur dans une session qui ne l'a pas encore, comme une session `-p` ou Agent SDK, à moins que vous n'ayez également défini `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`. Si vous définissez `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1` et laissez `CLAUDE_CODE_AUTO_MODE_SERVER` non défini, Claude Code cesse également de demander au serveur, sauf comme le décrit [Désactiver les capacités de pré-version](/docs/fr/llm-gateway-protocol#disable-pre-release-capabilities).348Pour ignorer la demande au serveur et toujours utiliser les propres demandes de classificateur de Claude Code, définissez [`CLAUDE_CODE_AUTO_MODE_SERVER=0`](/docs/fr/env-vars). Sur une connexion directe à l'API Anthropic, la variable nécessite Claude Code v2.1.281 ou ultérieur. La définir sur `1` active l'examen du serveur dans une session qui ne l'a pas encore, comme une session `-p` ou Agent SDK, à moins que vous n'ayez également défini `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1`. Si vous définissez `CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1` et laissez `CLAUDE_CODE_AUTO_MODE_SERVER` non défini, Claude Code cesse également de demander au serveur, sauf comme le décrit [Désactiver les capacités de pré-version](/docs/fr/llm-gateway-protocol#disable-pre-release-capabilities).


360* Déploiements et migrations de production360* Déploiements et migrations de production

361* Suppression en masse sur le stockage cloud361* Suppression en masse sur le stockage cloud

362* Octroi de permissions IAM ou de dépôt362* Octroi de permissions IAM ou de dépôt

363* Modification d'infrastructure partagée363* Modification de l'infrastructure partagée

364* Destruction irréversible de fichiers qui existaient avant la session364* Destruction irréversible de fichiers qui existaient avant la session

365* Forcer la poussée365* Forcer la poussée

366* Valider ou pousser une modification qui enverrait des secrets ou des données sensibles en dehors du dépôt quand il s'exécute, ou élargir ce qu'un déploiement expose. Cela couvre un flux de travail CI ou une configuration de déploiement qui transmet un secret à une destination qui ne le reçoit pas déjà, un script ou une étape de configuration qui lit un magasin de secrets et envoie les données, et une modification de configuration qui élargit ce qu'un déploiement publie, comme un registre, une visibilité, un artefact ou un paramètre de sourcemap. La vérification s'applique sur n'importe quelle branche, s'applique même quand le dépôt est public, et se déclenche quand la modification est validée ou poussée, que ce commit ou cette poussée déclenche le pipeline ou non ; la clarifier nécessite de nommer l'effet d'exécution, pas seulement le commit ou la poussée. Avant v2.1.211, cette vérification était limitée à la branche par défaut à la place : une poussée là était bloquée quand elle portait du contenu sensible, des modifications dissimulées ou mal décrites par rapport à ce que vous avez demandé, du contenu porté de l'extérieur du dépôt, ou contourné une révision que vous avez demandée366* Valider ou pousser une modification qui enverrait des secrets ou des données sensibles en dehors du dépôt quand il s'exécute, ou élargir ce qu'un déploiement expose. Cela couvre un flux de travail CI ou une configuration de déploiement qui transmet un secret à une destination qui ne le reçoit pas déjà, un script ou une étape de configuration qui lit un magasin de secrets et envoie les données, et une modification de configuration qui élargit ce qu'un déploiement publie, comme un registre, une visibilité, un artefact ou un paramètre de sourcemap. La vérification s'applique sur n'importe quelle branche, s'applique même quand le dépôt est public, et se déclenche quand la modification est validée ou poussée, que ce commit ou cette poussée déclenche le pipeline ou non ; la clarifier nécessite de nommer l'effet d'exécution, pas seulement le commit ou la poussée. Avant v2.1.211, cette vérification était limitée à la branche par défaut à la place : une poussée là était bloquée quand elle contenait du contenu sensible, des modifications dissimulées ou mal décrites par rapport à ce que vous avez demandé, du contenu porté de l'extérieur du dépôt, ou contourné un examen que vous avez demandé

367* `git reset --hard`, `git checkout -- .`, `git restore .`, `git clean -fd`, `git stash drop` ou `git stash clear`, que le classificateur présume élimineraient les modifications non validées367* `git reset --hard`, `git checkout -- .`, `git restore .`, `git clean -fd`, `git stash drop` ou `git stash clear`, que le classificateur présume abandonnerait les modifications non validées

368* `git commit --amend` quand le commit à HEAD n'a pas été créé dans cette session368* `git commit --amend` quand le commit à HEAD n'a pas été créé dans cette session

369* À partir de v2.1.198, `git commit --amend` quand le commit à HEAD a déjà été poussé. Une réécriture de message uniquement n'est pas bloquée : `--amend -m` sans rien de nouvellement préparé, sur un commit que Claude a créé pendant cette session369* À partir de v2.1.198, `git commit --amend` quand le commit à HEAD a déjà été poussé. Une réécriture de message uniquement n'est pas bloquée : `--amend -m` sans rien de nouvellement préparé, sur un commit que Claude a créé pendant cette session

370* `terraform destroy`, `pulumi destroy`, `cdk destroy` ou `terragrunt destroy`, et appliquer un plan qui détruit des ressources370* `terraform destroy`, `pulumi destroy`, `cdk destroy` ou `terragrunt destroy`, et appliquer un plan qui détruit les ressources

371* Écriture dans un gestionnaire de secrets, ou modification des enregistrements DNS ou des certificats TLS371* Écriture dans un gestionnaire de secrets, ou modification des enregistrements DNS ou des certificats TLS

372* Fusion d'une demande de tirage qu'aucun humain n'a approuvée, approbation de la propre demande de tirage de Claude, ou désactivation des vérifications CI372* Fusion d'une demande de tirage qu'aucun humain n'a approuvée, approbation de la propre demande de tirage de Claude, ou désactivation des vérifications CI

373* Publication d'un commentaire qui est lui-même une commande à l'automatisation, comme `atlantis apply` ou `/deploy` ou `/merge` d'un bot373* Publication d'un commentaire qui est lui-même une commande à l'automatisation, comme `atlantis apply` ou le `/deploy` ou `/merge` d'un bot

374* Basculement, augmentation ou suppression d'un drapeau de fonctionnalité de production374* Basculement, augmentation ou suppression d'un drapeau de fonctionnalité de production

375* Application de modifications d'infrastructure à une portée IaC protégée, ou vidage et suppression de nœuds de cluster375* Application de modifications d'infrastructure à une portée IaC protégée, ou vidage et suppression de nœuds de cluster

376* Écritures dans un cluster de calcul partagé qui vont au-delà de la ressource que vous avez nommée, comme un sélecteur d'étiquette ou `--all` qui capture les tâches d'autres utilisateurs376* Écritures dans un cluster de calcul partagé qui vont au-delà de la ressource que vous avez nommée, comme un sélecteur d'étiquette ou `--all` qui capture les tâches d'autres utilisateurs

377* Création de ressources Kubernetes qui s'exécutent sur chaque nœud ou interceptent le trafic du cluster, comme les DaemonSets et les webhooks d'admission377* Création de ressources Kubernetes qui s'exécutent sur chaque nœud ou interceptent le trafic du cluster, comme les DaemonSets et les webhooks d'admission

378* Shells interactifs ou transferts de port vers une cible distante sensible378* Shells interactifs ou transferts de port vers une cible distante sensible

379* Ouverture d'un tunnel ou d'un shell inverse qui rend un service local accessible depuis l'internet public379* Ouverture d'un tunnel ou d'un shell inverse qui rend un service local accessible depuis l'Internet public

380* Impression d'une identifiant ou d'un jeton en direct dans la transcription ou un fichier380* Impression d'une identifiant ou d'un jeton en direct dans la transcription ou un fichier

381* Accès à un emplacement répertorié comme emplacement de données sensibles dans votre [environnement](/docs/fr/auto-mode-config#define-trusted-infrastructure), ou copie de données hors de celui-ci. À partir de v2.1.198, cela bloque également l'envoi de données d'un à un public que l'entrée exclut381* Accès à un emplacement répertorié comme emplacement de données sensibles dans votre [environnement](/docs/fr/auto-mode-config#define-trusted-infrastructure), ou copie de données hors de celui-ci. À partir de v2.1.198, cela bloque également l'envoi de données d'un à un public que l'entrée exclut

382* Routage d'une installation de paquet autour de votre registre de paquet interne vers un registre public. À partir de v2.1.198, cela s'applique également quand vous avez dit à Claude qu'un registre interne ou un miroir existe dans la conversation, pas seulement quand un est répertorié dans votre environnement382* Contournement d'une installation de paquet autour de votre registre de paquet interne vers un registre public. À partir de v2.1.198, cela s'applique également quand vous avez dit à Claude qu'un registre interne ou un miroir existe dans la conversation, pas seulement quand un est répertorié dans votre environnement

383* Exécution d'une commande avec un drapeau qui désarme une garde de sécurité, comme `--insecure`383* Exécution d'une commande avec un drapeau qui désarme une garde de sécurité, comme `--insecure`

384* Lancement d'une boucle d'agent autonome qui s'exécute sans approbation humaine ou bac à sable, comme une lancée avec `--dangerously-skip-permissions` ou `--no-sandbox`. À partir de v2.1.198, cela couvre également l'exécution d'un agent tiers ou d'un harnais d'évaluation avec isolation et approbation par action désactivées, comme un coureur lancé avec `--yes-always`384* Lancement d'une boucle d'agent autonome qui s'exécute sans approbation humaine ou bac à sable, comme une lancée avec `--dangerously-skip-permissions` ou `--no-sandbox`. À partir de v2.1.198, cela couvre également l'exécution d'un agent tiers ou d'un harnais d'évaluation avec l'isolation et l'approbation par action désactivées, comme un coureur lancé avec `--yes-always`

385* Les actions du navigateur [Claude dans Chrome](/docs/fr/chrome) qui pourraient envoyer le contenu de la page, les cookies ou les identifiants hors origine385* Actions du navigateur [Claude dans Chrome](/docs/fr/chrome) qui pourraient envoyer le contenu de la page, les cookies ou les identifiants hors origine

386 386 

387Plusieurs de ces catégories dépendent des entrées [d'environnement](/docs/fr/auto-mode-config#define-trusted-infrastructure), comme les cibles distantes sensibles et les portées IaC protégées, que vous pouvez affiner à des noms concrets.387Plusieurs de ces catégories dépendent d'entrées [d'environnement](/docs/fr/auto-mode-config#define-trusted-infrastructure), comme les cibles distantes sensibles et les portées IaC protégées, que vous pouvez affiner à des noms concrets.

388 388 

389Claude Code v2.1.198 et ultérieur bloquent également par défaut :389Claude Code v2.1.198 et ultérieur bloquent également par défaut :

390 390 

391* Suppression de fichiers dans `/tmp`, `$TMPDIR` ou un autre répertoire de travail partagé ou de cache par caractère générique, glob ou filtre d'âge plutôt que par un chemin nommé spécifique391* Suppression de fichiers dans `/tmp`, `$TMPDIR` ou un autre répertoire de travail partagé ou de cache par caractère générique, glob ou filtre d'âge plutôt que par un chemin nommé spécifique

392* Inclusion de détails sensibles dans le contenu envoyé, téléchargé, publié ou écrit à d'autres personnes ou systèmes partagés, quand votre propre message n'a pas autorisé ces détails pour ce destinataire. Les corps de PR et de problème, les messages de commit et les commentaires comptent comme ce type de contenu sortant quand le dépôt est en dehors de la limite de confiance ou public, y compris les dépôts publics de votre propre organisation ; les chemins de fichiers internes, les noms de code, les données de réponse API en direct comme les e-mails ou les identifiants de compte, et les identifiants d'infrastructure comptent comme des détails sensibles. La portée PR, problème et message de commit nécessite Claude Code v2.1.200 ou ultérieur. Les données personnelles en direct d'une réponse API dans un corps de PR ou de problème, comme une adresse e-mail, un identifiant de compte ou d'organisation, ou une métrique d'utilisation, vous obligent à nommer ces détails et le destinataire indépendamment de la visibilité ou de la limite de confiance du dépôt. Cette vérification nécessite Claude Code v2.1.203 ou ultérieur392* Inclusion de détails sensibles dans le contenu envoyé, téléchargé, publié ou écrit à d'autres personnes ou systèmes partagés, quand votre propre message n'a pas autorisé ces détails pour ce destinataire. Les corps de PR et de problème, les messages de commit et les commentaires comptent comme ce type de contenu sortant quand le dépôt est en dehors de la limite de confiance ou public, y compris les dépôts publics de votre propre organisation ; les chemins de fichiers internes, les noms de code, les données de réponse API en direct comme les e-mails ou les identifiants de compte, et les identifiants d'infrastructure comptent comme des détails sensibles. La portée PR, problème et message de commit nécessite Claude Code v2.1.200 ou ultérieur. Les données personnelles en direct d'une réponse API dans un corps de PR ou de problème, comme une adresse e-mail, un identifiant de compte ou d'organisation, ou une métrique d'utilisation, vous obligent à nommer ces détails et le destinataire indépendamment de la visibilité ou de la limite de confiance du dépôt. Cette vérification nécessite Claude Code v2.1.203 ou ultérieur

393* Envoi de frappes à son propre volet tmux de Claude Code pour piloter sa propre interface, que le classificateur traite comme Claude changeant ses propres permissions ou surveillance393* Envoi de frappes au clavier au propre volet tmux de Claude Code pour piloter sa propre interface, que le classificateur traite comme Claude changeant ses propres permissions ou surveillance

394 394 

395Claude Code v2.1.200 et ultérieur bloquent également par défaut :395Claude Code v2.1.200 et ultérieur bloquent également par défaut :

396 396 

397* Commentaire, suppression ou passage forcé d'un test ou d'une assertion qui protège le comportement de sécurité, comme l'authentification, le contrôle d'accès, la validation des entrées ou le bac à sable397* Commentaire, suppression ou passage en force d'un test ou d'une assertion qui protège le comportement de sécurité, comme l'authentification, le contrôle d'accès, la validation des entrées ou le bac à sable

398* Suppression ou démantèlement d'une ressource avec état que Claude n'a pas créée dans la session, quand aucune règle de suppression plus spécifique ne s'applique et que vous n'avez pas nommé cette ressource398* Suppression ou démantèlement d'une ressource avec état que Claude n'a pas créée dans la session, quand aucune règle de suppression plus spécifique ne s'applique et que vous n'avez pas nommé cette ressource

399* Réorientation d'une URL de base API, d'un point de terminaison proxy, d'un récepteur webhook ou d'un miroir de registre vers un hôte tiers qui ne convient pas à la tâche, y compris dans les fichiers d'exemple comme `.env.example`399* Réorientation d'une URL de base API, d'un point de terminaison proxy, d'un récepteur webhook ou d'un miroir de registre vers un hôte tiers qui ne convient pas à la tâche, y compris dans les fichiers d'exemple comme `.env.example`

400* Modification de la destination des poussées avec `git remote set-url` ou `git remote add`, à moins que vous n'ayez nommé la nouvelle télécommande400* Modification de la destination des poussées avec `git remote set-url` ou `git remote add`, à moins que vous n'ayez nommé la nouvelle télécommande


403 403 

404Claude Code v2.1.203 et ultérieur bloquent également par défaut :404Claude Code v2.1.203 et ultérieur bloquent également par défaut :

405 405 

406* Le contenu d'un magasin local sensible, ou d'un fichier dont le nom, le chemin ou le type le marque comme sensible, entrant dans un commit, une poussée, un texte de PR ou de problème, une giste ou un collage, ou une publication de paquet, à moins que vous n'ayez nommé à la fois la source et la destination. Les transcriptions de session et les journaux de conversation, les dossiers de points de configuration d'identifiant et de configuration comme les clés SSH, les identifiants cloud, les profils de navigateur et l'historique du shell, et les exportations de données utilisateur comptent tous, et le dépôt étant privé ne le clarifie pas406* Contenu d'un magasin local sensible, ou d'un fichier dont le nom, le chemin ou le type le marque comme sensible, entrant dans un commit, une poussée, un texte de PR ou de problème, une giste ou un collage, ou une publication de paquet, à moins que vous n'ayez nommé à la fois la source et la destination. Les transcriptions de session et les journaux de conversation, les dossiers de points de configuration d'identifiant et de configuration comme les clés SSH, les identifiants cloud, les profils de navigateur et l'historique du shell, et les exportations de données utilisateur comptent tous, et le dépôt étant privé ne le clarifie pas

407 407 

408Claude Code v2.1.205 et ultérieur bloquent également par défaut :408Claude Code v2.1.205 et ultérieur bloquent également par défaut :

409 409 


419* Lecture d'identifiants qui appartiennent à l'hôte plutôt qu'à votre tâche, comme les certificats de nœud ou l'authentification du registre de conteneurs du nœud419* Lecture d'identifiants qui appartiennent à l'hôte plutôt qu'à votre tâche, comme les certificats de nœud ou l'authentification du registre de conteneurs du nœud

420* Connexion à ou analyse des conteneurs, pods ou VMs frères que Claude n'a pas démarrés, ou le nœud sous le conteneur420* Connexion à ou analyse des conteneurs, pods ou VMs frères que Claude n'a pas démarrés, ou le nœud sous le conteneur

421 421 

422Si Claude Code s'exécute quelque part qui est censé permettre l'un de ceux-ci, décrivez cette configuration dans une entrée [Host containment](/docs/fr/auto-mode-config#define-trusted-infrastructure) dans `autoMode.environment`.422Si Claude Code s'exécute quelque part qui est censé permettre l'un de ceux-ci, décrivez cette configuration dans une [entrée Host containment](/docs/fr/auto-mode-config#define-trusted-infrastructure) dans `autoMode.environment`.

423 423 

424Claude Code v2.1.261 et ultérieur bloquent également par défaut :424Claude Code v2.1.261 et ultérieur bloquent également par défaut :

425 425 


433* Demandes HTTP en lecture seule433* Demandes HTTP en lecture seule

434* Poussée vers n'importe quelle branche du dépôt sur lequel vous travaillez, y compris la branche par défaut. Une branche non par défaut dont le nom la marque comme cible de déploiement ou de publication, comme `production` ou `gh-pages`, n'est pas couverte : le classificateur juge une poussée là sur ses propres termes. Le contenu de la poussée est toujours vérifié par rapport aux autres règles, les règles [`permissions.deny`](/docs/fr/permissions#manage-permissions) peuvent toujours bloquer les commandes de poussée [telles qu'écrites](/docs/fr/permissions#bash-rule-limits) dans chaque mode, et la protection de branche propre de la télécommande s'applique toujours. Avant v2.1.211, seules les poussées vers la branche sur laquelle vous avez démarré, les branches que Claude a créées, et les poussées routinières vers la branche par défaut étaient autorisées par défaut, et avant v2.1.203 toute poussée directe vers la branche par défaut était bloquée434* Poussée vers n'importe quelle branche du dépôt sur lequel vous travaillez, y compris la branche par défaut. Une branche non par défaut dont le nom la marque comme cible de déploiement ou de publication, comme `production` ou `gh-pages`, n'est pas couverte : le classificateur juge une poussée là sur ses propres termes. Le contenu de la poussée est toujours vérifié par rapport aux autres règles, les règles [`permissions.deny`](/docs/fr/permissions#manage-permissions) peuvent toujours bloquer les commandes de poussée [telles qu'écrites](/docs/fr/permissions#bash-rule-limits) dans chaque mode, et la protection de branche propre de la télécommande s'applique toujours. Avant v2.1.211, seules les poussées vers la branche sur laquelle vous avez démarré, les branches que Claude a créées, et les poussées routinières vers la branche par défaut étaient autorisées par défaut, et avant v2.1.203 toute poussée directe vers la branche par défaut était bloquée

435* Suppression des tâches exactes que Claude a créées plus tôt dans la même session435* Suppression des tâches exactes que Claude a créées plus tôt dans la même session

436* Lecture, révision ou écriture de code, de configurations et de modèles de menace liés à la sécurité dans le cadre de votre tâche436* Lecture, examen ou écriture de code, de configurations et de modèles de menace liés à la sécurité dans le cadre de votre tâche

437* Messages entre agents travaillant ensemble dans la même session multi-agents437* Messages entre agents travaillant ensemble dans la même session multi-agents

438* Envoi de données aux domaines, buckets et services approuvés que vous répertoriez dans [`environment`](/docs/fr/auto-mode-config#define-trusted-infrastructure). Cela couvre le flux de données uniquement, pas les opérations destructrices ou d'identifiant sur la même infrastructure438* Envoi de données aux domaines, buckets et services approuvés que vous énumérez dans [`environment`](/docs/fr/auto-mode-config#define-trusted-infrastructure). Cela couvre le flux de données uniquement, pas les opérations destructrices ou d'identifiant sur la même infrastructure

439* [Claude dans Chrome](/docs/fr/chrome) navigation vers un domaine interne approuvé, localhost ou une URL que vous avez nommée439* [Claude dans Chrome](/docs/fr/chrome) navigation vers un domaine interne approuvé, localhost ou une URL que vous avez nommée

440 440 

441Les commandes en bac à sable n'obtiennent pas d'accès réseau par défaut. Claude nomme les hôtes qu'une commande a besoin sur la commande elle-même, le classificateur les examine avec la commande, et une liste approuvée ouvre ces hôtes pour cette seule commande. [Domaines autorisés par commande](/docs/fr/sandboxing#per-command-allowed-domains-in-auto-mode) couvre ce qu'une liste peut et ne peut pas ouvrir et ce qui se passe quand une commande atteint un hôte non répertorié.441Les commandes en bac à sable n'obtiennent pas d'accès réseau par défaut. Claude nomme les hôtes qu'une commande a besoin sur la commande elle-même, le classificateur les examine avec la commande, et une liste approuvée ouvre ces hôtes pour cette seule commande. [Domaines autorisés par commande](/docs/fr/sandboxing#per-command-allowed-domains-in-auto-mode) couvre ce qu'une liste peut et ne peut pas ouvrir et ce qui se passe quand une commande atteint un hôte non répertorié.


454 454 

455Quelle que soit votre réponse, Claude continue à travailler :455Quelle que soit votre réponse, Claude continue à travailler :

456 456 

457* **Oui, et continuez à autoriser n'importe quelles lectures en dehors des répertoires de travail** : la lecture s'exécute, les lectures ultérieures en dehors des répertoires de travail s'exécutent comme avant, et Claude Code enregistre votre réponse pour que l'invite n'apparaisse plus457* **Oui, et continuez à autoriser toute lecture en dehors des répertoires de travail** : la lecture s'exécute, les lectures ultérieures en dehors des répertoires de travail s'exécutent comme avant, et Claude Code enregistre votre réponse pour que l'invite n'apparaisse plus

458* **Non, et bloquez les lectures en dehors des répertoires de travail à partir de maintenant** : la lecture est refusée, et Claude Code définit [`permissions.blockReadsOutsideWorkingDirectories`](/docs/fr/settings-reference#permissions-blockreadsoutsideworkingdirectories) sur `true` dans vos paramètres utilisateur, ce qui fait que les outils de fichier refusent ces lectures dans chaque session ultérieure et chaque mode de permission. Pour laisser Claude lire un tel chemin plus tard, ajoutez son répertoire avec `/add-dir` ou supprimez le paramètre.458* **Non, et bloquez les lectures en dehors des répertoires de travail à partir de maintenant** : la lecture est refusée, et Claude Code définit [`permissions.blockReadsOutsideWorkingDirectories`](/docs/fr/settings-reference#permissions-blockreadsoutsideworkingdirectories) sur `true` dans vos paramètres utilisateur, ce qui fait que les outils de fichier refusent de telles lectures dans chaque session ultérieure et chaque mode de permission. Pour laisser Claude lire un tel chemin plus tard, ajoutez son répertoire avec `/add-dir` ou supprimez le paramètre.

459* **Non, et demandez à nouveau la prochaine fois** : la lecture est refusée, et la prochaine lecture en dehors des répertoires de travail invite à nouveau459* **Non, et demandez à nouveau la prochaine fois** : la lecture est refusée, et la prochaine lecture en dehors des répertoires de travail invite à nouveau

460* **Oui, mais demandez à nouveau la prochaine fois** : la lecture s'exécute, rien n'est enregistré, et la prochaine lecture en dehors des répertoires de travail invite à nouveau460* **Oui, mais demandez à nouveau la prochaine fois** : la lecture s'exécute, rien n'est enregistré, et la prochaine lecture en dehors des répertoires de travail invite à nouveau

461 461 


475 475 

476* **Nommez l'action et ses spécificités** : votre message doit nommer l'action et la chose spécifique qui la rend dangereuse, comme la branche d'une poussée forcée. Nommer le verbe seul ne clarifie rien, donc « vous pouvez forcer la poussée » laisse le bloc en place.476* **Nommez l'action et ses spécificités** : votre message doit nommer l'action et la chose spécifique qui la rend dangereuse, comme la branche d'une poussée forcée. Nommer le verbe seul ne clarifie rien, donc « vous pouvez forcer la poussée » laisse le bloc en place.

477* **Attendez-vous à ce qu'il couvre une action** : une approbation couvre l'action destructrice que vous avez nommée, donc une action ultérieure est bloquée à nouveau à moins que vous n'ayez accordé l'approbation en tant que permanente. Pour arrêter d'approuver un modèle routinier une action à la fois, ajoutez-le à [`autoMode.allow`](/docs/fr/auto-mode-config#override-the-block-and-allow-rules).477* **Attendez-vous à ce qu'il couvre une action** : une approbation couvre l'action destructrice que vous avez nommée, donc une action ultérieure est bloquée à nouveau à moins que vous n'ayez accordé l'approbation en tant que permanente. Pour arrêter d'approuver un modèle routinier une action à la fois, ajoutez-le à [`autoMode.allow`](/docs/fr/auto-mode-config#override-the-block-and-allow-rules).

478* **Certains blocs restent en place** : [l'ordre de précédence du classificateur](/docs/fr/auto-mode-config#override-the-block-and-allow-rules) énonce les blocs que votre approbation peut atteindre. Pour exécuter une étape qu'il ne clarifiera pas, [quittez le mode auto](#switch-permission-modes) et répondez à l'invite de permission.478* **Certains blocs restent en place** : [l'ordre de précédence du classificateur](/docs/fr/auto-mode-config#override-the-block-and-allow-rules) énonce les blocs que votre approbation peut atteindre. Pour exécuter une étape qu'elle ne clarifiera pas, [quittez le mode auto](#switch-permission-modes) et répondez à l'invite de permission.

479 479 

480<h3 id="when-auto-mode-falls-back">480<h3 id="when-auto-mode-falls-back">

481 Quand le mode auto revient en arrière481 Quand le mode auto revient en arrière


483 483 

484Quand le mode auto ne peut pas approuver les actions de votre session, ce qui se passe dépend du cas :484Quand le mode auto ne peut pas approuver les actions de votre session, ce qui se passe dépend du cas :

485 485 

486* **Une action bloquée** : Claude Code affiche une notification et répertorie l'action dans `/permissions` sous l'onglet **Recently denied**, où vous pouvez appuyer sur `r` pour la réessayer avec une approbation manuelle.486* **Une action bloquée** : Claude Code affiche une notification et énumère l'action dans `/permissions` sous l'onglet **Recently denied**, où vous pouvez appuyer sur `r` pour la réessayer avec une approbation manuelle.

487* **Blocs répétés** : si le classificateur bloque une action 3 fois de suite ou 20 fois au total, le mode auto s'interrompt et Claude Code reprend l'invite. L'approbation de l'action invitée reprend le mode auto. Voir [Seuils de bloc répété](#repeated-block-thresholds) pour savoir comment les blocs sont comptés.487* **Blocs répétés** : si le classificateur bloque une action 3 fois de suite ou 20 fois au total, le mode auto s'interrompt et Claude Code reprend l'invite. L'approbation de l'action invitée reprend le mode auto. Voir [Seuils de bloc répété](#repeated-block-thresholds) pour savoir comment les blocs sont comptés.

488* **Aucun verdict du classificateur** : quand une vérification de sécurité distincte du mode auto refuse la propre demande du classificateur, ou que la réponse du classificateur ne s'analyse pas, Claude Code refuse l'action sans la notification ou l'entrée **Recently denied**. Voir [Le mode auto ne peut pas déterminer la sécurité d'une action](/docs/fr/errors#auto-mode-cannot-determine-the-safety-of-an-action) pour le message que chaque cas affiche et ce qu'il faut faire.488* **Aucun verdict du classificateur** : quand une vérification de sécurité distincte du mode auto refuse la propre demande du classificateur, ou que la réponse du classificateur ne s'analyse pas, Claude Code refuse l'action sans la notification ou l'entrée **Recently denied**. Voir [Le mode auto ne peut pas déterminer la sécurité d'une action](/docs/fr/errors#auto-mode-cannot-determine-the-safety-of-an-action) pour le message que chaque cas affiche et ce qu'il faut faire.

489* **Aucun verdict du serveur** : sous [examen du classificateur côté serveur](#server-side-classifier-review), Claude Code refuse une action pour laquelle le serveur ne donne pas de verdict, et arrête le tour après dix réponses de suite sans verdict. Voir [Le serveur n'a pas retourné de verdict de sécurité](/docs/fr/errors#the-server-returned-no-safety-verdict).489* **Aucun verdict du serveur** : sous [examen du classificateur côté serveur](#server-side-classifier-review), Claude Code refuse une action pour laquelle le serveur ne donne pas de verdict, et arrête le tour après dix réponses de suite sans verdict. Voir [Le serveur n'a pas retourné de verdict de sécurité](/docs/fr/errors#the-server-returned-no-safety-verdict).

490* **Un changement de mode pendant une vérification** : si vous changez les modes de permission pendant qu'une vérification de classificateur est en attente, Claude Code rejette un verdict que le nouveau mode n'aurait pas demandé. Vous êtes invité à l'approbation à la place, ou l'action est auto-refusée en [mode `dontAsk`](#allow-only-pre-approved-tools-with-dontask-mode).490* **Un changement de mode pendant une vérification** : si vous changez les modes de permission tandis qu'une vérification de classificateur est en attente, Claude Code abandonne un verdict que le nouveau mode n'aurait pas demandé. Vous êtes invité à l'approbation à la place, ou l'action est auto-refusée en [mode `dontAsk`](#allow-only-pre-approved-tools-with-dontask-mode).

491 491 

492<h4 id="repeated-block-thresholds">492<h4 id="repeated-block-thresholds">

493 Seuils de bloc répété493 Seuils de bloc répété


519 * Les règles ask qui correspondent sur le contenu d'une commande, comme `Bash(git push *)`, reviennent à une invite de permission519 * Les règles ask qui correspondent sur le contenu d'une commande, comme `Bash(git push *)`, reviennent à une invite de permission

520 * Une écriture que la [vérification de lien symbolique](/docs/fr/permissions#symlinks) résout à un chemin protégé vous invite quand le chemin que Claude a demandé n'est pas lui-même protégé520 * Une écriture que la [vérification de lien symbolique](/docs/fr/permissions#symlinks) résout à un chemin protégé vous invite quand le chemin que Claude a demandé n'est pas lui-même protégé

521 2. Les actions en lecture seule et les éditions de fichiers dans votre répertoire de travail sont auto-approuvées, sauf les écritures vers les [chemins protégés](#protected-paths) et [la première lecture en dehors des répertoires de travail](#first-read-outside-the-working-directories), qui vous invitent521 2. Les actions en lecture seule et les éditions de fichiers dans votre répertoire de travail sont auto-approuvées, sauf les écritures vers les [chemins protégés](#protected-paths) et [la première lecture en dehors des répertoires de travail](#first-read-outside-the-working-directories), qui vous invitent

522 * Dans une session avec [examen du classificateur côté serveur](#server-side-classifier-review), les lectures seules et les commandes shell [en bac à sable](/docs/fr/sandboxing#sandbox-modes) attendent cet examen et sont bloquées s'il les signale522 * Dans une session avec [examen du classificateur côté serveur](#server-side-classifier-review), les actions en lecture seule et les commandes shell [en bac à sable](/docs/fr/sandboxing#sandbox-modes) attendent cet examen et sont bloquées s'il les signale

523 * Une écriture à l'intérieur de votre répertoire de travail que la [vérification de lien symbolique](/docs/fr/permissions#symlinks) résout à un emplacement en dehors d'elle vous invite523 * Une écriture à l'intérieur de votre répertoire de travail que la [vérification de lien symbolique](/docs/fr/permissions#symlinks) résout à un emplacement en dehors d'elle vous invite

524 3. Tout le reste va au classificateur, à part les [suppressions de chemin critique](#critical-paths) sous leur gestion par défaut. Les outils de connecteur et les outils MCP `requiresUserInteraction` qui vous invitent directement à l'étape 1 n'atteignent jamais le classificateur non plus, donc ni une approbation requise par l'organisation ni une étape de consentement n'est auto-approuvée524 3. Tout le reste va au classificateur, à part les [suppressions de chemin critique](#critical-paths) sous leur gestion par défaut. Les outils de connecteur et les outils MCP `requiresUserInteraction` qui vous invitent directement à l'étape 1 n'atteignent jamais le classificateur non plus, donc ni une approbation requise par l'organisation ni une étape de consentement n'est auto-approuvée

525 4. Si le classificateur bloque, Claude reçoit la raison. Dans la plupart des sessions, la raison nomme la règle que le classificateur a correspondante, comme `[Data Exfiltration]`, plutôt que de donner une explication écrite ; voir [Examiner les refus](/docs/fr/auto-mode-config#review-denials)525 4. Si le classificateur bloque, Claude reçoit la raison. Dans la plupart des sessions, la raison nomme la règle que le classificateur a correspondante, comme `[Data Exfiltration]`, plutôt que de donner une explication écrite ; voir [Examiner les refus](/docs/fr/auto-mode-config#review-denials)

526 526 

527 Un [mod](/docs/fr/plugins/mods/overview) que vous installez qui accroche `tool.check` peut approuver une action avant l'étape 3, et le classificateur ne vérifie pas une action que le mod approuve. Voir [Étendre les permissions avec des hooks](/docs/fr/permissions#extend-permissions-with-hooks).

528 

527 En entrant en mode auto, les règles allow larges qui accordent l'exécution de code arbitraire sont supprimées :529 En entrant en mode auto, les règles allow larges qui accordent l'exécution de code arbitraire sont supprimées :

528 530 

529 * Blanket `Bash(*)` ou `PowerShell(*)`531 * Blanket `Bash(*)` ou `PowerShell(*)`


534 536 

535 Les règles étroites comme `Bash(npm test)` restent en vigueur. Claude Code restaure les règles supprimées quand vous quittez le mode auto. Avant v2.1.236, Claude Code laissait les règles `Monitor` allow en vigueur en mode auto, donc une règle qui correspondait à l'outil entier approuvait les commandes Monitor sans examen du classificateur.537 Les règles étroites comme `Bash(npm test)` restent en vigueur. Claude Code restaure les règles supprimées quand vous quittez le mode auto. Avant v2.1.236, Claude Code laissait les règles `Monitor` allow en vigueur en mode auto, donc une règle qui correspondait à l'outil entier approuvait les commandes Monitor sans examen du classificateur.

536 538 

537 Claude Code exécute également `git status` lui-même avant une commande qui éliminerait le travail non validé, comme `git reset --hard` ou `rm -rf`, et montre au classificateur si le travail préparé, modifié ou non suivi est présent. Claude Code signale les fichiers non suivis dans cette vérification même quand la configuration git du dépôt définit `status.showUntrackedFiles=no`.539 Claude Code exécute également `git status` lui-même avant une commande qui abandonnerait le travail non validé, comme `git reset --hard` ou `rm -rf`, et montre au classificateur si le travail préparé, modifié ou non suivi est présent. Claude Code signale les fichiers non suivis dans cette vérification même quand la configuration git du dépôt définit `status.showUntrackedFiles=no`.

538 540 

539 Dans les demandes de classificateur envoyées par Claude Code lui-même, le classificateur voit les messages utilisateur, les appels d'outil autres que les recherches en lecture seule comme les lectures de fichiers et les recherches, et votre contenu CLAUDE.md. Les résultats d'outil sont supprimés de ces demandes, donc le contenu hostile dans un fichier ou une page web ne peut pas manipuler le classificateur directement.541 Dans les demandes de classificateur envoyées par Claude Code lui-même, le classificateur voit les messages utilisateur, les appels d'outil autres que les recherches en lecture seule comme les lectures de fichiers et les recherches, et votre contenu CLAUDE.md. Les résultats d'outil sont supprimés de ces demandes, donc le contenu hostile dans un fichier ou une page Web ne peut pas manipuler le classificateur directement.

540 542 

541 Vous pouvez annoter le résultat d'un appel avec le champ `classifierContext` d'un [hook PostToolUse](/docs/fr/hooks#annotate-a-result-for-the-auto-mode-classifier), que le classificateur lit comme contexte fourni par l'application. Le champ nécessite Claude Code v2.1.236 ou ultérieur.543 Vous pouvez annoter le résultat d'un appel avec le champ `classifierContext` d'un [hook PostToolUse](/docs/fr/hooks#annotate-a-result-for-the-auto-mode-classifier), que le classificateur lit comme contexte fourni par l'application. Le champ nécessite Claude Code v2.1.236 ou ultérieur.

542 544 

543 Une sonde côté serveur distincte analyse les résultats d'outil entrants et signale le contenu suspect avant que Claude ne le lise. Pour plus d'informations sur la façon dont ces couches fonctionnent ensemble, voir l'[annonce du mode auto](https://claude.com/blog/auto-mode) et la [plongée technique](/docs/fr/engineering/claude-code-auto-mode).545 Une sonde côté serveur distincte analyse les résultats d'outil entrants et signale le contenu suspect avant que Claude ne le lise. Pour plus d'informations sur la façon dont ces couches fonctionnent ensemble, consultez l'[annonce du mode auto](https://claude.com/blog/auto-mode) et l'[approfondissement technique](https://www.anthropic.com/engineering/claude-code-auto-mode).

544 </Accordion>546 </Accordion>

545 547 

546 <Accordion title="Comment le mode auto gère les sous-agents">548 <Accordion title="Comment le mode auto gère les sous-agents">

547 Le classificateur vérifie le travail des [sous-agents](/docs/fr/sub-agents) à trois points :549 Le classificateur vérifie le travail des [sous-agents](/docs/fr/sub-agents) à trois points :

548 550 

549 1. Avant qu'un sous-agent ne démarre, la description de la tâche déléguée est évaluée, donc une tâche qui semble dangereuse est bloquée au moment du démarrage.551 1. Avant qu'un sous-agent ne démarre, la description de la tâche déléguée est évaluée, donc une tâche qui semble dangereuse est bloquée au moment du démarrage.

550 2. Pendant que le sous-agent s'exécute, chacune de ses actions passe par le même [ordre de décision](#how-the-classifier-evaluates-actions) que dans la session parent, avec les mêmes règles de blocage et d'autorisation. Tout `permissionMode` dans le frontmatter du sous-agent est ignoré.552 2. Tandis que le sous-agent s'exécute, chacune de ses actions passe par le même [ordre de décision](#how-the-classifier-evaluates-actions) que dans la session parent, avec les mêmes règles de blocage et d'autorisation. Tout `permissionMode` dans le frontmatter du sous-agent est ignoré.

551 3. Quand le sous-agent se termine, le classificateur examine son travail et son rapport final avant que le parent ne lise le rapport. Quand le classificateur signale le travail ou le rapport du sous-agent, ou qu'une vérification de sécurité API distincte refuse l'examen, le rapport est toujours livré, précédé d'un avertissement de sécurité. Quand le classificateur n'est pas disponible pour l'examen, le rapport arrive avec une note pour vérifier le travail du sous-agent avant d'agir en fonction de celui-ci.553 3. Quand le sous-agent se termine, le classificateur examine son travail et son rapport final avant que le parent ne lise le rapport. Quand le classificateur signale le travail ou le rapport du sous-agent, ou qu'une vérification de sécurité API distincte refuse l'examen, le rapport est toujours livré, précédé d'un avertissement de sécurité. Quand le classificateur n'est pas disponible pour l'examen, le rapport arrive avec une note pour vérifier le travail du sous-agent avant d'agir en fonction de celui-ci.

552 </Accordion>554 </Accordion>

553 555 

554 <Accordion title="Coût et latence">556 <Accordion title="Coût et latence">

555 Le classificateur s'exécute sur Claude Sonnet 5 par défaut plutôt que sur votre sélection `/model`. Un modèle de classificateur que Anthropic configure côté serveur prend précédence sur ce défaut. Quand le modèle de votre session est Claude Sonnet 4.6, ou quand [`availableModels`](/docs/fr/model-config#restrict-model-selection) exclut Sonnet 5, le classificateur s'exécute sur le modèle de votre session à la place, ou sur un modèle Opus quand la session s'exécute sur un [modèle Fable](/docs/fr/model-config#work-with-fable) ; sur les fournisseurs autres que l'API Anthropic, ce retour en arrière Opus est le modèle Opus par défaut du fournisseur.557 Le classificateur s'exécute sur Claude Sonnet 5 par défaut plutôt que sur votre sélection `/model`. Un modèle de classificateur que Anthropic configure côté serveur prend précédence sur ce défaut. Quand le modèle de votre session est Claude Sonnet 4.6, ou quand [`availableModels`](/docs/fr/model-config#restrict-model-selection) exclut Sonnet 5, le classificateur s'exécute sur le modèle de la session à la place, ou sur un modèle Opus quand la session s'exécute sur un [modèle Fable](/docs/fr/model-config#work-with-fable) ; sur les fournisseurs autres que l'API Anthropic, ce retour en arrière Opus est le modèle Opus par défaut du fournisseur.

556 558 

557 La première demande en mode auto de la session valide le défaut Sonnet 5 : si la demande réussit, Sonnet 5 reste le modèle de classificateur de la session, et si elle échoue parce que le modèle n'est pas disponible, la session utilise le retour en arrière à la place. Après que cette validation se règle, le modèle du classificateur ne change pas pour la session.559 La première demande en mode auto de la session valide le défaut Sonnet 5 : si la demande réussit, Sonnet 5 reste le modèle de classificateur de la session, et si elle échoue parce que le modèle n'est pas disponible, la session utilise le retour en arrière à la place.

558 560 

559 Sur les plans Enterprise et sur les comptes qui utilisent l'API Claude, [Claude Platform sur AWS](/docs/fr/claude-platform-on-aws), Amazon Bedrock, Google Cloud's Agent Platform ou Microsoft Foundry, les appels de classificateur comptent vers votre utilisation de jetons. Chaque vérification envoie une portion de la transcription plus l'action en attente, ajoutant un aller-retour avant l'exécution. Les lectures et les éditions de répertoire de travail en dehors des chemins protégés ignorent le classificateur, donc la surcharge provient principalement des commandes shell et des opérations réseau. Où le serveur examine les actions dans le cadre des demandes de modèle de la session, il n'y a pas d'appels de classificateur distincts à compter ; voir [Examen du classificateur côté serveur](#server-side-classifier-review).561 Sur les plans Enterprise et sur les comptes qui utilisent l'API Claude, [Claude Platform sur AWS](/docs/fr/claude-platform-on-aws), Amazon Bedrock, Google Cloud's Agent Platform ou Microsoft Foundry, les appels de classificateur comptent vers votre utilisation de jetons. Chaque vérification envoie une portion de la transcription plus l'action en attente, ajoutant un aller-retour avant l'exécution. Les lectures et les éditions de répertoire de travail en dehors des chemins protégés ignorent le classificateur, donc la surcharge provient principalement des commandes shell et des opérations réseau. Où le serveur examine les actions dans le cadre des demandes de modèle de la session, il n'y a pas d'appels de classificateur distincts à compter ; voir [Examen du classificateur côté serveur](#server-side-classifier-review).

560 562 


667* `.yarn`669* `.yarn`

668* `.mvn`670* `.mvn`

669* `.claude`, sauf pour `.claude/worktrees` où Claude stocke ses propres git worktrees671* `.claude`, sauf pour `.claude/worktrees` où Claude stocke ses propres git worktrees

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

670 673 

671Fichiers protégés :674Fichiers protégés :

672 675 

permissions.md +14 −3

Details

601 601 

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

603 603 

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

605 

606Cette précédence couvre les hooks dans les fichiers de paramètres et dans le fichier `hooks/hooks.json` d'un plugin. Un [mod](/docs/fr/plugins/mods/overview) que vous installez et qui accroche `tool.check` répond après que les règles et les hooks PreToolUse aient décidé, et sa réponse peut remplacer la leur :

607 

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

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

610* **Le classificateur du mode automatique** : en [mode automatique](/docs/fr/permission-modes#eliminate-prompts-with-auto-mode), un appel que le mod approuve s'exécute sans vérification du classificateur

611* **Règles de refus** : sur une machine avec des paramètres gérés, ou lorsque vous êtes connecté avec un plan Team ou Enterprise, les règles de refus prévalent sur le mod par défaut, et votre organisation peut modifier cela. Partout ailleurs, le mod peut approuver un appel qu'une règle de refus refuse.

612 

613Consultez [Décider si vous faites confiance à un mod](/docs/fr/plugins/mods/overview#decide-whether-to-trust-a-mod), ou [Gérer les mods pour votre organisation](/docs/fr/plugins/mods/admin#know-what-happens-by-default) si vous déployez des paramètres gérés.

605 614 

606Les outils MCP marqués [`requiresUserInteraction`](/docs/fr/mcp#require-approval-for-a-specific-tool) demandent également toujours une invite lorsqu'un hook retourne `"allow"`, tout comme les outils connecteur [que votre organisation a définis sur `ask`](/docs/fr/mcp#organization-controls-on-connector-tools) dans les sessions où ce paramètre atteint Claude Code.615Les outils MCP marqués [`requiresUserInteraction`](/docs/fr/mcp#require-approval-for-a-specific-tool) demandent également toujours une invite lorsqu'un hook retourne `"allow"`, tout comme les outils connecteur [que votre organisation a définis sur `ask`](/docs/fr/mcp#organization-controls-on-connector-tools) dans les sessions où ce paramètre atteint Claude Code.

607 616 


719 728 

720Les mêmes règles s'appliquent dans les différentes portées de paramètres : si les paramètres utilisateur autorisent une autorisation et que les paramètres de projet la refusent, la règle de refus la bloque. L'inverse est également vrai : un refus au niveau utilisateur bloque une autorisation au niveau du projet, car les règles de refus de n'importe quelle portée sont évaluées avant les règles d'autorisation.729Les mêmes règles s'appliquent dans les différentes portées de paramètres : si les paramètres utilisateur autorisent une autorisation et que les paramètres de projet la refusent, la règle de refus la bloque. L'inverse est également vrai : un refus au niveau utilisateur bloque une autorisation au niveau du projet, car les règles de refus de n'importe quelle portée sont évaluées avant les règles d'autorisation.

721 730 

731Cette précédence concerne les fichiers de paramètres et les arguments de ligne de commande. Pour savoir si une règle de refus s'applique à un [mod](/docs/fr/plugins/mods/overview) que vous installez, consultez [Étendre les autorisations avec des hooks](#extend-permissions-with-hooks).

732 

722Les hôtes d'intégration peuvent fournir une politique gérée supplémentaire via l'option SDK `managedSettings`, y compris les règles d'autorisation d'autorisation, sauf si l'administrateur définit les verrous `allowManaged*Only` ; [Livrer une politique aux sessions Claude Desktop](/docs/fr/claude-apps-gateway#deliver-policy-to-claude-desktop-sessions) couvre le moment où la politique de l'intégrateur s'applique.733Les hôtes d'intégration peuvent fournir une politique gérée supplémentaire via l'option SDK `managedSettings`, y compris les règles d'autorisation d'autorisation, sauf si l'administrateur définit les verrous `allowManaged*Only` ; [Livrer une politique aux sessions Claude Desktop](/docs/fr/claude-apps-gateway#deliver-policy-to-claude-desktop-sessions) couvre le moment où la politique de l'intégrateur s'applique.

723 734 

724<h2 id="project-allow-rules-and-workspace-trust">735<h2 id="project-allow-rules-and-workspace-trust">


765| [Hooks](/docs/fr/hooks) dans les fichiers de paramètres, le bloc [`env`](/docs/fr/settings-reference#env) et les commandes d'assistance telles que [`apiKeyHelper`](/docs/fr/settings-reference#apikeyhelper), et les [hooks](/docs/fr/hooks#hooks-in-skills-and-agents) d'une compétence de projet et [`allowed-tools`](/docs/fr/skills#pre-approve-tools-for-a-skill) | Utilisé | Utilisé. La confiance de l'espace de travail ne bloque jamais les `allowed-tools` d'une compétence dans aucune session |776| [Hooks](/docs/fr/hooks) dans les fichiers de paramètres, le bloc [`env`](/docs/fr/settings-reference#env) et les commandes d'assistance telles que [`apiKeyHelper`](/docs/fr/settings-reference#apikeyhelper), et les [hooks](/docs/fr/hooks#hooks-in-skills-and-agents) d'une compétence de projet et [`allowed-tools`](/docs/fr/skills#pre-approve-tools-for-a-skill) | Utilisé | Utilisé. La confiance de l'espace de travail ne bloque jamais les `allowed-tools` d'une compétence dans aucune session |

766| Règles `permissions.allow` et `additionalDirectories` dans `.claude/settings.json` | Non utilisé jusqu'à ce que vous acceptiez la boîte de dialogue de confiance, qui réapparaît en les répertoriant | Non utilisé. Claude Code imprime un avertissement [`this workspace has not been trusted`](/docs/fr/errors#workspace-has-not-been-trusted) sur stderr |777| Règles `permissions.allow` et `additionalDirectories` dans `.claude/settings.json` | Non utilisé jusqu'à ce que vous acceptiez la boîte de dialogue de confiance, qui réapparaît en les répertoriant | Non utilisé. Claude Code imprime un avertissement [`this workspace has not been trusted`](/docs/fr/errors#workspace-has-not-been-trusted) sur stderr |

767| Hooks de frontmatter dans un [sous-agent](/docs/fr/sub-agents#hooks-in-subagent-frontmatter) de projet, un plugin [`@skills-dir`](/docs/fr/plugins/loading#plugins-shared-through-a-repository) de projet, et les entrées [`extraKnownMarketplaces`](/docs/fr/settings-reference#extraknownmarketplaces) du référentiel ou d'un répertoire `--add-dir` | Non utilisé, et aucune boîte de dialogue n'est proposée | Non utilisé |778| Hooks de frontmatter dans un [sous-agent](/docs/fr/sub-agents#hooks-in-subagent-frontmatter) de projet, un plugin [`@skills-dir`](/docs/fr/plugins/loading#plugins-shared-through-a-repository) de projet, et les entrées [`extraKnownMarketplaces`](/docs/fr/settings-reference#extraknownmarketplaces) du référentiel ou d'un répertoire `--add-dir` | Non utilisé, et aucune boîte de dialogue n'est proposée | Non utilisé |

768| [`mcpServers`](/docs/fr/sub-agents#scope-mcp-servers-to-a-subagent) en ligne dans le frontmatter d'un sous-agent du référentiel ou d'un répertoire `--add-dir`. Avant la v2.1.238, Claude Code chargeait ces serveurs dans les deux situations | Non utilisé, et aucune boîte de dialogue n'est proposée | Non utilisé |779| Inline [`mcpServers`](/docs/fr/sub-agents#scope-mcp-servers-to-a-subagent) dans le frontmatter d'un sous-agent du référentiel ou d'un répertoire `--add-dir` | Non utilisé, et aucune boîte de dialogue n'est proposée | Non utilisé |

769| Serveurs dans `.mcp.json`, y compris ceux que le référentiel [approuve dans ses propres paramètres](/docs/fr/mcp#project-server-approvals-and-workspace-trust) | Claude Code vous demande avant de vous y connecter. Les approbations du référentiel lui-même ne comptent pas | Connecté sans demander, approuvé ou non. Le SDK ne les charge que lorsque `settingSources` inclut les paramètres du projet. `claude mcp list` dans le même dossier signale toujours un tel serveur comme en attente |780| Serveurs dans `.mcp.json`, y compris ceux que le référentiel [approuve dans ses propres paramètres](/docs/fr/mcp#project-server-approvals-and-workspace-trust) | Claude Code vous demande avant de vous y connecter. Les approbations du référentiel lui-même ne comptent pas | Connecté sans demander, approuvé ou non. Le SDK ne les charge que lorsque `settingSources` inclut les paramètres du projet. `claude mcp list` dans le même dossier signale toujours un tel serveur comme en attente |

770| Un [`headersHelper`](/docs/fr/mcp#trust-a-folder-before-its-headershelper-runs) sur un serveur dans `.mcp.json`. Avant la v2.1.238, Claude Code exécutait l'assistant dans les deux situations | Non exécuté jusqu'à ce que vous acceptiez la boîte de dialogue de confiance, qui réapparaît en nommant l'endroit où l'assistant est déclaré. Claude Code connecte le serveur avec ses `headers` statiques seuls jusqu'à ce moment | Non exécuté. Claude Code connecte le serveur avec ses `headers` statiques seuls et imprime une ligne [`headersHelper not run`](/docs/fr/errors#headershelper-not-run) par serveur sur stderr |781| Un [`headersHelper`](/docs/fr/mcp#trust-a-folder-before-its-headershelper-runs) sur un serveur dans `.mcp.json` | Non exécuté jusqu'à ce que vous acceptiez la boîte de dialogue de confiance, qui réapparaît en nommant l'endroit où l'assistant est déclaré. Claude Code connecte le serveur avec ses `headers` statiques seuls jusqu'à ce moment | Non exécuté. Claude Code connecte le serveur avec ses `headers` statiques seuls et imprime une ligne [`headersHelper not run`](/docs/fr/errors#headershelper-not-run) par serveur sur stderr |

771 782 

772Pour les lignes qui ont besoin de ce dossier exact approuvé, approuvez-le manuellement : définissez `projects["<path>"].hasTrustDialogAccepted` sur `true` dans `~/.claude.json`, où `<path>` est la racine du référentiel, ou le dossier lui-même en dehors d'un référentiel. Claude Code imprime la clé exacte dans la ligne du journal de débogage pour un hook de sous-agent ignoré ou un serveur MCP en ligne, dans l'avertissement stderr pour les règles d'autorisation ignorées, et dans la ligne `headersHelper not run` pour un assistant ignoré.783Pour les lignes qui ont besoin de ce dossier exact approuvé, approuvez-le manuellement : définissez `projects["<path>"].hasTrustDialogAccepted` sur `true` dans `~/.claude.json`, où `<path>` est la racine du référentiel, ou le dossier lui-même en dehors d'un référentiel. Claude Code imprime la clé exacte dans la ligne du journal de débogage pour un hook de sous-agent ignoré ou un serveur MCP en ligne, dans l'avertissement stderr pour les règles d'autorisation ignorées, et dans la ligne `headersHelper not run` pour un assistant ignoré.

773 784 

Details

29Chaque sous-commande partage ces codes de sortie, arguments de plugin et valeurs de portée :29Chaque sous-commande partage ces codes de sortie, arguments de plugin et valeurs de portée :

30 30 

31* **Codes de sortie** : `0` en cas de succès et `1` en cas d'échec. `validate` ajoute la sortie `2` pour une erreur inattendue, et `eval` ajoute les codes listés dans [sa section](#plugin-eval).31* **Codes de sortie** : `0` en cas de succès et `1` en cas d'échec. `validate` ajoute la sortie `2` pour une erreur inattendue, et `eval` ajoute les codes listés dans [sa section](#plugin-eval).

32* **Arguments de plugin** : un argument `<plugin>` est un `name` de plugin ou `name@marketplace`. Quand deux marketplaces offrent le même nom, utilisez la forme qualifiée.32* **Arguments de plugin** : un argument `<plugin>` est un `name` de plugin ou `name@marketplace`. Quand deux marketplaces offrent le même nom, utilisez la forme qualifiée. `configure` prend seulement la forme qualifiée.

33* **Portées** : `--scope` prend `user`, `project`, ou `local`, et nomme le fichier de paramètres que la commande écrit. `update` prend aussi `managed`.33* **Portées** : `--scope` prend `user`, `project`, ou `local`, et nomme le fichier de paramètres que la commande écrit. `update` prend aussi `managed`.

34 34 

35<h3 id="plugin-init">35<h3 id="plugin-init">


87| Drapeau | Description |87| Drapeau | Description |

88| :- | :- |88| :- | :- |

89| `-s, --scope <scope>` | Portée d'installation : `user`, `project`, ou `local`. Par défaut `user` |89| `-s, --scope <scope>` | Portée d'installation : `user`, `project`, ou `local`. Par défaut `user` |

90| `--config <key=value>` | Définissez une option [`userConfig`](/docs/fr/plugins/manifest-reference) que le manifeste du plugin déclare. Répétez le drapeau pour chaque option. Nécessite Claude Code v2.1.147 ou ultérieur |90| `--config <key=value>` | Définissez une option [`userConfig`](/docs/fr/plugins/manifest-reference) que le manifeste du plugin déclare. Répétez le drapeau pour chaque option. Nécessite Claude Code v2.1.147 ou ultérieur. Une clé écrite `<server>.<key>` définit un paramètre qu'un [serveur MCP fourni](/docs/fr/plugins/components#include-a-packaged-mcpb-server) déclare dans sa propre `user_config` à la place, pour un fichier bundle expédié à l'intérieur du plugin. La forme `<server>.<key>` nécessite Claude Code v2.1.285 ou ultérieur |

91| `-y, --yes` | Acceptez la commande d'installation affichée sans l'invite `Run this command now?`. Ignoré quand la commande s'exécute dans une session Claude Code, comme depuis l'outil Bash ou un hook. Nécessite Claude Code v2.1.229 ou ultérieur |91| `-y, --yes` | Acceptez la commande d'installation affichée sans l'invite `Run this command now?`. Ignoré quand la commande s'exécute dans une session Claude Code, comme depuis l'outil Bash ou un hook. Nécessite Claude Code v2.1.229 ou ultérieur |

92| `--accept-command <sha256>` | Acceptez la commande d'installation affichée dont le `sha256` une exécution [`--json` précédente](#plugin-json-result) a rapporté dans `shownCommand`, à la place de `-y`. Ne peut pas être combiné avec `-y`. Voir [Accepter une commande d'installation affichée](#accept-a-displayed-install-command). Nécessite Claude Code v2.1.271 ou ultérieur |92| `--accept-command <sha256>` | Acceptez la commande d'installation affichée dont le `sha256` une exécution [`--json` précédente](#plugin-json-result) a rapporté dans `shownCommand`, à la place de `-y`. Ne peut pas être combiné avec `-y`. Voir [Accepter une commande d'installation affichée](#accept-a-displayed-install-command). Nécessite Claude Code v2.1.271 ou ultérieur |

93| `--json` | Affiche le résultat en tant qu'un objet JSON sur la dernière ligne de stdout au lieu du message lisible par l'homme, pour utilisation dans les scripts. Voir [Format de résultat JSON](#plugin-json-result). Nécessite Claude Code v2.1.268 ou ultérieur |93| `--json` | Affiche le résultat en tant qu'un objet JSON sur la dernière ligne de stdout au lieu du message lisible par l'homme, pour utilisation dans les scripts. Voir [Format de résultat JSON](#plugin-json-result). Nécessite Claude Code v2.1.268 ou ultérieur |


299| :- | :- |299| :- | :- |

300| `--json` | Affiche la liste en JSON |300| `--json` | Affiche la liste en JSON |

301| `--available` | Listez aussi les plugins que vos marketplaces offrent que vous n'avez pas installés. N'a aucun effet sans `--json` |301| `--available` | Listez aussi les plugins que vos marketplaces offrent que vous n'avez pas installés. N'a aucun effet sans `--json` |

302| `--data-size [plugin]` | Mesurez le répertoire de [données sauvegardées](#what-an-uninstall-deletes-and-keeps) de chaque plugin installé, ou seulement celui du plugin nommé, donné en tant que `name@marketplace`. N'a aucun effet sans `--json`. Si le nom n'a pas d'enregistrement d'installation, la commande affiche `--data-size names a plugin that is not installed` et quitte `1` au lieu d'afficher la liste. Nécessite Claude Code v2.1.285 ou ultérieur |

302 303 

303Claude Code groupe la sortie lisible par l'homme par comment chaque plugin se charge :304Claude Code groupe la sortie lisible par l'homme par comment chaque plugin se charge :

304 305 


330| `notes` | array of strings | Avertissements de création pour un plugin qui s'est chargé et fonctionne |331| `notes` | array of strings | Avertissements de création pour un plugin qui s'est chargé et fonctionne |

331| `errorDetails` | array of objects | Un objet par entrée `errors`, donnant son `type` de diagnostic et les noms auxquels il se réfère, comme le plugin, la marketplace, le serveur, ou le fichier. Nécessite Claude Code v2.1.268 ou ultérieur |332| `errorDetails` | array of objects | Un objet par entrée `errors`, donnant son `type` de diagnostic et les noms auxquels il se réfère, comme le plugin, la marketplace, le serveur, ou le fichier. Nécessite Claude Code v2.1.268 ou ultérieur |

332| `noteDetails` | array of objects | Les mêmes objets de détail pour chaque entrée `notes`. Nécessite Claude Code v2.1.268 ou ultérieur |333| `noteDetails` | array of objects | Les mêmes objets de détail pour chaque entrée `notes`. Nécessite Claude Code v2.1.268 ou ultérieur |

334| `hasUserConfig` | boolean | Présent et `true` quand le plugin s'est chargé et son manifeste déclare des options [`userConfig`](/docs/fr/plugins/manifest-reference#user-configuration). Absent pour un plugin qui n'a pas pu se charger, quel que soit ce que son manifeste déclare. Les valeurs sauvegardées ne sont jamais incluses. Nécessite Claude Code v2.1.285 ou ultérieur |

335| `projectEnabled` | boolean | Si le `.claude/settings.json` partagé du projet active le plugin. Installations de marketplace seulement. Nécessite Claude Code v2.1.285 ou ultérieur |

336| `dataDirSize` | object | Avec `--data-size`, la taille du [répertoire de données sauvegardées](#what-an-uninstall-deletes-and-keeps) du plugin en tant que `bytes` et `human` ; absent quand le répertoire est manquant ou vide. Installations de marketplace seulement. Nécessite Claude Code v2.1.285 ou ultérieur |

337| `dataDirUnreadable` | boolean | Avec `--data-size`, `true` quand le répertoire de données sauvegardées existe mais n'a pas pu être mesuré. Installations de marketplace seulement. Nécessite Claude Code v2.1.285 ou ultérieur |

333 338 

334Avec `--json --available`, Claude Code affiche un objet au lieu d'un tableau. Son champ `installed` contient le tableau d'objets de plugin installé, et son champ `available` contient un objet par plugin de marketplace non installé avec les champs ci-dessous.339Avec `--json --available`, Claude Code affiche un objet au lieu d'un tableau. Son champ `installed` contient le tableau d'objets de plugin installé, et son champ `available` contient un objet par plugin de marketplace non installé avec les champs ci-dessous.

335 340 


373 378 

374Pour un plugin qui n'est pas chargé, Claude Code affiche ``Plugin "formatter" not found. Run `claude plugin list` to see installed plugins, or pass --plugin-dir <path> to load one from disk.`` et quitte `1`.379Pour un plugin qui n'est pas chargé, Claude Code affiche ``Plugin "formatter" not found. Run `claude plugin list` to see installed plugins, or pass --plugin-dir <path> to load one from disk.`` et quitte `1`.

375 380 

381<h3 id="plugin-configure">

382 plugin configure

383</h3>

384 

385Montrez les options [`userConfig`](/docs/fr/plugins/manifest-reference#user-configuration) d'un plugin installé et lesquelles sont définies, ou sauvegardez les valeurs canalisées sur stdin. Nécessite Claude Code v2.1.285 ou ultérieur.

386 

387```bash theme={null}

388claude plugin configure <plugin>

389```

390 

391| Drapeau | Description |

392| :- | :- |

393| `--values-stdin` | Lisez les valeurs d'option depuis stdin en tant qu'objet JSON de strings sur une seule ligne et sauvegardez-les. Les options que vous omettez conservent leurs valeurs sauvegardées |

394| `--json` | Affiche le résultat en tant qu'un objet JSON sur stdout. Sans `--values-stdin`, l'objet porte le `schema` et les `choices` des options, leurs `inputs` de démarrage, et les noms d'options `configured` et `unconfigured`. Avec `--values-stdin`, il porte les noms d'options `saved` et, quand ils pourraient être relus, les noms `unconfigured` |

395 

396Sans drapeaux, la commande liste chaque option avec jusqu'à trois étiquettes : `required` ou `optional`, puis `sensitive` pour une option que le manifeste déclare sensible, puis `set` ou `not set`. Elle n'affiche aucune valeur sauvegardée. Avec `--json`, la sortie inclut les valeurs sauvegardées des options qui ne sont pas sensibles, et jamais le texte d'une sensible.

397 

398Pour sauvegarder les valeurs, écrivez-les dans un fichier en tant qu'objet JSON qui mappe les clés d'option à des valeurs de string, puis passez le fichier sur stdin. Remplacez `formatter@my-marketplace` par l'id de votre propre plugin en tant que `claude plugin list` le montre. Cet exemple définit une option nommée `api_url` depuis un fichier `values.json` qui contient `{"api_url": "https://example.com"}` :

399 

400```bash theme={null}

401claude plugin configure formatter@my-marketplace --values-stdin < values.json

402```

403 

404Claude Code valide chaque valeur par rapport au type déclaré de l'option et affiche `Configuration saved. Restart Claude Code to apply it.` Si vous passez une clé que le manifeste ne déclare pas, ou une valeur qui échoue la validation, la commande ne sauvegarde rien, affiche `Failed to save configuration:` avec la raison, et quitte `1`. Avec `--json`, une valeur refusée affiche aussi un objet sur stdout dont le champ `refused` porte le `message` et, quand une option est en cause, sa clé `option`.

405 

406Passez l'id complet `name@marketplace` du plugin, en tant que `claude plugin list` le montre. `configure` n'accepte pas un `name` nu. Quand aucun plugin chargé n'a cet id, la commande affiche `No installed plugin has the id "<plugin>".` et quitte `1`.

407 

408Pour les paramètres d'un serveur MCP fourni, voir [`plugin install --config`](#plugin-install) ou l'élément **Configure** dans `/plugin`.

409 

376<h3 id="plugin-prune">410<h3 id="plugin-prune">

377 plugin prune411 plugin prune

378</h3>412</h3>

Details

791 791 

792Les hooks dans `hooks/hooks.json` et dans la clé de manifeste `hooks` chargent tous les deux. Pour chaque événement et sa charge utile, consultez [Événements de hook](/docs/fr/hooks#hook-events).792Les hooks dans `hooks/hooks.json` et dans la clé de manifeste `hooks` chargent tous les deux. Pour chaque événement et sa charge utile, consultez [Événements de hook](/docs/fr/hooks#hook-events).

793 793 

794Pour écrire des hooks comme des fonctions JavaScript qui s'exécutent à l'intérieur de Claude Code et peuvent dessiner dans son interface, listez un fichier de module sous une clé `modules` dans le même `hooks/hooks.json`. Un plugin avec un est un mod. Consultez [Créer un mod](/docs/fr/plugins/mods/create).

795 

794<h4 id="when-plugin-hooks-fire">796<h4 id="when-plugin-hooks-fire">

795 Quand les hooks du plugin se déclenchent797 Quand les hooks du plugin se déclenchent

796</h4>798</h4>


868 870 

869Le serveur prend son nom du `name` dans le manifeste du bundle.871Le serveur prend son nom du `name` dans le manifeste du bundle.

870 872 

873Un manifeste propre du bundle peut déclarer les paramètres que le serveur a besoin de l'utilisateur dans un bloc `user_config`. Un serveur emballé avec un paramètre requis qui n'a pas de valeur enregistrée ne démarre pas. L'onglet **Errors** de `/plugin` affiche `Bundled MCP server "<name>" was not started: it needs configuration`.

874 

875Les utilisateurs fournissent les valeurs de l'une de deux façons :

876 

877* **Dans `/plugin`** : sélectionnez le plugin sur l'onglet **Installed** et choisissez **Configure**

878* **À l'installation, depuis le shell** : passez [`--config <server>.<key>=<value>`](/docs/fr/plugins/cli-reference#plugin-install) à `claude plugin install`. Nécessite Claude Code v2.1.285 ou ultérieur, et fonctionne seulement pour un bundle emballé à l'intérieur du plugin.

879 

871Pour les transports et l'authentification, consultez [MCP](/docs/fr/mcp#plugin-provided-mcp-servers).880Pour les transports et l'authentification, consultez [MCP](/docs/fr/mcp#plugin-provided-mcp-servers).

872 881 

873<h3 id="lsp-servers">882<h3 id="lsp-servers">


1071 Quand la boîte de dialogue de configuration apparaît1080 Quand la boîte de dialogue de configuration apparaît

1072</h3>1081</h3>

1073 1082 

1074La boîte de dialogue n'apparaît que dans l'interface interactive `/plugin`. Elle s'ouvre pour toute option qui n'est pas encore définie quand l'utilisateur fait l'une des choses suivantes :1083La boîte de dialogue fait partie de l'interface interactive `/plugin`. Elle s'ouvre pour toute option qui n'est pas encore définie quand l'utilisateur fait l'une des choses suivantes :

1075 1084 

1076* Installe le plugin dans `/plugin`1085* Installe le plugin dans `/plugin`

1077* Exécute `/plugin install <plugin>@<marketplace>` à l'intérieur d'une session1086* Exécute `/plugin install <plugin>@<marketplace>` à l'intérieur d'une session


1079 1088 

1080Pour ouvrir la même boîte de dialogue à tout moment, l'utilisateur exécute `/plugin configure <plugin>@<marketplace>`.1089Pour ouvrir la même boîte de dialogue à tout moment, l'utilisateur exécute `/plugin configure <plugin>@<marketplace>`.

1081 1090 

1082La commande shell `claude plugin install` ne demande jamais les valeurs `userConfig`. Pour définir les valeurs à partir du shell, passez chacune comme `--config KEY=VALUE`. Quand les options restent non définies, la commande imprime une ligne `userConfig options not yet set` qui nomme les deux façons de les définir. [La boîte de dialogue `userConfig` ne s'affiche jamais](/docs/fr/plugins/troubleshooting#the-userconfig-dialog-never-appears) cite la ligne.1091La boîte de dialogue Manage plugins de l'extension VS Code ([Manage plugins dialog](/docs/fr/vs-code#install-plugins)) demande les options non définies sous forme de formulaire après une installation, et une icône d'engrenage sur la ligne du plugin ouvre le formulaire à nouveau avec chaque option.

1092 

1093La commande shell `claude plugin install` ne demande jamais les valeurs `userConfig`. Pour définir les valeurs à partir du shell, passez chacune comme `--config KEY=VALUE` lors de l'installation, ou envoyez un objet JSON à [`claude plugin configure --values-stdin`](/docs/fr/plugins/cli-reference#plugin-configure) ensuite.

1094 

1095Quand les options restent non définies, `claude plugin install` imprime une ligne `userConfig options not yet set`. Pour le texte exact de la ligne, consultez [The `userConfig` dialog never appears](/docs/fr/plugins/troubleshooting#the-userconfig-dialog-never-appears).

1083 1096 

1084Pour les champs d'option, où chaque valeur est stockée, comment un composant référence une valeur enregistrée, et quels champs rejettent `${user_config.*}`, consultez [Configuration utilisateur](/docs/fr/plugins/manifest-reference#user-configuration).1097Pour les champs d'option, où chaque valeur est stockée, comment un composant référence une valeur enregistrée, et quels champs rejettent `${user_config.*}`, consultez [Configuration utilisateur](/docs/fr/plugins/manifest-reference#user-configuration).

1085 1098 

Details

72 La dernière phrase du résumé vous indique si le plugin est utilisable dans cette session :72 La dernière phrase du résumé vous indique si le plugin est utilisable dans cette session :

73 73 

74 * **Active now** : `Plugin is now active.` Aucun rechargement n'est nécessaire.74 * **Active now** : `Plugin is now active.` Aucun rechargement n'est nécessaire.

75 * **Active, but a server needs setup** : `Plugin is now active.` est suivi de `Its bundled MCP server needs configuration before it can start`. Le [serveur MCP fourni](/docs/fr/plugins/components#include-a-packaged-mcpb-server) du plugin ne peut pas démarrer tant que vous n'avez pas défini ses options. Sélectionnez le plugin sur l'onglet **Installed** dans `/plugin` et choisissez **Configure** pour définir les options du serveur.

75 * **Reload needed** : `Run /reload-plugins to activate.` Le panneau se ferme et Claude Code exécute ce rechargement pour vous. Si le rechargement [invaliderait le cache du prompt](/docs/fr/prompt-caching#enabling-or-disabling-a-plugin), il vous avertit et laisse le plugin en attente à la place. Exécutez `/reload-plugins --force` pour l'activer quand même, ce qui coûte une demande non mise en cache.76 * **Reload needed** : `Run /reload-plugins to activate.` Le panneau se ferme et Claude Code exécute ce rechargement pour vous. Si le rechargement [invaliderait le cache du prompt](/docs/fr/prompt-caching#enabling-or-disabling-a-plugin), il vous avertit et laisse le plugin en attente à la place. Exécutez `/reload-plugins --force` pour l'activer quand même, ce qui coûte une demande non mise en cache.

76 * **Load failed** : `The plugin couldn't be loaded`. Ouvrez l'onglet **Errors** dans `/plugin` pour connaître la raison, puis consultez [After install: plugin not working](/docs/fr/plugins/troubleshooting#plugin-installed-but-not-working).77 * **Load failed** : `The plugin couldn't be loaded`. Ouvrez l'onglet **Errors** dans `/plugin` pour connaître la raison, puis consultez [After install: plugin not working](/docs/fr/plugins/troubleshooting#plugin-installed-but-not-working).

77 </Step>78 </Step>


248Une 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 :249Une 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 :

249 250 

250* **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.251* **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.

251* **SSH** : l'hôte doit déjà être dans votre fichier `known_hosts` et la clé doit fonctionner sans invite de phrase secrète, car les invites d'empreinte d'hôte et de phrase secrète sont également supprimées.252* **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.

252* **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`](/docs/fr/env-vars#variables) pour ignorer cette vérification et toujours cloner sur HTTPS.253* **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`](/docs/fr/env-vars#variables) pour ignorer cette vérification et toujours cloner sur HTTPS.

253 254 

254Les mêmes identifiants s'appliquent lorsque vous exécutez `/plugin install`, `/plugin marketplace update` et `claude plugin update`.255Les mêmes identifiants s'appliquent lorsque vous exécutez `/plugin install`, `/plugin marketplace update` et `claude plugin update`.


288 289 

289* Tapez pour filtrer par nom ou description.290* Tapez pour filtrer par nom ou description.

290* Appuyez sur **Espace** pour activer ou désactiver le plugin sélectionné, et **f** pour le marquer comme favori.291* Appuyez sur **Espace** pour activer ou désactiver le plugin sélectionné, et **f** pour le marquer comme favori.

291* Appuyez sur **Entrée** pour ouvrir les détails d'un plugin. Le menu là offre **Disable plugin** ou **Enable plugin**, **Update now** et **Uninstall**. Les plugins qui prennent des paramètres offrent également **Configure options**.292* Appuyez sur **Entrée** pour ouvrir les détails d'un plugin.

293 

294Un menu de détails de plugin offre **Disable plugin** ou **Enable plugin**, **Update now** et **Uninstall**. Deux éléments supplémentaires apparaissent pour les plugins qui prennent des paramètres, et un plugin peut afficher les deux :

295 

296* **Configure options** : affiché lorsque le manifeste du plugin déclare les options [`userConfig`](/docs/fr/plugins/manifest-reference#user-configuration). Ouvre la boîte de dialogue pour ces options

297* **Configure** : affiché lorsque le plugin inclut un [serveur MCP fourni](/docs/fr/plugins/components#include-a-packaged-mcpb-server). Définit les paramètres `user_config` propres à ce serveur

292 298 

293L'onglet peut également afficher les plugins à la portée **Managed**. Votre organisation les a installés via les [paramètres gérés](/docs/fr/settings#settings-files), et vous ne pouvez pas les activer, désactiver ou les désinstaller ici.299L'onglet peut également afficher les plugins à la portée **Managed**. Votre organisation les a installés via les [paramètres gérés](/docs/fr/settings#settings-files), et vous ne pouvez pas les activer, désactiver ou les désinstaller ici.

294 300 

Details

146| [`dependencies`](#dependencies) | Array of strings or objects | Plugins qui doivent être activés pour que celui-ci fonctionne |146| [`dependencies`](#dependencies) | Array of strings or objects | Plugins qui doivent être activés pour que celui-ci fonctionne |

147| [`settings`](#settings) | Object | Paramètres que Claude Code applique tandis que le plugin est activé. Seuls `agent` et `subagentStatusLine` prennent effet |147| [`settings`](#settings) | Object | Paramètres que Claude Code applique tandis que le plugin est activé. Seuls `agent` et `subagentStatusLine` prennent effet |

148| [`userConfig`](#user-configuration) | Object | Valeurs que Claude Code demande à l'utilisateur lorsque le plugin est activé |148| [`userConfig`](#user-configuration) | Object | Valeurs que Claude Code demande à l'utilisateur lorsque le plugin est activé |

149| `types` | Path | Un fichier `.d.ts` qui déclare les valeurs `$.state` et les noms `$` d'un [mod](/docs/fr/plugins/mods/reference#files) |

149| [`channels`](#channels) | Array of objects | Canaux de message que le plugin fournit, chacun lié à l'un de ses serveurs MCP |150| [`channels`](#channels) | Array of objects | Canaux de message que le plugin fournit, chacun lié à l'un de ses serveurs MCP |

150| `skills` | Path, or array of paths | Répertoires à analyser pour les skills, chacun étant un répertoire de dossiers `<name>/SKILL.md` ou un dossier contenant directement `SKILL.md`. `"."` nomme la racine du plugin. S'ajoute à l'analyse par défaut `skills/` |151| `skills` | Path, or array of paths | Répertoires à analyser pour les skills, chacun étant un répertoire de dossiers `<name>/SKILL.md` ou un dossier contenant directement `SKILL.md`. `"."` nomme la racine du plugin. S'ajoute à l'analyse par défaut `skills/` |

151| [`commands`](#commands) | Path, array of paths, or object | Fichiers de commande `.md` plats, répertoires de ceux-ci, ou une carte d'objets du nom de commande à `source` ou `content`. Remplace l'analyse par défaut `commands/` |152| [`commands`](#commands) | Path, array of paths, or object | Fichiers de commande `.md` plats, répertoires de ceux-ci, ou une carte d'objets du nom de commande à `source` ou `content`. Remplace l'analyse par défaut `commands/` |


170 171 

171Claude Code espace de noms chaque composant sous celui-ci, donc un agent `reviewer` dans le plugin `deploy-tools` apparaît comme `deploy-tools:reviewer`.172Claude Code espace de noms chaque composant sous celui-ci, donc un agent `reviewer` dans le plugin `deploy-tools` apparaît comme `deploy-tools:reviewer`.

172 173 

174`claude plugin validate` vérifie également que le nom ne passe pas comme l'un des propres plugins d'Anthropic. La vérification ignore la casse et traite toute série de séparateurs comme un seul :

175 

176| Nom | Résultat |

177| :- | :- |

178| Commence par `claude-`, `anthropic-`, `anthropics-`, ou `cc-plugin-` | Erreur |

179| Est `claude`, `anthropic`, `anthropics`, `claude-code`, ou `claude-mods` | Erreur |

180| Met `official` à côté de `claude` ou `anthropic`, comme `official-claude-tools` | Erreur |

181| A `claude`, `anthropic`, ou `anthropics` comme mot entier n'importe où ailleurs, comme `mcp-for-claude` | Avertissement |

182 

183Le message d'erreur lit `Plugin name "<name>" is reserved: it passes as one of Anthropic's own`, et l'avertissement lit `Plugin name "<name>" reads as one of Anthropic's own`. `claude plugin init` et `claude plugin tag` refusent un nom qui génère l'erreur. Seules ces commandes vérifient le nom. Claude Code installe et charge toujours un plugin dont le nom qu'elles refusent.

184 

173<h3 id="displayname">185<h3 id="displayname">

174 `displayName`186 `displayName`

175</h3>187</h3>

Details

484| `Author name cannot be empty` | Erreur | `owner.name` |484| `Author name cannot be empty` | Erreur | `owner.name` |

485| `Plugin name cannot contain spaces. Use kebab-case (e.g., "my-plugin")` | Erreur | `plugins[i].name` |485| `Plugin name cannot contain spaces. Use kebab-case (e.g., "my-plugin")` | Erreur | `plugins[i].name` |

486| `Plugin name cannot contain control or bidirectional-formatting characters` | Erreur | `plugins[i].name` |486| `Plugin name cannot contain control or bidirectional-formatting characters` | Erreur | `plugins[i].name` |

487| `Plugin name "x" is reserved: it passes as one of Anthropic's own` | Erreur | `plugins[i].name`. Voir le [`name`](/docs/fr/plugins/manifest-reference#name) du manifeste pour les noms réservés |

488| `Plugin name "x" reads as one of Anthropic's own` | Avertissement | `plugins[i].name` |

487| `Claude Code cannot install plugins from marketplace "x". Each part of a plugin id (plugin@marketplace) may use only the letters a-z and A-Z, digits, ".", "_" and "-", and must start with a letter or digit. Change the marketplace's "name".` | Erreur | `name` |489| `Claude Code cannot install plugins from marketplace "x". Each part of a plugin id (plugin@marketplace) may use only the letters a-z and A-Z, digits, ".", "_" and "-", and must start with a letter or digit. Change the marketplace's "name".` | Erreur | `name` |

488| `Claude Code cannot install plugin "x". Each part of a plugin id (plugin@marketplace) may use only the letters a-z and A-Z, digits, ".", "_" and "-", and must start with a letter or digit. Change this entry's "name".` | Erreur | `plugins[i].name` |490| `Claude Code cannot install plugin "x". Each part of a plugin id (plugin@marketplace) may use only the letters a-z and A-Z, digits, ".", "_" and "-", and must start with a letter or digit. Change this entry's "name".` | Erreur | `plugins[i].name` |

489| `Duplicate plugin name "x" found in marketplace` | Erreur | Deux entrées partagent un `name` |491| `Duplicate plugin name "x" found in marketplace` | Erreur | Deux entrées partagent un `name` |

plugins/mods/admin.md +375 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Gérer les mods pour votre organisation

6 

7> Contrôlez les mods Claude Code avec des paramètres gérés : arrêtez les mods installés par les utilisateurs, autorisez uniquement les vôtres, examinez ce qu'un mod peut faire, et appliquez une politique avec votre propre mod.

8 

9Un [mod](/docs/fr/plugins/mods/overview) est un plugin qui exécute du code à l'intérieur de Claude Code avec les permissions de l'utilisateur qui l'a installé. Les mods ne sont pas isolés. Via les [paramètres gérés](/docs/fr/managed-settings), vous décidez si les mods s'exécutent sur les machines de vos utilisateurs, lesquels, et dans quel ordre. Vous pouvez également installer un mod de votre côté qui surveille ou refuse ce que font les autres mods.

10 

11Cette page s'adresse à la personne qui déploie les paramètres gérés pour Claude Code, que ce soit sous forme de fichier, via MDM, ou depuis la console d'administration claude.ai. Les mods sont activés par défaut dans Claude Code v2.1.287 et versions ultérieures. Commencez par la section qui correspond à ce que vous souhaitez faire :

12 

13* **Empêcher les mods des utilisateurs de se charger, avec ou sans vos propres mods** : [Arrêter le chargement des mods installés par les utilisateurs](#stop-user-installed-mods-from-loading)

14* **Voir ce que vos utilisateurs obtiennent quand vous ne changez rien** : [Savoir ce qui se passe par défaut](#know-what-happens-by-default)

15* **Laisser les mods activés avec d'autres limites** : [Choisir le niveau d'autorisation](#choose-how-much-to-allow)

16 

17<Note>

18 Ces cas sont couverts sur d'autres pages :

19 

20 * **Vous n'avez jamais déployé de paramètres gérés auparavant** : commencez par [Déployer les paramètres gérés](/docs/fr/managed-settings)

21 * **Vous souhaitez contrôler les plugins que les utilisateurs peuvent installer** : voir [Gérer les plugins pour votre organisation](/docs/fr/plugins/org)

22</Note>

23 

24<h2 id="stop-user-installed-mods-from-loading">

25 Arrêter le chargement des mods installés par les utilisateurs

26</h2>

27 

28Pour empêcher chaque mod que vos utilisateurs apportent de se charger, définissez l'option `allowManagedModsOnly` sur la [garde intégrée](#know-what-happens-by-default), un mod de politique que Claude Code charge avant chaque mod qu'un utilisateur installe. L'option se trouve dans les paramètres gérés sous `pluginConfigs`, indexée par `cc-plugin-sec-default@builtin` :

29 

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

31{

32 "pluginConfigs": {

33 "cc-plugin-sec-default@builtin": {

34 "options": {

35 "allowManagedModsOnly": true

36 }

37 }

38 }

39}

40```

41 

42Avec l'option définie dans les paramètres gérés :

43 

44* **Aucun mod qu'un utilisateur apporte ne se charge** : cela couvre un mod dans un plugin que l'utilisateur a installé, un mod chargé avec `--plugin-dir`, et un mod [que Claude a écrit pendant une session](/docs/fr/plugins/mods/create#ask-claude-for-a-mod)

45* **Les mods de votre organisation se chargent toujours** : un mod qui [compte comme celui de votre organisation](#install-your-organizations-mods) n'est pas vérifié. Tous les autres mods comptent comme ceux d'un utilisateur et ne se chargent pas. Cela inclut un mod dans un plugin que vous activez à partir d'une place de marché GitHub ou autre distante, et un que votre organisation active pour ses membres sur claude.ai. Si aucun ne compte comme le vôtre, aucun mod installé ne se charge.

46* **Les utilisateurs ne peuvent pas l'annuler** : la garde lit l'option uniquement à partir des paramètres gérés, donc la même entrée dans un fichier de paramètres utilisateur, projet ou local, ou dans un fichier passé avec `--settings`, ne change rien

47* **Un fichier ou une politique MDM couvre chaque fournisseur** : quand vous livrez l'option sous forme de fichier ou via MDM, elle fonctionne de la même manière sur Amazon Bedrock, la plateforme Agent de Google Cloud, et Microsoft Foundry. Pour la livraison depuis la console d'administration claude.ai, voir [Disponibilité de la plateforme](/docs/fr/server-managed-settings#platform-availability)

48* **Les autres personnalisations des utilisateurs continuent de fonctionner** : leurs [hooks dans les fichiers de paramètres](/docs/fr/hooks), les lignes d'état, et `/goal` ne sont pas affectés

49* **Les mods intégrés continuent de s'exécuter** : les mods intégrés à Claude Code, comme le support `AGENTS.md`, ont chacun [leur propre commutateur](/docs/fr/plugins/mods/overview#mods-built-into-claude-code)

50 

51Pour confirmer l'option sur la machine d'un utilisateur, démarrez Claude Code là-bas avec `--plugin-dir` et le chemin d'un répertoire qui contient un mod, comme `claude --plugin-dir ./first-mod`. Les hooks du mod ne s'exécutent pas, et la transcription et le journal de débogage contiennent le [message de la garde](/docs/fr/plugins/mods/troubleshoot#messages-from-the-built-in-guard), qui nomme le mod et `allowManagedModsOnly`. Si le mod se charge, voir [Vérifier qu'une politique est en vigueur](/docs/fr/managed-settings#check-that-a-policy-is-in-force) et les [règles qui décident si une option prend effet](#set-options-on-the-built-in-guard).

52 

53Si vous avez défini `CLAUDE_CODE_ENABLE_FUNCTION_HOOKS` à `0` lors de l'accès anticipé, remplacez-le par cette option. Claude Code v2.1.287 et versions ultérieures ignorent la variable à n'importe quelle valeur, donc un `0` là-bas laisse les mods activés.

54 

55<h2 id="know-what-happens-by-default">

56 Savoir ce qui se passe par défaut

57</h2>

58 

59Sans vos propres paramètres de mod, voici ce que vos utilisateurs obtiennent :

60 

61* **Les mods sont activés.** Un utilisateur peut installer un plugin qui contient un mod à partir de n'importe quelle place de marché que vos paramètres de plugin autorisent, ou en charger un à partir d'un répertoire avec `--plugin-dir`.

62* **Une garde intégrée s'exécute en premier.** Claude Code charge un mod intégré nommé `sec-default@builtin` avant chaque mod qu'un utilisateur installe. Les utilisateurs ne peuvent pas l'éteindre. `/plugin` et le journal de débogage le listent comme `cc-plugin-sec-default`. La garde se charge quand l'une de ces conditions est vraie :

63 

64 * La machine a des paramètres gérés

65 * L'utilisateur est connecté à Claude Code avec un plan Team ou Enterprise

66 

67 Un utilisateur qui s'authentifie avec une clé API, ou via Amazon Bedrock, la plateforme Agent de Google Cloud, ou Microsoft Foundry, n'obtient la garde que sur une machine qui a des paramètres gérés.

68* **La garde protège ce que vous gérez.** Le mod d'un utilisateur ne peut pas changer ce que vos hooks gérés reçoivent ou décident, l'invite système, votre `CLAUDE.md` géré et autres instructions gérées, ce que n'importe quel mod lit comme paramètres, ou les outils et descriptions de vos serveurs MCP gérés.

69* **Tout le reste est autorisé.** La garde n'ajoute aucune autre restriction. Le mod d'un utilisateur peut toujours lire et écrire des fichiers, démarrer des processus, faire des demandes réseau, réécrire les appels d'outils et les invites, refuser un appel d'outil, approuver un qui demanderait autrement, et dessiner dans l'interface, tout avec les permissions de cet utilisateur.

70* **Les règles de refus et vos hooks gérés ont la priorité.** Là où la garde se charge, le mod d'un utilisateur ne peut pas approuver un appel qu'une règle `deny` refuse, quel que soit le fichier de paramètres qui contient la règle. Un bloc d'un hook `PreToolUse` dans les paramètres gérés est aussi final. Les deux s'appliquent aux appels d'outils de Claude. Aucun ne s'applique aux appels [`$.fs` et `$.process` propres à un mod](/docs/fr/plugins/mods/api#reach-files-processes-and-the-network) : avec `Read(.env)` refusé, un mod peut toujours lire ce fichier avec `$.fs.read` ou démarrer un programme qui le fait. Pour limiter ces appels, empêchez le mod de se charger ou accrochez l'appel dans un [mod de politique](#enforce-a-policy-with-a-mod-of-your-own).

71* **Les autres vérifications de permission peuvent être contournées.** Le mod d'un utilisateur qui approuve les appels d'outils peut approuver un appel qu'une règle `ask` demanderait, ou qu'un hook `PreToolUse` en dehors des paramètres gérés a bloqué. En mode auto, un appel que le mod approuve s'exécute sans vérification de classificateur.

72 

73La source de la garde est publique dans le [répertoire `mods/sec-default` du référentiel Claude Code](https://github.com/anthropics/claude-code/tree/main/mods/sec-default).

74 

75<h3 id="know-which-controls-still-apply">

76 Savoir quels contrôles s'appliquent toujours

77</h3>

78 

79Les mods ne remplacent pas les contrôles que vous avez déjà :

80 

81* **Les hooks de paramètres continuent de fonctionner.** Les hooks de commande, HTTP, d'invite, et d'agent dans les fichiers de paramètres et dans le `hooks/hooks.json` des plugins s'exécutent comme avant, aux côtés des mods. Rien à leur sujet n'est déprécié.

82* **Les règles de refus ont la priorité là où la garde se charge.** Le mod d'un utilisateur ne peut pas approuver un appel qu'une règle `deny` refuse, sauf si vous définissez [`allowModsToOverrideDenyRules`](#set-options-on-the-built-in-guard).

83* **Les hooks gérés s'exécutent en premier.** Un hook `PreToolUse` dans les paramètres gérés s'exécute avant que n'importe quel mod ne voie l'appel d'outil, et son bloc est final. Si un mod réécrit ensuite l'appel, vos hooks gérés s'exécutent à nouveau sur l'appel réécrit, donc un bloc s'applique toujours. Les hooks `PreToolUse` d'autres fichiers de paramètres et de plugins s'exécutent après le dernier mod, donc un mod qui retourne son propre résultat à la place d'exécuter l'outil les empêche de s'exécuter. Voir [L'ordre dans lequel les mods s'exécutent](/docs/fr/plugins/mods/events#the-order-mods-run-in).

84* **La politique réseau couvre `$.http.fetch`.** Si votre organisation désactive la récupération web, ou si le trafic réseau non essentiel est désactivé pour la session, Claude Code refuse une demande réseau qu'un mod fait avec `$.http.fetch`. La politique ne couvre pas un programme que le mod démarre avec `$.process.run`. Ce programme atteint le réseau avec l'accès propre de l'utilisateur.

85* **Les contrôles de plugin couvrent les mods.** Un mod est un plugin, donc les [paramètres qui limitent ce que les utilisateurs peuvent installer](/docs/fr/plugins/org#restrict-what-users-can-install), comme `strictKnownMarketplaces`, décident s'il peut être installé du tout.

86* **Les mods ne peuvent pas changer l'invite de permission.** Un mod peut redessiner une grande partie de l'interface de Claude Code, mais pas l'invite de permission, donc il ne peut pas changer ce qu'une invite affiche. Un mod peut toujours approuver ou refuser un appel d'outil avant que l'invite n'apparaisse, comme [Savoir ce qui se passe par défaut](#know-what-happens-by-default) le décrit.

87* **Les invites de confiance viennent en premier.** Dans une session interactive dans un répertoire que l'utilisateur n'a pas encore approuvé, aucun mod ne se charge jusqu'à ce qu'il réponde à l'invite de confiance.

88* **`--safe-mode` désactive les mods installés, y compris les vôtres.** Démarrez une session avec `claude --safe-mode` pour vérifier si un mod a causé un problème.

89 

90Aucun de ces contrôles n'isole un mod. Un mod que vous autorisez s'exécute en tant qu'utilisateur, avec l'accès de l'utilisateur aux fichiers, processus, et réseau.

91 

92<h2 id="decide-whether-to-leave-mods-on">

93 Décider de laisser les mods activés

94</h2>

95 

96Un mod peut faire plus que les autres parties d'un plugin car il s'exécute à l'intérieur de Claude Code. Il voit chaque invite et appel d'outil, peut les changer, et peut autoriser ou refuser un appel d'outil avant qu'une invite de permission n'apparaisse.

97 

98Ce qu'un utilisateur peut charger en tant que mod dépend des contrôles de plugin que vous avez déjà :

99 

100| Vos contrôles de plugin aujourd'hui | Ce qu'un utilisateur peut charger en tant que mod |

101| :- | :- |

102| Aucun | Un mod à partir de n'importe quelle place de marché, à partir de n'importe quel répertoire avec `--plugin-dir`, ou que Claude écrit pendant une session |

103| Une liste d'autorisation de place de marché | Un mod à partir des places de marché que vous autorisez, ou à partir de n'importe quel répertoire avec `--plugin-dir`. Un mod que Claude écrit pendant une session se charge uniquement quand la liste d'autorisation [inclut `skills-dir`](/docs/fr/plugins/org#keep-skills-directory-plugins-loading). |

104| Une liste d'autorisation de place de marché et `disableSideloadFlags` | Un mod à partir des places de marché que vous autorisez |

105 

106[Gérer les plugins pour votre organisation](/docs/fr/plugins/org) liste chaque façon dont un plugin se charge et le paramètre qui contrôle chacun.

107 

108Pour vérifier les mods dans une place de marché avant que vos utilisateurs les installent, voir [Examiner ce qu'un mod peut faire](#review-what-a-mod-can-do). Pour empêcher les mods des utilisateurs de se charger jusqu'à ce que vous ayez fait cela, voir [Arrêter le chargement des mods installés par les utilisateurs](#stop-user-installed-mods-from-loading).

109 

110<h3 id="review-what-a-mod-can-do">

111 Examiner ce qu'un mod peut faire

112</h3>

113 

114Vous pouvez voir ce qu'un mod est capable de faire sans l'exécuter. Dans votre shell, exécutez `claude plugin validate` sur le répertoire du plugin :

115 

116```bash theme={null}

117claude plugin validate ./some-mod

118```

119 

120Deux lignes de la sortie décrivent le code du mod :

121 

122```text theme={null}

123 ❯ ./register.js hooks: session.start, tool.call, ui.render{component=Pane}

124 ❯ ./register.js calls: $.fs.read, $.http.fetch, $.store.set, $.ui.open

125```

126 

127La ligne `hooks:` liste les événements que le mod reçoit. La ligne `calls:` liste les méthodes de l'API des mods que son code appelle. L'[API des mods](/docs/fr/plugins/mods/api), écrite `$` dans le code d'un mod, est comment un mod atteint les fichiers, processus, et réseau. Claude Code refuse de charger un mod qui utilise l'API des mods d'une manière que cette commande ne peut pas lire.

128 

129Regardez la ligne `calls:` pour celles-ci :

130 

131| Appel | Ce que cela signifie |

132| :- | :- |

133| `$.fs.read`, `$.fs.write` | Lit ou écrit des fichiers n'importe où où l'utilisateur peut |

134| `$.process.run`, `$.process.spawn` | Démarre des programmes en tant qu'utilisateur |

135| `$.http.fetch` | Fait des demandes réseau |

136| `$.env.get`, `$.settings.read` | Lit les variables d'environnement et les paramètres, qui peuvent contenir des clés API. Une ligne `env reads:` dans la sortie nomme chaque variable. |

137| `$.env.set` | Définit une variable d'environnement pour Claude Code et pour chaque commande et serveur MCP qu'il démarre ensuite, ce qui peut changer ce que ces programmes exécutent. Une ligne `env writes:` nomme chaque variable. |

138| `$.mcp.call` | Appelle un outil sur un serveur MCP connecté, selon les règles de permission de la session |

139| `$.model.complete` | Utilise le plan ou la clé API de l'utilisateur pour les appels de modèle |

140| `$.prompt.submit` | Soumet une invite, et peut l'envoyer comme les propres paroles de l'utilisateur |

141| `$.session.send` | Envoie un message qu'une autre session ou sous-agent de Claude lit |

142 

143Dans la ligne `hooks:`, [`tool.call`](/docs/fr/plugins/mods/reference#tools) et [`prompt.submit`](/docs/fr/plugins/mods/reference#prompts-and-what-claude-reads) signifient que le mod voit chaque appel d'outil et chaque invite, et peut les changer. [`session.append`](/docs/fr/plugins/mods/reference#session) signifie que le mod peut réécrire chaque ligne de la conversation avant qu'elle ne soit stockée. [`ui.render{component=AskUserQuestion}`](/docs/fr/plugins/mods/interface#change-what-claude-code-already-draws) signifie que le mod peut redessiner la boîte de dialogue que Claude utilise pour poser une question à l'utilisateur. `tool.check` signifie que le mod peut approuver ou refuser un appel d'outil avant qu'une invite de permission n'apparaisse. [Savoir ce qui se passe par défaut](#know-what-happens-by-default) liste lesquels de vos règles et hooks ont la priorité sur sa réponse.

144 

145<h2 id="choose-how-much-to-allow">

146 Choisir le niveau d'autorisation

147</h2>

148 

149Les politiques de mod vont d'aucun mod installé du tout à n'importe quel mod qu'un utilisateur choisit, avec votre propre mod vérifiant les autres, et chacun est quelques paramètres gérés. Trouvez la politique que vous voulez dans la première colonne et définissez ce que la deuxième colonne nomme. [Déployer les paramètres gérés](/docs/fr/managed-settings) couvre où vivent les paramètres gérés.

150 

151| Ce que vous voulez | Paramètres |

152| :- | :- |

153| Aucun mod installé, avec les hooks intacts | Définissez [`allowManagedModsOnly`](#set-options-on-the-built-in-guard) et ne déployez aucun mod de votre côté |

154| Aucun mod installé et aucun hook du tout, y compris vos hooks gérés | Définissez `disableAllHooks` à `true` |

155| Uniquement les mods de votre organisation | Définissez l'option [`allowManagedModsOnly`](#stop-user-installed-mods-from-loading) de la garde, et [installez vos mods](#install-your-organizations-mods) pour qu'ils comptent comme les vôtres |

156| N'importe quel mod à partir des places de marché que vous approuvez | Gardez vos [restrictions de place de marché](/docs/fr/plugins/org#restrict-what-users-can-install), et définissez `disableSideloadFlags` à `true` |

157| N'importe quel mod, avec votre propre mod vérifiant les autres | [Installez votre mod](#install-your-organizations-mods), et listez-le avec `sec-default@builtin` dans `prependPlugins` |

158 

159Ce que chaque paramètre fait :

160 

161* **`allowManagedModsOnly`** : une option sur la garde intégrée. Les mods des utilisateurs ne se chargent pas, et leurs hooks de paramètres, lignes d'état, et `/goal` continuent de fonctionner. [Arrêter le chargement des mods installés par les utilisateurs](#stop-user-installed-mods-from-loading) liste ce qu'il couvre.

162* **`allowManagedHooksOnly`** : un paramètre plus large. Seuls [les mods de votre organisation](#install-your-organizations-mods) et les mods intégrés à Claude Code se chargent. Un mod qu'un utilisateur a installé lui-même ne se charge pas. Le paramètre bloque aussi les hooks dans les fichiers de paramètres propres des utilisateurs. Lisez [Ce qui s'exécute sous `allowManagedHooksOnly`](/docs/fr/settings-reference#what-runs-under-allowmanagedhooksonly) avant de le définir.

163* **`disableAllHooks`** : le paramètre le plus large. Dans les paramètres gérés, il arrête les mods dans chaque plugin installé, y compris les vôtres, et désactive chaque hook dans les fichiers de paramètres, donc un hook `PreToolUse` dans vos paramètres gérés ne bloque plus rien. Les lignes d'état personnalisées et `/goal` cessent aussi de fonctionner. Lisez [`disableAllHooks`](/docs/fr/settings-reference#disableallhooks) avant de le définir.

164* **`disableSideloadFlags`** : rejette `--plugin-dir` et `--plugin-url` au démarrage, donc personne ne charge un mod à partir d'un répertoire, et empêche les mods que Claude écrit pendant une session de se charger. Le paramètre rejette aussi `--agents` et `--mcp-config`. Lisez [`disableSideloadFlags`](/docs/fr/settings-reference#disablesideloadflags) avant de le définir.

165 

166Les mods intégrés à Claude Code, comme le support `AGENTS.md`, ne sont pas affectés par ces paramètres. Chacun a [son propre commutateur](/docs/fr/plugins/mods/overview#mods-built-into-claude-code).

167 

168Un utilisateur dont le mod ne s'est pas chargé trouve la raison dans son journal de débogage. [Messages de refus](/docs/fr/plugins/mods/troubleshoot#refusal-messages) liste les lignes pour `allowManagedHooksOnly` et `disableAllHooks`, et [Messages de la garde intégrée](/docs/fr/plugins/mods/troubleshoot#messages-from-the-built-in-guard) a la ligne pour `allowManagedModsOnly`.

169 

170<h3 id="set-options-on-the-built-in-guard">

171 Définir les options sur la garde intégrée

172</h3>

173 

174La garde intégrée prend deux options. Définissez-les dans les paramètres gérés sous `pluginConfigs`, indexées par `cc-plugin-sec-default@builtin`, comme l'exemple dans [Arrêter le chargement des mods installés par les utilisateurs](#stop-user-installed-mods-from-loading) le fait.

175 

176Le tableau donne ce que vos utilisateurs obtiennent avec chaque option non définie et avec elle définie à `true` :

177 

178| Option | Non définie | `true` |

179| :- | :- | :- |

180| `allowManagedModsOnly` | Les mods des utilisateurs se chargent | Seuls [les mods de votre organisation](#install-your-organizations-mods), et les mods intégrés à Claude Code, se chargent. Claude Code refuse tous les autres mods, y compris un que l'utilisateur a installé ou nommé avec `--plugin-dir`. |

181| `allowModsToOverrideDenyRules` | Les règles de refus ont la priorité sur les mods des utilisateurs | Le mod d'un utilisateur qui approuve les appels d'outils peut approuver un appel qu'une règle `deny` refuse |

182 

183Ces règles décident si une option prend effet :

184 

185* **L'id a une seule orthographe ici** : Claude Code lit les options uniquement sous `cc-plugin-sec-default@builtin`. `prependPlugins` accepte aussi `sec-default@builtin`, et `pluginConfigs` ne le fait pas.

186* **Seuls les paramètres gérés comptent** : la même entrée dans un fichier de paramètres utilisateur, projet ou local, ou dans un fichier passé avec `--settings`, ne définit ni ne desserre une option

187* **La garde doit se charger** : si vous définissez `prependPlugins`, [nommez la garde dans la liste](#install-your-organizations-mods). Là où la garde ne se charge pas, aucune option ne s'applique.

188* **La garde échoue fermée** : si la garde ne peut pas lire les paramètres gérés, elle refuse tous les mods des utilisateurs au chargement. Si elle ne peut pas vérifier les règles de refus pour un appel qu'un mod d'utilisateur a approuvé, elle refuse l'appel.

189 

190Les [messages de la garde intégrée](/docs/fr/plugins/mods/troubleshoot#messages-from-the-built-in-guard) sont ce que vos utilisateurs voient quand l'une ou l'autre option s'applique.

191 

192<h2 id="run-your-organization’s-own-mods">

193 Exécuter les mods de votre organisation

194</h2>

195 

196Vous pouvez déployer des mods de votre côté à chaque utilisateur, choisir où ils s'exécutent par rapport aux mods des utilisateurs, et en utiliser un pour appliquer une politique.

197 

198<h3 id="install-your-organizations-mods">

199 Installer les mods de votre organisation et définir l'ordre

200</h3>

201 

202Les mods de votre organisation se chargent là où les mods des utilisateurs ne le font pas et peuvent s'exécuter avant eux, donc Claude Code doit pouvoir dire qu'un mod vient de vous. Il traite un mod comme celui de votre organisation uniquement quand tous ceux-ci sont vrais :

203 

204* Les `enabledPlugins` gérés définissent le plugin du mod à `true`

205* Les paramètres gérés nomment la [place de marché](/docs/fr/plugins/create-marketplace) du plugin comme un répertoire sur la machine de l'utilisateur, par chemin absolu. Une entrée `extraKnownMarketplaces` le fait et enregistre aussi la place de marché pour l'utilisateur.

206* La place de marché liste le plugin par un chemin relatif, donc Claude Code le [charge sur place](/docs/fr/plugins/loading#in-place-and-copied-plugins) à partir de ce répertoire

207 

208Pour les respecter, faites en sorte que votre gestion d'appareils copie le répertoire de la place de marché au même chemin sur chaque machine. Rendez le répertoire et chaque répertoire au-dessus de lui inscriptibles uniquement par un administrateur, comme le fichier de paramètres gérés l'est. Quiconque peut écrire là-bas peut réécrire votre mod. Les paramètres gérés que vous livrez à partir de la console d'administration claude.ai peuvent porter les clés, mais ils ne peuvent pas mettre le répertoire sur une machine.

209 

210Le répertoire contient le manifeste de la place de marché et le plugin :

211 

212```text theme={null}

213/opt/acme/claude-plugins/

214├── .claude-plugin/

215│ └── marketplace.json

216└── plugins/

217 └── acme-guard/

218 ├── .claude-plugin/

219 │ └── plugin.json

220 └── hooks/

221 ├── hooks.json

222 └── register.js

223```

224 

225Le manifeste liste le plugin par son chemin relatif à ce répertoire :

226 

227```json /opt/acme/claude-plugins/.claude-plugin/marketplace.json theme={null}

228{

229 "name": "acme-tools",

230 "owner": { "name": "Acme" },

231 "plugins": [

232 { "name": "acme-guard", "source": "./plugins/acme-guard", "description": "Acme policy mod" }

233 ]

234}

235```

236 

237Un plugin que Claude Code copie dans son cache compte comme celui d'un utilisateur, même quand les `enabledPlugins` gérés l'activent. Cela couvre chaque plugin à partir d'une source GitHub, git, URL, ou npm. Son mod s'exécute parmi les mods des utilisateurs, `prependPlugins` et `appendPlugins` le sautent, et il ne se charge pas sous `allowManagedModsOnly` ou `allowManagedHooksOnly`. Le journal de débogage de l'utilisateur a une ligne qui commence par l'id du plugin et `is enabled by managed settings, but`.

238 

239Claude Code lève un événement chaque fois qu'il est sur le point d'agir, comme exécuter un outil, et le passe à chaque mod à tour de rôle. Un mod qui compte comme le vôtre [s'exécute avant les mods des utilisateurs](/docs/fr/plugins/mods/events#the-order-mods-run-in) même quand vous ne le listez nulle part. Pour définir sa place, listez son id dans l'un de deux paramètres. L'id est le nom du plugin, `@`, et le nom de la place de marché, comme `acme-guard@acme-tools`.

240 

241* **`prependPlugins`** : votre mod voit chaque événement avant n'importe quel mod d'utilisateur et chaque résultat après. Il peut changer l'événement, le refuser, ou sauter les mods des utilisateurs.

242* **`appendPlugins`** : votre mod s'exécute après chaque mod d'utilisateur, donc il voit uniquement les événements que ces mods transmettent, sous la forme qu'ils les transmettent

243 

244Cet exemple déclare la place de marché `acme-tools` à `/opt/acme/claude-plugins`, active `acme-guard` à partir de celle-ci, et exécute ce mod en premier, avec la garde intégrée après :

245 

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

247{

248 "extraKnownMarketplaces": {

249 "acme-tools": {

250 "source": { "source": "directory", "path": "/opt/acme/claude-plugins" }

251 }

252 },

253 "enabledPlugins": { "acme-guard@acme-tools": true },

254 "prependPlugins": ["acme-guard@acme-tools", "sec-default@builtin"]

255}

256```

257 

258Chaque clé fait un travail :

259 

260* **`extraKnownMarketplaces`** : nomme le répertoire qui contient la place de marché `acme-tools`. `path` est le chemin absolu du répertoire qui contient `.claude-plugin/marketplace.json`.

261* **`enabledPlugins`** : active `acme-guard` pour chaque utilisateur qui reçoit ces paramètres gérés

262* **`prependPlugins`** : met `acme-guard` en premier et la garde intégrée en deuxième, tous deux avant n'importe quel mod qu'un utilisateur installe. Claude Code suit l'ordre que vous listez.

263 

264Pour confirmer qu'une machine d'utilisateur a reçu les paramètres, voir [Vérifier qu'une politique est en vigueur](/docs/fr/managed-settings#check-that-a-policy-is-in-force).

265 

266Pour confirmer où le mod s'exécute, démarrez une session sur cette machine avec `claude --debug` et recherchez dans le [journal de débogage](/docs/fr/plugins/mods/troubleshoot#read-the-debug-log) l'id du mod :

267 

268* **`hooks module acme-guard@acme-tools loaded`, avec `tier prepend`** : le mod compte comme celui de votre organisation et s'exécute en premier

269* **La même ligne avec `tier user`** : Claude Code le traite comme un mod d'utilisateur. Une deuxième ligne, `prependPlugins names acme-guard@acme-tools, which is not an enabled managed plugin with a hooks module; skipped`, dit que la liste l'a sauté.

270 

271Ces règles décident quels ids dans les deux listes prennent effet :

272 

273* **La liste remplace la valeur par défaut** : quand vous définissez `prependPlugins` dans les paramètres gérés, nommez `sec-default@builtin` dans celle-ci pour garder la garde intégrée. La garde est intégrée et n'a besoin d'aucune entrée `enabledPlugins`.

274* **Vos propres ids doivent compter comme les vôtres** : dans les paramètres gérés, Claude Code saute un id dont le plugin ne respecte pas les trois conditions pour un mod d'organisation

275* **Les référentiels ne peuvent pas les définir** : Claude Code lit les deux paramètres uniquement à partir des paramètres gérés et jamais à partir du fichier de paramètres d'un référentiel. Un utilisateur peut les définir dans `~/.claude/settings.json` pour ordonner uniquement ses propres mods sur une machine sans paramètres gérés, et uniquement quand il n'est pas connecté avec un plan Team ou Enterprise. N'importe où ailleurs, Claude Code ignore les deux clés dans les paramètres utilisateur. Une liste là-bas n'ajoute ni ne supprime la garde intégrée.

276 

277<h3 id="enforce-a-policy-with-a-mod-of-your-own">

278 Appliquer une politique avec un mod de votre côté

279</h3>

280 

281Pour empêcher tous les mods d'un utilisateur de se charger, vous n'avez pas besoin d'un mod de votre côté. Définissez [`allowManagedModsOnly`](#stop-user-installed-mods-from-loading). Écrivez un mod de politique quand vous voulez admettre certains mods d'utilisateurs et en refuser d'autres, ou pour enregistrer ce que les mods font.

282 

283Chaque fois qu'un autre mod est sur le point de se charger, votre mod reçoit la liste que `claude plugin validate` imprime, dans un événement nommé [`plugin.register`](/docs/fr/plugins/mods/reference#other-mods). Un mod dans `prependPlugins` peut lire cette liste et refuser le mod. Il peut aussi [accrocher n'importe quel appel de l'API des mods par nom](/docs/fr/plugins/mods/api#reach-files-processes-and-the-network) pour enregistrer ou refuser cet appel pour tous les autres mods. Le nom est la méthode sans le `$.`, donc un crochet sur `fs.write` voit chaque appel `$.fs.write`.

284 

285Ce mod de politique refuse n'importe quel mod d'utilisateur dont le propre code appelle `$.process.run` ou `$.process.spawn`. Il garde aussi un journal d'audit, écrivant chaque appel d'outil et chaque fichier qu'un mod écrit dans le journal de débogage. Parce qu'il s'exécute en premier, le journal enregistre ce qui a été demandé, avant que n'importe quel mod d'utilisateur ne le change. Enregistrez-le comme `acme-guard/hooks/register.js` :

286 

287```javascript acme-guard/hooks/register.js theme={null}

288// Les méthodes qu'aucun mod d'utilisateur ne peut appeler, chacune orthographiée namespace.method

289const BLOCKED_CALLS = ['process.run', 'process.spawn']

290 

291export function register(on) {

292 // S'exécute chaque fois qu'un autre mod est sur le point de se charger

293 on('plugin.register', async ($, e, next) => {

294 // Gardez les appels dans le code de ce mod qui sont sur la liste bloquée

295 const blocked = e.uses.calls.filter((call) => BLOCKED_CALLS.includes(call))

296 if (e.tier === 'user' && blocked.length > 0) {

297 // Retourner refuse empêche le mod de se charger, et le texte est la raison

298 return { refuse: 'Acme policy: mods may not call ' + blocked.join(', ') }

299 }

300 // Laissez tous les autres mods se charger

301 return next(e)

302 })

303 

304 // Enregistrez chaque appel d'outil, puis laissez-le continuer inchangé

305 on('tool.call', async ($, e, next) => {

306 $.ui.log('audit tool.call ' + e.tool, { to: 'debug' })

307 return next(e)

308 })

309 

310 // Enregistrez quel mod a écrit un fichier, puis le chemin, entre guillemets car le mod l'a choisi

311 on('fs.write', async ($, e, next) => {

312 $.ui.log('audit fs.write by ' + next.origin.plugin + ' ' + JSON.stringify(e.path), { to: 'debug' })

313 return next(e)

314 })

315}

316```

317 

318Le fichier enregistre trois crochets :

319 

320* **`plugin.register`** : décide si un autre mod se charge. Il refuse un mod d'utilisateur qui appelle une méthode bloquée et transmet tous les autres mods.

321* **`tool.call`** : écrit une ligne comme `audit tool.call Bash` dans le journal de débogage pour chaque appel d'outil, et ne change rien

322* **`fs.write`** : écrit une ligne comme `audit fs.write by reader "/tmp/notes.md"` pour chaque appel `$.fs.write` qu'un autre mod fait, et ne change rien. Le nom du mod vient en premier et le chemin est entre guillemets, donc un chemin qu'un mod choisit ne peut pas passer pour un autre champ de la ligne.

323 

324Le crochet `plugin.register` lit deux champs de l'événement :

325 

326* **`e.tier`** : où le mod s'exécuterait, l'un de `prepend`, `user`, `append`, ou `builtin`. Chaque mod qu'une personne installe est `user`.

327* **`e.uses.calls`** : les méthodes de l'API des mods que le mod appelle, chacune orthographiée `namespace.method` comme `process.run`, sans le `$.` que `claude plugin validate` imprime

328 

329Quand un utilisateur installe un mod qui appelle `$.process.run`, le mod ne se charge pas, et son journal de débogage a une ligne qui se termine par `refused by acme-guard:` et votre raison. Le refus atteint aussi la transcription dans une [session qui recharge à chaud un répertoire de plugin](/docs/fr/plugins/mods/troubleshoot#find-out-why-a-mod-does-nothing). Pour bloquer un appel sans refuser le mod entier, retournez `{ deny: 'your reason' }` d'un crochet sur le nom de cet appel.

330 

331Pour envoyer les lignes d'audit quelque part d'autre que le journal de débogage, appelez `$.http.fetch` à partir des mêmes crochets.

332 

333Une session peut s'exécuter sans votre mod. Si le thread de travail qui exécute les mods installés [plante trois fois](/docs/fr/plugins/mods/troubleshoot#mods-that-run-in-the-hooks-worker-are-off-for-this-session), Claude Code décharge tous les mods qui ne sont pas intégrés, y compris le vôtre, jusqu'à ce que l'utilisateur exécute `/reload-plugins` ou démarre une nouvelle session. Et un utilisateur qui démarre Claude Code avec `--safe-mode` s'exécute sans mods installés, y compris les vôtres.

334 

335[Créer un mod](/docs/fr/plugins/mods/create) couvre les fichiers qu'un mod a besoin. [Tester un mod qui juge d'autres mods](/docs/fr/plugins/mods/test#test-a-mod-that-judges-other-mods) a un fichier de test pour ce mod de politique.

336 

337<h4 id="refuse-mods-when-your-check-fails">

338 Refuser les mods quand votre vérification échoue

339</h4>

340 

341Si votre crochet `plugin.register` lève une exception ou dépasse sa limite de temps, Claude Code saute le crochet, donc la vérification échoue ouvertement et le mod qu'il vérifiait se charge. Pour échouer fermé et refuser les mods des utilisateurs, déplacez la vérification dans une fonction nommée et ajoutez un gestionnaire `.catch` qui retourne le refus. Cette version du fichier montre uniquement le crochet `plugin.register`, donc gardez les deux crochets d'audit de la première version dans `register` :

342 

343```javascript acme-guard/hooks/register.js theme={null}

344const BLOCKED_CALLS = ['process.run', 'process.spawn']

345 

346// La même vérification qu'avant, déplacée dans sa propre fonction

347async function checkMod($, e, next) {

348 const blocked = e.uses.calls.filter((call) => BLOCKED_CALLS.includes(call))

349 if (e.tier === 'user' && blocked.length > 0) {

350 return { refuse: 'Acme policy: mods may not call ' + blocked.join(', ') }

351 }

352 return next(e)

353}

354 

355export function register(on) {

356 // Le gestionnaire s'exécute uniquement quand checkMod lève une exception ou dépasse sa limite de temps

357 on('plugin.register', checkMod).catch(async ($, e, next) => {

358 // Laissez les mods de votre organisation et les mods intégrés se charger

359 if (e.tier !== 'user') return next(e)

360 // Refusez le mod d'utilisateur qui n'a pas pu être vérifié

361 return { refuse: 'Acme policy check failed, so this mod was not loaded' }

362 })

363}

364```

365 

366Avec le gestionnaire en place, un mod qui était en cours de vérification quand la vérification a levé une exception ou a dépassé le délai d'attente ne se charge pas, et la ligne de refus porte la deuxième raison, comme dans `refused by acme-guard: Acme policy check failed, so this mod was not loaded`. Le gestionnaire transmet chaque mod en dehors du tier `user` à `next(e)`, donc une vérification échouée n'arrête pas les mods que votre organisation liste. [Gérer un crochet qui échoue](/docs/fr/plugins/mods/events#handle-a-hook-that-fails) couvre `.catch` pour d'autres événements.

367 

368<h2 id="next-steps">

369 Étapes suivantes

370</h2>

371 

372* [Sécurité des plugins](/docs/fr/plugins/security) : ce que n'importe quel plugin peut faire sur la machine d'un utilisateur, et comment en examiner un avant qu'il ne soit installé

373* [Aperçu des mods](/docs/fr/plugins/mods/overview) : ce qu'est un mod et comment il se compare aux crochets, compétences, et serveurs MCP

374* [L'ordre dans lequel les mods s'exécutent](/docs/fr/plugins/mods/events#the-order-mods-run-in) : comment `prependPlugins` et `appendPlugins` s'adaptent aux mods des utilisateurs

375* [Paramètres et variables d'environnement](/docs/fr/plugins/mods/reference#settings-and-environment-variables) : chaque paramètre nommé sur cette page dans un tableau

plugins/mods/api.md +218 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Utiliser l'API mods

6 

7> Appelez l'API mods à partir d'un mod Claude Code pour ajouter des commandes et des outils, appeler un modèle, exécuter du travail sur un minuteur, envoyer des messages à d'autres sessions et accéder aux fichiers et au réseau.

8 

9L'API mods est l'ensemble des méthodes qu'un mod appelle pour agir : ajouter des commandes et des outils, appeler un modèle, exécuter du travail entre les événements et accéder au système de fichiers, aux processus et au réseau. Chaque hook la reçoit comme premier argument, `$`, avec les méthodes regroupées dans des espaces de noms tels que `$.ui` et `$.fs`. [Les événements](/docs/fr/plugins/mods/events) décident quand un hook s'exécute, et l'API mods est ce que le hook appelle une fois qu'il le fait.

10 

11Créez votre [premier mod](/docs/fr/plugins/mods/create) avant de commencer ici. Pour chaque méthode, consultez [les méthodes de l'API mods](/docs/fr/plugins/mods/reference#mods-api-methods) ou lisez [les types pour votre build](/docs/fr/plugins/mods/create#get-the-types-for-your-build).

12 

13<h2 id="add-a-command-or-a-tool">

14 Ajouter une commande ou un outil

15</h2>

16 

17Un mod peut ajouter une commande que l'utilisateur peut exécuter et un outil que Claude peut appeler. Enregistrez les deux dans un hook [`session.start`](/docs/fr/plugins/mods/reference#session). Claude Code attend ce hook avant la première invite, donc ce que vous enregistrez est disponible dès le premier tour.

18 

19<h3 id="add-a-command">

20 Ajouter une commande

21</h3>

22 

23Une commande est destinée à l'utilisateur. Enregistrez-la, puis gérez [`command.run`](/docs/fr/plugins/mods/reference#commands-and-configuration) pour son nom. Cet exemple ajoute une commande `/standup` qui prend un nombre de jours facultatif :

24 

25```javascript theme={null}

26on('session.start', async ($, e, next) => {

27 // Add /standup to the command list, with the description the user sees there

28 await $.command.register({ name: 'standup', description: 'Summarize what changed today', argumentHint: '[days]' })

29 return next(e)

30})

31 

32// The matcher limits the hook to /standup, so other commands don't reach it

33on('command.run', { command: 'standup' }, async ($, e) => {

34 // e.args is the text typed after the command name, or an empty string

35 return { text: 'Summary for the last ' + (e.args || '1') + ' day(s): ...' }

36})

37```

38 

39Après le démarrage de la session, `/standup` apparaît avec sa description dans la liste que vous voyez quand vous tapez `/`. Le `argumentHint` s'affiche dans l'invite après que vous ayez tapé la commande et un espace, comme dans `/standup [days]`. Quand vous exécutez `/standup 3`, le deuxième hook retourne `Summary for the last 3 day(s): ...`, et la transcription affiche ce texte après le nom du plugin. Le hook n'appelle jamais `next`, car la commande n'a pas d'autre comportement que le vôtre.

40 

41Le `text` que vous retournez s'affiche dans la transcription et Claude le lit. Pour ne rien imprimer, comme une commande qui ouvre seulement un [volet](/docs/fr/plugins/mods/interface#pick-where-to-draw), retournez `{}`. Pour laisser la commande s'exécuter pendant que Claude travaille, ajoutez `immediate: true` à l'enregistrement.

42 

43Choisissez un nom qu'aucune commande intégrée n'utilise. Tapez `/` dans une session pour les voir. `$.command.register` lève une exception pour un nom pris, avec un message tel que `"/focus" refused: it is the built-in /focus"`. Un hook qui lève une exception est ignoré, donc le reste de votre hook `session.start` ne s'exécute pas non plus. Enregistrez les commandes en dernier dans ce hook, ou enveloppez l'appel dans `try` et `catch`.

44 

45<h3 id="add-a-tool">

46 Ajouter un outil

47</h3>

48 

49Un outil est destiné à Claude. Enregistrez-le avec un nom, une description que Claude lit, et un schéma JSON pour son entrée. Claude le voit sous un nom plus long composé de `mcp__`, du nom de votre plugin, de deux traits de soulignement et du nom que vous avez enregistré. Vous gérez ses appels dans un hook [`tool.call`](/docs/fr/plugins/mods/events#guard-or-change-a-tool-call) filtré sur ce nom complet. Cet exemple, d'un plugin nommé `my-mod`, enregistre `ticket`, donc le nom complet est `mcp__my-mod__ticket`. Il donne à Claude un outil qui recherche un ticket dans un suivi de problèmes :

50 

51```javascript theme={null}

52on('session.start', async ($, e, next) => {

53 await $.tool.register({

54 name: 'ticket',

55 // Claude decides when to call the tool from this description

56 description: 'Look up a ticket by its id and return its title and status',

57 // The arguments Claude has to send: one required string named id

58 inputSchema: { type: 'object', properties: { id: { type: 'string' } }, required: ['id'] },

59 })

60 return next(e)

61})

62 

63// The full tool name is mcp__, the plugin's name, and the registered name

64on('tool.call', { tool: 'mcp__my-mod__ticket' }, async ($, e) => {

65 // The tool's arguments are fields of e, so the id is e.id

66 const response = await $.http.fetch('https://tickets.example.com/api/' + encodeURIComponent(e.id))

67 // Return a result either way, so Claude learns when the lookup failed

68 return { result: response.ok ? response.text : 'Lookup failed with status ' + response.status }

69})

70```

71 

72Quand vous posez une question sur un ticket, Claude peut appeler `mcp__my-mod__ticket` avec son id. Le deuxième hook récupère le ticket et retourne le corps de la réponse, que Claude lit comme le résultat de l'outil. Quand le serveur répond avec un statut d'erreur, Claude lit `Lookup failed with status` et le numéro.

73 

74<h2 id="call-a-model">

75 Appeler un modèle

76</h2>

77 

78Un mod peut poser une question à un modèle de son propre chef, en dehors de la conversation, pour une petite tâche comme trier ou résumer un morceau de texte. `$.model.complete` envoie une invite à un modèle avec les identifiants de votre session et se résout en la réponse. Il n'a pas d'historique de conversation.

79 

80Ce hook répond à une commande `/triage`, [enregistrée comme une commande](#add-a-command), en demandant à un petit modèle d'étiqueter le texte tapé après :

81 

82```javascript theme={null}

83on('command.run', { command: 'triage' }, async ($, e) => {

84 const r = await $.model.complete({

85 model: 'haiku',

86 // The system prompt sets the job, and the prompt carries the text to label

87 system: 'Reply with one word: bug, feature, or question.',

88 prompt: e.args,

89 // One word needs few tokens, and the call gives up after 15 seconds

90 maxTokens: 20,

91 timeoutMs: 15000,

92 })

93 // r.text exists only when the model answered, so check r.isAnswered first

94 const label = r.isAnswered ? r.text.trim() : 'unknown'

95 return { text: 'Label: ' + label }

96})

97```

98 

99Quand vous exécutez `/triage the export button does nothing`, le mod envoie ce texte au modèle et affiche sa réponse, comme `Label: bug`. La conversation de Claude ne fait pas partie de la demande. Quand le modèle ne répond pas, l'étiquette est `unknown`.

100 

101Une défaillance de l'API Claude ne rejette pas l'appel, donc vérifiez `r.isAnswered`, et lisez `r.reason` quand c'est `false`. L'appel rejette seulement pour une demande que Claude Code n'enverra pas, comme un modèle que votre organisation bloque. [Les types pour votre build](/docs/fr/plugins/mods/create#get-the-types-for-your-build) listent les autres options, comme `effort`, et les [limites](/docs/fr/plugins/mods/reference#limits) donnent la valeur par défaut de `maxTokens`.

102 

103`$.model.fork({ prompt })` pose une question sur la conversation actuelle à la place, avec le même modèle et la même invite système, donc l'API Claude sert la plupart de celle-ci à partir du cache d'invite.

104 

105Ces appels utilisent le plan ou la clé API de l'utilisateur.

106 

107<h2 id="run-work-in-the-background">

108 Exécuter du travail en arrière-plan

109</h2>

110 

111Le travail qui dépasse un événement, comme vérifier quelque chose une fois par minute, s'exécute sur un minuteur que vous démarrez à partir de `session.start`. Un hook lui-même s'exécute pour un événement et a une limite de temps de 10 secondes de son propre temps d'exécution. Le temps passé à attendre `next` ou un appel de l'API mods ne compte pas, sauf un `$.clock.sleep`. `$.clock.every` et `$.clock.after` remplacent `setInterval` et `setTimeout`, avec le délai en millisecondes en premier : `$.clock.after(5000, fn)` appelle `fn` une fois, cinq secondes à partir de maintenant. Chacun retourne un minuteur avec une méthode `cancel()`, et `await $.clock.now()` donne l'heure en millisecondes.

112 

113Ce hook recherche les vérifications d'une demande de tirage une fois par minute et affiche le résultat sous l'invite. `summarize` est une fonction de votre propre création qui transforme la sortie JSON de la commande en quelques mots :

114 

115```javascript theme={null}

116on('session.start', async ($, e, next) => {

117 // Call the function every 60,000 milliseconds, starting one minute from now

118 $.clock.every(60_000, async () => {

119 const status = await $.process.run(['gh', 'pr', 'checks', '--json', 'state'])

120 // Replace the line under the prompt with the latest summary

121 $.ui.status('checks: ' + summarize(status.stdout))

122 })

123 // Return without waiting for the timer, so the session starts right away

124 return next(e)

125})

126```

127 

128La session démarre comme d'habitude. Une minute plus tard, une ligne apparaît sous l'invite avec un `⚠`, le nom du mod, puis `checks:` et votre résumé. Elle est remplacée une fois par minute après cela. Le rappel du minuteur s'exécute en dehors de tout événement, donc il continue de s'exécuter entre les tours et n'en démarre pas un. Si le rappel lève une exception, l'erreur va au [journal de débogage](/docs/fr/plugins/mods/troubleshoot#read-the-debug-log) et le minuteur s'exécute à nouveau à l'intervalle suivant.

129 

130<h3 id="show-something-without-starting-a-turn">

131 Afficher quelque chose sans démarrer un tour

132</h3>

133 

134Un travail en arrière-plan peut afficher quelque chose à l'utilisateur sans démarrer un tour. Chacun de ces appels met du texte à un endroit différent :

135 

136| Appel | Ce que l'utilisateur voit |

137| :- | :- |

138| `$.ui.status(text)` | Une ligne sous l'invite qui reste jusqu'à ce que vous la changiez. Elle commence par `⚠` et le nom du mod, comme dans `⚠ my-mod: checks: 3 passing`. |

139| `$.ui.toast(text)` | Une petite boîte en haut à droite, avec le nom du mod au-dessus du texte, qui disparaît après quelques secondes |

140| `$.ui.log(text)` | Une ligne atténuée dans la transcription que Claude ne lit pas. Elle commence par `●` et le nom du mod, comme dans `● my-mod: build finished`. |

141 

142<h3 id="start-a-turn-from-a-background-job">

143 Démarrer un tour à partir d'un travail en arrière-plan

144</h3>

145 

146Quand un travail en arrière-plan trouve quelque chose qui nécessite l'attention de Claude, il peut démarrer un tour en soumettant une invite avec `$.prompt.submit({ text })`. Claude lit le texte après une phrase qui nomme votre mod comme l'expéditeur. Pour l'envoyer comme les propres paroles de l'utilisateur, sans cette phrase, ajoutez `asUser: true`. L'appel attend que la session soit inactive, puis démarre un nouveau tour. Il se résout quand ce tour démarre, donc ne l'`await` pas dans un gestionnaire qui s'exécute pendant que Claude travaille.

147 

148<h3 id="stop-background-work">

149 Arrêter le travail en arrière-plan

150</h3>

151 

152Le travail en arrière-plan s'arrête de deux façons. Les minuteurs s'arrêtent quand le module se recharge. Pour le travail de longue durée à l'intérieur d'un hook, [`next.signal`](/docs/fr/plugins/mods/reference#the-hook-function) est un `AbortSignal` qui s'interrompt quand l'événement que votre hook gère est abandonné, par exemple quand l'utilisateur interrompt, donc passez-le à tout ce qui est de longue durée.

153 

154<h2 id="send-and-receive-messages-between-sessions">

155 Envoyer et recevoir des messages entre les sessions

156</h2>

157 

158Un mod peut envoyer un message en texte brut à une autre de vos sessions ou à l'un des sous-agents de cette session, et observer les messages qui arrivent et partent. `$.session.send({ to, text })` en envoie un, la même livraison que l'outil SendMessage fait. `to` est `{ sessionId }` pour une session, `{ agentId }` pour un sous-agent de `$.agent.list()`, ou l'adresse de chaîne d'où provient un message reçu. L'appel se résout une fois que le message est mis en file d'attente, avec `{ isDelivered: true }`. Quand rien n'a été livré, il se résout avec `{ isDelivered: false, reason }`, et `reason` dit pourquoi.

159 

160Ce hook répond à une commande `/ping`, [enregistrée comme une commande](#add-a-command), en demandant à la session dont vous tapez l'id après un statut :

161 

162```javascript theme={null}

163on('command.run', { command: 'ping' }, async ($, e) => {

164 // e.args is the session id typed after /ping

165 const sent = await $.session.send({ to: { sessionId: e.args }, text: 'Status? One line.' })

166 // The call resolves either way, so check isDelivered to learn what happened

167 if (!sent.isDelivered) $.ui.toast('Not delivered: ' + sent.reason)

168 // An empty result prints nothing in this session's transcript

169 return {}

170})

171```

172 

173Quand le message est mis en file d'attente, rien n'apparaît dans votre session, et Claude de l'autre session lit `Status? One line.` Quand rien n'a été livré, une petite boîte en haut à droite donne la raison et disparaît après quelques secondes.

174 

175Deux événements permettent à un mod d'observer les messages. Retournez `next(e)` des deux pour passer chaque message inchangé :

176 

177| Événement | Se déclenche quand | Champs utiles |

178| :- | :- | :- |

179| `session.receive` | Un message arrive pour cette session, avant que Claude le lise | `e.text`, et `e.origin.kind`, comme `peer` ou `peer-send-message` pour une autre session ou un agent, `task-notification`, ou `scheduled-trigger`. Retournez `{ consumed: reason }` pour l'empêcher de Claude. |

180| `session.send` | Un message est sur le point de partir, de l'outil SendMessage ou d'un mod | `e.to`, `e.text`, et `e.origin.kind`, qui est `model` ou `plugin` |

181 

182Une session définie pour [refuser les messages entrants](/docs/fr/cross-session-messaging#control-inbound-messages) refuse un message avant que `session.receive` se déclenche, donc un hook ne le voit jamais. Un message qui est retenu pour votre approbation atteint d'abord le hook, donc un mod peut lire un message que vous n'avez pas encore approuvé. Le `next(e)` du hook rejette quand le message n'est pas livré.

183 

184Le nom de l'expéditeur sur un message reçu est ce que l'expéditeur a écrit, donc ne basez pas une décision sur celui-ci.

185 

186<h2 id="reach-files-processes-and-the-network">

187 Accéder aux fichiers, processus et au réseau

188</h2>

189 

190Un mod accède au système de fichiers, aux processus et au réseau via l'API mods, avec les mêmes permissions que l'utilisateur exécutant Claude Code. Le module hooks lui-même n'a pas d'API Node.js, pas de globales de minuteur comme `setTimeout`, et pas d'accès réseau ou fichier de son propre chef. Les API JavaScript standard et web comme `URL`, `TextEncoder`, `AbortController`, et `crypto.subtle` sont disponibles. Chaque espace de noms ci-dessous couvre un type d'accès :

191 

192| Espace de noms | Ce qu'il fait |

193| :- | :- |

194| `$.fs` | `read(path)`, `write(path, text)`, `exists(path)`, `stat(path)`, et `list(path)` fonctionnent sur les fichiers et répertoires |

195| `$.process` | `run(['git', 'status'])` démarre une commande et se résout quand elle se termine. `spawn` diffuse la sortie d'une commande de longue durée. |

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

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

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

199| `$.settings` | `read` ce que les fichiers de paramètres et la politique gérée contiennent |

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

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

202 

203Les fichiers et processus ont quelques règles qui leur sont propres :

204 

205* **Chemins** : un chemin relatif est sous le répertoire de travail de la session

206* **`$.fs.list`** : retourne les entrées d'un répertoire comme `{ name, kind, size, isLink }` et ne descend pas dans les sous-répertoires

207* **`$.process.run`** : prend une liste d'arguments et n'utilise pas de shell. Il se résout en `{ exitCode, stdout, stderr }` quel que soit le code de sortie. Il rejette si le programme ne peut pas démarrer ou s'exécute toujours au délai d'expiration, qui est de 30 secondes par défaut, donc enveloppez-le dans `try` et `catch`.

208 

209Chacun de ces appels est lui-même un événement, nommé pour son espace de noms et sa méthode sans le `$.`, comme `fs.read` pour `$.fs.read`. Un mod [plus tôt dans la chaîne](/docs/fr/plugins/mods/events#the-order-mods-run-in) peut observer, réécrire ou refuser votre appel, c'est ainsi qu'une organisation restreint ce que les mods atteignent.

210 

211<h2 id="next-steps">

212 Prochaines étapes

213</h2>

214 

215* [Réagir aux événements](/docs/fr/plugins/mods/events) : hook les appels d'outils, les invites et les tours

216* [Dessiner dans l'interface](/docs/fr/plugins/mods/interface) : afficher ce que votre mod collecte dans un volet ou au-dessus de l'invite

217* [Tester un mod](/docs/fr/plugins/mods/test) : stub n'importe lequel de ces appels dans un test

218* [Référence des mods](/docs/fr/plugins/mods/reference) : chaque événement, chaque méthode de l'API mods, et les limites

plugins/mods/create.md +395 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Créer un mod

6 

7> Demandez à Claude d'écrire un mod Claude Code à partir d'une description, ou écrivez-en un vous-même qui compte les appels d'outils et ajoute une commande. Apprenez la boucle de rechargement et de validation.

8 

9Un mod est un [plugin](/docs/fr/plugins/overview) Claude Code avec un fichier d'entrée, appelé le module de hooks : un fichier JavaScript ou TypeScript dont les fonctions Claude Code appelle lorsque des événements se produisent. Il y a deux façons d'en créer un :

10 

11* **Demander à Claude de l'écrire** : [décrivez ce que vous voulez](#ask-claude-for-a-mod) dans une session Claude Code

12* **L'écrire vous-même** : [suivez le tutoriel](#write-a-mod-yourself) pour apprendre comment fonctionne le code d'un mod. Vous n'avez pas besoin de Node.js, d'un bundler ou d'une étape de build, car Claude Code charge les fichiers `.js` et `.ts` directement.

13 

14Si vous n'avez pas encore décidé si un mod est le bon outil, lisez d'abord la [comparaison sur la page d'aperçu](/docs/fr/plugins/mods/overview#compare-mods-settings-hooks-skills-and-mcp-servers).

15 

16<Note>

17 Les mods nécessitent Claude Code v2.1.287 ou ultérieur. Dans votre shell, exécutez `claude --version` pour vérifier. Pour voir si les mods peuvent se charger pour vous, consultez [Vérifier si les mods peuvent se charger](/docs/fr/plugins/mods/troubleshoot#check-whether-mods-can-load).

18</Note>

19 

20<h2 id="ask-claude-for-a-mod">

21 Demander à Claude un mod

22</h2>

23 

24Décrivez le mod que vous voulez dans une session Claude Code interactive, et Claude l'écrit. Claude fonctionne à partir d'une [skill](/docs/fr/skills) intégrée nommée `plugin-authoring`, qui lui indique où écrire le mod, quels événements et méthodes votre version a, et comment le mod est chargé. Claude peut charger la skill lorsque vous demandez un mod, ou vous pouvez la charger vous-même en exécutant `/plugin-authoring` à l'invite Claude Code.

25 

26Le mod s'exécute une fois que vous l'approuvez, sauf dans [les sessions où un mod que Claude écrit ne peut pas se charger](#sessions-that-skip-the-approval).

27 

28<Steps>

29 <Step title="Décrivez le mod">

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

31 

32 <Note>

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

34 </Note>

35 </Step>

36 

37 <Step title="Approuvez le mod">

38 Lorsque Claude enregistre le premier fichier, Claude Code demande s'il faut activer le rechargement à chaud pour la session. Le rechargement à chaud exécute les mods que Claude écrit dans cette session et récupère chaque modification ultérieure.

39 

40 Choisissez l'une de ces réponses :

41 

42 * **Activer pour cette session** : les mods dans le dossier des mods de la session se chargent à la fin du tour, et se rechargent à la fin de chaque tour qui les modifie. Votre réponse dure pour la session, y compris après l'avoir reprise.

43 * **Pas maintenant** : rien ne se charge pour l'instant. Les fichiers restent où Claude les a écrits, et les mods se chargent la prochaine fois que cette session démarre. Pour empêcher un mod de jamais se charger, supprimez son répertoire.

44 </Step>

45 

46 <Step title="Vérifiez que le mod s'est chargé">

47 Exécutez `/plugin` à l'invite Claude Code et appuyez sur Tab jusqu'à ce que l'onglet **Installed** soit sélectionné. Il liste le mod, et vous pouvez l'éteindre là.

48 </Step>

49 

50 <Step title="Essayez le mod">

51 Utilisez 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é.

52 </Step>

53</Steps>

54 

55<h3 id="use-the-mod-in-other-sessions">

56 Utilisez le mod dans d'autres sessions

57</h3>

58 

59Un 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`](/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 :

60 

61* **Dans une session que vous démarrez** : dans votre shell, exécutez `claude --plugin-dir ~/mods/git-branch`

62* **Pour d'autres personnes** : [ajoutez-le à une marketplace](#share-your-mod) pour qu'elles puissent l'installer

63 

64<h3 id="sessions-that-skip-the-approval">

65 Sessions où un mod que Claude écrit ne peut pas se charger

66</h3>

67 

68Un mod que Claude écrit ne se charge qu'après que vous l'approuviez, dans un espace de travail de confiance où les mods sont autorisés à s'exécuter. Dans ces sessions, il ne se charge pas :

69 

70* **Personne n'est là pour approuver** : la session ne peut pas vous montrer une invite, comme dans une exécution `claude -p` ou en [mode `dontAsk`](/docs/fr/permission-modes)

71* **L'espace de travail n'est pas de confiance** : vous n'avez pas accepté l'invite de confiance pour le répertoire

72* **Les mods sont arrêtés** : vous avez démarré avec `--safe-mode` ou `--bare`, vous avez défini `disableAllHooks`, ou les [paramètres gérés](/docs/fr/plugins/mods/admin#choose-how-much-to-allow) de votre organisation le bloquent

73 

74<h2 id="write-a-mod-yourself">

75 Écrivez un mod vous-même

76</h2>

77 

78Dans ce tutoriel, vous construisez un mod nommé `first-mod` qui compte les appels d'outils que Claude fait, affiche le compte à côté du spinner pendant que Claude travaille, et ajoute une commande `/tally` qui l'imprime. Vous lisez ensuite les déclarations de type que Claude Code écrit à côté de votre mod et exécutez `claude plugin validate`. Ensemble, ils vous montrent les événements et méthodes que votre version offre et ce que Claude Code lit à partir de votre code.

79 

80Cet enregistrement montre le mod terminé. Le spinner compte les appels d'outils, `/tally` imprime le compte, et une modification du code prend effet pendant que la session s'exécute :

81 

82<Frame>

83 <video autoPlay muted loop playsInline controls className="w-full dark:hidden" src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-first-mod-light.mp4?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=eb561134afa90375777408453ba51c77" aria-label="In a Claude Code session, the prompt 'list the files here and read the README' is typed and sent. The spinner reads 'Thinking · tool calls: 1' and the count rises as Claude works. The /tally command prints 'first-mod: Claude has made 3 tool calls since this mod loaded'. A line says first-mod reloaded and lists its four hooks. On the next prompt the spinner reads 'Thinking · tools used: 1'." data-path="images/mods-first-mod-light.mp4" />

84 

85 <video autoPlay muted loop playsInline controls className="w-full hidden dark:block" src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-first-mod-dark.mp4?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=09779dadc7ef66c2b1e2da0c2e31ac72" aria-label="In a Claude Code session, the prompt 'list the files here and read the README' is typed and sent. The spinner reads 'Thinking · tool calls: 1' and the count rises as Claude works. The /tally command prints 'first-mod: Claude has made 3 tool calls since this mod loaded'. A line says first-mod reloaded and lists its four hooks. On the next prompt the spinner reads 'Thinking · tools used: 1'." data-path="images/mods-first-mod-dark.mp4" />

86</Frame>

87 

88Vous écrivez trois fichiers :

89 

90```text theme={null}

91first-mod/

92├── .claude-plugin/

93│ └── plugin.json

94└── hooks/

95 ├── hooks.json

96 └── register.js

97```

98 

99* **`plugin.json`** : le [manifeste](/docs/fr/plugins/manifest-reference) du plugin

100* **`hooks.json`** : [pointe vers votre fichier de code](/docs/fr/plugins/mods/reference#files)

101* **`register.js`** : votre code, appelé le module de hooks

102 

103<Steps>

104 <Step title="Créez le répertoire du plugin">

105 Créez les deux répertoires qui contiennent les fichiers :

106 

107 <Tabs>

108 <Tab title="Bash ou Zsh">

109 ```bash theme={null}

110 mkdir -p first-mod/.claude-plugin first-mod/hooks

111 ```

112 </Tab>

113 

114 <Tab title="PowerShell">

115 ```powershell theme={null}

116 New-Item -ItemType Directory -Force first-mod\.claude-plugin, first-mod\hooks

117 ```

118 </Tab>

119 </Tabs>

120 </Step>

121 

122 <Step title="Écrivez le manifeste">

123 Un mod est un plugin, et un mod a besoin d'un [manifeste](/docs/fr/plugins/manifest-reference). Le manifeste de ce mod n'a pas de champs spéciaux. Enregistrez ceci comme `first-mod/.claude-plugin/plugin.json` :

124 

125 ```json first-mod/.claude-plugin/plugin.json theme={null}

126 {

127 "name": "first-mod",

128 "version": "0.1.0",

129 "description": "Counts Claude's tool calls, shows the count beside the spinner, and adds a /tally command",

130 "author": { "name": "Your Name" }

131 }

132 ```

133 </Step>

134 

135 <Step title="Dites à Claude Code où se trouve votre code">

136 Lorsque Claude Code charge un plugin, il lit le `hooks/hooks.json` du plugin. La clé `modules` dans ce fichier donne le chemin vers votre code, et l'avoir est ce qui rend le plugin un mod. Listez un chemin, relatif à `hooks.json`. Ici, il pointe vers `register.js`, que vous écrivez à l'étape suivante.

137 

138 Enregistrez ceci comme `first-mod/hooks/hooks.json` :

139 

140 ```json first-mod/hooks/hooks.json theme={null}

141 {

142 "description": "The first-mod hooks module",

143 "modules": ["./register.js"]

144 }

145 ```

146 </Step>

147 

148 <Step title="Écrivez le code">

149 Ce fichier est le code du mod, appelé le module de hooks. Lorsque le mod se charge, Claude Code appelle la fonction `register` que le fichier exporte et lui passe une fonction nommée [`on`](/docs/fr/plugins/mods/reference#the-hook-function). Chaque appel à `on` enregistre un gestionnaire d'événement, appelé un hook, pour l'événement qu'il nomme.

150 

151 Enregistrez ceci comme `first-mod/hooks/register.js` :

152 

153 ```javascript first-mod/hooks/register.js theme={null}

154 // The count, shared by the hooks below

155 let calls = 0

156 

157 // Claude Code calls this once when the mod loads

158 export function register(on) {

159 // Runs when the session starts, before your first prompt

160 on('session.start', async ($, e, next) => {

161 // Add the /tally command

162 await $.command.register({

163 name: 'tally',

164 description: 'Show how many tool calls Claude has made',

165 })

166 // Let the session start as usual

167 return next(e)

168 })

169 

170 // Runs each time Claude is about to use a tool

171 on('tool.call', async ($, e, next) => {

172 calls += 1

173 // Ask Claude Code to draw the interface again, so the new count shows

174 $.ui.invalidate('ui.render')

175 // Let the tool run as usual

176 return next(e)

177 })

178 

179 // Runs when you type /tally, and only then, because of the matcher

180 on('command.run', { command: 'tally' }, async () => {

181 // The text to print in the transcript

182 return { text: 'Claude has made ' + calls + ' tool calls since this mod loaded' }

183 })

184 

185 // Runs each time Claude Code draws the spinner

186 on('ui.render', { component: 'Spinner' }, async ($, e, next) => {

187 // Keep Claude Code's spinner, with the count added after its word

188 return next({ ...e, props: { ...e.props, suffix: ' · tool calls: ' + calls + '…' } })

189 })

190 }

191 ```

192 

193 Le fichier garde un compte dans `calls` et enregistre quatre hooks :

194 

195 * **[`session.start`](/docs/fr/plugins/mods/reference#session)** s'exécute lorsque la session démarre, avant votre première invite, et à nouveau chaque fois que le mod se recharge. Il ajoute la commande `/tally` à Claude Code.

196 * **[`tool.call`](/docs/fr/plugins/mods/reference#tools)** s'exécute chaque fois que Claude est sur le point d'utiliser un outil. Il ajoute un à `calls` et demande à Claude Code de redessiner l'interface.

197 * **[`command.run`](/docs/fr/plugins/mods/reference#commands-and-configuration)** s'exécute lorsque vous tapez `/tally`. Il retourne le texte à imprimer.

198 * **[`ui.render`](/docs/fr/plugins/mods/reference#interface)** s'exécute chaque fois que Claude Code dessine le spinner. Il ajoute le compte après le mot du spinner.

199 

200 [Comment fonctionne le mod d'exemple](#how-the-example-mod-works) explique les trois arguments que chaque hook prend et ce que chacun retourne.

201 </Step>

202 

203 <Step title="Chargez le mod">

204 Démarrez Claude Code avec le drapeau `--plugin-dir`, qui charge un répertoire de plugin pour une session sans l'installer :

205 

206 ```bash theme={null}

207 claude --plugin-dir ./first-mod

208 ```

209 </Step>

210 

211 <Step title="Essayez le mod">

212 Demandez à Claude de faire quelque chose qui prend quelques appels d'outils, comme `list the files here and read the README`. Pendant que Claude travaille, le mot du spinner est suivi d'un compte qui augmente, comme dans `Thinking · tool calls: 2…`. Lorsque Claude a terminé, tapez `/tally` et appuyez sur Entrée. La transcription affiche `first-mod: Claude has made 2 tool calls since this mod loaded`, avec votre propre compte. Claude Code met le nom du plugin devant le texte de la commande.

213 

214 Pour vérifier la commande sans une session interactive, exécutez-la en mode non-interactif :

215 

216 ```bash theme={null}

217 claude -p "/tally" --plugin-dir ./first-mod

218 ```

219 

220 ```text theme={null}

221 first-mod: Claude has made 0 tool calls since this mod loaded

222 ```

223 

224 Si `/tally` n'est pas dans la liste des commandes, le module ne s'est pas chargé. Consultez [Découvrez pourquoi un mod ne fait rien](/docs/fr/plugins/mods/troubleshoot#find-out-why-a-mod-does-nothing).

225 </Step>

226 

227 <Step title="Modifiez le code pendant que la session s'exécute">

228 Laissez la session ouverte. Dans `register.js`, changez `' · tool calls: '` en `' · tools used: '` dans le hook `ui.render` et enregistrez. La ligne en surbrillance est celle qui change :

229 

230 ```javascript first-mod/hooks/register.js {4} theme={null}

231 // Runs each time Claude Code draws the spinner

232 on('ui.render', { component: 'Spinner' }, async ($, e, next) => {

233 // Keep Claude Code's spinner, with the count added after its word

234 return next({ ...e, props: { ...e.props, suffix: ' · tools used: ' + calls + '…' } })

235 })

236 ```

237 

238 Une ligne dans la transcription dit que `first-mod` s'est rechargé et liste ses hooks, et le prochain spinner utilise le nouveau texte, comme dans `Thinking · tools used: 1…`.

239 </Step>

240</Steps>

241 

242<h3 id="how-the-example-mod-works">

243 Comment fonctionne le mod d'exemple

244</h3>

245 

246Chaque fonction que vous passez à `on` est un hook, qui est un gestionnaire d'événement. Claude Code passe à chaque hook les trois mêmes arguments :

247 

248* **L'API des mods**, nommée `$` : chaque méthode qu'un mod peut appeler pour atteindre l'extérieur de lui-même, dans des [espaces de noms](/docs/fr/plugins/mods/reference#mods-api-methods) tels que `$.ui` et `$.command`

249* **L'événement**, nommé `e` : l'[entrée de l'événement](/docs/fr/plugins/mods/reference#events) en tant que données simples, comme le nom et les arguments d'un appel d'outil

250* **Le gestionnaire suivant**, nommé [`next`](/docs/fr/plugins/mods/events#how-a-hook-handles-an-event) : une fonction qui transmet l'événement aux autres mods puis au comportement propre de Claude Code, et retourne le résultat

251 

252Les hooks dans `first-mod` gèrent leurs événements de trois façons qu'un hook peut :

253 

254* **Observer** : le hook `session.start` enregistre la commande, et le hook `tool.call` compte l'appel et demande un redessinage. Les deux retournent `next(e)`, donc la session démarre et l'outil s'exécute comme d'habitude.

255* **Répondre** : le hook `command.run` retourne son propre résultat et n'appelle jamais `next`. Le deuxième argument à `on`, `{ command: 'tally' }`, est un filtre, appelé un [matcher](/docs/fr/plugins/mods/events#filter-which-events-a-hook-handles), donc le hook s'exécute uniquement pour `/tally`.

256* **Réécrire** : le hook `ui.render` appelle `next` avec une copie de `e` dont `suffix` contient le compte, donc Claude Code dessine son spinner habituel avec votre texte après le mot

257 

258Claude Code surveille un répertoire chargé avec `--plugin-dir` et recharge à chaud le module de hooks lorsqu'un fichier dedans change. Chaque rechargement exécute `register` à nouveau, donc `calls` revient à `0` et `/tally` recommence à compter. Pour conserver une valeur entre les rechargements, consultez [Conserver l'état](/docs/fr/plugins/mods/interface#keep-state).

259 

260<h2 id="keep-working-on-a-mod">

261 Continuez à travailler sur un mod

262</h2>

263 

264Une fois qu'un mod se charge, vous pouvez demander à Claude de le modifier, vérifier votre code par rapport aux définitions de type pour votre version, lister les événements et appels que Claude Code trouve dedans, et le tester.

265 

266<h3 id="change-a-mod-with-claude">

267 Modifiez un mod avec Claude

268</h3>

269 

270Pour modifier un mod que vous avez déjà, démarrez la session avec `--plugin-dir` pointé vers le répertoire du mod, afin que ce que Claude écrit se charge dans la même session :

271 

272```bash theme={null}

273claude --plugin-dir ./first-mod

274```

275 

276Ensuite, demandez la modification, par exemple `add a /tally-reset command to this mod that sets the tally back to zero`. Claude édite le module de hooks, exécute `claude plugin validate`, et corrige ce qu'il rapporte. Un répertoire que vous chargez avec `--plugin-dir` est un [chemin protégé](/docs/fr/permission-modes#protected-paths), donc en modes `default` et `acceptEdits` vous êtes invité à approuver chacune des modifications de Claude au mod. Le tableau des chemins protégés donne le résultat pour les autres modes de permission.

277 

278Les fichiers que Claude enregistre pendant son tour se rechargent à la fin du tour, vous pouvez donc essayer `/tally-reset` dès que Claude a terminé.

279 

280<h3 id="get-the-types-for-your-build">

281 Obtenez les définitions de type pour votre version

282</h3>

283 

284Chaque fois que Claude Code charge ou recharge un mod à partir d'un répertoire que vous passez à `--plugin-dir`, ou un mod [que Claude a écrit pour vous](#ask-claude-for-a-mod), il écrit des fichiers de déclaration TypeScript, se terminant par `.d.ts`, dans `.claude-plugin/types/` à l'intérieur du répertoire du mod. Ils décrivent les événements exacts, les méthodes de l'API des mods, et les éléments dans la version de Claude Code que vous exécutez, afin que votre éditeur puisse autocomplète et vérifier le type de vos hooks. Pour parcourir les déclarations en ligne, lisez [`mods/types/claude-code.d.ts`](https://github.com/anthropics/claude-code/blob/main/mods/types/claude-code.d.ts) dans le référentiel Claude Code, dont la première ligne nomme la version qui l'a écrit. Le répertoire contient ces fichiers :

285 

286| Chemin | Ce qu'il déclare |

287| :- | :- |

288| `claude-code/index.d.ts` | Chaque événement et son entrée et résultat, chaque espace de noms et méthode de l'API des mods, et les éléments que chaque surface peut dessiner |

289| `claude-code-tools/index.d.ts` | Les entrées et résultats des outils intégrés, afin que vérifier `e.tool === 'Bash'` réduise `e` |

290| `claude-code-mcp/index.d.ts` | Les entrées des outils MCP qui ont été connectés la dernière fois que vous avez enregistré un fichier dans le mod |

291| `index.d.ts` dans un répertoire nommé pour un plugin | Ce que ce plugin ajoute à l'API des mods. Il y a un répertoire pour chaque plugin que votre `plugin.json` liste sous `dependencies`. |

292| `tsconfig.json` | Les options du compilateur qui conviennent à un module de hooks |

293 

294Si votre mod n'a pas son propre `tsconfig.json`, Claude Code en ajoute un à la racine du mod qui étend le généré, afin que votre éditeur et `tsc -p ./first-mod` vérifient le type du mod sans plus de configuration.

295 

296Les événements et méthodes peuvent changer entre les versions, donc faites confiance à ces fichiers plutôt qu'à n'importe quelle page, celle-ci incluse, lorsqu'ils ne sont pas d'accord.

297 

298`claude-code/index.d.ts` est la référence la plus complète pour votre build, avec un commentaire et un exemple pour chaque méthode de l'API des mods. Pour chercher quelque chose, recherchez le fichier pour son nom, comme `'tool.call'`.

299 

300<h3 id="check-what-claude-code-reads-from-your-mod">

301 Vérifiez ce que Claude Code lit à partir de votre mod

302</h3>

303 

304Pour voir votre mod comme Claude Code le voit, sans exécuter votre code ou démarrer une session, utilisez `claude plugin validate`. Il vérifie le manifeste et exécute la même analyse statique sur la source du module de hooks que Claude Code exécute lorsqu'il charge un mod. Dans votre shell, exécutez-le sur le répertoire du mod :

305 

306```bash theme={null}

307claude plugin validate ./first-mod

308```

309 

310Pour `first-mod`, la sortie inclut ces lignes.

311 

312```text theme={null}

313 ❯ ./register.js hooks: session.start, tool.call, command.run{command=tally}, ui.render{component=Spinner}

314 ❯ ./register.js calls: $.command.register, $.ui.invalidate

315 

316✔ Validation passed

317```

318 

319La ligne `hooks:` liste les événements que votre module hook, chacun avec son filtre entre accolades. La ligne `calls:` liste chaque méthode de l'API des mods qu'il appelle. Un module qui lit ou définit des variables d'environnement obtient également des lignes `env reads:` et `env writes:`, et un qui utilise [`$.state`](/docs/fr/plugins/mods/interface#keep-state) obtient `state reads:` et `state writes:`.

320 

321Si un événement que vous aviez l'intention de hooker manque de la première ligne, Claude Code n'appellera pas ce hook non plus. La cause habituelle est un nom d'événement mal orthographié, que la commande rapporte comme une erreur telle que `"tool.calls" is not an event`.

322 

323Suivez ces règles afin que l'analyse statique puisse trouver chaque hook et appel :

324 

325* Épellez chaque appel de l'API des mods en entier : `$`, l'espace de noms, puis la méthode, comme dans `$.store.get('notes')`. Vous pouvez passer `$` à une fonction déclarée au niveau supérieur du même fichier, et pour une fonction vôtre nommée `loadNotes`, la ligne `calls:` lit alors `$.store.get (via loadNotes)`. Passer `$` à une méthode, une fonction définie à l'intérieur du hook, ou une fonction que vous importez d'un autre de vos fichiers échoue la validation. Les fonctions `read` et `update` que [`$.state`](/docs/fr/plugins/mods/interface#keep-state) utilise sont les imports qui peuvent le prendre. N'assignez pas `$` ou l'un de ses espaces de noms à une variable, ne le déstructurez pas, ou ne l'indexez pas avec un nom calculé. `const ui = $.ui` échoue avec `$.ui is used as a value`.

326* Écrivez le nom de l'événement dans chaque appel `on` comme un littéral de chaîne, comme `'tool.call'`. Une variable, ou une boucle sur une liste de noms, échoue avec `the event name passed to on() is not a string literal`.

327* À l'intérieur de `register`, ne déclarez pas une deuxième variable ou paramètre nommé `on`. La validation échoue avec `"on" is declared again (shadowed)`.

328* Importez uniquement à partir de fichiers à l'intérieur du répertoire du plugin, par chemin relatif. Le seul import nu autorisé est `claude-code`, pour les types et quelques helpers.

329* Utilisez les déclarations `import` en haut du fichier, comme dans `import { name } from './file.js'`. Un `import()` dynamique échoue avec `a dynamic import(); a hooks module imports its own files with an import declaration`.

330* Écrivez chaque fichier en tant que module ES, avec `import` et non `require`. La [référence](/docs/fr/plugins/mods/reference#files) liste les extensions de fichier que Claude Code charge.

331 

332<h3 id="test-the-mod">

333 Testez le mod

334</h3>

335 

336Vous pouvez écrire des tests automatisés pour un mod et les exécuter à partir de votre shell avec `claude plugin test`, sans session, connexion ou réseau. Un test lève les événements que vos hooks gèrent et vérifie ce que les hooks ont fait.

337 

338Ce test lève deux appels d'outils, exécute `/tally`, et vérifie que la réponse compte les deux. Enregistrez-le comme `first-mod/tests/first-mod.test.ts` :

339 

340```typescript first-mod/tests/first-mod.test.ts theme={null}

341import { expect, test } from 'claude-code/testing'

342 

343test('/tally reports the tool calls the mod has seen', async ($, on) => {

344 // Answer each tool call in Claude Code's place, so no tool runs

345 on('tool.call', () => ({ result: 'ok' }))

346 

347 // Raise two tool calls, which the mod's tool.call hook counts

348 await $.tool.call({ tool: 'Bash', command: 'ls' })

349 await $.tool.call({ tool: 'Read', file_path: 'README.md' })

350 

351 // Run /tally and check the text its hook returns

352 const answer = await $.command.run({ command: 'tally', args: '' })

353 expect(answer.text).toBe('Claude has made 2 tool calls since this mod loaded')

354})

355```

356 

357Dans votre shell, exécutez les tests à partir du répertoire `first-mod` :

358 

359```bash theme={null}

360claude plugin test

361```

362 

363La sortie nomme chaque test et s'il a réussi, avec des timings qui varient d'une exécution à l'autre :

364 

365```text theme={null}

366tests/first-mod.test.ts:

367(pass) /tally reports the tool calls the mod has seen [22.87ms]

368 

369 1 pass

370 0 fail

371Ran 1 test across 1 file. [0.19s]

372```

373 

374[Testez un mod](/docs/fr/plugins/mods/test) couvre le stubbing d'un appel de modèle ou du store, et le test des minuteurs et des dessins.

375 

376<h2 id="share-your-mod">

377 Partagez votre mod

378</h2>

379 

380Un mod est un plugin, donc vous le versionnez dans le manifeste et les gens l'installent et le mettent à jour avec les commandes `/plugin`. Pour le donner à d'autres personnes, [ajoutez-le à une marketplace](/docs/fr/plugins/publish).

381 

382Avant de le faire, vérifiez le `name` du plugin : `claude plugin validate` échoue un nom qui [ressemble à l'un des propres d'Anthropic](/docs/fr/plugins/manifest-reference#name), comme un qui commence par `claude-`. Les événements et méthodes peuvent changer entre les versions, donc votre README est l'endroit pour dire quelle version de Claude Code vous avez testée.

383 

384Continuez à développer contre le répertoire avec `--plugin-dir`, pas contre une copie installée. Claude Code met en cache un plugin installé par version, donc vos modifications n'atteignent pas la copie installée jusqu'à ce que vous augmentiez la version et réinstalliez.

385 

386<h2 id="next-steps">

387 Prochaines étapes

388</h2>

389 

390* [Dessinez dans l'interface](/docs/fr/plugins/mods/interface) : ouvrez un volet, dessinez au-dessus de l'invite, et ajoutez des boutons et des champs de texte

391* [Réagissez aux événements](/docs/fr/plugins/mods/events) : hooquez les appels d'outils, les invites, et les tours

392* [Utilisez l'API des mods](/docs/fr/plugins/mods/api) : ajoutez des commandes et des outils, appelez un modèle, et exécutez du travail sur un minuteur

393* [Testez un mod](/docs/fr/plugins/mods/test) : stubifiez ce que Claude Code répondrait, et testez les minuteurs et les dessins

394* [Dépannez un mod](/docs/fr/plugins/mods/troubleshoot) : les raisons pour lesquelles un mod ne fait rien, et le journal de débogage

395* [Lisez la source des mods intégrés](/docs/fr/plugins/mods/overview#read-the-source-of-built-in-mods) : des plugins complets, chacun avec son module de hooks et ses tests

plugins/mods/events.md +336 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Réagir aux événements avec un mod

6 

7> Gérez les événements Claude Code à partir d'un mod : observez, réécrivez ou répondez aux appels d'outils, aux invites et aux tours, filtrez les événements qu'un hook gère, et planifiez pour d'autres mods.

8 

9Un hook est un gestionnaire d'événements : une fonction que Claude Code exécute quand un événement nommé se produit. Claude Code déclenche un événement à chaque point où il s'apprête à agir, par exemple quand il exécute un outil, soumet une invite, envoie une requête au modèle, ou démarre ou termine une session. Votre hook s'exécute avant que Claude Code n'agisse, il peut donc observer l'événement, le réécrire, ou y répondre à la place de Claude Code. Vous enregistrez un hook avec [`on(eventName, handler)`](/docs/fr/plugins/mods/reference#the-hook-function).

10 

11Construisez votre [premier mod](/docs/fr/plugins/mods/create) avant de commencer ici. Pour chaque événement et ses champs exacts, consultez la [référence](/docs/fr/plugins/mods/reference#events) ou lisez [les types pour votre build](/docs/fr/plugins/mods/create#get-the-types-for-your-build).

12 

13<h2 id="how-a-hook-handles-an-event">

14 Comment un hook gère un événement

15</h2>

16 

17Un hook se situe entre un événement et ce que Claude Code ferait à ce sujet, il peut donc observer l'événement, le réécrire, ou y répondre lui-même. Il reçoit trois arguments : l'[API mods](/docs/fr/plugins/mods/api) en tant que `$`, l'événement en tant que `e`, et le gestionnaire suivant en tant que `next`. Les gestionnaires d'un événement forment une chaîne middleware. `next(e)` appelle le gestionnaire suivant, qui est le hook d'un autre mod ou, à la fin de la chaîne, le comportement propre de Claude Code, et il se résout au résultat. Ce que votre hook fait avec `next` décide lequel des trois il fait.

18 

19<h3 id="observe-an-event">

20 Observer un événement

21</h3>

22 

23Pour observer un événement sans le modifier, faites votre travail et retournez `next(e)`. Ce hook enregistre chaque outil que Claude s'apprête à utiliser :

24 

25```javascript theme={null}

26on('tool.call', async ($, e, next) => {

27 // S'exécute avant que l'outil ne s'exécute

28 $.ui.log('Claude is about to use ' + e.tool)

29 // Passer l'événement inchangé

30 return next(e)

31})

32```

33 

34Avant chaque exécution d'outil, une ligne atténuée telle que `● my-mod: Claude is about to use Bash` apparaît dans la transcription, où `my-mod` est le nom de votre plugin. L'outil s'exécute comme il le ferait sans le mod.

35 

36Pour agir après l'événement, `await next(e)`, faites votre travail, et retournez le résultat. Ce hook enregistre chaque outil après son exécution :

37 

38```javascript theme={null}

39on('tool.call', async ($, e, next) => {

40 // Laisser l'outil s'exécuter et attendre son résultat

41 const result = await next(e)

42 // S'exécute après que l'outil s'exécute

43 $.ui.log(e.tool + ' finished')

44 // Retourner le résultat inchangé

45 return result

46})

47```

48 

49La ligne apparaît maintenant après chaque fin d'outil. Claude lit le même résultat de toute façon, car le hook retourne ce que `next(e)` s'est résolu à.

50 

51<h3 id="rewrite-an-event">

52 Réécrire un événement

53</h3>

54 

55Pour modifier ce sur quoi Claude Code agit, comme le texte d'une invite, appelez `next` avec une copie modifiée de l'événement. L'événement lui-même est immuable : il est gelé à chaque profondeur, et l'assignation à un champ lève une exception. Ce hook supprime les espaces de chaque invite avant qu'elle ne soit envoyée :

56 

57```javascript theme={null}

58on('prompt.submit', async ($, e, next) => {

59 // Passer une copie de l'événement avec son texte modifié

60 return next({ ...e, text: e.text.trim() })

61})

62```

63 

64Les gestionnaires ultérieurs et Claude Code reçoivent l'invite supprimée et ne voient jamais l'original. Vous pouvez également modifier le résultat : `await next(e)`, puis retourner une copie du résultat avec un champ remplacé.

65 

66<h3 id="answer-an-event">

67 Répondre à un événement

68</h3>

69 

70Pour gérer un événement vous-même, retournez un résultat sans appeler `next`. Cela court-circuite la chaîne, donc les mods ultérieurs et le comportement propre de Claude Code ne s'exécutent pas. Ce hook refuse chaque commande Bash :

71 

72```javascript theme={null}

73on('tool.call', { tool: 'Bash' }, async () => {

74 // Pas d'appel à next, donc la commande ne s'exécute jamais

75 return { deny: 'Bash is turned off in this project. Use the file tools.' }

76})

77```

78 

79Quand Claude essaie une commande Bash, la commande ne s'exécute pas, et Claude lit le texte `deny` comme le résultat de l'outil. Chaque événement a sa propre forme de résultat, que la [référence des événements](/docs/fr/plugins/mods/reference#events) énumère.

80 

81<h3 id="filter-which-events-a-hook-handles">

82 Filtrer les événements qu'un hook gère

83</h3>

84 

85Pour exécuter un hook pour certains événements seulement, passez un filtre comme deuxième argument à `on`. Claude Code appelle le filtre un matcher. C'est un objet dont les champs sont comparés avec ceux de l'événement, et le hook s'exécute seulement quand chaque champ correspond. Un champ peut être une valeur, un tableau de valeurs autorisées, ou une expression régulière.

86 

87Chaque ligne dans cet exemple enregistre la même fonction, `hook`, pour un ensemble plus restreint d'appels d'outils :

88 

89```javascript theme={null}

90// Une chaîne correspond à une valeur : appels Bash seulement

91on('tool.call', { tool: 'Bash' }, hook)

92// Un tableau correspond à n'importe quelle valeur dedans : appels Edit et Write

93on('tool.call', { tool: ['Edit', 'Write'] }, hook)

94// Une expression régulière correspond par motif : chaque outil d'un serveur MCP

95on('tool.call', { tool: /^mcp__github__/ }, hook)

96```

97 

98`hook` s'exécute une fois pour un appel Bash, Edit ou Write, et une fois pour un appel à un outil dont le nom commence par `mcp__github__`. Un appel à n'importe quel autre outil, comme Read, ne correspond à aucun des trois, donc `hook` ne s'exécute pas pour lui.

99 

100Le nom de l'événement peut être un wildcard. `'classic.*'` correspond à chaque [événement hook des paramètres](#hook-the-settings-hook-events). `'*'` correspond à chaque événement sauf les [événements de télémétrie](/docs/fr/plugins/mods/reference#telemetry), que vous hookez par nom ou en tant que `'telemetry.*'`.

101 

102Enregistrez chaque événement une fois par matcher. Si vous appelez `on` deux fois pour `session.start` sans matcher, le module échoue à charger avec `on("session.start") is registered twice without a matcher`. Mettez tout ce que votre mod fait au démarrage de la session dans un hook.

103 

104<h2 id="hook-what-claude-is-doing">

105 Hook ce que Claude fait

106</h2>

107 

108Hookez ces événements pour voir ou modifier un appel d'outil, une invite, ou un tour au moment où cela se produit. Pour chaque événement et ce qu'un hook peut retourner, consultez la [référence des événements](/docs/fr/plugins/mods/reference#events).

109 

110<h3 id="guard-or-change-a-tool-call">

111 Garder ou modifier un appel d'outil

112</h3>

113 

114Un hook `tool.call` voit chaque outil que Claude s'apprête à utiliser, il peut donc refuser l'appel, modifier ses arguments, ou le laisser passer. `tool.call` se déclenche quand Claude Code s'apprête à exécuter un outil, y compris les appels qu'un sous-agent fait et les appels aux outils MCP. `e.tool` est le nom de l'outil et les arguments de l'outil sont des champs de `e`, comme `e.command` pour Bash. Quand vous appelez `next(e)`, Claude Code exécute la vérification des permissions puis l'outil.

115 

116Ce hook refuse une commande Bash qui force-push, et dit à Claude pourquoi :

117 

118```javascript theme={null}

119// Le matcher limite le hook aux appels Bash, donc e.command est la commande shell

120on('tool.call', { tool: 'Bash' }, async ($, e, next) => {

121 if (/git push .*--force/.test(e.command)) {

122 // Retourner sans appeler next répond à l'événement, donc la commande ne s'exécute jamais

123 return { deny: 'Force pushes are not allowed in this repository. Push to a new branch instead.' }

124 }

125 // Chaque autre commande va à la vérification des permissions puis à Bash

126 return next(e)

127})

128```

129 

130Quand Claude essaie `git push --force`, la commande ne s'exécute pas et aucune invite de permission n'apparaît, car le hook n'appelle jamais `next`. Claude lit le texte `deny` comme le résultat de l'outil, donc écrivez-le comme une instruction sur laquelle Claude peut agir. Chaque autre commande Bash s'exécute comme elle le ferait sans le mod.

131 

132Pour agir après l'exécution d'un outil, `await next(e)`, faites votre travail, et retournez ce que `next` vous a donné. Ce hook enregistre chaque fichier `.mdx` que Claude modifie, avec [`$.ui.log`](/docs/fr/plugins/mods/api#show-something-without-starting-a-turn), qui ajoute une ligne atténuée à la transcription que Claude ne lit pas :

133 

134```javascript theme={null}

135on('tool.call', { tool: ['Edit', 'Write'] }, async ($, e, next) => {

136 // Attendre la vérification des permissions et l'outil, et garder ce qu'ils ont produit

137 const result = await next(e)

138 // Un appel refusé revient en tant que { deny }, et un appel échoué a isError défini

139 const changed = !result.deny && !result.isError

140 if (changed && e.file_path.endsWith('.mdx')) $.ui.log('Claude changed ' + e.file_path)

141 // Retourner le résultat tel qu'il est venu, donc Claude lit ce que l'outil a retourné

142 return result

143})

144```

145 

146Après que Claude édite ou écrit un fichier `.mdx`, une ligne atténuée dans la transcription nomme le fichier. Rien n'est enregistré pour un autre type de fichier, ou pour un appel qui a été refusé ou échoué. La vue de Claude de l'appel ne change pas, car le hook retourne le résultat qu'il a reçu.

147 

148Pour modifier un appel, passez des arguments modifiés à `next`. Pour réessayer un appel, appelez `next(e)` à nouveau : un hook qui voit `isError` sur le premier résultat peut exécuter l'outil une deuxième fois et retourner ce résultat. Pour répondre à un appel vous-même, retournez un objet avec un champ `result`, comme `{ result: 'Skipped by my-mod' }`, sans appeler `next`. Quand vous faites cela, aucune invite de permission n'apparaît et l'outil ne s'exécute pas, donc le résultat que vous retournez est tout ce que Claude apprend sur ce qui s'est passé.

149 

150Les hooks dans les [paramètres gérés](/docs/fr/server-managed-settings) de votre organisation s'exécutent avant le hook `tool.call` de n'importe quel mod, et un bloc de l'un d'eux est final.

151 

152<h4 id="hold-a-tool-call-until-the-user-decides">

153 Tenir un appel d'outil jusqu'à ce que l'utilisateur décide

154</h4>

155 

156Un hook peut mettre en pause un appel d'outil et demander à l'utilisateur quoi faire avant qu'il ne continue. Un hook `tool.call` peut `await` avant d'appeler `next` ou de retourner, et l'appel d'outil reste en attente jusqu'à ce moment. Pour poser la question à l'utilisateur, appelez `$.ui.ask`. Il affiche votre question au-dessus d'une liste numérotée de vos options, dans la boîte de dialogue que Claude utilise pour vous poser une question, et se résout à l'étiquette que l'utilisateur choisit. Après vos options, la boîte de dialogue ajoute une ligne pour taper une réponse différente et une ligne **Chat about this**.

157 

158Le motif `RISKY` dans cet exemple correspond à `rm -r`, `rm -rf`, `git reset --hard`, et `git push` avec `--force`, et il manque d'autres orthographes comme `git push -f`. Ce module demande avant d'exécuter une commande Bash qui correspond au motif :

159 

160```javascript theme={null}

161const RISKY = /\brm\s+-rf?\b|\bgit\s+reset\s+--hard\b|\bgit\s+push\b.*--force/

162 

163export function register(on) {

164 on('tool.call', { tool: 'Bash' }, async ($, e, next) => {

165 // Laisser chaque autre commande passer sans question

166 if (!RISKY.test(e.command)) return next(e)

167 // Commencer par la réponse sûre, donc une question à laquelle personne ne répond refuse la commande

168 let answer = 'Refuse'

169 try {

170 // L'appel d'outil attend ici jusqu'à ce que l'utilisateur choisisse l'une des deux étiquettes

171 answer = await $.ui.ask('Run this command? ' + e.command, ['Run it', 'Refuse'])

172 } catch {

173 // L'utilisateur a rejeté la question, ou c'est une exécution claude -p sans personne à demander

174 }

175 if (answer !== 'Run it') {

176 // Répondre sans appeler next, donc la commande ne s'exécute pas

177 return { deny: 'The user declined this command. Ask before trying a different approach.' }

178 }

179 return next(e)

180 })

181}

182```

183 

184Quand Claude essaie une commande comme `rm -rf build`, la question apparaît avec la commande dedans, et la commande attend la réponse :

185 

186* **L'utilisateur choisit Run it** : le hook appelle `next(e)`, et la vérification des permissions habituelle s'exécute toujours après

187* **L'utilisateur choisit Refuse** : la commande ne s'exécute pas, et Claude lit le texte `deny`

188* **L'utilisateur tape une réponse** : `$.ui.ask` se résout au texte tapé. Le hook le compare avec `Run it`, donc n'importe quel autre texte refuse la commande.

189* **Personne ne répond** : `$.ui.ask` rejette quand l'utilisateur rejette la question ou choisit **Chat about this**, et dans une exécution `claude -p`, donc le bloc `catch` laisse la réponse à `Refuse`

190 

191Gardez l'attente à l'intérieur d'un appel API mods comme `$.ui.ask`, car ce temps ne compte pas contre la [limite de temps de 10 secondes](/docs/fr/plugins/mods/reference#limits) du hook. Le temps passé à attendre une promesse de votre propre compte. Claude Code saute un hook qui expire, donc la commande tenue s'exécuterait.

192 

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

194 Réécrire ou ajouter à une invite

195</h3>

196 

197Un hook `prompt.submit` voit chaque invite avant le début du tour, il peut donc réécrire le texte ou l'ajouter. `e.text` est ce qui a été tapé.

198 

199| Pour faire ceci | Retournez ceci |

200| :- | :- |

201| Réécrire l'invite. Le message dans la transcription affiche le nouveau texte. | `next({ ...e, text: newText })` |

202| Ajouter du texte que seul Claude lit, après l'invite | `next({ ...e, context: [...(e.context ?? []), extraText] })` |

203| Empêcher l'invite d'être envoyée | `{ drop: 'the reason' }` |

204 

205Ce hook ajoute le nom de la branche actuelle pour Claude chaque fois qu'une invite mentionne une pull request :

206 

207```javascript theme={null}

208on('prompt.submit', async ($, e, next) => {

209 // Passer une invite qui ne mentionne pas une pull request telle qu'elle est

210 if (!/\bPR\b|pull request/i.test(e.text)) return next(e)

211 const git = await $.process.run(['git', 'branch', '--show-current'])

212 // En dehors d'un référentiel git, la commande échoue, donc il n'y a pas de branche à ajouter

213 if (git.exitCode !== 0) return next(e)

214 // Garder tout contexte qu'un hook antérieur a ajouté, et en ajouter une ligne de plus pour Claude

215 return next({ ...e, context: [...(e.context ?? []), 'Current branch: ' + git.stdout.trim()] })

216})

217```

218 

219Quand vous envoyez une invite comme `open a PR for this change`, votre message ressemble au même dans la transcription, et Claude lit aussi une ligne comme `Current branch: feature/auth` après. Une invite qui ne mentionne pas une pull request passe inchangée, et `git` ne s'exécute pas.

220 

221[D'autres événements](/docs/fr/plugins/mods/reference#prompts-and-what-claude-reads) couvrent le reste de ce que Claude lit : `prompt.section` pour chaque section de l'invite système, `prompt.context` pour le contexte envoyé avec le premier message, et `skill.prompt` pour le texte d'une compétence. Le texte de ces hooks qui change entre les requêtes [invalide le cache d'invite](/docs/fr/prompt-caching).

222 

223<h3 id="follow-a-turn">

224 Suivre un tour

225</h3>

226 

227Un tour est tout ce que Claude fait en réponse à une invite. Hookez `turn.start`, `turn.step`, et `turn.complete` pour en suivre un :

228 

229| Événement | Quand il se déclenche | Ce qu'un hook peut faire |

230| :- | :- | :- |

231| `turn.start` | Un tour commence | Observer. `e.turnId` identifie le tour dans les deux autres événements. |

232| `turn.step` | Claude Code s'apprête à envoyer une requête au modèle. Un tour avec des appels d'outils en a plusieurs. `e.agentId` est défini pour la requête d'un sous-agent. | Lire l'utilisation des jetons de chaque requête, l'envoyer à un modèle différent avec `next({ ...e, model })`, ou répondre sans appeler le modèle |

233| `turn.complete` | Le tour s'est terminé, y compris un tour que l'utilisateur a interrompu, où `e.isAborted` est `true`. `e.answer` est le texte final de Claude, `e.durationMs` combien de temps cela a pris, et `e.usage` les totaux de jetons du tour. Un tour d'un sous-agent le déclenche avec `e.agentId` défini. | Observer, ou retourner un objet avec un champ `text`, comme `{ text: 'Done in 12 seconds' }`, pour afficher une ligne sous la réponse |

234 

235Écrivez un hook `turn.step` comme un générateur asynchrone, car l'événement diffuse. `yield* next(e)` transfère la réponse au fur et à mesure qu'elle diffuse et s'évalue au résultat terminé. Ce hook enregistre combien de chaque requête l'API Claude a servi à partir du [cache d'invite](/docs/fr/prompt-caching) :

236 

237```javascript theme={null}

238// function* rend le hook un générateur, qui peut transférer la réponse morceau par morceau

239on('turn.step', async function* ($, e, next) {

240 // Envoyer la requête, transférer chaque morceau à son arrivée, et garder le résultat terminé

241 const result = yield* next(e)

242 // Sauter un résultat qui ne rapporte pas de comptes de jetons

243 if (result.usage) {

244 $.ui.log('cache read ' + result.usage.cache_read_input_tokens + ' · wrote ' + result.usage.cache_creation_input_tokens)

245 }

246 // Retourner le résultat inchangé, donc le tour continue comme d'habitude

247 return result

248})

249```

250 

251La réponse de Claude diffuse à l'écran comme elle le ferait sans le mod. Après chaque fin de requête, une ligne atténuée dans la transcription donne le nombre de jetons lus du cache et le nombre écrit dedans. Un tour avec des appels d'outils a plusieurs requêtes, donc il ajoute plusieurs lignes.

252 

253`result.usage` contient les quatre comptes de jetons que l'API Claude rapporte pour une requête, plus le `model` qui a répondu : `input_tokens`, `output_tokens`, `cache_read_input_tokens`, et `cache_creation_input_tokens`. Le hook s'exécute aussi pour les requêtes des sous-agents, donc vérifiez `e.agentId` quand vous voulez seulement la conversation principale.

254 

255<h3 id="hook-the-settings-hook-events">

256 Hook les événements hook des paramètres

257</h3>

258 

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

260 

261Ce hook utilise `Stop`, qui se déclenche quand Claude finit de répondre, pour enregistrer où la transcription de la session est sauvegardée :

262 

263```javascript theme={null}

264on('classic.Stop', async ($, e, next) => {

265 // e a les mêmes champs qu'un hook Stop dans un fichier de paramètres lit depuis stdin

266 $.ui.log('Transcript saved at ' + e.transcript_path)

267 // Passer l'événement, donc les hooks Stop dans vos fichiers de paramètres s'exécutent toujours

268 return next(e)

269})

270```

271 

272Chaque fois que Claude finit de répondre, une ligne atténuée dans la transcription donne le chemin du fichier de transcription. Le hook retourne `next(e)`, il observe donc l'événement et ne change rien à la façon dont le tour se termine.

273 

274<h2 id="run-alongside-other-mods">

275 Exécuter aux côtés d'autres mods

276</h2>

277 

278Plusieurs mods peuvent hooker le même événement, et n'importe lequel d'eux peut échouer. Si votre mod bloque les appels d'outils, vérifiez sa position dans la chaîne et ce qui se passe quand son hook échoue.

279 

280<h3 id="the-order-mods-run-in">

281 L'ordre dans lequel les mods s'exécutent

282</h3>

283 

284Les hooks sur le même événement forment une chaîne middleware. Chaque `next` d'un mod appelle le hook du mod suivant, et le dernier `next` atteint le comportement propre de Claude Code. Le premier mod est le plus externe : il voit l'événement avant les autres et le résultat après eux, et il décide si les autres s'exécutent du tout. Un mod ultérieur ne peut pas empêcher un mod antérieur de voir un événement.

285 

286Claude Code ordonne la chaîne par où chaque mod vient :

287 

2881. La garde intégrée `sec-default@builtin`, un mod intégré à Claude Code que `/plugin` énumère en tant que `cc-plugin-sec-default`, où [il charge](/docs/fr/plugins/mods/admin#know-what-happens-by-default), les mods que votre organisation énumère dans [`prependPlugins`](/docs/fr/plugins/mods/admin#install-your-organizations-mods), puis tout autre mod qui compte comme celui de votre organisation et n'est pas dans `appendPlugins`

2892. Les mods que vous installez

2903. Les mods que votre organisation énumère dans `appendPlugins`

2914. D'autres mods intégrés à Claude Code

292 

293Parmi les mods que vous installez, un mod s'exécute avant les mods qu'il énumère sous `dependencies` dans son manifeste. Dans un module, les hooks s'exécutent dans l'ordre que `register` a appelé `on`.

294 

295<h4 id="where-settings-hooks-run-in-the-order">

296 Où les hooks des paramètres s'exécutent dans l'ordre

297</h4>

298 

299Les hooks `PreToolUse` configurés dans les fichiers de paramètres s'exécutent aussi pendant un appel d'outil, à des points fixes dans la chaîne des mods :

300 

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

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

303 

304[`tool.check`](/docs/fr/plugins/mods/reference#tools) est l'événement où Claude Code décide si un appel d'outil peut s'exécuter. Il se déclenche après ces hooks et les règles de permission ont décidé, et `next(e)` se résout à leur décision. Un hook sur `tool.check` peut retourner une décision différente, comme `{ decision: 'allow' }`, il peut donc approuver un appel qu'un hook du deuxième groupe a bloqué. [Étendre les permissions avec des hooks](/docs/fr/permissions#extend-permissions-with-hooks) énumère quelles décisions tiennent sur un mod.

305 

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

307 Gérer un hook qui échoue

308</h3>

309 

310Un hook qui échoue ne casse pas la session, et vous pouvez décider ce qui se passe à la place. Quand un hook sans gestionnaire `.catch` lève une exception, expire, ou retourne un résultat de la mauvaise forme, ce qui se passe ensuite dépend de s'il avait appelé `next` :

311 

312* **Il a échoué avant d'appeler `next`** : Claude Code le saute, et le gestionnaire suivant s'exécute à sa place

313* **Il a échoué après que `next` se soit résolu** : ce résultat tient, et rien ne s'exécute une deuxième fois

314 

315Une ligne nomme le mod, l'événement, et la raison, comme `my-mod: tool.call hook skipped: threw Error: boom`. Où vous la lisez dépend de la session, comme [Découvrir pourquoi un mod ne fait rien](/docs/fr/plugins/mods/troubleshoot#find-out-why-a-mod-does-nothing) l'énumère. Un hook `ui.render` dont le dessin ne valide pas est rapporté différemment, comme [Construire un arbre à partir d'éléments](/docs/fr/plugins/mods/interface#build-a-tree-from-elements) le décrit.

316 

317Pour faire échouer un hook qui bloque les appels fermé, ajoutez un gestionnaire d'erreur `.catch` qui répond à sa place. Ici, `guard` est votre fonction hook :

318 

319```javascript theme={null}

320// on retourne une enregistrement, et .catch attache un gestionnaire à ce hook seul

321on('tool.call', { tool: 'Bash' }, guard).catch(async ($, e, next) => {

322 // next.error.kind est 'throw' ou 'timeout', qui dit comment guard a échoué

323 return { deny: 'The command guard failed, so this command was not run: ' + next.error.kind }

324})

325```

326 

327Pendant que `guard` fonctionne, le gestionnaire ne s'exécute jamais. Quand `guard` lève une exception ou expire sur un appel Bash, Claude Code appelle le gestionnaire avec le même événement. Le gestionnaire retourne `{ deny }`, donc la commande ne s'exécute pas, et Claude lit le texte avec `throw` ou `timeout` à la fin. Sans le gestionnaire, Claude Code sauterait `guard` et exécuterait la commande. Le gestionnaire a [une seconde](/docs/fr/plugins/mods/reference#limits) pour répondre.

328 

329<h2 id="next-steps">

330 Prochaines étapes

331</h2>

332 

333* [Utiliser l'API mods](/docs/fr/plugins/mods/api) : ajouter des commandes et des outils, appeler un modèle, et exécuter du travail sur un minuteur

334* [Dessiner dans l'interface](/docs/fr/plugins/mods/interface) : afficher ce que vos hooks collectent dans un volet ou au-dessus de l'invite

335* [Tester un mod](/docs/fr/plugins/mods/test) : déclencher n'importe lequel de ces événements à partir d'un test

336* [Référence des mods](/docs/fr/plugins/mods/reference) : chaque événement, chaque méthode API mods, et les limites

plugins/mods/interface.md +867 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Dessiner dans l'interface avec un mod

6 

7> Dessinez des volets, une bande au-dessus de l'invite, des boutons et des champs de texte à partir d'un mod Claude Code, gérez les appuis et les entrées, et conservez l'état entre les redessinages et les sessions.

8 

9Un mod peut dessiner sa propre interface dans Claude Code et modifier des parties de l'interface que Claude Code dessine déjà. Chaque endroit où un mod peut dessiner s'appelle un [site de rendu](/docs/fr/plugins/mods/reference#render-sites), comme un volet, la bande au-dessus de l'invite, ou le spinner. Claude Code déclenche l'événement [`ui.render`](/docs/fr/plugins/mods/reference#interface) chaque fois qu'il s'apprête à dessiner un site de rendu, et votre hook pour cet événement retourne ce qu'il faut dessiner là.

10 

11Cette carte montre où un mod peut dessiner dans une session de terminal :

12 

13<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-screen-map.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=5fda26b6609c62b68c6f9e528c1590ea" className="dark:hidden" alt="Carte d'une session de terminal Claude Code. Un mod peut ajouter un volet comme barre latérale à droite, un toast en haut à droite de la transcription, une ligne de journal dans la transcription, une bande au-dessus de l'invite, et une ligne d'état sous l'invite. Un mod peut redessiner les messages, les lignes d'appels d'outils, et le spinner. L'invite est celle de Claude Code." width="600" height="336" data-path="images/mods-screen-map.svg" />

14 

15<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-screen-map-dark.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=5b4161581a1bd2c0450b0c8b57bc1225" className="hidden dark:block" alt="Carte d'une session de terminal Claude Code. Un mod peut ajouter un volet comme barre latérale à droite, un toast en haut à droite de la transcription, une ligne de journal dans la transcription, une bande au-dessus de l'invite, et une ligne d'état sous l'invite. Un mod peut redessiner les messages, les lignes d'appels d'outils, et le spinner. L'invite est celle de Claude Code." width="600" height="336" data-path="images/mods-screen-map-dark.svg" />

16 

17Dans un terminal plus étroit, le volet se trouve au-dessus de l'invite au lieu de côté de la transcription.

18 

19Construisez votre [premier mod](/docs/fr/plugins/mods/create) avant de commencer ici. Commencez par l'exemple travaillé, qui construit un volet avec deux onglets et un compteur, puis lisez la section pour chaque élément que vous voulez modifier.

20 

21<Note>

22 Pour rechercher une prop ou une limite, consultez la [référence](/docs/fr/plugins/mods/reference#render-sites).

23</Note>

24 

25<h2 id="build-a-pane-with-tabs">

26 Construire un volet avec des onglets

27</h2>

28 

29Dans cette section, vous construisez un mod qui ajoute une commande `/hello-tabs`, et la commande ouvre un volet. Un volet est une barre latérale à côté de la transcription dans un terminal plein écran large, ou une région encadrée au-dessus de l'invite sinon. Ce volet affiche deux onglets, et le deuxième onglet a un bouton qui ajoute un au compteur. Le compte est toujours là après que vous redémarriez Claude Code.

30 

31Le mod fini ressemble à ceci. L'enregistrement ouvre le volet, bascule vers le deuxième onglet, appuie sur le bouton quelques fois, et revient au premier onglet :

32 

33<Frame>

34 <video autoPlay muted loop playsInline controls className="w-full dark:hidden" src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-hello-tabs-light.mp4?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=49d520094d87b5b44bfe50fa49677f06" aria-label="La commande /hello-tabs est tapée à l'invite Claude Code et un volet encadré s'ouvre au-dessus, avec « 1 : One » et « 2 : Two » en haut et le texte « This is the first tab. » Le deuxième onglet affiche un bouton « Add one » à côté de « Count: 1 », et le compte monte à 3. Le volet revient ensuite au premier onglet." data-path="images/mods-hello-tabs-light.mp4" />

35 

36 <video autoPlay muted loop playsInline controls className="w-full hidden dark:block" src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-hello-tabs-dark.mp4?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=ff7a14d713d6e5d3b0000efa8522ea4b" aria-label="La commande /hello-tabs est tapée à l'invite Claude Code et un volet encadré s'ouvre au-dessus, avec « 1 : One » et « 2 : Two » en haut et le texte « This is the first tab. » Le deuxième onglet affiche un bouton « Add one » à côté de « Count: 1 », et le compte monte à 3. Le volet revient ensuite au premier onglet." data-path="images/mods-hello-tabs-dark.mp4" />

37</Frame>

38 

39Claude Code n'a pas d'élément d'onglets intégré, donc les onglets sont deux boutons dans une ligne. Le mod garde la trace de celui qui est actif et dessine le contenu de cet onglet sous la ligne.

40 

41<Steps>

42 <Step title="Créer le plugin">

43 Un mod est un plugin avec un manifeste, un `hooks.json` qui pointe vers votre code, et le fichier de code. [Créer un mod](/docs/fr/plugins/mods/create#write-a-mod-yourself) explique chacun. Créez un répertoire nommé `hello-tabs` avec des répertoires `.claude-plugin` et `hooks` à l'intérieur, puis enregistrez les deux premiers fichiers.

44 

45 Enregistrez le manifeste sous `hello-tabs/.claude-plugin/plugin.json` :

46 

47 ```json hello-tabs/.claude-plugin/plugin.json theme={null}

48 {

49 "name": "hello-tabs",

50 "version": "0.1.0",

51 "description": "Opens a pane with two tabs and a counter",

52 "author": { "name": "Your Name" }

53 }

54 ```

55 

56 Nommez votre point d'entrée dans `hello-tabs/hooks/hooks.json` :

57 

58 ```json hello-tabs/hooks/hooks.json theme={null}

59 {

60 "modules": ["./register.js"]

61 }

62 ```

63 </Step>

64 

65 <Step title="Écrire le code">

66 Le code fait trois choses, une dans chaque hook :

67 

68 * Ajoute la commande `/hello-tabs`

69 * Ouvre le volet quand vous exécutez cette commande

70 * Dessine le contenu du volet : la ligne d'onglets et le corps de l'onglet ouvert

71 

72 Deux variables au niveau du module, `tab` et `count`, conservent l'état du volet.

73 

74 Enregistrez ceci sous `hello-tabs/hooks/register.js` :

75 

76 ```javascript hello-tabs/hooks/register.js theme={null}

77 // The pane's id, used to open the pane and to recognize it when drawing

78 const PANE = 'hello-tabs'

79 

80 // What the pane shows: which tab is open, and the counter's value

81 let tab = 'one'

82 let count = 0

83 

84 export function register(on) {

85 // Runs before your first prompt, and again after a reload

86 on('session.start', async ($, e, next) => {

87 await $.command.register({ name: 'hello-tabs', description: 'Open the hello-tabs pane' })

88 // Load the count an earlier session saved, if there is one

89 const saved = await $.store.get('count')

90 if (typeof saved === 'number') count = saved

91 return next(e)

92 })

93 

94 // Runs when you type /hello-tabs

95 on('command.run', { command: 'hello-tabs' }, async ($) => {

96 // Open the pane, give it the keyboard, and let Esc close it

97 await $.ui.open({ id: PANE, title: 'Hello tabs', focus: true, closeOnEscape: true })

98 // Print nothing in the transcript

99 return {}

100 })

101 

102 // Runs each time Claude Code draws a pane

103 on('ui.render', { component: 'Pane' }, async ($, e, next) => {

104 // Leave other mods' panes alone

105 if (e.requestId !== PANE) return next(e)

106 // Get the elements this app can draw

107 const { Box, Text, Button } = $.ui.resolve(e)

108 // Ask Claude Code to run this hook again

109 const redraw = () => $.ui.invalidate('ui.render')

110 

111 // One tab: a button that switches to its tab when pressed

112 const tabButton = (name, label, hotkey) =>

113 Button({

114 key: 'tab-' + name,

115 label,

116 hotkey,

117 plain: true,

118 // Dim the tab that isn't open

119 dimColor: tab !== name,

120 onPress: () => {

121 tab = name

122 redraw()

123 },

124 })

125 

126 // What goes under the tabs, depending on which one is open

127 const body =

128 tab === 'one'

129 ? [Text({ children: ['This is the first tab.'] })]

130 : [

131 Box({

132 flexDirection: 'row',

133 columnGap: 2,

134 children: [

135 Button({

136 key: 'more',

137 label: 'Add one',

138 hotkey: 'a',

139 onPress: async () => {

140 count += 1

141 redraw()

142 // Save the count so it's there after a restart

143 await $.store.set('count', count)

144 },

145 }),

146 Text({ children: ['Count: ' + count] }),

147 ],

148 }),

149 ]

150 

151 // The whole pane: the row of tabs, a blank line, then the body

152 return Box({

153 flexDirection: 'column',

154 children: [

155 Box({

156 flexDirection: 'row',

157 columnGap: 3,

158 children: [tabButton('one', 'One', '1'), tabButton('two', 'Two', '2')],

159 }),

160 Text({ children: [' '] }),

161 ...body,

162 ],

163 })

164 })

165 }

166 ```

167 

168 Chaque hook fait aussi quelque chose que le code ne rend pas évident :

169 

170 * **[`session.start`](/docs/fr/plugins/mods/reference#session)** lit aussi le compte sauvegardé depuis [`$.store`](#keep-state), un magasin clé-valeur qui persiste entre les sessions.

171 * **[`command.run`](/docs/fr/plugins/mods/api#add-a-command)** dit seulement à Claude Code que le volet existe. Ouvrir un volet ne dessine rien par lui-même : Claude Code déclenche ensuite `ui.render` pour demander ce qu'il faut y mettre.

172 * **`ui.render`** retourne l'arbre d'éléments, une `Box` qui contient d'autres boîtes, du texte et des boutons, et le construit à nouveau à partir de `tab` et `count` chaque fois qu'il s'exécute.

173 

174 Appuyer sur un bouton exécute son callback `onPress`, qui change une variable et appelle `redraw`. Claude Code exécute ensuite le hook `ui.render` à nouveau, et le hook construit un nouvel arbre à partir des nouvelles valeurs. Chaque dessin interactif utilise ce cycle de rendu : un callback change l'état, et le hook dessine à nouveau à partir du nouvel état.

175 </Step>

176 

177 <Step title="Ouvrir le volet">

178 Dans votre shell, démarrez Claude Code avec `claude --plugin-dir ./hello-tabs`. À l'invite Claude Code, exécutez `/hello-tabs`. Un volet s'ouvre avec `1: One` et `2: Two` en haut. Appuyez sur `2`, puis appuyez sur `a`, la touche de raccourci pour **Add one**, quelques fois. Le compte augmente.

179 </Step>

180 

181 <Step title="Vérifier que le compte a été sauvegardé">

182 Appuyez sur Esc pour fermer le volet, puis quittez la session. Dans votre shell, démarrez Claude Code à nouveau avec la même commande `claude --plugin-dir ./hello-tabs`, et à l'invite Claude Code exécutez `/hello-tabs`. Le compte est où vous l'avez laissé.

183 

184 Pour effacer le compte, faites appeler au mod `$.store.delete('count')`. [Conserver l'état](#keep-state) couvre combien de temps chaque type de valeur dure.

185 </Step>

186</Steps>

187 

188<h2 id="pick-where-to-draw">

189 Choisir où dessiner

190</h2>

191 

192Un hook `ui.render` s'exécute pour chaque site de rendu sauf si vous le réduisez à celui que vous voulez dessiner. Pour choisir le site de rendu, passez un filtre, appelé un [matcher](/docs/fr/plugins/mods/events#filter-which-events-a-hook-handles), comme deuxième argument à `on`. `{ component: 'Pane' }` exécute le hook seulement pour les volets. Dans le hook, `e.component` nomme le site, `e.surface` dit quelle application dessine, et `e.props` contient les données propres du site. Pour un volet, `e.requestId` est l'`id` avec lequel vous l'avez ouvert.

193 

194Deux sites sont vides jusqu'à ce qu'un mod les remplisse, le volet et la bande. Sélectionnez un onglet pour voir ce que chacun est et comment dessiner dedans :

195 

196<Tabs>

197 <Tab title="Volet">

198 Un volet est une barre latérale à côté de la transcription dans un terminal plein écran large, ou une région encadrée au-dessus de l'invite sinon. Avec plusieurs volets ouverts, chacun obtient un onglet qui affiche son titre.

199 

200 Un volet apparaît quand votre mod appelle `$.ui.open` avec un `id` que vous choisissez, comme dans `$.ui.open({ id: 'hello-tabs' })`. [Ouvrir un volet au bon moment](#open-a-pane-at-the-right-time) couvre les autres champs et quand un volet attend un terminal plus large.

201 

202 Pour dessiner dans votre volet, filtrez sur `{ component: 'Pane' }` et vérifiez que `e.requestId` est votre `id`.

203 </Tab>

204 

205 <Tab title="Bande au-dessus de l'invite">

206 La bande est une bande directement au-dessus de l'entrée d'invite. Elle est toujours là, et chaque mod la partage.

207 

208 Votre hook retourne un arbre pour afficher quelque chose dans la bande, ou `next(e)` pour ne rien afficher. Un arbre remplace ce que les mods [après le vôtre](/docs/fr/plugins/mods/events#the-order-mods-run-in) dessinent là. Pour garder le leur, mettez le résultat de `await next(e)` parmi les enfants d'une [`Box`](#build-a-tree-from-elements) dans votre arbre.

209 

210 Pour dessiner dans la bande, filtrez sur `{ component: 'AbovePrompt' }`.

211 </Tab>

212</Tabs>

213 

214<h3 id="change-what-claude-code-already-draws">

215 Modifier ce que Claude Code dessine déjà

216</h3>

217 

218Claude Code dessine la plupart de son interface lui-même : les messages, les lignes d'appels d'outils, le spinner, et plus. Chacune de ces parties est aussi un site de rendu, donc un mod peut le restyler ou le remplacer. Pour en modifier un, filtrez votre hook `ui.render` sur son nom de ce tableau :

219 

220| Site | Ce que c'est |

221| :- | :- |

222| `UserMessage`, `AssistantMessage` | Un message dans la transcription |

223| `ToolUse`, `ToolResult`, `ToolGroup` | La ligne d'un appel d'outil, son résultat, et une exécution repliée d'appels |

224| `CommandOutput` | La ligne qu'une commande a imprimée |

225| `AskUserQuestion` | Le dialogue que Claude ouvre pour vous poser une question |

226| `Spinner`, `ToolProgress`, `TurnDuration` | Lignes d'état pour un tour : la ligne qui s'anime pendant que Claude travaille, la ligne de progression en direct d'un outil en cours d'exécution, et la ligne qui ferme un tour |

227| `InfoNotice`, `SessionMode`, `PromptHint` | Lignes d'état sous le logo, les étiquettes de mode dans le pied de page, et la ligne d'indice sous l'invite |

228 

229À un site que Claude Code dessine déjà, votre hook a trois choix : modifier un détail, remplacer le dessin, ou le laisser tranquille. Sélectionnez un onglet pour voir chacun appliqué au spinner. Les exemples lisent une variable `calls` qu'un autre hook compte, comme dans le [mod tutoriel](/docs/fr/plugins/mods/create#write-a-mod-yourself).

230 

231<Tabs>

232 <Tab title="Modifier un détail">

233 Pour garder le dessin de Claude Code et modifier une partie de celui-ci, passez à `next` une copie de l'événement avec des `props` modifiées. Ce hook change le texte après le mot du spinner :

234 

235 ```javascript theme={null}

236 on('ui.render', { component: 'Spinner' }, async ($, e, next) => {

237 // Keep Claude Code's spinner, and change the text after its word

238 return next({ ...e, props: { ...e.props, suffix: ' · tool calls: ' + calls + '…' } })

239 })

240 ```

241 

242 Le spinner garde son animation et son mot, et votre texte suit le mot :

243 

244 ```text theme={null}

245 Thinking · tool calls: 2…

246 ```

247 </Tab>

248 

249 <Tab title="Remplacer le dessin">

250 Pour dessiner quelque chose de votre propre à la place du site, retournez un arbre et n'appelez pas `next`. Ce hook dessine une ligne de texte où le spinner serait :

251 

252 ```javascript theme={null}

253 on('ui.render', { component: 'Spinner' }, async ($, e) => {

254 const { Text } = $.ui.resolve(e)

255 // No call to next, so this line is drawn in the spinner's place

256 return Text({ children: ['Claude has made ' + calls + ' tool calls'] })

257 })

258 ```

259 

260 Pendant que Claude travaille, votre ligne s'affiche et le spinner de Claude Code ne s'affiche pas :

261 

262 ```text theme={null}

263 Claude has made 2 tool calls

264 ```

265 </Tab>

266 

267 <Tab title="Le laisser tranquille">

268 Pour laisser le site tel que Claude Code le dessine, retournez `next(e)`. Un hook fait souvent cela pour certains événements et pas pour d'autres. Ce hook laisse le spinner tranquille jusqu'à ce qu'il y ait un appel à compter :

269 

270 ```javascript theme={null}

271 on('ui.render', { component: 'Spinner' }, async ($, e, next) => {

272 // Nothing to show yet, so pass the event on unchanged

273 if (calls === 0) return next(e)

274 return next({ ...e, props: { ...e.props, suffix: ' · tool calls: ' + calls + '…' } })

275 })

276 ```

277 

278 Avant le premier appel d'outil, le spinner ressemble à la façon dont il le fait sans le mod :

279 

280 ```text theme={null}

281 Thinking…

282 ```

283 </Tab>

284</Tabs>

285 

286L'invite de permission n'est pas un site de rendu, donc un mod ne peut pas modifier ce qu'il affiche. Le dialogue de question, `AskUserQuestion`, en est un, donc un mod peut modifier cela.

287 

288Le terminal et l'application Desktop ne déclenchent pas tous les mêmes sites. `Pane`, `AbovePrompt`, `Spinner`, et les sites de transcription fonctionnent dans les deux. Quelques autres lignes d'état sont déclenchées seulement dans le terminal. Le [tableau des sites de rendu](/docs/fr/plugins/mods/reference#render-sites) liste où chacun est déclenché.

289 

290<h3 id="open-a-pane-at-the-right-time">

291 Ouvrir un volet au bon moment

292</h3>

293 

294Un volet n'apparaît que quand votre mod l'ouvre. Comment et quand vous l'ouvrez décide s'il prend le focus clavier, combien d'espace il demande, et s'il s'affiche du tout dans un terminal étroit.

295 

296Pour ouvrir un volet, appelez [`$.ui.open`](/docs/fr/plugins/mods/reference#mods-api-methods) avec un `id` que vous choisissez. L'`id` est le nom du volet : votre hook `ui.render` le vérifie, et vous le passez à nouveau pour fermer le volet.

297 

298```javascript theme={null}

299await $.ui.open({ id: 'hello-tabs', title: 'Hello tabs', focus: true })

300```

301 

302Pour fermer le volet, appelez `$.ui.close` avec l'`id` avec lequel vous l'avez ouvert :

303 

304```javascript theme={null}

305await $.ui.close({ id: 'hello-tabs' })

306```

307 

308En plus de `id`, `$.ui.open` prend ces champs optionnels :

309 

310| Champ | Ce qu'il fait |

311| :- | :- |

312| `title` | L'étiquette d'onglet du volet quand plus d'un volet est ouvert |

313| `focus` | Demande le [focus clavier](#know-which-keys-your-mod-can-receive) |

314| `closeOnEscape` | Fait que Esc ferme le volet. Passez `true` ou laissez le champ de côté, car Claude Code refuse `false`. |

315| `holdToasts` | Retient les toasts, les petits avis de [`$.ui.toast`](/docs/fr/plugins/mods/api#show-something-without-starting-a-turn), jusqu'à ce que le volet se ferme |

316| `rows` | La hauteur à demander quand le volet se trouve au-dessus de l'invite. La valeur par défaut est un tiers de l'espace. |

317| `columns` | La largeur à demander quand le volet se trouve à côté de la transcription |

318 

319Pour laisser une commande ouvrir le volet pendant que Claude travaille, ajoutez `immediate: true` quand vous [enregistrez la commande](/docs/fr/plugins/mods/api#add-a-command). Sans cela, une commande tapée pendant un tour attend la fin du tour.

320 

321<h4 id="when-a-pane-waits-for-a-wider-terminal">

322 Quand un volet attend un terminal plus large

323</h4>

324 

325Un volet que votre mod ouvre sans être demandé n'apparaît pas dans un terminal étroit, donc il ne peut pas prendre le contrôle d'un petit écran. S'il apparaît dépend de ce qui l'a ouvert :

326 

327* **Ouvert par quelque chose que l'utilisateur a fait**, comme une commande qu'il a exécutée ou un bouton qu'il a appuyé, le volet apparaît à n'importe quelle largeur

328* **Ouvert par votre mod agissant par lui-même**, comme à partir d'une minuterie ou d'un hook [`turn.start`](/docs/fr/plugins/mods/events#follow-a-turn), le volet n'apparaît que dans un terminal d'au moins 144 colonnes de large. Après que l'utilisateur ait ouvert ce volet une fois lui-même, 110 colonnes suffisent.

329 

330Quand le volet apparaît, `$.ui.open` se résout en `{ isPlaced: true }`. Quand le volet attend, `isPlaced` est `false` et `reason` est une chaîne qui dit pourquoi. Un volet en attente apparaît quand l'utilisateur l'ouvre ou élargit le terminal. Pour dire que quelque chose est disponible sans ouvrir un volet, appelez `$.ui.toast('Your message')`, qui affiche un petit avis qui disparaît après quelques secondes.

331 

332<h2 id="build-a-tree-from-elements">

333 Construire un arbre à partir d'éléments

334</h2>

335 

336Ce qu'un hook `ui.render` retourne est un arbre d'éléments : une description de ce qu'il faut dessiner, faite de boîtes, de texte et de contrôles imbriqués les uns dans les autres. Vous décrivez le dessin, et Claude Code le rend dans le terminal ou l'application Desktop.

337 

338Pour obtenir les éléments, appelez `$.ui.resolve(e)` dans votre hook, comme dans `const { Box, Text, Button } = $.ui.resolve(e)`. Chaque élément est une fonction. Vous lui passez des props, et vous mettez les éléments et les chaînes qui vont à l'intérieur dans `children`.

339 

340La plupart des dessins utilisent quatre éléments. Sélectionnez un onglet pour voir chacun et comment le terminal le dessine :

341 

342<Tabs>

343 <Tab title="Texte">

344 `Text` dessine une chaîne, avec un style optionnel comme `bold` et `color` :

345 

346 ```javascript theme={null}

347 Text({ children: ['This is the first tab.'] })

348 ```

349 

350 ```text theme={null}

351 This is the first tab.

352 ```

353 </Tab>

354 

355 <Tab title="Boîte">

356 `Box` arrange ce qui est à l'intérieur, dans une ligne ou une colonne. Celle-ci met un bouton et une ligne de texte côte à côte, deux colonnes à part :

357 

358 ```javascript theme={null}

359 Box({

360 flexDirection: 'row',

361 columnGap: 2,

362 children: [

363 Button({ key: 'more', label: 'Add one', onPress: addOne }),

364 Text({ children: ['Count: 0'] }),

365 ],

366 })

367 ```

368 

369 ```text theme={null}

370 [ Add one ] Count: 0

371 ```

372 </Tab>

373 

374 <Tab title="Bouton">

375 `Button` est un contrôle que l'utilisateur peut appuyer. Il exécute votre callback `onPress`. Avec `plain: true` il n'a pas de crochets et affiche sa touche de raccourci :

376 

377 ```javascript theme={null}

378 Button({ key: 'more', label: 'Add one', onPress: addOne })

379 Button({ key: 'tab-one', label: 'One', hotkey: '1', plain: true, onPress: showTabOne })

380 ```

381 

382 ```text theme={null}

383 [ Add one ]

384 1: One

385 ```

386 </Tab>

387 

388 <Tab title="Entrée">

389 `Input` est un champ de texte. Il exécute votre callback `onSubmit` avec le texte quand l'utilisateur appuie sur Entrée :

390 

391 ```javascript theme={null}

392 Input({

393 key: 'new-note',

394 label: 'Note',

395 placeholder: 'Type a note and press Enter',

396 value: '',

397 submitLabel: 'add',

398 onSubmit: addNote,

399 })

400 ```

401 

402 ```text theme={null}

403 Note: Type a note and press Enter ⏎ add

404 ```

405 </Tab>

406</Tabs>

407 

408Ce tableau liste chaque élément :

409 

410| Élément | Ce qu'il dessine | Où |

411| :- | :- | :- |

412| `Box` | Un conteneur flex. Prend des props de mise en page comme `flexDirection`, `columnGap`, `padding`, `borderStyle`, et `width`. | Partout |

413| `Text` | Texte stylisé. Prend `color`, `bold`, `dimColor`, `italic`, et `wrap`. Une `color` est une clé de thème ou une couleur comme `'red'`. Un `wrap` est `'wrap'`, `'truncate'`, `'truncate-start'`, `'truncate-middle'`, ou `'truncate-end'`. | Partout |

414| `Button` | Un contrôle qui appelle `onPress` | Partout |

415| `Link`, `Code`, `Markdown` | Un lien avec `href` et une `label` optionnelle, un bloc de code, et du texte formaté comme les réponses de Claude. `Markdown` prend son contenu dans une prop `text`, pas dans `children`, et a besoin d'une `key` quand vous passez `onLinkPress`. | Partout |

416| `Input`, `Select` | Un champ de texte et un sélecteur | Terminal, Desktop |

417| `Svg` | Un document SVG | Desktop |

418| `Client` | Une région dessinée par un deuxième fichier du vôtre, pour l'animation et l'entrée au pointeur. Ce fichier n'obtient pas l'API des mods. Il atteint vos hooks seulement en postant des données, qui arrivent comme un événement `ui.message`. | Terminal, Desktop |

419| `Raster`, `Image` | Une [grille de cellules colorées](#draw-a-grid-of-colored-cells), et une image | Terminal |

420 

421Si votre module est un fichier `.tsx` ou `.jsx`, vous pouvez écrire l'arbre en JSX. Déstructurez les éléments de `$.ui.resolve(e)` d'abord, car un module de hooks n'a pas de globals d'éléments.

422 

423Si un arbre utilise un élément que l'application n'a pas, une prop qu'un élément ne prend pas, ou un enfant où aucun ne va, Claude Code dessine sa propre version du site.

424 

425Dans une session démarrée avec `--plugin-dir`, une ligne de transcription le dit, comme `ui.render (Pane) refused: Text prop "bogusProp" is not allowed; the engine drew its own`. Le [journal de débogage](/docs/fr/plugins/mods/troubleshoot#read-the-debug-log) l'enregistre comme `ui.render (Pane): a hook returned a tree that does not validate` avec la même raison. Rien d'autre n'apparaît dans la session, donc quand un dessin ne s'affiche pas, vérifiez cette ligne ou le journal.

426 

427<h3 id="draw-a-grid-of-colored-cells">

428 Dessiner une grille de cellules colorées

429</h3>

430 

431Pour une carte thermique, une sparkline, ou un plateau de jeu dans le terminal, dessinez un `Raster` et non une `Box` pour chaque cellule. Un `Raster` prend une `key`, sa taille en `columns` et `rows`, et `cells`, qui empaquette chaque cellule dans une chaîne. Chaque cellule est trois nombres : le point de code du caractère, sa couleur et sa couleur de fond. Une couleur est un nombre hexadécimal avec deux chiffres chacun pour le rouge, le vert et le bleu, comme `0xc62828` pour un rouge, ou `0x01000000` pour la valeur par défaut du terminal.

432 

433L'application Desktop n'a pas de `Raster`, donc vérifiez `e.surface` et dessinez du texte là. Ce corps de volet dessine une carte thermique de trois par deux :

434 

435```javascript theme={null}

436// The value that means "use the terminal's default color"

437const DEFAULT_COLOR = 0x01000000

438 

439// Pack rows of [character, color] pairs into the one string a Raster takes

440// One cell is three numbers: the character's code point, its color, and its background

441function cellsOf(rows) {

442 const numbers = rows.flat().flatMap(([char, color]) => [char.codePointAt(0), color, DEFAULT_COLOR])

443 return new Uint8Array(Uint32Array.from(numbers).buffer).toBase64()

444}

445 

446on('ui.render', { component: 'Pane' }, async ($, e, next) => {

447 // Draw only in the pane opened with the id 'heat'

448 if (e.requestId !== 'heat') return next(e)

449 const { Box, Text, Raster } = $.ui.resolve(e)

450 // Two rows of three cells, each a block character and its color

451 const rows = [

452 [['█', 0x2e7d32], ['█', 0xf9a825], ['█', 0xc62828]],

453 [['█', 0x2e7d32], ['█', 0x2e7d32], ['█', 0xf9a825]],

454 ]

455 if (e.surface !== 'terminal') {

456 return Text({ children: ['The heat map needs the terminal.'] })

457 }

458 return Box({

459 flexDirection: 'column',

460 children: [Raster({ key: 'grid', columns: 3, rows: 2, cells: cellsOf(rows) })],

461 })

462})

463```

464 

465Dans le terminal, le volet affiche la grille :

466 

467<img src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-heat-map.svg?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=b91bcce3bad74bc851149133d4acc5d5" alt="Un volet dans le terminal qui contient une petite grille de blocs colorés, deux lignes de trois. La ligne du haut est verte, ambre et rouge. La ligne du bas est verte, verte et ambre." width="360" height="132" data-path="images/mods-heat-map.svg" />

468 

469Le tableau `rows` est la partie que vous changeriez, et `cellsOf` la transforme en chaîne empaquetée. Le hook dessine seulement dans un volet dont l'`id` est `heat`, donc ouvrez-en un avec `$.ui.open({ id: 'heat' })` à partir d'une commande, comme l'exemple [`hello-tabs`](#build-a-pane-with-tabs) ouvre son volet.

470 

471Chaque caractère doit être large d'une cellule. Pour animer un `Raster` qui est déjà à l'écran, appelez `$.ui.blit` avec l'`id` du volet comme `requestId`, la `key` du `Raster`, la même taille, et de nouvelles cellules. Pour cet exemple, c'est `$.ui.blit({ requestId: 'heat', key: 'grid', columns: 3, rows: 2, cells: cellsOf(newRows) })`. Il repeint cet élément sans exécuter votre hook `ui.render` à nouveau.

472 

473<h2 id="respond-to-presses-and-typing">

474 Répondre aux appuis et à la saisie

475</h2>

476 

477Quand l'utilisateur appuie sur un bouton, tape dans un champ, ou choisit dans une liste que votre mod a dessinée, Claude Code appelle la fonction que vous avez donnée à ce contrôle, et elle s'exécute dans votre module. Chaque contrôle prend ses propres callbacks :

478 

479* **`Button`** : prend `onPress(e)`, où `e.surface` est l'application d'où vient l'appui

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

481* **`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' }]`

482 

483Un 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`](/docs/fr/plugins/mods/reference#interface) avec la `key` dans `e.element`, et un autre mod peut accrocher 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.

484 

485<h3 id="know-which-keys-your-mod-can-receive">

486 Focus clavier et touches de raccourci

487</h3>

488 

489Votre mod ne lit jamais le clavier lui-même. L'utilisateur appuie sur une touche, Claude Code décide lequel de vos contrôles c'est, et le callback de ce contrôle s'exécute. À part une [touche de raccourci numérique sur la bande](/docs/fr/plugins/mods/reference#elements), cela ne se produit que pendant que votre volet ou bande a le focus clavier. Le reste du temps, les touches vont à l'invite.

490 

491<h4 id="how-a-pane-gets-keyboard-focus">

492 Comment un volet obtient le focus clavier

493</h4>

494 

495Un volet obtient le focus clavier de l'une de trois façons :

496 

497* Votre mod l'ouvre avec `focus: true` à partir d'une commande ou d'un appui

498* L'utilisateur appuie sur Ctrl+X puis Tab

499* L'utilisateur clique dessus

500 

501Claude Code accorde `focus: true` seulement pendant que l'invite est vide et rien d'autre n'a le focus clavier. Un volet qui s'ouvre pendant que l'utilisateur tape ne prend pas ses frappes.

502 

503<h4 id="what-each-key-does">

504 Ce que chaque touche fait

505</h4>

506 

507Ce tableau liste ce qu'une touche fait pendant que votre volet ou bande a le focus clavier :

508 

509| Touche | Ce qu'elle fait |

510| :- | :- |

511| Tab | Se déplace vers le contrôle suivant |

512| Haut et Bas | Se déplacent entre les contrôles pendant que votre dessin s'adapte. Quand le volet ou la bande a plus de lignes qu'il ne peut en afficher, ils le font défiler. |

513| Entrée | Appuie sur le `Button` ciblé, soumet le `Input` ciblé, ou choisit dans un `Select` |

514| La touche de raccourci d'un bouton | Appuie sur ce bouton. Pendant qu'un `Input` a le focus, chaque touche imprimable va au champ. |

515| Esc | Retourne le focus clavier à l'invite. Avec `closeOnEscape: true`, il ferme aussi le volet. |

516 

517Un mod ne peut pas lier Tab ou les touches fléchées à autre chose, donc un jeu se dirige avec `w`, `a`, `s`, et `d`.

518 

519<h4 id="set-a-hotkey-and-the-first-focus">

520 Définir une touche de raccourci et le premier focus

521</h4>

522 

523Deux props sur un contrôle décident comment le clavier l'atteint :

524 

525* **`hotkey`** : pour laisser l'utilisateur appuyer sur un `Button` avec une touche, donnez-lui une `hotkey` d'un chiffre ou une lettre minuscule, comme dans `hotkey: 'a'`

526* **`autoFocus`** : pour choisir quel contrôle a le focus quand le volet s'ouvre, ajoutez `autoFocus: true` à celui-ci. Laissez la prop de côté sur les autres, car Claude Code refuse `autoFocus: false`.

527 

528Comment une touche de raccourci s'affiche dépend du bouton et de l'application :

529 

530| Bouton | Dans le terminal | Dans l'application Desktop |

531| :- | :- | :- |

532| Avec crochets, la valeur par défaut | `[ Add one ]`, sans touche de raccourci affichée | L'étiquette avec une petite touche à côté |

533| Avec `plain: true` | `1: One` | L'étiquette avec une petite touche à côté |

534 

535Dans le terminal, nommez la touche dans l'étiquette d'un bouton entre crochets, ou utilisez `plain: true`, pour que l'utilisateur puisse voir ce qu'il faut appuyer. La [référence des éléments](/docs/fr/plugins/mods/reference#elements) a les autres règles de `Button` : `action`, les touches de raccourci numériques sur la bande, et deux boutons sur une touche de raccourci.

536 

537<h3 id="take-typed-input-and-draw-a-row-for-each-item">

538 Prendre l'entrée tapée et dessiner une ligne pour chaque élément

539</h3>

540 

541De nombreux volets sont un champ de texte avec une liste en dessous. L'exemple de cette section est un volet de notes : vous tapez une note et appuyez sur Entrée pour l'ajouter, et chaque note a un bouton `x` qui la supprime. Avec deux notes ajoutées, le terminal dessine le volet de cette façon :

542 

543```text theme={null}

544╭──────────────────────────────────────────────────────────╮

545│ Note: Type a note and press Enter ⏎ add ✕ │

546│ x buy milk │

547│ x call bob │

548╰──────────────────────────────────────────────────────────╯

549```

550 

551L'exemple utilise deux techniques :

552 

553* **Prendre l'entrée tapée** : un `Input` appelle `onSubmit(value)` avec le texte du champ quand l'utilisateur appuie sur Entrée, et `onInput(value)` à chaque changement

554* **Dessiner une liste** : mappez vos données à une ligne chacune, et donnez à chaque bouton de ligne sa propre `key`

555 

556Ce hook dessine le contenu du volet :

557 

558```javascript theme={null}

559// The list the pane draws

560let notes = []

561 

562on('ui.render', { component: 'Pane' }, async ($, e, next) => {

563 // Draw only in the pane opened with the id 'notes'

564 if (e.requestId !== 'notes') return next(e)

565 const { Box, Text, Button, Input } = $.ui.resolve(e)

566 const redraw = () => $.ui.invalidate('ui.render')

567 

568 return Box({

569 flexDirection: 'column',

570 children: [

571 Input({

572 key: 'new-note',

573 label: 'Note',

574 placeholder: 'Type a note and press Enter',

575 // Draw the field empty each time, which clears it after a submit

576 value: '',

577 submitLabel: 'add',

578 autoFocus: true,

579 // Runs when you press Enter in the field

580 onSubmit: async (value) => {

581 // Ignore an empty line

582 if (!value.trim()) return

583 notes = [...notes, value.trim()]

584 redraw()

585 await $.store.set('notes', notes)

586 },

587 }),

588 // One row for each note: a delete button, then the note's text

589 ...notes.map((note, i) =>

590 Box({

591 flexDirection: 'row',

592 columnGap: 1,

593 children: [

594 Button({

595 // A key of its own, so each row's button can be told apart

596 key: 'delete-' + i,

597 label: 'x',

598 plain: true,

599 onPress: async () => {

600 notes = notes.filter((_, j) => j !== i)

601 redraw()

602 await $.store.set('notes', notes)

603 },

604 }),

605 Text({ children: [note] }),

606 ],

607 }),

608 ),

609 ],

610 })

611})

612```

613 

614Pour essayer le volet :

615 

616* **Ajouter une note** : tapez une ligne et appuyez sur Entrée. La ligne apparaît comme une nouvelle ligne, et le champ se vide.

617* **Supprimer une note** : appuyez sur Tab jusqu'à ce que le bouton `x` de la note ait le focus, puis appuyez sur Entrée. Le `x` est l'étiquette du bouton et non une touche de raccourci, donc taper la lettre ne l'appuie pas.

618 

619Chaque changement suit le même cycle de rendu que `hello-tabs` : le callback change `notes`, appelle `redraw`, et enregistre la liste dans `$.store`.

620 

621Le champ se vide après chaque soumission à cause de sa prop `value`. `value` est le texte que le champ contient quand il est dessiné, et la saisie de l'utilisateur le remplace jusqu'à ce que votre hook dessine le champ à nouveau. L'exemple dessine toujours le champ avec `''`.

622 

623L'exemple enregistre les notes et ne les charge pas. Pour les ramener dans la session suivante, lisez-les dans un hook `session.start`, de la même façon que `hello-tabs` lit `count`.

624 

625Trois props composent la ligne du champ, `Note: Type a note and press Enter ⏎ add` :

626 

627| Prop | Dans l'exemple | Ce que c'est |

628| :- | :- | :- |

629| `label` | `Note` | Le texte avant le champ. Le terminal dessine `: ` après. |

630| `placeholder` | `Type a note and press Enter` | Texte atténué qui s'affiche pendant que le champ est vide |

631| `submitLabel` | `add` | Le mot après `⏎` qui dit ce que fait Entrée |

632 

633Soumettre un `Input` ne démarre pas un tour sauf si votre callback appelle [`$.prompt.submit`](/docs/fr/plugins/mods/api#start-a-turn-from-a-background-job).

634 

635<h2 id="redraw-when-something-changes">

636 Redessiner un site

637</h2>

638 

639Un dessin est un instantané : il affiche ce que votre hook `ui.render` a retourné la dernière fois que le hook s'est exécuté. Pour afficher quelque chose de nouveau, le hook doit s'exécuter à nouveau. Claude Code l'exécute à nouveau pour certains changements, et votre mod demande le reste.

640 

641<h3 id="when-claude-code-redraws-without-being-asked">

642 Quand Claude Code redessine sans être demandé

643</h3>

644 

645Claude Code exécute votre hook `ui.render` à nouveau quand les props du site changent ou la largeur du terminal change. Il n'exécute pas le hook sur une minuterie, et il ne peut pas dire quand une variable dans votre module change.

646 

647<h3 id="redraw-when-your-data-changes">

648 Redessiner quand vos données changent

649</h3>

650 

651Pour avoir vos sites dessinés à nouveau après que vos propres données changent, appelez `$.ui.invalidate('ui.render')`. Ce volet compte les appuis. Le callback du bouton change `count`, puis demande un redessin :

652 

653```javascript theme={null}

654let count = 0

655 

656on('ui.render', { component: 'Pane' }, async ($, e, next) => {

657 if (e.requestId !== 'counter') return next(e)

658 const { Box, Text, Button } = $.ui.resolve(e)

659 return Box({

660 flexDirection: 'row',

661 columnGap: 2,

662 children: [

663 Button({

664 key: 'more',

665 label: 'Add one',

666 onPress: () => {

667 count += 1

668 // The data changed, so ask Claude Code to draw the pane again

669 $.ui.invalidate('ui.render')

670 },

671 }),

672 Text({ children: ['Count: ' + count] }),

673 ],

674 })

675})

676```

677 

678Chaque appui augmente le nombre dans le volet. L'exemple [`hello-tabs`](#build-a-pane-with-tabs) enveloppe le même appel dans sa fonction `redraw`.

679 

680Une valeur que vous gardez dans [`$.state`](#keep-a-value-in-\$-state) n'a pas besoin de l'appel, car écrire la valeur redessine les sites qui la lisent.

681 

682<h3 id="redraw-on-a-timer">

683 Redessiner sur une minuterie

684</h3>

685 

686Pour garder une horloge, un compte à rebours, ou une valeur de l'extérieur de la session actuelle, redessinez selon un calendrier. Démarrez une minuterie dans le hook `session.start` du module. Si le module en a déjà une, comme `hello-tabs` le fait, ajoutez la ligne [`$.clock.every`](/docs/fr/plugins/mods/api#run-work-in-the-background) à celle-ci :

687 

688```javascript theme={null}

689on('session.start', async ($, e, next) => {

690 // Every 1000 milliseconds, ask Claude Code to draw your sites again

691 $.clock.every(1000, () => $.ui.invalidate('ui.render'))

692 return next(e)

693})

694```

695 

696Claude Code exécute maintenant votre hook `ui.render` une fois par seconde. La minuterie s'arrête quand le module se recharge, et la nouvelle copie du module démarre la sienne.

697 

698<h3 id="how-often-a-site-can-redraw">

699 À quelle fréquence un site peut redessiner

700</h3>

701 

702Claude Code limite la fréquence à laquelle il redessine un site, donc votre mod peut appeler `$.ui.invalidate` aussi souvent que ses données changent. Le volet visible et la bande ont une limite plus élevée que les autres sites, et le [tableau des limites](/docs/fr/plugins/mods/reference#limits) contient les chiffres.

703 

704Les appels qui viennent plus vite que la limite sont combinés en un redessin. Ce redessin exécute votre hook une fois, et le hook lit vos données telles qu'elles sont à ce moment, donc la valeur la plus récente s'affiche et les valeurs entre les deux ne s'affichent pas. Une animation ne peut pas s'exécuter plus vite que la limite.

705 

706<h2 id="keep-state">

707 Conserver l'état

708</h2>

709 

710Un mod a trois endroits pour garder une valeur, et ils diffèrent dans la durée pendant laquelle la valeur dure : jusqu'à ce que le module se recharge, jusqu'à ce que la session se termine, ou d'une session à l'autre. Choisissez selon la durée pendant laquelle la valeur doit durer :

711 

712| La garder dans | Elle dure jusqu'à | L'utiliser pour |

713| :- | :- | :- |

714| Une variable au niveau du module | Le module se recharge, ce qui se produit chaque fois que vous enregistrez un fichier pendant le développement | Les valeurs que vous pouvez perdre, comme `tab` dans `hello-tabs` |

715| `$.state` | La session se termine, ou l'utilisateur exécute `/clear`, `/resume`, ou `/branch` | Les valeurs sur lesquelles un dessin dépend qui devraient survivre à un rechargement |

716| `$.store` | Votre mod la supprime, ou aucune session ne lit ou n'écrit le magasin pendant [`cleanupPeriodDays`](/docs/fr/settings-reference#cleanupperioddays). Le magasin est un magasin clé-valeur, enregistré en tant que fichier JSON de votre propre plugin sous `~/.claude/plugins/store/`. | Les paramètres, l'historique, tout ce que l'utilisateur s'attend à trouver la prochaine fois |

717 

718`$.store.get(key)` se résout en la valeur ou `undefined`, et `$.store.set(key, value)` prend n'importe quelle valeur JSON.

719 

720<h3 id="keep-a-value-in-state">

721 Garder une valeur dans `$.state`

722</h3>

723 

724`$.state` contient des valeurs pour la durée d'une session, et il redessine pour vous. C'est un état réactif : un hook `ui.render` qui lit une valeur s'y abonne, donc Claude Code redessine ce site chaque fois que vous écrivez la valeur, et vous n'appelez pas `$.ui.invalidate`. Une valeur dans `$.state` survit aussi à un rechargement du module, ce qu'une variable ne fait pas.

725 

726Pour le configurer, déclarez vos valeurs, pointez votre manifeste vers la déclaration, puis définissez et utilisez chaque valeur. Les exemples déplacent le `count` de `hello-tabs` dans `$.state`.

727 

728<h4 id="declare-the-values">

729 Déclarer les valeurs

730</h4>

731 

732Déclarez les valeurs dans un fichier de types. La clé externe est le nom de votre plugin, et chaque entrée en dessous est une valeur et son type. Enregistrez ceci sous `hello-tabs/types/index.d.ts` :

733 

734```typescript hello-tabs/types/index.d.ts theme={null}

735declare module 'claude-code' {

736 interface PluginState {

737 'hello-tabs': {

738 tab: 'one' | 'two'

739 count: number

740 }

741 }

742}

743```

744 

745<h4 id="point-the-manifest-at-the-declaration">

746 Pointer le manifeste vers la déclaration

747</h4>

748 

749Pour laisser `claude plugin validate` vérifier votre code par rapport à ce fichier, ajoutez un champ `types` au manifeste avec son chemin :

750 

751```json hello-tabs/.claude-plugin/plugin.json theme={null}

752{

753 "name": "hello-tabs",

754 "version": "0.1.0",

755 "description": "Opens a pane with two tabs and a counter",

756 "author": { "name": "Your Name" },

757 "types": "./types/index.d.ts"

758}

759```

760 

761<h4 id="define-read-and-write-a-value">

762 Définir, lire et écrire une valeur

763</h4>

764 

765Dans votre module, définissez chaque valeur avec une valeur par défaut, lisez-la pendant le dessin, et écrivez-la à partir d'un callback. `atom` nomme une valeur et sa valeur par défaut, `read` la retourne, et `update` l'écrit. Les trois aides appellent `$.state.get` et `$.state.set` pour vous :

766 

767```javascript theme={null}

768import { atom, read, update } from 'claude-code'

769 

770// At the top of the module: name the value and give its default

771const count = atom({ plugin: 'hello-tabs', key: 'count' }, 0)

772 

773// In the ui.render hook: read the value to draw it

774const n = await read($, count)

775 

776// In a Button: write a new value from the old one

777onPress: () => update($, count, (value) => value + 1)

778```

779 

780Parce que le hook `ui.render` a lu `count`, Claude Code exécute le hook à nouveau chaque fois que le bouton l'écrit.

781 

782Trois règles s'appliquent au code :

783 

784* **Écrivez `plugin` et `key` comme des chaînes littérales** : `claude plugin validate` les lit de votre source

785* **Déclarez chaque valeur dans le fichier de types** : sinon la validation échoue avec `hello-tabs.count is not declared`

786* **Écrivez à partir d'un callback ou du hook d'un autre événement** : un hook `ui.render` peut lire l'état et ne peut pas l'écrire, donc écrivez à partir de `onPress`, `onSubmit`, ou un hook pour un autre événement

787 

788<h4 id="change-hello-tabs-to-use-state">

789 Modifier `hello-tabs` pour utiliser `$.state`

790</h4>

791 

792Pour déplacer `count` dans `hello-tabs` dans `$.state`, modifiez chaque ligne qui l'utilise :

793 

794* **En haut du module** : ajoutez la ligne `import`, et remplacez `let count = 0` par la ligne `atom`

795* **Dans le hook `ui.render`** : ajoutez la ligne `read` avant `tabButton`, et dessinez `'Count: ' + n` dans le `Text`

796* **Dans le bouton Add one** : remplacez `onPress` par celui dans [Enregistrer à partir de plus d'une session](#save-from-more-than-one-session), qui enregistre le compte ainsi que l'écrit

797* **Dans le hook `session.start`** : remplacez les deux lignes qui lisent `saved` par l'appel `loadCount` de [Charger une valeur sauvegardée à nouveau après `/clear`](#load-a-saved-value-again-after-clear)

798 

799Gardez `redraw` pour les boutons d'onglets, car `tab` est toujours une variable.

800 

801<h3 id="load-a-saved-value-again-after-clear">

802 Charger une valeur sauvegardée à nouveau après `/clear`

803</h3>

804 

805Si votre mod copie une valeur sauvegardée de `$.store` dans `$.state` à `session.start`, il doit la copier à nouveau après `/clear`, `/resume`, ou `/branch`. Ces commandes remettent chaque valeur `$.state` à sa valeur par défaut, et `session.start` ne se déclenche pas à nouveau. [`classic.SessionStart`](/docs/fr/plugins/mods/events#hook-the-settings-hook-events) se déclenche après chacune d'elles, avec `e.source` défini sur `clear`, `resume`, ou `fork`, donc copiez la valeur à nouveau dans un hook dessus. Sinon votre dessin affiche la valeur par défaut, et un callback qui enregistre la valeur `$.state` écrit la valeur par défaut sur ce que vous avez stocké.

806 

807Ce code charge `count` à partir des deux hooks. Il s'appuie sur la version `$.state` de `hello-tabs`, où `count` est un atome et `update` est importé. Mettez `loadCount` au-dessus de `register`, et ajoutez l'appel `loadCount` au hook `session.start` que vous avez déjà. `classic.SessionStart` se déclenche aussi au démarrage et après compaction, ce qui ne réinitialise pas `$.state`, donc le filtre sur `source` garde le hook aux trois réinitialisations :

808 

809```javascript theme={null}

810// Copy the saved count from $.store into $.state, or 0 if nothing is saved

811async function loadCount($) {

812 const saved = Number((await $.store.get('count')) ?? 0)

813 await update($, count, () => saved)

814}

815 

816// Runs before your first prompt, and again after a reload

817on('session.start', async ($, e, next) => {

818 await loadCount($)

819 return next(e)

820})

821 

822// Runs again after /clear, /resume, and /branch, which reports fork

823on('classic.SessionStart', { source: ['clear', 'resume', 'fork'] }, async ($, e, next) => {

824 await loadCount($)

825 return next(e)

826})

827```

828 

829Avec les deux hooks en place, le volet affiche le compte sauvegardé après `/clear` et non `0`, et le prochain appui sur **Add one** ajoute au compte sauvegardé.

830 

831`loadCount` écrit la valeur stockée sur celle dans `$.state`, et `session.start` se déclenche à nouveau chaque fois que le module se recharge. Pour garder le magasin de prendre du retard, enregistrez à chaque changement, comme le bouton **Add one** le fait.

832 

833Pour vérifier le rechargement sans une session, [testez le dessin après `/clear`](/docs/fr/plugins/mods/test#test-a-drawing-after-clear).

834 

835<h3 id="save-from-more-than-one-session">

836 Enregistrer à partir de plus d'une session

837</h3>

838 

839Chaque session sur votre machine qui exécute votre mod partage un `$.store`. Un `get` suivi d'un `set` n'est pas atomique. Quand deux sessions lisent chacune une valeur, la modifient et l'écrivent, elles font la course, et la deuxième écriture remplace la première.

840 

841Deux choix rendent cela moins probable :

842 

843* **Donnez à chaque élément sa propre clé** : un `set` change seulement sa propre clé, donc les sessions qui écrivent des clés différentes ne s'écrasent pas mutuellement

844* **Lisez à nouveau juste avant d'écrire** : pour une valeur que plusieurs sessions changent, `get` la clé dans le callback et construisez la nouvelle valeur à partir de cela, pas à partir d'une copie que vous avez chargée à `session.start`. L'écriture d'une autre session est toujours perdue si elle atterrit entre votre `get` et votre `set`.

845 

846Ce bouton ajoute un à ce que le magasin contient maintenant, puis met à jour le dessin :

847 

848```javascript theme={null}

849onPress: async () => {

850 // Read what the store holds now, which another session may have changed

851 const saved = Number((await $.store.get('count')) ?? 0)

852 // Save the new count, then show it

853 await $.store.set('count', saved + 1)

854 await update($, count, () => saved + 1)

855}

856```

857 

858Si une deuxième session a appuyé sur son propre bouton trois fois depuis le démarrage de cette session, cet appui affiche et enregistre un compte qui inclut ces trois.

859 

860<h2 id="next-steps">

861 Prochaines étapes

862</h2>

863 

864* [Réagir aux événements](/docs/fr/plugins/mods/events) : alimentez votre dessin à partir d'appels d'outils et de tours

865* [Utiliser l'API des mods](/docs/fr/plugins/mods/api) : alimentez votre dessin à partir de minuteries et d'appels de modèle

866* [Tester un dessin](/docs/fr/plugins/mods/test#test-a-drawing) : appuyez sur vos boutons à partir d'un test, sur plus d'une surface

867* [Sites de rendu](/docs/fr/plugins/mods/reference#render-sites) et [éléments](/docs/fr/plugins/mods/reference#elements) : les props de chaque site et les props de chaque élément

plugins/mods/overview.md +269 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Aperçu des mods

6 

7> Ajoutez des volets, des commandes et des règles d'appel d'outils à Claude Code avec un mod. Découvrez ce qu'un mod peut faire, comment en créer ou en installer un, et où les mods s'exécutent.

8 

9Un mod est un [plugin](/docs/fr/plugins/overview) qui change l'apparence et le comportement de Claude Code. Il est composé de gestionnaires d'événements JavaScript ou TypeScript : Claude Code en appelle un quand un événement se produit, comme un appel d'outil, une invite soumise, ou une partie de l'interface en cours de dessin, et le gestionnaire peut observer l'événement, le modifier, ou le reprendre. Utilisez un mod pour ajouter votre propre fonctionnalité à Claude Code, comme un volet qui affiche le graphique de la saturation de votre contexte après chaque requête. Pour les fichiers d'un mod et un exemple complet, voir [Comment fonctionne un mod](#how-a-mod-works).

10 

11<Note>

12 Les [hooks](/docs/fr/hooks) existants de Claude Code s'exécutent également sur des événements, en tant que commande shell, requête HTTP ou invite que vous configurez dans un fichier de paramètres. Les gestionnaires d'un mod sont des fonctions qui s'exécutent à l'intérieur de Claude Code à la place. Claude Code appelle les deux types de hooks : sur ces pages, « hook » signifie le gestionnaire d'un mod, et le type de fichier de paramètres est un « settings hook ».

13</Note>

14 

15<h2 id="what-a-mod-can-do">

16 Ce qu'un mod peut faire

17</h2>

18 

19Les settings hooks, les skills, les lignes d'état et les serveurs MCP fonctionnent en dehors de Claude Code : chacun exécute un script, ou donne à Claude du texte ou des outils. Un mod s'exécute à l'intérieur de Claude Code, il peut donc faire des choses qu'ils ne peuvent pas :

20 

21* **Dessiner une interface que vous pouvez utiliser** : un volet à côté de la transcription ou une bande au-dessus de l'invite, avec des onglets, des boutons et des champs de texte. Voir [Dessiner dans l'interface](/docs/fr/plugins/mods/interface).

22* **Redessiner la propre interface de Claude Code** : remplacer ou remodeler les parties que Claude Code dessine lui-même, comme la ligne d'un appel d'outil, le spinner, ou la boîte de dialogue dans laquelle Claude pose des questions. Voir [Modifier ce que Claude Code dessine déjà](/docs/fr/plugins/mods/interface#change-what-claude-code-already-draws).

23* **Intervenir dans un appel d'outil ou une requête** : par exemple, maintenir un appel d'outil pendant que vous posez une question à l'utilisateur, y répondre sans exécuter l'outil, ou envoyer une requête à un modèle différent. Voir [Garder ou modifier un appel d'outil](/docs/fr/plugins/mods/events#guard-or-change-a-tool-call) et [Suivre un tour](/docs/fr/plugins/mods/events#follow-a-turn).

24* **Exécuter votre propre code sur une commande** : une `/command` qui exécute votre fonction immédiatement, sans tour Claude, même pendant que Claude travaille. Voir [Ajouter une commande ou un outil](/docs/fr/plugins/mods/api#add-a-command-or-a-tool).

25* **Partager des données entre les hooks** : les hooks d'un mod partagent les variables de son fichier, donc ce qu'un hook enregistre, un autre peut l'afficher. Par exemple, un hook peut compter les appels d'outils tandis qu'un autre affiche le compte à côté du spinner, ou l'un peut lire l'utilisation des tokens de chaque requête tandis qu'un autre la représente graphiquement dans un volet. Voir [Réagir aux événements](/docs/fr/plugins/mods/events).

26 

27Les mods fonctionnent dans le CLI Claude Code et dans l'onglet Code de l'application Claude Desktop. Voir [Où les mods s'exécutent](#where-mods-run) pour comprendre comment ils se comportent ailleurs, comme dans l'extension VS Code, `claude -p`, et les sessions cloud. Si un settings hook, une skill, ou un serveur MCP fait déjà ce dont vous avez besoin, [comparez-les](#compare-mods-settings-hooks-skills-and-mcp-servers) avant d'écrire un mod. Pour gérer les mods d'une organisation, voir [Gérer les mods de votre organisation](/docs/fr/plugins/mods/admin).

28 

29<h2 id="get-a-mod">

30 Obtenir un mod

31</h2>

32 

33Vous pouvez commencer avec un mod de trois façons :

34 

35* **Utiliser un que vous avez déjà** : certaines des propres fonctionnalités de Claude Code sont des mods, comme `/diff`. Voir [Mods intégrés à Claude Code](#mods-built-into-claude-code).

36* **En créer un** : décrivez ce que vous voulez dans une session Claude Code, et Claude écrit le mod. Voir [Demander un mod à Claude](/docs/fr/plugins/mods/create#ask-claude-for-a-mod). Pour apprendre comment fonctionne le code d'un mod, [écrivez-en un vous-même](/docs/fr/plugins/mods/create#write-a-mod-yourself).

37* **En installer un** : voir [Installer ou mettre à jour un mod](#install-or-update-a-mod)

38 

39<h3 id="install-or-update-a-mod">

40 Installer ou mettre à jour un mod

41</h3>

42 

43<Warning>

44 Un mod est du code qui s'exécute avec vos permissions. Il peut lire et écrire vos fichiers, démarrer des processus et faire des requêtes réseau. Installez les mods uniquement à partir d'auteurs et de marketplaces en qui vous avez confiance. Voir [Décider si vous faites confiance à un mod](#decide-whether-to-trust-a-mod).

45</Warning>

46 

47Un mod s'installe en tant que plugin, à partir d'une marketplace. Donnez le nom du plugin, un `@`, et le nom de la marketplace. Ces exemples installent un plugin nommé `token-chart` à partir d'une marketplace nommée `your-org` :

48 

49* Dans une session Claude Code, exécutez `/plugin install token-chart@your-org`.

50* Dans votre shell, exécutez `claude plugin install token-chart@your-org`.

51 

52[Installer les plugins](/docs/fr/plugins/install) couvre les marketplaces, les scopes, l'extension VS Code et l'application Desktop, et [garder les plugins à jour](/docs/fr/plugins/install#keep-plugins-updated), qui s'appliquent tous à un plugin contenant un mod sans modifications.

53 

54Si vous installez ou mettez à jour un mod à partir de votre shell pendant qu'une session est ouverte, exécutez `/reload-plugins` dans cette session pour le charger. Sinon, il se charge la prochaine fois que vous démarrez Claude Code.

55 

56<h2 id="decide-whether-to-trust-a-mod">

57 Décider si vous faites confiance à un mod

58</h2>

59 

60Un mod est du code qui s'exécute avec vos permissions, à l'intérieur de Claude Code. Installez les mods uniquement à partir d'auteurs et de [marketplaces en qui vous avez confiance](/docs/fr/plugins/security).

61 

62<h3 id="what-a-mod-can-reach">

63 Ce qu'un mod peut atteindre

64</h3>

65 

66Un mod s'exécute avec vos permissions, donc avant d'en installer un, sachez ce à quoi il a accès. Une fois qu'il se charge, un mod peut :

67 

68* **Agir sur votre machine en tant que vous** : lire et écrire des fichiers n'importe où où votre compte utilisateur peut, démarrer des programmes et faire des requêtes réseau

69* **Lire vos secrets** : les variables d'environnement et les fichiers de paramètres, y compris une clé API que vous gardez dans l'un ou l'autre

70* **Voir votre session** : chaque invite que vous envoyez et chaque appel d'outil que Claude fait

71* **Modifier votre session** : réécrire une invite ou un appel d'outil, soumettre une invite comme si vous l'aviez tapée, ou envoyer un message à une autre de vos sessions

72* **Agir sans vous demander** : approuver un appel d'outil avant que vous ne soyez invité

73* **Dépenser votre utilisation** : appeler un modèle sur votre plan ou clé API

74 

75Un mod qui approuve les appels d'outils peut approuver un appel qu'une règle `ask` demanderait, ou qu'un de vos propres hooks `PreToolUse` a bloqué. [Étendre les permissions avec les hooks](/docs/fr/permissions#extend-permissions-with-hooks) énumère ce qu'un tel mod peut approuver, y compris quand il peut approuver un appel qu'une règle `deny` refuse.

76 

77Un mod peut remodeler une grande partie de l'interface de Claude Code, mais pas l'invite de permission. Il ne peut pas modifier ce qu'une invite vous montre.

78 

79<h3 id="list-what-a-mod-does-before-you-install-one">

80 Énumérer ce qu'un mod fait avant de l'installer

81</h3>

82 

83Avant d'installer un mod, vous pouvez énumérer les événements sur lesquels il se branche et ce qu'il demande à Claude Code de faire, comme lire un fichier ou faire une requête réseau, sans l'exécuter. Obtenez d'abord les fichiers du plugin, par exemple en clonant son référentiel. Ensuite, dans votre shell, exécutez `claude plugin validate` sur le répertoire du plugin :

84 

85```bash theme={null}

86claude plugin validate ./some-mod

87```

88 

89Les lignes `hooks:` et `calls:` dans la sortie énumèrent les événements que le mod gère et ce qu'il demande à Claude Code de faire. [Examiner ce qu'un mod peut faire](/docs/fr/plugins/mods/admin#review-what-a-mod-can-do) montre la sortie et les appels à rechercher.

90 

91<h2 id="turn-mods-on-or-off">

92 Activer ou désactiver les mods

93</h2>

94 

95Les mods nécessitent Claude Code v2.1.287 ou version ultérieure, et ils sont activés par défaut. Dans votre shell, exécutez `claude --version` pour vérifier, et mettez à jour Claude Code si le vôtre est plus ancien.

96 

97Pour désactiver les mods, choisissez combien en arrêter et pour combien de temps. Pour les réactiver, annulez le même changement :

98 

99* **Un mod** : désactivez ou désinstallez son plugin à partir de l'[onglet **Installé** dans `/plugin`](/docs/fr/plugins/install#manage-installed-plugins)

100* **Chaque mod installé, pour une session** : démarrez Claude Code avec [`--safe-mode`](/docs/fr/cli-reference#cli-flags), qui laisse également de côté vos autres personnalisations

101* **Chaque mod que vous avez installé, dans chaque session** : définissez [`"disableAllHooks": true`](/docs/fr/settings-reference#disableallhooks) dans `~/.claude/settings.json`. Vos settings hooks et votre ligne d'état personnalisée s'arrêtent aussi. Ce que votre organisation gère continue de fonctionner.

102 

103Si vous utilisez Claude Code via une organisation, un administrateur peut également limiter les mods qui se chargent. Les administrateurs commencent à [Empêcher les mods installés par l'utilisateur de se charger](/docs/fr/plugins/mods/admin#stop-user-installed-mods-from-loading).

104 

105Pour savoir si les mods peuvent se charger pour vous, voir [Vérifier si les mods peuvent se charger](/docs/fr/plugins/mods/troubleshoot#check-whether-mods-can-load).

106 

107<Note>

108 Si vous avez défini `CLAUDE_CODE_ENABLE_FUNCTION_HOOKS` lors de l'accès anticipé, supprimez-le. Claude Code v2.1.287 et versions ultérieures l'ignorent, donc le définir à `0` ne garde pas les mods désactivés.

109</Note>

110 

111<h3 id="see-which-mods-a-session-loaded">

112 Voir quels mods une session a chargés

113</h3>

114 

115Pour voir quels mods une session de terminal a chargés, exécutez `/plugin` à l'invite Claude Code. Une ligne atténuée sous les onglets donne le compte et les noms, comme `1 mod active · first-mod`. Si un mod que vous avez installé n'est pas nommé là, voir [Découvrir pourquoi un mod ne fait rien](/docs/fr/plugins/mods/troubleshoot#find-out-why-a-mod-does-nothing).

116 

117<h2 id="how-a-mod-works">

118 Comment fonctionne un mod

119</h2>

120 

121Un mod est un [plugin](/docs/fr/plugins/overview) dont le code enregistre les gestionnaires d'événements, appelés hooks. Claude Code exécute un hook quand son événement se produit, comme quand Claude appelle un outil ou quand le spinner est dessiné. Un petit mod a trois fichiers :

122 

123```text theme={null}

124first-mod/

125├── .claude-plugin/

126│ └── plugin.json

127└── hooks/

128 ├── hooks.json

129 └── register.js

130```

131 

132* **`plugin.json`** : le [manifeste](/docs/fr/plugins/manifest-reference) du plugin

133* **`hooks.json`** : [pointe vers votre fichier de code](/docs/fr/plugins/mods/reference#files)

134* **`register.js`** : [votre code](/docs/fr/plugins/mods/create#write-a-mod-yourself), appelé le module hooks. Il dit à Claude Code sur quels événements exécuter vos fonctions.

135 

136Ceci est un `register.js` complet. Il compte les appels d'outils que Claude fait et affiche le compte à côté du spinner pendant que Claude travaille, comme dans `Thinking · tool calls: 3…`.

137 

138```javascript hooks/register.js theme={null}

139// Le compte, partagé par les deux hooks ci-dessous

140let calls = 0

141 

142// Claude Code appelle ceci une fois quand le mod se charge

143export function register(on) {

144 // S'exécute chaque fois que Claude est sur le point d'utiliser un outil

145 on('tool.call', async ($, e, next) => {

146 calls += 1

147 // Demandez à Claude Code de redessiner l'interface, pour que le nouveau compte s'affiche

148 $.ui.invalidate('ui.render')

149 // Laissez l'outil s'exécuter comme d'habitude

150 return next(e)

151 })

152 

153 // S'exécute chaque fois que Claude Code dessine le spinner

154 on('ui.render', { component: 'Spinner' }, async ($, e, next) => {

155 // Gardez le spinner de Claude Code, avec le compte ajouté après son mot

156 return next({ ...e, props: { ...e.props, suffix: ' · tool calls: ' + calls + '…' } })

157 })

158}

159```

160 

161Le fichier enregistre deux hooks, et les deux utilisent la variable `calls` en haut :

162 

163* **Le hook [`tool.call`](/docs/fr/plugins/mods/reference#tools)** s'exécute chaque fois que Claude est sur le point d'utiliser un outil. Il ajoute un à `calls`, demande à Claude Code de redessiner l'interface, et laisse l'outil s'exécuter comme d'habitude.

164* **Le hook [`ui.render`](/docs/fr/plugins/mods/reference#interface)** s'exécute chaque fois que Claude Code dessine le spinner. Il garde le propre spinner de Claude Code et ajoute le compte après le mot.

165 

166Cet enregistrement montre le mod en action. Regardez la ligne du spinner au-dessus de la boîte d'invite : pendant que Claude énumère un répertoire et lit deux fichiers, il lit `Thinking · tool calls: 1…`, puis `2…`, puis `3…`.

167 

168<Frame>

169 <video autoPlay muted loop playsInline controls className="w-full dark:hidden" src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-overview-light.mp4?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=00a18aa0743b59a700f0275ce226e6d1" aria-label="Dans une session Claude Code, l'invite « list the files here and read the README » est tapée et envoyée. Pendant que Claude travaille, le spinner lit « Thinking · tool calls: 1 », puis 2, puis 3, alors que Claude énumère les fichiers et en lit deux." data-path="images/mods-overview-light.mp4" />

170 

171 <video autoPlay muted loop playsInline controls className="w-full hidden dark:block" src="https://mintcdn.com/claude-code/dgiVO_Od1X1faduV/images/mods-overview-dark.mp4?fit=max&auto=format&n=dgiVO_Od1X1faduV&q=85&s=d5223da2fef16ceaaa214a36d72c0536" aria-label="Dans une session Claude Code, l'invite « list the files here and read the README » est tapée et envoyée. Pendant que Claude travaille, le spinner lit « Thinking · tool calls: 1 », puis 2, puis 3, alors que Claude énumère les fichiers et en lit deux." data-path="images/mods-overview-dark.mp4" />

172</Frame>

173 

174<h3 id="what-a-hook-can-do-with-an-event">

175 Ce qu'un hook peut faire avec un événement

176</h3>

177 

178Claude Code exécute votre hook avant d'agir sur l'événement, donc le hook décide ce qui se passe ensuite. Il a trois choix :

179 

180* **Observer** : noter ce qui se passe et le laisser continuer inchangé, comme le fait le hook `tool.call` dans l'exemple

181* **Réécrire** : modifier l'événement avant qu'il ne continue, comme le fait le hook `ui.render` quand il ajoute le compte au spinner

182* **Répondre** : gérer l'événement lui-même, pour que le comportement habituel ne s'exécute pas, comme refuser une commande

183 

184Pour faire quoi que ce soit en dehors de son propre code, comme dessiner, ajouter une commande, appeler un modèle, lire un fichier, démarrer un processus ou faire une requête réseau, un hook appelle l'API des mods. Un hook n'a pas d'autre moyen de faire ces choses, c'est pourquoi Claude Code peut [énumérer ce qu'un mod fait](#list-what-a-mod-does-before-you-install-one) avant de l'installer.

185 

186Pour le code derrière chaque choix, voir [Réagir aux événements](/docs/fr/plugins/mods/events#how-a-hook-handles-an-event). Pour ce qu'un hook peut appeler, voir [Utiliser l'API des mods](/docs/fr/plugins/mods/api).

187 

188<h3 id="where-mods-run">

189 Où les mods s'exécutent

190</h3>

191 

192Les hooks d'un mod s'exécutent dans chaque type de session qui charge le plugin. Le dessin est plus étroit : seul le terminal et l'application Desktop affichent les volets, les bandes et les lignes remplacées d'un mod. Ce tableau énumère chaque endroit où vous pourriez exécuter Claude Code :

193 

194| Où vous exécutez Claude Code | Les hooks s'exécutent | Ce que le mod dessine apparaît |

195| :- | :- | :- |

196| `claude` dans un terminal, y compris le terminal intégré d'un éditeur et le plugin JetBrains | Oui | Oui |

197| L'onglet Code de l'application Desktop, sauf dans une session WSL | Oui | Oui, sauf les éléments que le [tableau des éléments](/docs/fr/plugins/mods/reference#elements) marque comme terminal uniquement |

198| Une [session WSL](/docs/fr/desktop-wsl) dans l'application Desktop | Non, car les plugins ne sont pas disponibles dans les sessions WSL | Non |

199| Le panneau de chat de l'extension VS Code | Oui | Non |

200| `claude -p` et le [SDK Agent](/docs/fr/agent-sdk/overview) | Oui | Non |

201| [Contrôle à distance](/docs/fr/remote-control) à partir de claude.ai ou de l'application mobile | Oui, dans la session sur votre machine | Dans le terminal sur votre machine |

202| Une [session cloud](/docs/fr/claude-code-on-the-web) | Oui, pour un plugin qui [atteint la session cloud](/docs/fr/cloud-environments#what-carries-over-from-your-setup) | Non |

203 

204Un mod qui dessine peut vérifier dans quelle application il s'exécute et revenir à une ligne dans la transcription ou à la réponse textuelle d'une commande où rien ne dessine.

205 

206<h2 id="control-mods-for-your-organization">

207 Contrôler les mods de votre organisation

208</h2>

209 

210Les administrateurs décident si les mods s'exécutent et lesquels, via les [paramètres gérés](/docs/fr/managed-settings). [Gérer les mods de votre organisation](/docs/fr/plugins/mods/admin) couvre ce qui se passe par défaut, comment examiner un mod et comment appliquer une politique avec un mod de votre propre.

211 

212<h2 id="compare-mods-settings-hooks-skills-and-mcp-servers">

213 Comparer les mods, les settings hooks, les skills et les serveurs MCP

214</h2>

215 

216Les mods, les settings hooks, les skills et les serveurs MCP se chevauchent. Ce tableau montre ce que chacun est et quand le choisir.

217 

218| | Mod | Settings hook | Skill | Serveur MCP |

219| :- | :- | :- | :- | :- |

220| Ce que c'est | Des fonctions dans un plugin que Claude Code appelle dans son propre processus | Une commande shell, une requête HTTP ou une invite que Claude Code exécute sur un événement du cycle de vie | Un fichier `SKILL.md` d'instructions que Claude lit | Un processus ou un service externe qui donne des outils à Claude |

221| Ce qu'il peut modifier | Les appels d'outils, les invites, les commandes, les tours et ce que l'interface dessine | Si un appel d'outil ou une invite continue, les arguments et le résultat d'un appel d'outil, et le contexte ajouté pour Claude | Ce que Claude sait et fait | Les outils que Claude a |

222| Peut-il dessiner dans l'interface | Oui | Non | Non | Non |

223| Ce que vous écrivez | JavaScript ou TypeScript | Un script et une entrée `settings.json` | Markdown | Un serveur dans n'importe quel langage |

224| Choisissez-le quand | Vous voulez un volet, une bande au-dessus de l'invite, une commande personnalisée, ou réécrire un événement | Vous voulez bloquer, autoriser ou enregistrer un événement avec un script que vous avez déjà | Vous continuez à coller les mêmes instructions dans le chat | Claude doit atteindre un système externe |

225 

226Chacun des autres a sa propre page : [Hooks](/docs/fr/hooks), [Skills](/docs/fr/skills) et [MCP](/docs/fr/mcp). Un plugin peut contenir les quatre, donc un mod peut être livré dans le même plugin qu'une skill et un serveur MCP.

227 

228<h2 id="mods-built-into-claude-code">

229 Mods intégrés à Claude Code

230</h2>

231 

232Certaines fonctionnalités propres à Claude Code sont des mods. Pour voir ceux que votre session possède, exécutez `/plugin` à l'invite Claude Code et allez à l'onglet **Installed**, qui les répertorie sous **Built-in**. Vous ne pouvez pas mettre à jour ou désinstaller un mod intégré, et la dernière colonne du tableau indique comment désactiver chacun d'eux. La ligne [`mods active`](#see-which-mods-a-session-loaded) exclut les mods intégrés.

233 

234Ce tableau répertorie chaque entrée par le nom que `/plugin` affiche :

235 

236| Nom dans `/plugin` | Ce qu'il fait | Où il est activé | Comment le désactiver |

237| :- | :- | :- | :- |

238| `cc-plugin-agents-md` | Charge `AGENTS.md` comme instructions de projet | Chaque session, sauf [celles qui ne peuvent pas lire `AGENTS.md`](/docs/fr/memory#when-agents-md-support-is-unavailable) | Désactivez-le dans `/plugin`, ou [choisissez les fichiers d'instructions à charger](/docs/fr/memory#choose-which-instruction-files-load) |

239| `cc-plugin-diff` | Prend en charge [`/diff`](/docs/fr/interactive-mode#review-changes-with-%2Fdiff) et dessine son volet | Sessions de terminal interactif | Désactivez-le dans `/plugin`. `/diff` reste, et la version intégrée de Claude Code de la commande y répond. |

240| `cc-plugin-plugin-authoring` | Donne à Claude la [`plugin-authoring` skill](/docs/fr/plugins/mods/create#ask-claude-for-a-mod) pour écrire des mods. Elle contient une skill et aucun code de mod. | Sauf si Anthropic a désactivé les mods installés à distance | Désactivez-le dans `/plugin` |

241| `cc-plugin-sec-default` | Protège ce que votre organisation gère des mods qu'un utilisateur installe | [Où la protection se charge](/docs/fr/plugins/mods/admin#know-what-happens-by-default) | Vous ne pouvez pas. Un administrateur [définit l'ordre](/docs/fr/plugins/mods/admin#install-your-organizations-mods) dans les paramètres gérés |

242| `cc-plugin-telemetry` | Envoie les enregistrements d'analyse que Claude Code et ses mods intégrés enregistrent | Partout où les analyses propres à Claude Code sont activées | Désactivez-le dans `/plugin`, ou désactivez les analyses, par exemple avec [`DISABLE_TELEMETRY`](/docs/fr/env-vars) |

243| `cc-plugin-you-should-know` | Exécute un agent auxiliaire qui vous protège pendant que Claude travaille sur des tâches plus longues. Quand il trouve quelque chose qui vaut la peine de savoir et que vous pourriez manquer, il vous affiche une note au-dessus de l'invite. | Désactivé par défaut. Répertorié dans `/plugin` -> **Installed** -> **Show disabled** s'il est disponible pour votre organisation. Activez avec [`/plugin enable cc-plugin-you-should-know@builtin`](/docs/fr/plugins/cli-reference#plugin-in-a-session). | Désactivez-le dans `/plugin` |

244 

245Les paramètres et les drapeaux qui arrêtent les mods installés, tels que `disableAllHooks`, `--bare` et `--safe-mode`, n'arrêtent pas les mods intégrés.

246 

247<h3 id="read-the-source-of-built-in-mods">

248 Lire le code source des mods intégrés

249</h3>

250 

251Le code source de quatre de ces mods est public dans le [répertoire `mods` du référentiel Claude Code](https://github.com/anthropics/claude-code/tree/main/mods). Chacun est un plugin complet avec son module hooks et ses tests :

252 

253* [`diff`](https://github.com/anthropics/claude-code/tree/main/mods/diff) : le volet `/diff`, avec des boutons liés à des actions clavier et le défilement que le mod gère lui-même

254* [`agents-md`](https://github.com/anthropics/claude-code/tree/main/mods/agents-md) : charge `AGENTS.md` comme instructions de projet, avec une option [`userConfig`](/docs/fr/plugins/components#user-configuration)

255* [`sec-default`](https://github.com/anthropics/claude-code/tree/main/mods/sec-default) : la protection décrite dans [Know what happens by default](/docs/fr/plugins/mods/admin#know-what-happens-by-default), un modèle pour un mod qui applique la politique

256* [`telemetry`](https://github.com/anthropics/claude-code/tree/main/mods/telemetry) : ajoute des méthodes que d'autres mods peuvent appeler, et expédie leurs types

257 

258<h2 id="next-steps">

259 Étapes suivantes

260</h2>

261 

262* [Créer un mod](/docs/fr/plugins/mods/create) : en construire un qui compte les appels d'outils, affiche le compte à côté du spinner, et ajoute une commande, et apprenez la boucle d'édition et de rechargement

263* [Dessiner dans l'interface](/docs/fr/plugins/mods/interface) : volets, la bande au-dessus de l'invite, boutons, champs de texte et état

264* [Réagir aux événements](/docs/fr/plugins/mods/events) : appels d'outils, invites, tours et l'ordre dans lequel les mods s'exécutent

265* [Utiliser l'API des mods](/docs/fr/plugins/mods/api) : commandes, outils, appels de modèles, minuteurs et fichiers

266* [Tester un mod](/docs/fr/plugins/mods/test) : tests automatisés qui s'exécutent sans session

267* [Dépanner un mod](/docs/fr/plugins/mods/troubleshoot) : les raisons pour lesquelles un mod ne fait rien et le journal de débogage

268* [Gérer les mods de votre organisation](/docs/fr/plugins/mods/admin) : valeurs par défaut, paramètres gérés, examen d'un mod et mods de politique

269* [Référence des mods](/docs/fr/plugins/mods/reference) : chaque événement, méthode, élément et limite

plugins/mods/test.md +422 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Tester un mod

6 

7> Écrivez des tests automatisés pour un mod Claude Code qui lèvent des événements, remplacent les réponses de Claude Code et appuient sur des boutons, sans session, connexion ou réseau.

8 

9Vous pouvez écrire des tests automatisés pour un mod et les exécuter depuis votre shell avec [`claude plugin test`](/docs/fr/plugins/mods/reference#commands). Un test lève les événements que vos hooks gèrent et vérifie ce que les hooks ont fait, afin que vous détectiez un problème avant qu'il n'atteigne une session. Le premier exemple teste le mod de [Créer un mod](/docs/fr/plugins/mods/create).

10 

11<h2 id="write-a-test">

12 Écrire un test

13</h2>

14 

15Un test charge votre mod, envoie des événements via ses hooks de la manière que Claude Code le ferait, et vérifie ce que les hooks ont fait, sans session, connexion ou réseau. Vous exécutez les tests depuis votre shell avec `claude plugin test`, et chaque fichier de test importe le kit de test, une bibliothèque de test dans le module `claude-code/testing`.

16 

17Donnez à chaque fichier de test un nom qui se termine par `.test.ts`, comme `first-mod.test.ts`, et enregistrez-le n'importe où dans le répertoire du plugin. Chaque fichier de test a besoin d'au moins un `test()`, sinon l'exécution échoue avec `declares no test(): nothing ran`. Un fichier de test peut importer vos propres fichiers du mod et les helpers `.ts` frères, afin que vous puissiez tester les fonctions simples, comme les règles d'un jeu, sans le kit.

18 

19Ce test lève deux appels d'outils, exécute la commande `/tally` de [Créer un mod](/docs/fr/plugins/mods/create), et vérifie que la réponse compte les deux. Sa première ligne est un [stub](#stub-what-claude-code-would-answer), qui répond aux appels d'outils à la place de Claude Code. Enregistrez-le sous `first-mod/tests/first-mod.test.ts` :

20 

21```typescript first-mod/tests/first-mod.test.ts theme={null}

22import { expect, test } from 'claude-code/testing'

23 

24test('/tally reports the tool calls the mod has seen', async ($, on) => {

25 // Answer each tool call in Claude Code's place, so no tool runs

26 on('tool.call', () => ({ result: 'ok' }))

27 

28 // Raise two tool calls, which the mod's tool.call hook counts

29 await $.tool.call({ tool: 'Bash', command: 'ls' })

30 await $.tool.call({ tool: 'Read', file_path: 'README.md' })

31 

32 // Run /tally and check the text its hook returns

33 const answer = await $.command.run({ command: 'tally', args: '' })

34 expect(answer.text).toBe('Claude has made 2 tool calls since this mod loaded')

35})

36```

37 

38Dans votre shell, exécutez les tests depuis le répertoire `first-mod` :

39 

40```bash theme={null}

41claude plugin test

42```

43 

44La sortie nomme chaque test et s'il a réussi, avec des timings qui varient d'une exécution à l'autre :

45 

46```text theme={null}

47tests/first-mod.test.ts:

48(pass) /tally reports the tool calls the mod has seen [22.87ms]

49 

50 1 pass

51 0 fail

52Ran 1 test across 1 file. [0.19s]

53```

54 

55Chaque `$.tool.call` a traversé le hook [`tool.call`](/docs/fr/plugins/mods/reference#tools) du mod, qui a ajouté un à son compte et a transmis l'appel au stub. Aucun `ls` n'a été exécuté et aucun fichier n'a été lu. `$.command.run` a ensuite accédé au hook [`command.run`](/docs/fr/plugins/mods/reference#commands-and-configuration) du mod, et `answer` est l'objet que ce hook a retourné.

56 

57La commande se termine avec le statut 1 quand un test échoue, afin qu'elle fonctionne dans CI. Si vos propres mods ne peuvent pas se charger dans le shell qui l'exécute, il imprime une ligne commençant par `claude plugin test: hooks modules are turned off` avec la raison, et se termine avec le statut 1.

58 

59<h3 id="stub-what-claude-code-would-answer">

60 Remplacer ce que Claude Code répondrait

61</h3>

62 

63Aucun modèle, magasin ou outil ne s'exécute dans un test, donc partout où votre mod s'attend à ce que Claude Code réponde, le test fournit la réponse avec un stub. Une fonction de test reçoit deux arguments pour cela :

64 

65* **`$`** : le propre `$` du test, qui se tient à la place de Claude Code. Ce n'est pas l'[API des mods](/docs/fr/plugins/mods/reference#mods-api-methods) qu'un hook reçoit. Chacune de ses méthodes lève l'événement du même nom, l'envoie via les hooks de votre mod, et se résout au résultat : `$.tool.call({ tool: 'Bash', command: 'ls' })` lève `tool.call`. `$.command.run`, `$.prompt.submit`, `$.session.start`, et `$.turn.complete` fonctionnent de la même manière, et `$.classic.Stop` et les autres méthodes `$.classic` lèvent un [événement de hook de paramètres](/docs/fr/plugins/mods/events#hook-the-settings-hook-events). Un test ne peut pas lever directement un appel d'API des mods comme `ui.close`. Déclenchez-le via votre mod, par exemple en appuyant sur le bouton qui ferme le volet.

66* **`on`** : appelez-le pour enregistrer des stubs, qui sont des hooks qui répondent à la place de Claude Code. Nommez un stub pour un appel d'API des mods sans le `$.`, afin qu'un stub enregistré comme `store.get` réponde à votre mod `$.store.get`. Quand votre mod appelle [`$.model.complete`](/docs/fr/plugins/mods/api#call-a-model) ou [`$.store.get`](/docs/fr/plugins/mods/interface#keep-state), un stub fournit la réponse.

67 

68Cet exemple remplace un appel de modèle. Le hook appartient à un mod nommé `grader`, et gère une commande `/grade` qui envoie une phrase à un modèle et rapporte si la réponse commence par `PASS`. Le fichier ne contient que le hook testé, donc le mod a également besoin d'un `plugin.json` et d'un `hooks.json`, comme dans [Créer un mod](/docs/fr/plugins/mods/create#write-a-mod-yourself). Pour taper `/grade` dans une session, le mod doit également [enregistrer la commande](/docs/fr/plugins/mods/api#add-a-command) :

69 

70```javascript grader/hooks/register.js theme={null}

71export function register(on) {

72 on('command.run', { command: 'grade' }, async ($, e) => {

73 // e.args is the text typed after /grade

74 const reply = await $.model.complete({

75 model: 'haiku',

76 system: 'Grade the sentence. Start your reply with PASS or FAIL.',

77 prompt: e.args,

78 })

79 const passed = reply.isAnswered && reply.text.startsWith('PASS')

80 return { text: passed ? 'Passed' : 'Try again' }

81 })

82}

83```

84 

85Ce test remplace l'appel de modèle pour vérifier ce que le hook fait avec une réponse réussie :

86 

87```typescript grader/tests/grader.test.ts theme={null}

88import { expect, test } from 'claude-code/testing'

89 

90test('a passing grade is reported', async ($, on) => {

91 // Answer the mod's $.model.complete call with a fixed reply, so no model runs

92 on('model.complete', () => ({

93 value: {

94 isAnswered: true,

95 text: 'PASS\nNice sentence.',

96 usage: { input_tokens: 10, output_tokens: 5, cache_read_input_tokens: 0, cache_creation_input_tokens: 0 },

97 },

98 }))

99 

100 // Run /grade, which makes the mod call the model

101 const answer = await $.command.run({ command: 'grade', args: 'The cat sat on the mat.' })

102 expect(answer.text).toBe('Passed')

103})

104```

105 

106Le test réussit parce que le `reply` du hook est l'objet sous `value`, dont le `text` commence par `PASS`. Pour vérifier l'autre branche, ajoutez un deuxième test dont le stub retourne un `text` qui commence par `FAIL`, et attendez `Try again`.

107 

108Un stub pour un appel d'API des mods retourne un objet avec un champ `value`, qui contient ce que l'appel se résout en dans votre mod : `{ value: 7 }` fait que `$.store.get` se résout à `7`. Un stub pour l'un des événements de Claude Code, comme [`turn.step`](/docs/fr/plugins/mods/reference#turns) ou `tool.call`, retourne le propre résultat de cet événement, comme `{ result: 'ok' }`. `$.session.send` et `$.prompt.fill` prennent également le résultat de l'événement, comme le montre le tableau. [Rechercher ce qu'un stub retourne](#look-up-what-a-stub-returns) montre quelle forme chaque nom courant prend. Deux erreurs signifient qu'un stub est incorrect ou manquant. La sortie d'un test échoué inclut un bloc intitulé `the engine reported:`, et chaque erreur y apparaît :

109 

110* `returned neither { value } nor { deny }` : un stub pour un appel d'API des mods a retourné une valeur nue

111* `no implementation for` suivi d'un nom : votre mod a fait cet appel et aucun stub ne le répond

112 

113Le kit exporte également des mocks en mémoire qui répondent à un espace de noms entier pour vous. `mock.clock(on)` répond à [`$.clock`](/docs/fr/plugins/mods/api#run-work-in-the-background), `mock.store(on, { count: 7 })` répond à `$.store` à partir d'un magasin qui commence par ces entrées, et `mock.env(on, { CI: 'true' })` répond à `$.env.get` à partir de ces variables. `mock.clock` retourne une horloge simulée que votre test avance, afin qu'un test d'une minuterie n'attende pas. `mock.store` ne retourne rien, donc pour vérifier ce que votre mod a enregistré, écrivez vous-même les deux stubs `store` comme le fait le [test de dessin](#test-a-drawing).

114 

115<h3 id="follow-the-test-kit’s-rules">

116 Suivre les règles du kit de test

117</h3>

118 

119Le kit de test a quelques règles qui lui sont propres, et en enfreindre une produit les erreurs que les nouveaux auteurs de tests rencontrent en premier :

120 

121* **Enregistrez chaque stub avant le premier appel du test sur `$`.** Appeler `on` après cela lève une erreur comme `on("ui.render") after the test first called $`.

122 

123* **[`session.start`](/docs/fr/plugins/mods/reference#session) ne s'exécute pas par lui-même.** Chaque test commence avec votre module fraîchement chargé et aucun de ses hooks appelés, donc les variables au niveau du module conservent leurs valeurs initiales. Si un hook dépend de ce que `session.start` configure, levez-le d'abord :

124 

125 ```typescript theme={null}

126 // Answer the event after your hook passes it on with next(e)

127 on('session.start', () => ({ cwd: '/work' }))

128 // Answer the $.command.register call your hook makes

129 on('command.register', () => ({ value: undefined }))

130 // Raise the event, which runs your session.start hook

131 await $.session.start({ surface: 'terminal', isInteractive: true, cwd: '/work' })

132 ```

133 

134 Le deuxième stub répond à l'appel `$.command.register` qu'un hook `session.start` comme celui du [tutoriel](/docs/fr/plugins/mods/create#write-a-mod-yourself) fait. Sans lui, cet appel rejette avec `no implementation for command.register` et le kit saute votre hook, donc rien après l'appel dans le hook ne s'exécute. Le test n'échoue pas à ce stade. Le hook ignoré est listé sous `the engine reported:` uniquement si une vérification ultérieure échoue.

135 

136* **Un hook qui retourne `next(e)` a besoin d'un stub pour répondre.** Quand votre hook [`ui.render`](/docs/fr/plugins/mods/reference#interface) retourne `next(e)`, par exemple pour ne rien dessiner pendant que Claude est inactif, [le monter](#test-a-drawing) échoue avec `no implementation for ui.render`. Enregistrez un stub qui retourne un élément en tant que données simples :

137 

138 ```typescript theme={null}

139 // Stands for what Claude Code would draw at the site

140 on('ui.render', () => ({ type: 'Text', props: {}, children: ['drawn by Claude Code'] }))

141 ```

142 

143 Avec le stub enregistré, le montage réussit, et `ui.find({ type: 'Text' })` retourne cet élément chaque fois que votre hook a retourné `next(e)`.

144 

145* **Un stub pour `turn.step` est un générateur asynchrone**, et le test lit le flux jusqu'à la fin pour obtenir le résultat :

146 

147 ```typescript theme={null}

148 on('turn.step', async function* ($, e) {

149 // Each yield is one piece of the model's streamed reply

150 yield { kind: 'text', index: 0, text: 'ok' }

151 // The return value is the result of the whole request

152 return { turnId: e.turnId, index: e.index, answer: 'ok', toolUses: [], stopReason: 'end_turn', usage: null }

153 })

154 

155 // Raise one request to the model, which runs your turn.step hook

156 const stream = $.turn.step({ turnId: 't', index: 0, model: 'claude-test', messageCount: 1 })

157 // Read every piece until the stream says it's done

158 let step = await stream.next()

159 while (step.done !== true) step = await stream.next()

160 const result = step.value

161 ```

162 

163 Quand la boucle se termine, `result` est l'objet que le stub a retourné, après que votre hook `turn.step` ait eu la chance de le modifier. Ici `result.answer` est `'ok'`.

164 

165* **Levez un appel d'outil avec le nom et les arguments de l'outil en tant que champs**, comme `await $.tool.call({ tool: 'Bash', command: 'ls' })`, et enregistrez un stub `tool.call` qui retourne `{ result }`.

166 

167<h3 id="look-up-what-a-stub-returns">

168 Rechercher ce qu'un stub retourne

169</h3>

170 

171Chaque appel d'API des mods que votre mod fait dans un test a besoin d'un stub qui répond à la place de Claude Code, sauf les quelques-uns que le kit répond lui-même : les appels [`$.ui.invalidate`](/docs/fr/plugins/mods/interface#redraw-when-something-changes) et [`$.state`](/docs/fr/plugins/mods/interface#keep-state). Pour les appels `$.clock`, utilisez `mock.clock(on)`, sinon votre mod `$.clock.now()` échoue avec `no implementation for clock.now`.

172 

173Ce tableau liste ceux que les mods utilisent le plus. La première colonne est l'appel que votre mod fait ou l'événement qu'il transmet avec `next(e)`. La deuxième est la fonction à passer à `on` sous ce nom, afin que la ligne `$.store.get` devienne `on('store.get', ($, e) => ({ value: saved.get(e.key) }))`. Un `'...'` dans un stub marque le texte pour vous à remplir :

174 

175| Votre mod appelle ou transmet | Stub |

176| :- | :- |

177| `$.command.register`, `$.tool.register`, `$.ui.toast`, `$.ui.log`, `$.ui.status`, `$.ui.close`, `$.store.set` | `() => ({ value: undefined })`. Pour `ui.toast` et `ui.log`, le texte est `e.text`. |

178| `$.store.get` | `($, e) => ({ value: saved.get(e.key) })` |

179| `$.fs.read` | `($, e) => ({ value: e.path.endsWith('notes.md') ? '# Notes' : '' })`. `e.path` arrive en tant que chemin absolu, donc comparez avec `endsWith`. |

180| `$.ui.open` | `() => ({ value: { isPlaced: true } })` |

181| `$.ui.ask` | Un stub `tool.call`, parce que la question l'atteint comme un appel à l'outil `AskUserQuestion` : `($, e) => ({ result: { answers: { [e.questions[0].question]: 'Run it' } } })`. Vérifiez `e.tool` d'abord si votre mod transmet d'autres appels d'outils. |

182| `$.model.complete` | `() => ({ value: { isAnswered: true, text: '...', usage } })` |

183| `$.process.run` | `($, e) => ({ value: { exitCode: 0, stdout: '...', stderr: '' } })`. `e.argv` est la liste des arguments et `e.init` contient `cwd` et `timeoutMs`. |

184| Tout appel d'API des mods qui devrait échouer | `() => ({ deny: 'the reason' })`, ce qui fait que l'appel rejette dans votre mod. Un stub qui lance une exception est ignoré à la place. |

185| `session.start` | `() => ({ cwd: '/work' })` |

186| `turn.start` | `($, e) => ({ turnId: e.turnId })` |

187| `tool.call` | `() => ({ result: '...' })` |

188| `turn.complete` | `() => ({ text: '' })`. Levez-le avec `$.turn.complete({ turnId, answer, durationMs, isAborted: false, usage: null })`. |

189| `prompt.submit` | `($, e) => ({ text: e.text })` |

190| `prompt.fill` | `() => ({ isFilled: true })` |

191| `$.prompt.read` | `() => ({ value: { text: '...', cursor: 0 } })` |

192| `$.ui.copy` | `() => ({ value: { isCopied: true } })` |

193| `$.session.messages` | `() => ({ value: [{ role: 'assistant', text: '...', toolUses: [] }] })` |

194| `$.session.id`, `$.agent.list` | `() => ({ value: 'abc123' })`, `() => ({ value: [] })` |

195| `session.send` | `() => ({ isDelivered: true })`. `e.to` arrive en tant que chaîne même quand votre mod a passé `{ sessionId }`. |

196| `session.receive` | `($, e) => ({ text: e.text })`. Levez-le avec `$.session.receive({ origin: { kind: 'peer-send-message' }, text })`. |

197| `ui.render` | `() => ({ type: 'Text', props: {}, children: ['...'] })` |

198 

199`expect` a les assertions `toBe`, `toEqual`, `toMatch`, `toMatchObject`, `toContain`, `toBeDefined`, `toBeUndefined`, et `toThrow`, et `.not` avant n'importe lequel d'entre eux.

200 

201<h2 id="test-a-timer">

202 Tester une minuterie

203</h2>

204 

205Un mod qui exécute du travail sur une minuterie a besoin d'une horloge que le test contrôle, afin que le test puisse avancer le temps au lieu d'attendre. `const clock = mock.clock(on)` retourne une horloge simulée qui commence à `0` et ne se déplace que quand votre test la déplace. Pour commencer à un autre moment, passez-le en millisecondes, comme dans `mock.clock(on, { now: 5000 })`. L'horloge a ces méthodes :

206 

207| Méthode | Ce qu'elle fait |

208| :- | :- |

209| `await clock.advance(1000)` | Avance le temps de ce nombre de millisecondes et exécute chaque minuterie qui arrive à échéance |

210| `await clock.set(5000)` | Avance le temps à cette valeur, comme `advance` le ferait |

211| `clock.now()` | Retourne l'heure, ce que votre mod `$.clock.now()` se résout à |

212| `await clock.settle()` | Exécute les minuteries qui sont déjà dues, comme une chaîne d'appels `$.clock.after` à délai zéro, sans déplacer le temps |

213| `await clock.sleep(2000)` | À l'intérieur d'un stub, fait que ce stub ne répond que quand le test a avancé jusque-là, ce qui est comment vous simulez un modèle ou un processus lent |

214 

215Ce hook appartient à un mod nommé `countdown`, et gère une commande `/countdown` qui prend un nombre de secondes, démarre une minuterie `$.clock.every` d'une seconde, et affiche un toast à zéro. Comme avec `grader`, le fichier ne contient que le hook testé et n'enregistre pas la commande :

216 

217```javascript countdown/hooks/register.js theme={null}

218export function register(on) {

219 on('command.run', { command: 'countdown' }, async ($, e) => {

220 // e.args is the text typed after /countdown

221 let left = Number(e.args)

222 const timer = $.clock.every(1000, () => {

223 left -= 1

224 if (left === 0) {

225 timer.cancel()

226 $.ui.toast('Time is up')

227 }

228 })

229 // Print nothing in the transcript

230 return {}

231 })

232}

233```

234 

235Ce test exécute `/countdown 3` et déplace l'horloge simulée, afin qu'il vérifie trois secondes de comportement sans attendre trois secondes :

236 

237```typescript countdown/tests/countdown.test.ts theme={null}

238import { expect, mock, test } from 'claude-code/testing'

239 

240test('the countdown ends with a toast', async ($, on) => {

241 // Answer every $.clock call from a clock the test controls

242 const clock = mock.clock(on)

243 // Collect the text of each toast the mod shows

244 const toasts: string[] = []

245 on('ui.toast', ($, e) => {

246 toasts.push(e.text)

247 return { value: undefined }

248 })

249 

250 await $.command.run({ command: 'countdown', args: '3' })

251 // After two seconds the timer has fired twice, and no toast is due

252 await clock.advance(2000)

253 expect(toasts).toEqual([])

254 // The third second brings the count to zero

255 await clock.advance(1000)

256 expect(toasts).toEqual(['Time is up'])

257})

258```

259 

260Le premier `expect` montre que le toast ne vient pas tôt, et le deuxième montre qu'il vient une fois. Chaque `advance` se résout après que les minuteries qui sont venues à échéance aient exécuté, afin que la vérification sur la ligne suivante voie leur effet.

261 

262<h2 id="test-a-drawing">

263 Tester un dessin

264</h2>

265 

266Un test peut dessiner l'un de vos sites de [rendu](/docs/fr/plugins/mods/reference#render-sites) du mod, puis appuyer, taper et trouver les éléments qu'il a dessinés. `$.ui.mount` dessine le site via le hook `ui.render` de votre mod et retourne un handle avec une méthode pour chacun d'eux. Pour couvrir plusieurs applications dans un test, définissez `surface` sur l'application à dessiner. Ce test ouvre le volet de [Construire un volet avec des onglets](/docs/fr/plugins/mods/interface#build-a-pane-with-tabs), bascule les onglets, appuie sur le bouton, et vérifie le compte dans le terminal et l'application Desktop :

267 

268```typescript hello-tabs/tests/hello-tabs.test.ts theme={null}

269import { expect, test } from 'claude-code/testing'

270 

271// What Claude Code passes to a ui.render hook for this pane, apart from the app

272const PANE = {

273 plugin: 'hello-tabs',

274 component: 'Pane',

275 requestId: 'hello-tabs',

276 viewport: { columns: 100, rows: 30 },

277 props: {

278 title: 'Hello tabs',

279 isFocused: true,

280 bodyColumns: 60,

281 placement: 'inline',

282 scroll: { offset: 0, bodyRows: 10 },

283 view: {},

284 },

285} as const

286 

287test('the second tab counts presses and saves the count', async ($, on) => {

288 // Stub $.store with a Map, so the test can read what the mod saved

289 const saved = new Map<string, unknown>()

290 on('store.get', ($, e) => ({ value: saved.get(e.key) }))

291 on('store.set', ($, e) => {

292 saved.set(e.key, e.value)

293 return { value: undefined }

294 })

295 

296 // Draw the pane once for each app

297 for (const surface of ['terminal', 'desktop'] as const) {

298 const ui = await $.ui.mount({ ...PANE, surface })

299 // Press the buttons by the key the mod gave them

300 await ui.press({ key: 'tab-two' })

301 await ui.press({ key: 'more' })

302 // The second tab's count line is in the drawing

303 expect(await ui.find({ type: 'Text', text: /^Count: \d+$/ })).toBeDefined()

304 await ui.unmount()

305 }

306 

307 // One press in each app makes two

308 expect(saved.get('count')).toBe(2)

309})

310```

311 

312Dans votre shell, exécutez `claude plugin test` depuis le répertoire `hello-tabs`. Le test réussit quand les deux applications dessinent la ligne de compte et le mod a enregistré `2`. Le compte se reporte de la première application à la deuxième parce que les deux montages utilisent le même module chargé.

313 

314Le handle que `$.ui.mount` retourne a ces méthodes, qui adressent les éléments par la `key` que vous leur avez donnée :

315 

316| Méthode | Ce qu'elle fait |

317| :- | :- |

318| `press({ key: 'more' })` | Appuie sur le `Button` avec cette clé |

319| `input({ key: 'new-note', text: 'buy milk' })` | Tape le texte dans l'`Input` avec cette clé et appuie sur Entrée. Ajoutez `kind: 'change'` pour taper sans soumettre. |

320| `select({ key: 'size', value: 'large' })` | Choisit l'option avec cette valeur dans le `Select` avec cette clé |

321| `find({ key: 'more' })` ou `find({ type: 'Text', text: 'Count: 2' })` | Retourne le premier élément correspondant comme `{ type, props, children }`, ou `undefined`. `text` peut être une chaîne ou une expression régulière. |

322| `unmount()` | Supprime le dessin |

323 

324Chaque méthode se résout après que votre gestionnaire ait terminé, afin que vous puissiez vérifier le résultat sur la ligne suivante. Définissez `props` à ce que Claude Code passerait pour ce site. Le [tableau des sites de rendu](/docs/fr/plugins/mods/reference#render-sites) liste les props de chaque site, et [les types pour votre build](/docs/fr/plugins/mods/create#get-the-types-for-your-build) ont leurs types.

325 

326Un test de dessin vérifie l'arborescence que votre hook retourne et si elle est valide pour cette application. Il ne vérifie pas comment l'application la peint, donc regardez une nouvelle mise en page dans une vraie session aussi.

327 

328<h3 id="test-a-drawing-after-clear">

329 Tester un dessin après `/clear`

330</h3>

331 

332Chaque test commence avec chaque valeur `$.state` à sa valeur par défaut, ce qui est comment `/clear` les laisse. Pour tester ce que votre mod fait ensuite, ignorez `session.start`, levez `classic.SessionStart` avec `source: 'clear'`, et vérifiez ce que votre mod dessine.

333 

334Ce test vérifie le module de [Charger une valeur enregistrée à nouveau après `/clear`](/docs/fr/plugins/mods/interface#load-a-saved-value-again-after-clear). Ajoutez-le au fichier de [Tester un dessin](#test-a-drawing), où `PANE` est défini. Le premier test de ce fichier s'attend à ce que le bouton enregistre le compte, comme le bouton dans [Enregistrer à partir de plus d'une session](/docs/fr/plugins/mods/interface#save-from-more-than-one-session) le fait :

335 

336```typescript hello-tabs/tests/hello-tabs.test.ts theme={null}

337test('the saved count comes back after /clear', async ($, on) => {

338 // The store already holds a count of 7

339 on('store.get', () => ({ value: 7 }))

340 // Answer the event after your hook passes it on with next(e)

341 on('classic.SessionStart', () => ({}))

342 

343 // Raise the event that fires after /clear, which runs your hook

344 await $.classic.SessionStart({ source: 'clear' })

345 

346 const ui = await $.ui.mount({ ...PANE, surface: 'terminal' })

347 await ui.press({ key: 'tab-two' })

348 // The pane shows the stored count, not the default of 0

349 expect(await ui.find({ type: 'Text', text: 'Count: 7' })).toBeDefined()

350})

351```

352 

353Le test réussit quand votre hook `classic.SessionStart` a copié le `7` enregistré dans `$.state` avant que le volet ne se dessine. Sans ce hook dans votre module, le volet dessine `Count: 0`, `find` retourne `undefined`, et le test échoue à `toBeDefined`.

354 

355<h2 id="test-a-mod-that-judges-other-mods">

356 Tester un mod qui juge d'autres mods

357</h2>

358 

359Un mod que votre organisation liste dans [`prependPlugins`](/docs/fr/plugins/mods/admin) peut refuser un autre mod avant qu'il ne se charge. Pour en tester un, définissez le tier de votre mod et donnez au test un deuxième mod pour que le vôtre admette ou refuse :

360 

361* **`tier`** : appelez-le une fois en haut du fichier de test, comme dans `tier('prepend')`, pour charger votre mod comme `prepend`, `append`, ou `builtin`, sa place dans l'[ordre dans lequel les mods s'exécutent](/docs/fr/plugins/mods/events#the-order-mods-run-in). Sans lui, votre mod se charge comme `user`.

362* **`plugins`** : passez à `test` un objet d'options avant le corps du test. Son tableau `plugins` contient des mods que vous écrivez en ligne, chacun avec un `name` et une fonction `register`. Pour charger un ailleurs que `user`, ajoutez `tier` à celui-ci.

363 

364Ce fichier de test charge le [mod de politique de la page d'administration](/docs/fr/plugins/mods/admin#enforce-a-policy-with-a-mod-of-your-own) d'abord. Il vérifie que le mod de politique refuse un mod qui démarre un processus et en admet un qui ne le fait pas :

365 

366```typescript acme-guard/tests/guard.test.ts theme={null}

367import { expect, test, tier } from 'claude-code/testing'

368 

369// Load the mod under test ahead of every other mod

370tier('prepend')

371 

372// A second mod whose code calls $.process.run, which the policy blocks

373const runner = {

374 name: 'runner',

375 register(on) {

376 on('tool.call', async ($, e, next) => {

377 await $.process.run(['ls'])

378 return { result: 'runner answered' }

379 })

380 },

381}

382 

383// A second mod that calls nothing the policy blocks

384const reader = {

385 name: 'reader',

386 register(on) {

387 on('tool.call', async ($, e, next) => {

388 return { result: 'reader answered' }

389 })

390 },

391}

392 

393test('refuses a mod that starts a process', { plugins: [runner] }, async ($, on) => {

394 on('tool.call', () => ({ result: 'claude code answered' }))

395 let message = ''

396 try {

397 // The first call on $ loads the mods, so the refusal is thrown here

398 await $.tool.call({ tool: 'Bash', command: 'ls' })

399 } catch (error) {

400 message = error.message

401 }

402 expect(message).toBe('runner: refused by acme-guard: Acme policy: mods may not call process.run')

403})

404 

405test('admits a mod that starts no process', { plugins: [reader] }, async ($, on) => {

406 on('tool.call', () => ({ result: 'claude code answered' }))

407 const out = await $.tool.call({ tool: 'Bash', command: 'ls' })

408 // The answer comes from reader, which shows that it loaded

409 expect(out).toEqual({ result: 'reader answered' })

410})

411```

412 

413Dans votre shell, exécutez `claude plugin test` depuis le répertoire `acme-guard`. Les deux tests réussissent avec le mod de politique comme la page d'administration le montre.

414 

415Le kit charge chaque mod au premier appel du test sur `$`. Quand votre mod en refuse un, cet appel lance une exception, et le message nomme le mod refusé, le mod qui l'a refusé, et votre raison. Dans le deuxième test rien n'est refusé, donc `reader` répond à l'appel d'outil avant qu'il n'atteigne le stub.

416 

417<h2 id="next-steps">

418 Étapes suivantes

419</h2>

420 

421* [Dépanner un mod](/docs/fr/plugins/mods/troubleshoot) : découvrez pourquoi un mod ne fait rien dans une session

422* [Référence des mods](/docs/fr/plugins/mods/reference) : chaque événement d'entrée et résultat, pour écrire des stubs

plugins/mods/troubleshoot.md +284 −0 created

Details

1> ## Documentation Index

2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt

3> Use this file to discover all available pages before exploring further.

4 

5# Dépanner un mod

6 

7> Découvrez pourquoi un mod Claude Code ne fait rien : associez le symptôme ou le message à sa cause, consultez les messages de refus et lisez le journal de débogage.

8 

9Quand le module d'un mod ou l'un de ses hooks échoue, Claude Code l'ignore et la session continue, donc un mod cassé peut ressembler à un mod qui ne fait rien. Commencez par vérifier ce que Claude Code a lu à partir de votre mod et où il signale un problème, puis trouvez le symptôme ou le message que vous avez.

10 

11<h2 id="find-out-why-a-mod-does-nothing">

12 Découvrez pourquoi un mod ne fait rien

13</h2>

14 

15Quand un mod ne fait rien, deux vérifications trouvent la raison : ce que Claude Code lit à partir des fichiers du mod et la ligne qu'il écrit quand il ignore quelque chose. Pour la première, dans votre shell, exécutez [`claude plugin validate`](/docs/fr/plugins/mods/create#check-what-claude-code-reads-from-your-mod) avec le répertoire du mod, comme dans `claude plugin validate ./first-mod`. Cela détecte un événement mal orthographié, un mauvais manifeste et un module que Claude Code ne peut pas lire, sans démarrer une session.

16 

17Quand un module ne se charge pas, un hook est ignoré ou un autre mod refuse le vôtre, Claude Code écrit une ligne qui nomme votre mod. L'endroit où vous lisez cette ligne dépend de la session :

18 

19* **Une session qui recharge à chaud un répertoire de plugin** : une ligne atténuée dans la transcription. C'est une session interactive que vous avez démarrée avec `--plugin-dir`, ou une session où vous avez [activé le rechargement à chaud](/docs/fr/plugins/mods/create#ask-claude-for-a-mod) pour les mods que Claude a écrits.

20* **Toute autre session interactive, comme une qui exécute un mod que vous avez installé à partir d'une marketplace** : le [journal de débogage](#read-the-debug-log) uniquement. Pour en obtenir un, démarrez la session avec `claude --debug`.

21* **Une exécution `claude -p` avec `--plugin-dir`** : stderr, au format de sortie texte par défaut. Un refus par un autre mod va au journal de débogage uniquement.

22 

23<h2 id="check-whether-mods-can-load">

24 Vérifiez si les mods peuvent se charger

25</h2>

26 

27Pour vérifier si votre configuration permet aux mods de se charger du tout, sans en installer un, exécutez `claude plugin test` dans votre shell, à partir d'un répertoire qui ne contient pas de mod. Vous n'avez pas besoin d'une session. Le message qu'il affiche vous indique l'état :

28 

29| Le message inclut | Ce que cela signifie |

30| :- | :- |

31| `no hooks module to load` | Les mods peuvent se charger. La commande n'a trouvé aucun mod à tester dans ce répertoire. |

32| `hooks modules are turned off here` | Un paramètre empêche vos mods : `disableAllHooks` dans vos propres paramètres, ou la politique de votre organisation |

33| `hooks modules are turned off in this process` | Anthropic a désactivé les mods installés à distance. Aucun paramètre sur votre machine ne les réactive. |

34 

35Une organisation peut également définir `allowManagedModsOnly` pour autoriser uniquement ses propres mods, ce que cette commande ne signale pas. Dans ce cas, un mod que vous installez ne se charge pas, et [un message explique pourquoi](/docs/fr/plugins/mods/troubleshoot#messages-from-the-built-in-guard).

36 

37<h2 id="the-mod-doesn’t-load">

38 Le mod ne se charge pas

39</h2>

40 

41Rien de ce que le mod ajoute n'apparaît : aucune commande, aucun dessin et aucun changement de comportement.

42 

43<h3 id="your-version-is-older-than-2-1-287">

44 Votre version est antérieure à 2.1.287

45</h3>

46 

47`claude --version` affiche une version antérieure à 2.1.287. Votre version est antérieure à l'activation des mods par défaut.

48 

49[Mettez à jour Claude Code](/docs/fr/setup#update-claude-code).

50 

51<h3 id="the-mods-active-line-doesn’t-name-the-mod">

52 La ligne `mods active` ne nomme pas le mod

53</h3>

54 

55Rien de ce que le mod ajoute n'apparaît, et la [ligne `mods active`](/docs/fr/plugins/mods/overview#see-which-mods-a-session-loaded) dans `/plugin` ne le nomme pas. Le module hooks ne s'est pas chargé. Quand Claude Code l'a refusé, le journal de débogage a une ligne qui commence par `hooks module`, le nom du mod et `not loaded:`, comme dans `hooks module first-mod@inline not loaded: disableAllHooks in managed settings` pour un mod chargé avec `--plugin-dir`.

56 

57Lisez la raison après les deux points. La section [messages de refus](#refusal-messages) énumère chacun d'eux. Si le journal n'a pas de telle ligne, parcourez les autres entrées de ce groupe.

58 

59<h3 id="a-claude-p-run-prints-hooks-module-not-loaded">

60 Une exécution `claude -p` affiche `hooks module not loaded`

61</h3>

62 

63La ligne commence par le nom du mod et va à stderr. Le module hooks a été refusé. Une exécution non-interactive n'a pas de transcription, donc le message va à stderr.

64 

65Lisez la raison après les deux points. La section [messages de refus](#refusal-messages) énumère chacun d'eux.

66 

67<h3 id="refusal-messages">

68 Messages de refus

69</h3>

70 

71Chacun de ceux-ci suit `hooks module`, le nom du mod et `not loaded:` dans le journal de débogage.

72 

73| Le message commence par | Ce que cela signifie |

74| :- | :- |

75| `hooks modules are turned off for installed plugins in this process` | Anthropic a désactivé les mods installés à distance. Aucun paramètre sur votre machine ne les réactive. |

76| `disableAllHooks in managed settings` | Votre organisation a désactivé les hooks des plugins installés |

77| `only managed plugins and built-in plugins run` | `allowManagedHooksOnly` est défini, ou `disableAllHooks` est défini dans un fichier de paramètres autre que les paramètres gérés |

78| `installed plugins that are not managed load no hooks module in this mode (--bare)` | Vous avez démarré Claude Code avec `--bare` |

79| `another plugin of that name loads first` | Deux plugins partagent un nom. Le plugin géré, ou celui chargé en premier, est utilisé. |

80 

81<h3 id="messages-from-the-built-in-guard">

82 Messages du garde intégré

83</h3>

84 

85Sur une machine avec des paramètres gérés, ou pour un utilisateur connecté avec un plan Team ou Enterprise, le [garde intégré](/docs/fr/plugins/mods/admin#know-what-happens-by-default) peut refuser un mod ou l'une de ses réponses. Chaque message nomme l'option que l'administrateur de votre organisation définit pour modifier la règle.

86 

87| Le message contient | Ce que cela signifie | Où cela apparaît |

88| :- | :- | :- |

89| `mods are limited to your organization's by policy (allowManagedModsOnly)` | Votre organisation n'autorise que [ses propres mods](/docs/fr/plugins/mods/admin#install-your-organizations-mods), donc le vôtre n'a pas été chargé | Le journal de débogage et la transcription dans une [session qui recharge à chaud un répertoire de plugin](#find-out-why-a-mod-does-nothing) |

90| `tried to lift a deny rule in your settings` | Le hook [`tool.check`](/docs/fr/plugins/mods/reference#tools) de votre mod a approuvé un appel qu'une règle `deny` refuse. L'appel reste refusé. | La transcription et le journal de débogage, une fois pour chaque mod dans une session. Dans une exécution `claude -p`, le journal de débogage uniquement. |

91| `the deny rules in your settings could not be checked for this call, so it is refused` | Le garde a échoué lors de la vérification d'un appel qu'un mod a approuvé, donc il a refusé l'appel | La raison que Claude lit pour l'appel refusé |

92 

93<h3 id="validate-passes-and-lists-no-hooks-line">

94 `validate` réussit et ne liste aucune ligne `hooks`

95</h3>

96 

97`hooks/hooks.json` n'a pas de clé `modules`, ou la clé est mal orthographiée.

98 

99Ajoutez `"modules": ["./register.js"]`.

100 

101<h3 id="hooks-module-did-not-load">

102 `hooks module did not load`

103</h3>

104 

105La ligne commence par le nom du mod, puis `hooks module did not load:` et une raison, qui donne le fichier et la ligne quand le problème est dans votre code. Claude Code n'a pas pu charger le module, par exemple parce que son code de niveau supérieur a levé une exception.

106 

107Corrigez l'erreur que la raison nomme.

108 

109<h3 id="options-do-not-fit-plugin-json-userconfig">

110 `options do not fit plugin.json userConfig`

111</h3>

112 

113La ligne commence par le nom du mod, puis `hooks module did not load: options do not fit plugin.json userConfig:` et une raison. Une option ne correspond pas à son champ [`userConfig`](/docs/fr/plugins/components#user-configuration), comme un nombre au-dessus du `max` du champ, ou un champ obligatoire n'a pas de valeur.

114 

115Définissez ou modifiez la valeur. La fin de la ligne nomme son entrée `pluginConfigs` dans `settings.json`.

116 

117<h3 id="no-mod-loads-in-a-directory-you-opened-for-the-first-time">

118 Aucun mod ne se charge dans un répertoire que vous avez ouvert pour la première fois

119</h3>

120 

121Vous n'avez pas répondu à l'invite de confiance pour le répertoire.

122 

123Démarrez une session interactive dans ce répertoire avec `claude` et acceptez l'invite de confiance qu'elle ouvre.

124 

125<h3 id="no-installed-plugin-loads-at-all">

126 Aucun plugin installé ne se charge du tout

127</h3>

128 

129Vous avez démarré Claude Code avec `--safe-mode`.

130 

131Démarrez sans le drapeau.

132 

133<h2 id="a-hook-is-skipped-or-a-mod-is-unloaded">

134 Un hook est ignoré ou un mod est déchargé

135</h2>

136 

137Le mod s'est chargé, puis Claude Code a ignoré l'un de ses hooks ou l'a déchargé.

138 

139<h3 id="hook-skipped">

140 `hook skipped`

141</h3>

142 

143La ligne nomme le mod et l'événement, puis dit `hook skipped:` et une raison, comme dans `first-mod: tool.call hook skipped: threw Error: boom`. Un hook a levé une exception, a dépassé sa [limite de temps de 10 secondes](/docs/fr/plugins/mods/reference#limits), ou a retourné un résultat de la mauvaise forme. La ligne apparaît une fois pour chaque événement et type d'échec jusqu'à ce que le mod se recharge.

144 

145Corrigez l'erreur. Le journal de débogage a une ligne pour chaque occurrence.

146 

147<h3 id="it-crashed-the-hooks-worker">

148 `it crashed the hooks worker`

149</h3>

150 

151La ligne commence par le nom du mod, comme dans `first-mod was unloaded: it crashed the hooks worker`. Les mods installés partagent un thread de travail. Le worker a cessé de répondre ou s'est écrasé, et Claude Code a tracé cela jusqu'à ce mod et l'a déchargé. Un hook qui bloque le thread, comme une boucle qui n'attend jamais, en est une cause.

152 

153Corrigez le hook.

154 

155<h3 id="mods-that-run-in-the-hooks-worker-are-off-for-this-session">

156 `mods that run in the hooks worker are off for this session`

157</h3>

158 

159La ligne lit `hooks: mods that run in the hooks worker are off for this session: it crashed 3 times`. Le worker s'est arrêté trois fois et Claude Code n'a pas pu tracer les arrêts jusqu'à un mod, donc il a déchargé tous les mods qui ne sont pas intégrés, y compris les mods que votre organisation installe. Cette ligne atteint la transcription dans chaque session interactive.

160 

161Exécutez `/reload-plugins` pour les charger à nouveau.

162 

163<h2 id="a-tool-call-is-denied">

164 Un appel d'outil est refusé

165</h2>

166 

167Le mod s'est chargé et ses hooks s'exécutent, et un appel d'outil qu'il a touché est refusé.

168 

169<h3 id="a-hook-changed-this-call’s-input-after-the-model-wrote-it">

170 `a hook changed this call's input after the model wrote it`

171</h3>

172 

173En mode auto, un appel d'outil refusé donne cette raison. Un hook a modifié l'entrée de l'appel d'outil après que le [classificateur côté serveur](/docs/fr/permission-modes#server-side-classifier-review) l'ait examiné, donc cet examen ne couvre pas ce qui s'exécuterait. Le hook peut être un hook [`tool.call`](/docs/fr/plugins/mods/reference#tools) ou [`turn.step`](/docs/fr/plugins/mods/reference#turns) d'un mod, ou un hook de paramètres [`PreToolUse`](/docs/fr/hooks#pretooluse). Le message ne dit pas lequel.

174 

175Le message indique à Claude d'émettre l'appel une fois de plus tel qu'enregistré. Si cela est également refusé, le hook modifie l'entrée à chaque fois, donc désactivez le mod ou le hook, ou quittez le mode auto et approuvez l'appel vous-même.

176 

177<h3 id="a-message-about-the-deny-rules-in-your-settings">

178 Un message sur les règles de refus dans vos paramètres

179</h3>

180 

181`tried to lift a deny rule in your settings` et `the deny rules in your settings could not be checked for this call, so it is refused` proviennent tous deux du garde intégré.

182 

183Consultez-les dans [Messages du garde intégré](#messages-from-the-built-in-guard).

184 

185<h2 id="a-drawing-doesn’t-appear-or-respond">

186 Un dessin n'apparaît pas ou ne répond pas

187</h2>

188 

189Le mod s'est chargé, et son volet, sa bande ou ses contrôles ne se comportent pas comme prévu.

190 

191<h3 id="a-pane-or-band-is-empty-or-shows-claude-code’s-usual-content">

192 Un volet ou une bande est vide ou affiche le contenu habituel de Claude Code

193</h3>

194 

195L'[arbre](/docs/fr/plugins/mods/interface#build-a-tree-from-elements) que votre hook a retourné n'a pas validé. Avec `--plugin-dir`, la transcription dit `ui.render (Pane) refused:` avec la raison, comme dans `first-mod: ui.render (Pane) refused: Box prop "flexDirection" must be one of row, column, row-reverse, column-reverse; the engine drew its own`. Le journal de débogage a `a hook returned a tree that does not validate` avec la même raison.

196 

197Lisez 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.

198 

199<h3 id="ui-open-runs-and-no-pane-appears">

200 `$.ui.open` s'exécute et aucun volet n'apparaît

201</h3>

202 

203L'appel ne venait pas de quelque chose que l'utilisateur a fait, et le terminal est plus étroit que 144 colonnes.

204 

205Ouvrez le volet à partir d'une commande ou d'un bouton, ou vérifiez le résultat `isPlaced` de l'appel. Voir [Ouvrir un volet au bon moment](/docs/fr/plugins/mods/interface#open-a-pane-at-the-right-time).

206 

207<h3 id="hotkeys-do-nothing">

208 Les raccourcis clavier ne font rien

209</h3>

210 

211Votre volet n'a pas le focus clavier.

212 

213Appuyez sur Ctrl+X puis Tab, ou cliquez sur le volet. Ouvrez-le avec `focus: true` à partir d'une commande.

214 

215<h3 id="a-drawing-works-in-the-terminal-and-not-in-the-desktop-app">

216 Un dessin fonctionne dans le terminal et pas dans l'application de bureau

217</h3>

218 

219Le site ou l'élément n'est pas disponible là.

220 

221Vérifiez les [sites de rendu](/docs/fr/plugins/mods/reference#render-sites) et les tableaux [éléments](/docs/fr/plugins/mods/reference#elements).

222 

223<h2 id="an-edit-or-a-value-is-lost">

224 Une modification ou une valeur est perdue

225</h2>

226 

227Le mod s'exécute, et une modification que vous avez apportée ou une valeur qu'il a conservée n'est pas là.

228 

229<h3 id="your-edits-don’t-take-effect">

230 Vos modifications ne prennent pas effet

231</h3>

232 

233Vous modifiez un plugin que vous avez installé. Claude Code exécute la copie en cache pour la version installée.

234 

235Développez avec `--plugin-dir` pointant vers votre copie de travail, comme dans `claude --plugin-dir ./first-mod`, qui se recharge quand vous enregistrez.

236 

237<h3 id="a-value-resets-when-the-module-reloads">

238 Une valeur se réinitialise quand le module se recharge

239</h3>

240 

241Les variables au niveau du module sont réinitialisées à chaque rechargement.

242 

243[Conservez la valeur dans `$.state` ou `$.store`](/docs/fr/plugins/mods/interface#keep-state).

244 

245<h3 id="a-value-resets-after-/clear-/resume-or-/branch">

246 Une valeur se réinitialise après `/clear`, `/resume` ou `/branch`

247</h3>

248 

249Une valeur se réinitialise, ou une valeur enregistrée est remplacée par sa valeur par défaut. Chacune de ces commandes réinitialise `$.state` à ses valeurs par défaut, et `session.start` ne se déclenche pas à nouveau.

250 

251[Rechargez la valeur enregistrée à nouveau](/docs/fr/plugins/mods/interface#load-a-saved-value-again-after-clear) dans un hook `classic.SessionStart`.

252 

253<h2 id="read-the-debug-log">

254 Lisez le journal de débogage

255</h2>

256 

257Le 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 :

258 

259```bash theme={null}

260claude --debug-file ./mod-debug.log --plugin-dir ./first-mod

261```

262 

263Dans un autre terminal, suivez le fichier et filtrez par le nom de votre mod :

264 

265```bash theme={null}

266tail -f ./mod-debug.log | grep first-mod

267```

268 

269Un mod qui s'est chargé a une ligne qui le nomme et énumère les événements qu'il accroche. Un mod chargé avec `--plugin-dir` apparaît sous son nom suivi de `@inline` :

270 

271```text theme={null}

272hooks module first-mod@inline loaded (worker, environment 2, tier user); events: session.start,tool.call,command.run,ui.render

273```

274 

275Un dessin qui n'a pas validé compte comme un résultat refusé et obtient aussi une ligne. Pour écrire vos propres lignes dans le journal, appelez [`$.ui.log`](/docs/fr/plugins/mods/api#show-something-without-starting-a-turn) avec un deuxième argument, comme dans `$.ui.log('message', { to: 'debug' })`. Sans le deuxième argument, `$.ui.log` ajoute une ligne atténuée à la transcription.

276 

277Pendant que vous modifiez un mod chargé avec `--plugin-dir`, la transcription affiche une ligne pour chaque rechargement qui nomme le mod et énumère ses hooks. Si une sauvegarde casse le module, la ligne dit `reload failed, the previous version stays loaded:` avec la raison, et la dernière version de travail continue de s'exécuter.

278 

279<h2 id="next-steps">

280 Étapes suivantes

281</h2>

282 

283* [Testez un mod](/docs/fr/plugins/mods/test) : détectez les problèmes avant qu'ils n'atteignent une session

284* [Dépannez les plugins](/docs/fr/plugins/troubleshooting) : problèmes d'installation et de chargement d'un plugin qui ne sont pas spécifiques aux mods

plugins/org.md +4 −1

Details

212| `pluginTrustMessage` | Ajoute votre texte à l'avertissement de confiance que `/plugin` affiche avant l'installation d'un plugin | Ne change pas le texte de l'avertissement lui-même |212| `pluginTrustMessage` | Ajoute votre texte à l'avertissement de confiance que `/plugin` affiche avant l'installation d'un plugin | Ne change pas le texte de l'avertissement lui-même |

213| `allowedChannelPlugins` | Remplace la liste par défaut des plugins autorisés à envoyer des messages de canal. Nécessite `channelsEnabled: true` | Voir [Restreindre les plugins de canal qui peuvent s'exécuter](/docs/fr/channels#restrict-which-channel-plugins-can-run) |213| `allowedChannelPlugins` | Remplace la liste par défaut des plugins autorisés à envoyer des messages de canal. Nécessite `channelsEnabled: true` | Voir [Restreindre les plugins de canal qui peuvent s'exécuter](/docs/fr/channels#restrict-which-channel-plugins-can-run) |

214| [`CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL=1`](/docs/fr/env-vars) | Arrête les sessions de terminal interactives de l'auto-enregistrement du marketplace officiel | Ne supprime pas un marketplace déjà enregistré. La liste blanche et la liste noire contrôlent le même auto-enregistrement sans celui-ci. Une machine qui a démarré une fois avec celui-ci défini ne reprend pas l'auto-enregistrement après l'avoir désactivé |214| [`CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL=1`](/docs/fr/env-vars) | Arrête les sessions de terminal interactives de l'auto-enregistrement du marketplace officiel | Ne supprime pas un marketplace déjà enregistré. La liste blanche et la liste noire contrôlent le même auto-enregistrement sans celui-ci. Une machine qui a démarré une fois avec celui-ci défini ne reprend pas l'auto-enregistrement après l'avoir désactivé |

215| [`allowManagedModsOnly`](/docs/fr/plugins/mods/admin#stop-user-installed-mods-from-loading) | Arrête chaque [mod](/docs/fr/plugins/mods/overview) installé qui ne [compte pas comme celui de votre organisation](/docs/fr/plugins/mods/admin#install-your-organizations-mods) de se charger | N'arrête pas un plugin qui contient un mod de s'installer. Pour cela, utilisez les clés de marketplace dans ce tableau |

215 216 

216Chaque clé du tableau est un paramètre géré, à l'exception de `enabledPlugins`, `syncClaudeAiPlugins` et `CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL` :217Chaque clé du tableau est un paramètre géré, à l'exception de `enabledPlugins`, `syncClaudeAiPlugins`, `CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL` et `allowManagedModsOnly` :

217 218 

218* **`enabledPlugins`** : vous pouvez le définir dans n'importe quelle portée, et les paramètres gérés le verrouillent.219* **`enabledPlugins`** : vous pouvez le définir dans n'importe quelle portée, et les paramètres gérés le verrouillent.

219* **`syncClaudeAiPlugins`** : chaque utilisateur peut également le définir dans ses propres paramètres utilisateur ou locaux. Voir sa [portée dans la référence des paramètres](/docs/fr/settings-reference#syncclaudeaiplugins).220* **`syncClaudeAiPlugins`** : chaque utilisateur peut également le définir dans ses propres paramètres utilisateur ou locaux. Voir sa [portée dans la référence des paramètres](/docs/fr/settings-reference#syncclaudeaiplugins).

220* **`CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL`** : c'est une variable d'environnement que vous livrez via le bloc `env` géré montré sous [Désactiver les mises à jour pour toute la flotte](#turn-updates-off-for-the-whole-fleet).221* **`CLAUDE_CODE_DISABLE_OFFICIAL_MARKETPLACE_AUTOINSTALL`** : c'est une variable d'environnement que vous livrez via le bloc `env` géré montré sous [Désactiver les mises à jour pour toute la flotte](#turn-updates-off-for-the-whole-fleet).

222* **`allowManagedModsOnly`** : c'est une option sur un plugin intégré, que vous définissez sous `pluginConfigs` dans les paramètres gérés. Voir [Arrêter les mods installés par l'utilisateur de se charger](/docs/fr/plugins/mods/admin#stop-user-installed-mods-from-loading).

221 223 

222Chaque clé de paramètres ici a une entrée dans la [référence des paramètres](/docs/fr/settings-reference).224Chaque clé de paramètres ici a une entrée dans la [référence des paramètres](/docs/fr/settings-reference).

223 225 


457* [Référence du marketplace](/docs/fr/plugins/marketplace-reference#marketplace-sources) : les valeurs `source` que `extraKnownMarketplaces`, `strictKnownMarketplaces` et `blockedMarketplaces` acceptent459* [Référence du marketplace](/docs/fr/plugins/marketplace-reference#marketplace-sources) : les valeurs `source` que `extraKnownMarketplaces`, `strictKnownMarketplaces` et `blockedMarketplaces` acceptent

458* [Héberger et maintenir un marketplace](/docs/fr/plugins/host-marketplace) : exécutez le marketplace vers lequel votre politique pointe460* [Héberger et maintenir un marketplace](/docs/fr/plugins/host-marketplace) : exécutez le marketplace vers lequel votre politique pointe

459* [Sécurité et confiance des plugins](/docs/fr/plugins/security) : ce qu'un plugin peut faire sur une machine et comment en examiner un avant l'installation461* [Sécurité et confiance des plugins](/docs/fr/plugins/security) : ce qu'un plugin peut faire sur une machine et comment en examiner un avant l'installation

462* [Gérer les mods pour votre organisation](/docs/fr/plugins/mods/admin) : désactiver ou limiter les mods, les plugins qui exécutent du JavaScript dans Claude Code

460* [Paramètres gérés par le serveur](/docs/fr/server-managed-settings) : livrez ces clés à partir de la console d'administration claude.ai463* [Paramètres gérés par le serveur](/docs/fr/server-managed-settings) : livrez ces clés à partir de la console d'administration claude.ai

461* [Dépanner les plugins](/docs/fr/plugins/troubleshooting#blocked-by-your-organization) : les messages que les utilisateurs voient quand la politique les bloque464* [Dépanner les plugins](/docs/fr/plugins/troubleshooting#blocked-by-your-organization) : les messages que les utilisateurs voient quand la politique les bloque

Details

30* [**Skills**](/docs/fr/plugins/components#skills) : instructions `SKILL.md` que Claude charge quand c'est pertinent, et que vous pouvez également exécuter en tant que commande30* [**Skills**](/docs/fr/plugins/components#skills) : instructions `SKILL.md` que Claude charge quand c'est pertinent, et que vous pouvez également exécuter en tant que commande

31* [**Agents**](/docs/fr/plugins/components#agents) : définitions de sous-agents que Claude peut déléguer31* [**Agents**](/docs/fr/plugins/components#agents) : définitions de sous-agents que Claude peut déléguer

32* [**Hooks**](/docs/fr/plugins/components#hooks) : commandes que Claude Code exécute à des points de son cycle de vie, comme après chaque modification32* [**Hooks**](/docs/fr/plugins/components#hooks) : commandes que Claude Code exécute à des points de son cycle de vie, comme après chaque modification

33* [**Un module hooks**](/docs/fr/plugins/mods/overview) : hooks écrits en tant que fonctions JavaScript, qui peuvent également dessiner des volets et ajouter des commandes. Un plugin qui en a un s'appelle un mod

33* [**Serveurs MCP**](/docs/fr/plugins/components#mcp-servers) : serveurs d'outils auxquels Claude Code se connecte pendant que le plugin est activé34* [**Serveurs MCP**](/docs/fr/plugins/components#mcp-servers) : serveurs d'outils auxquels Claude Code se connecte pendant que le plugin est activé

34 35 

35Ce diagramme montre un plugin nommé `my-plugin` qui contient un de chacun de ces composants, et ce que vous obtenez de chaque fichier une fois que le plugin se charge.36Ce diagramme montre un plugin nommé `my-plugin` qui contient une skill, un agent, des hooks et un serveur MCP, et ce que vous obtenez de chaque fichier une fois que le plugin se charge.

36 37 

37<img src="https://mintcdn.com/claude-code/2Q_GtOEovg5qaBem/images/plugin-directory.svg?fit=max&auto=format&n=2Q_GtOEovg5qaBem&q=85&s=f623b64e82713b830e48174f0a922888" className="dark:hidden" alt="Diagramme en deux colonnes jointes par cinq flèches droites. À gauche, le répertoire d'un plugin nommé my-plugin, contenant un manifeste à .claude-plugin/plugin.json, skills/review/SKILL.md, agents/reviewer.md, hooks/hooks.json, .mcp.json et d'autres composants. À droite, ce que chaque fichier vous donne dans votre session : le manifeste définit le nom du plugin, my-plugin ; la skill s'exécute en tant que /my-plugin:review ; le fichier agent est un sous-agent que Claude peut déléguer ; le fichier hooks contient des hooks qui s'exécutent sur les événements du cycle de vie ; et .mcp.json ajoute un serveur MCP qui donne à Claude des outils." width="760" height="336" data-path="images/plugin-directory.svg" />38<img src="https://mintcdn.com/claude-code/2Q_GtOEovg5qaBem/images/plugin-directory.svg?fit=max&auto=format&n=2Q_GtOEovg5qaBem&q=85&s=f623b64e82713b830e48174f0a922888" className="dark:hidden" alt="Diagramme en deux colonnes jointes par cinq flèches droites. À gauche, le répertoire d'un plugin nommé my-plugin, contenant un manifeste à .claude-plugin/plugin.json, skills/review/SKILL.md, agents/reviewer.md, hooks/hooks.json, .mcp.json et d'autres composants. À droite, ce que chaque fichier vous donne dans votre session : le manifeste définit le nom du plugin, my-plugin ; la skill s'exécute en tant que /my-plugin:review ; le fichier agent est un sous-agent que Claude peut déléguer ; le fichier hooks contient des hooks qui s'exécutent sur les événements du cycle de vie ; et .mcp.json ajoute un serveur MCP qui donne à Claude des outils." width="760" height="336" data-path="images/plugin-directory.svg" />

38 39 

Details

29Un plugin peut contenir du contenu qui exécute du code sur votre machine avec vos privilèges utilisateur et du contenu qui entre dans le contexte de Claude en tant qu'instructions, donc [examinez un plugin avant de l'installer](#review-a-plugin-before-you-install). Voici ce qu'un plugin installé peut faire :29Un plugin peut contenir du contenu qui exécute du code sur votre machine avec vos privilèges utilisateur et du contenu qui entre dans le contexte de Claude en tant qu'instructions, donc [examinez un plugin avant de l'installer](#review-a-plugin-before-you-install). Voici ce qu'un plugin installé peut faire :

30 30 

31* **Hooks** : les [hooks](/docs/fr/hooks) d'un plugin s'exécutent en tant que commandes shell à des points du cycle de vie de Claude Code, comme avant ou après un appel d'outil.31* **Hooks** : les [hooks](/docs/fr/hooks) d'un plugin s'exécutent en tant que commandes shell à des points du cycle de vie de Claude Code, comme avant ou après un appel d'outil.

32* **Mods** : un [mod](/docs/fr/plugins/mods/overview) d'un plugin exécute du JavaScript dans Claude Code avec vos permissions. Pour lister ce qu'un mod fait avant de l'installer, voir [Décider si vous devez faire confiance à un mod](/docs/fr/plugins/mods/overview#decide-whether-to-trust-a-mod).

32* **Serveurs MCP et LSP** : Claude Code se connecte aux [serveurs MCP](/docs/fr/mcp) qu'un plugin activé déclare et donne à Claude leurs outils. Un serveur MCP stdio s'exécute en tant que processus que Claude Code démarre sur votre machine. Claude Code démarre également les serveurs de langage que le plugin déclare.33* **Serveurs MCP et LSP** : Claude Code se connecte aux [serveurs MCP](/docs/fr/mcp) qu'un plugin activé déclare et donne à Claude leurs outils. Un serveur MCP stdio s'exécute en tant que processus que Claude Code démarre sur votre machine. Claude Code démarre également les serveurs de langage que le plugin déclare.

33* **Répertoire `bin/`** : Claude Code ajoute le répertoire `bin/` de chaque plugin activé au `PATH` du shell de l'outil Bash, afin que les commandes Bash de Claude puissent exécuter n'importe quel exécutable qui s'y trouve.34* **Répertoire `bin/`** : Claude Code ajoute le répertoire `bin/` de chaque plugin activé au `PATH` du shell de l'outil Bash, afin que les commandes Bash de Claude puissent exécuter n'importe quel exécutable qui s'y trouve.

34* **Skills, commandes et agents** : ceux-ci entrent dans le contexte de Claude en tant qu'instructions, ils influencent donc ce que Claude fait avec les outils qu'il a déjà.35* **Skills, commandes et agents** : ceux-ci entrent dans le contexte de Claude en tant qu'instructions, ils influencent donc ce que Claude fait avec les outils qu'il a déjà.


37Les [règles de permission](/docs/fr/permissions) et le [sandbox](/docs/fr/sandboxing) de Claude Code couvrent les appels d'outils que Claude fait, pas le code qu'un plugin exécute par lui-même :38Les [règles de permission](/docs/fr/permissions) et le [sandbox](/docs/fr/sandboxing) de Claude Code couvrent les appels d'outils que Claude fait, pas le code qu'un plugin exécute par lui-même :

38 39 

39* **Hooks et processus serveur** : les hooks de commande exécutent des commandes shell avec vos permissions utilisateur complètes. Claude Code exécute les hooks et les serveurs MCP en dehors du sandbox.40* **Hooks et processus serveur** : les hooks de commande exécutent des commandes shell avec vos permissions utilisateur complètes. Claude Code exécute les hooks et les serveurs MCP en dehors du sandbox.

40* **Appels d'outils de Claude** : un appel à l'un des outils MCP du plugin, et une commande Bash qui exécute un exécutable du `bin/` du plugin, sont des appels d'outils, donc vos règles de permission s'y appliquent.41* **Appels d'outils de Claude** : un appel à l'un des outils MCP du plugin, et une commande Bash qui exécute un exécutable du `bin/` du plugin, sont des appels d'outils, donc vos règles de permission s'y appliquent. Pour ce qu'un mod peut faire à un appel d'outil, voir [Décider si vous devez faire confiance à un mod](/docs/fr/plugins/mods/overview#decide-whether-to-trust-a-mod).

41 42 

42L'installation d'un plugin l'active également, sauf si son manifeste ou son entrée de marketplace définit [`defaultEnabled: false`](/docs/fr/plugins/install#choose-an-install-scope) et que vous ne l'avez pas activé vous-même.43L'installation d'un plugin l'active également, sauf si son manifeste ou son entrée de marketplace définit [`defaultEnabled: false`](/docs/fr/plugins/install#choose-an-install-scope) et que vous ne l'avez pas activé vous-même.

43 44 

Details

201 201 

202Un ajout réussi imprime `Successfully added marketplace: <name>`.202Un ajout réussi imprime `Successfully added marketplace: <name>`.

203 203 

204<h3 id="invalid-git-url">

205 `Invalid git URL`

206</h3>

207 

208Vous avez ajouté une marketplace, installé un plugin ou exécuté une mise à jour à partir d'une adresse git, et la commande a échoué avec `Invalid git URL` dans son message.

209 

210Claude Code vérifie chaque adresse git avant d'exécuter git. Il refuse une adresse dont il ne supporte pas le protocole. Il refuse également une adresse que git pourrait lire comme nommant un serveur ou un dossier différent de celui que l'adresse affiche.

211 

212Le texte après l'adresse nomme ce qu'il faut changer. Réécrivez l'adresse comme le message le dit et exécutez à nouveau la commande.

213 

214Un refus qui dit plutôt `is blocked by enterprise policy` provient des paramètres de votre organisation. Consultez [La source de la marketplace est bloquée par la politique d'entreprise](#marketplace-source-is-blocked-by-enterprise-policy).

215 

204<h3 id="path-does-not-exist">216<h3 id="path-does-not-exist">

205 `Path does not exist: <path>`217 `Path does not exist: <path>`

206</h3>218</h3>


410 422 

411`claude plugin install` dans votre shell imprime un message différent. Pour un plugin déjà installé à la portée cible, il imprime `Plugin "<name>@<marketplace>" is already installed (scope: user)` et quitte 0. Si son répertoire de cache est manquant, la même commande le re-télécharge.423`claude plugin install` dans votre shell imprime un message différent. Pour un plugin déjà installé à la portée cible, il imprime `Plugin "<name>@<marketplace>" is already installed (scope: user)` et quitte 0. Si son répertoire de cache est manquant, la même commande le re-télécharge.

412 424 

425<h3 id="plugin-would-share-its-folder">

426 `"<plugin>" was not installed: it would share its folder with "<other>"`

427</h3>

428 

429Vous avez installé un plugin via `claude plugin install`, `/plugin`, ou une suggestion d'installation dans une session, et Claude Code l'a refusé avec cette ligne, ou avec `would share its saved data with`.

430 

431L'id du plugin refusé et l'id d'un plugin installé correspondent au même dossier sur le disque : ils sont identiques une fois que `.` et `@` sont écrits comme `-`. Sur macOS et Windows, les ids qui diffèrent uniquement par les majuscules correspondent également au même dossier. Installer les deux mettrait les fichiers d'un plugin dans le dossier de l'autre, donc Claude Code refuse et le plugin installé conserve ses fichiers.

432 

433Le message nomme la façon de s'en sortir :

434 

435* **L'autre plugin est installé** : le message dit `Only one of the two can be installed.` et nomme la commande `claude plugin uninstall`, ou l'étape de désinstallation dans `/plugin`, qui supprime l'autre plugin. Exécutez-la, puis installez à nouveau. Pour ce que la désinstallation supprime, consultez [Ce qu'une désinstallation supprime et conserve](/docs/fr/plugins/cli-reference#what-an-uninstall-deletes-and-keeps).

436* **Les deux ids arrivent dans une installation**, comme un plugin et une dépendance dont il a besoin : aucun ordre d'installation n'aide. Seul un responsable de la marketplace qui répertorie les deux plugins peut le corriger, en renommant l'un d'eux. Lorsque les deux proviennent de marketplaces différentes, un responsable de l'une ou l'autre peut le faire.

437 

413<h3 id="this-plugin-uses-a-source-type-your-claude-code-version-does-not-suppo">438<h3 id="this-plugin-uses-a-source-type-your-claude-code-version-does-not-suppo">

414 `This plugin uses a source type your Claude Code version does not support`439 `This plugin uses a source type your Claude Code version does not support`

415</h3>440</h3>


790* **`URL is unset or invalid`** : une option `${user_config.*}` que l'URL utilise n'est pas définie. Exécutez `/plugin configure <plugin>` pour la définir815* **`URL is unset or invalid`** : une option `${user_config.*}` que l'URL utilise n'est pas définie. Exécutez `/plugin configure <plugin>` pour la définir

791* **`has an invalid MCP url`** ou **`headersHelper for MCP server '<server>' references ${user_config.*}`** : la configuration du plugin lui-même est en faute. Corrigez l'`url` ou `headersHelper` dans la configuration MCP de votre plugin, ou signalez-le à l'auteur du plugin si le plugin n'est pas le vôtre. Le cas `headersHelper` a sa propre entrée sous [la commande de plugin référence user\_config](/docs/fr/errors#plugin-command-references-user-config)816* **`has an invalid MCP url`** ou **`headersHelper for MCP server '<server>' references ${user_config.*}`** : la configuration du plugin lui-même est en faute. Corrigez l'`url` ou `headersHelper` dans la configuration MCP de votre plugin, ou signalez-le à l'auteur du plugin si le plugin n'est pas le vôtre. Le cas `headersHelper` a sa propre entrée sous [la commande de plugin référence user\_config](/docs/fr/errors#plugin-command-references-user-config)

792 817 

818<h4 id="bundled-mcp-server-name-was-not-started-it-needs-configuration">

819 `Bundled MCP server "<name>" was not started: it needs configuration`

820</h4>

821 

822Le plugin inclut le serveur comme un [bundle MCPB](/docs/fr/plugins/components#include-a-packaged-mcpb-server) qui déclare `user_config`, et un paramètre requis n'a pas de valeur enregistrée encore ou une valeur enregistrée échoue la validation du bundle lui-même, donc Claude Code saute le démarrage du serveur. Le reste du plugin fonctionne.

823 

824Sélectionnez le plugin sur l'onglet **Installed** de `/plugin` et choisissez **Configure** pour fournir les valeurs. Après avoir enregistré, `/plugin` affiche `Configuration saved.` et se ferme, et Claude Code recharge les plugins comme décrit sous [Gérer les plugins installés](/docs/fr/plugins/install#manage-installed-plugins). Le serveur démarre une fois que ce rechargement s'applique. Avant v2.1.285, Claude Code sautait le serveur sans afficher cette ligne.

825 

793<h4 id="server-is-configured-but-never-connects">826<h4 id="server-is-configured-but-never-connects">

794 Le serveur est configuré mais ne se connecte jamais827 Le serveur est configuré mais ne se connecte jamais

795</h4>828</h4>


934 967 

935Votre plugin déclare des options `userConfig`, mais aucune boîte de dialogue de configuration n'apparaît lorsque vous l'installez.968Votre plugin déclare des options `userConfig`, mais aucune boîte de dialogue de configuration n'apparaît lorsque vous l'installez.

936 969 

937L'installation interactive affiche la boîte de dialogue, et la commande shell prend les valeurs comme drapeaux à la place :970Le fait que l'installation demande les valeurs dépend de l'endroit où vous l'exécutez :

938 971 

939* **`/plugin install` dans une session, ou l'onglet Discover dans `/plugin`** : la boîte de dialogue fait partie de cette installation interactive972* **`/plugin install` dans une session, ou l'onglet Discover dans `/plugin`** : la boîte de dialogue fait partie de cette installation interactive

973* **La boîte de dialogue Gérer les plugins de l'extension VS Code** : demande les options non définies sous forme de formulaire après l'installation. Avant v2.1.285, l'installation là-bas n'affichait aucun formulaire d'options, donc définissez les valeurs à partir d'une session de terminal avec `/plugin configure <plugin>@<marketplace>`

940* **`claude plugin install` dans votre shell** : ne demande jamais les valeurs `userConfig`. Il enregistre toutes les valeurs `--config KEY=VALUE` que vous passez, et lorsque les options restent non définies, il imprime `N userConfig options not yet set — run /plugin configure <plugin>@<marketplace> in Claude Code, or pass --config KEY=VALUE.` Lorsque l'une des options non définies est requise, `(M required)` suit `not yet set`.974* **`claude plugin install` dans votre shell** : ne demande jamais les valeurs `userConfig`. Il enregistre toutes les valeurs `--config KEY=VALUE` que vous passez, et lorsque les options restent non définies, il imprime `N userConfig options not yet set — run /plugin configure <plugin>@<marketplace> in Claude Code, or pass --config KEY=VALUE.` Lorsque l'une des options non définies est requise, `(M required)` suit `not yet set`.

941 975 

942Si vous avez installé à partir du shell, passez les valeurs avec `--config`, un drapeau par option :976Si vous avez installé à partir du shell, passez les valeurs avec `--config`, un drapeau par option :


945claude plugin install my-plugin@my-marketplace --config api_url=https://example.com979claude plugin install my-plugin@my-marketplace --config api_url=https://example.com

946```980```

947 981 

948Lorsque chaque option est définie, la sortie d'installation ne porte aucune ligne `not yet set`. Pour ouvrir la boîte de dialogue après coup à la place, exécutez `/plugin configure my-plugin@my-marketplace` dans une session.982Lorsque chaque option est définie, la sortie d'installation ne porte aucune ligne `not yet set`.

983 

984Pour ouvrir la boîte de dialogue après coup à la place, exécutez `/plugin configure my-plugin@my-marketplace` dans une session. À partir du shell, [`claude plugin configure`](/docs/fr/plugins/cli-reference#plugin-configure) affiche les options qui sont toujours non définies et enregistre les valeurs canalisées sur stdin. Cela nécessite Claude Code v2.1.285 ou ultérieur.

949 985 

950Si vous passez une clé `--config` que le manifeste ne déclare pas, le plugin s'installe toujours, et la commande imprime `⚠ Installed, but --config not applied: --config key "<key>" isn't declared in this plugin's userConfig.` suivi des clés que le plugin déclare.986Si vous passez une clé `--config` que le manifeste ne déclare pas, le plugin s'installe toujours, et la commande imprime `⚠ Installed, but --config not applied: --config key "<key>" isn't declared in this plugin's userConfig.` suivi des clés que le plugin déclare.

951 987 

988Pour un plugin qui expédie un [fichier bundle MCPB](/docs/fr/plugins/components#include-a-packaged-mcpb-server) déclarant son propre `user_config`, le message lit `isn't declared in this plugin's userConfig or by its bundled MCP servers.` à la place, et les clés connues incluent les clés de ce serveur, écrites `<server>.<key>`. Un bundle que le manifeste référence par URL n'est pas lu au moment de l'installation, donc ses clés ne sont pas répertoriées et le message dit de le configurer dans `/plugin`. La définition des clés `<server>.<key>` nécessite Claude Code v2.1.285 ou ultérieur.

989 

952<h3 id="claude-plugin-validate-reports-errors">990<h3 id="claude-plugin-validate-reports-errors">

953 `claude plugin validate` signale des erreurs991 `claude plugin validate` signale des erreurs

954</h3>992</h3>


968| `Path contains ".." which could be a path traversal attempt: <path>` | Un chemin de composant échappe au répertoire du plugin. | Utilisez les chemins à l'intérieur de la racine du plugin. |1006| `Path contains ".." which could be a path traversal attempt: <path>` | Un chemin de composant échappe au répertoire du plugin. | Utilisez les chemins à l'intérieur de la racine du plugin. |

969| `Path is a file; skills entries must be directories containing SKILL.md` | Une entrée `skills` pointe vers `SKILL.md` au lieu de son répertoire. | Pointez au répertoire parent, ou `.` pour un `SKILL.md` au niveau racine. |1007| `Path is a file; skills entries must be directories containing SKILL.md` | Une entrée `skills` pointe vers `SKILL.md` au lieu de son répertoire. | Pointez au répertoire parent, ou `.` pour un `SKILL.md` au niveau racine. |

970| `No frontmatter block found` ou `YAML frontmatter failed to parse: <error>` | Un fichier de skill, agent ou commande a un frontmatter YAML manquant ou invalide. | Ajoutez ou corrigez le frontmatter entre les délimiteurs `---`. Signalé lors de la validation d'un répertoire de plugin. |1008| `No frontmatter block found` ou `YAML frontmatter failed to parse: <error>` | Un fichier de skill, agent ou commande a un frontmatter YAML manquant ou invalide. | Ajoutez ou corrigez le frontmatter entre les délimiteurs `---`. Signalé lors de la validation d'un répertoire de plugin. |

1009| `Plugin name "<name>" is reserved: it passes as one of Anthropic's own` | Le nom `name` du plugin est l'un des [noms réservés](/docs/fr/plugins/manifest-reference#name). | Renommez le plugin pour ce qu'il fait. |

971| `Unknown field '<key>'` | Le manifeste a un champ que le schéma ne définit pas. | Supprimez-le, ou utilisez le nom que le message suggère. Claude Code ignore les champs inconnus au moment du chargement. |1010| `Unknown field '<key>'` | Le manifeste a un champ que le schéma ne définit pas. | Supprimez-le, ou utilisez le nom que le message suggère. Claude Code ignore les champs inconnus au moment du chargement. |

972 1011 

973Exécutez la commande à nouveau après chaque correction jusqu'à ce qu'elle n'imprime aucune erreur.1012Exécutez la commande à nouveau après chaque correction jusqu'à ce qu'elle n'imprime aucune erreur.

Details

84<span id="loop-provider-differences" />84<span id="loop-provider-differences" />

85 85 

86<Note>86<Note>

87 Les intervalles choisis dynamiquement et le [prompt de maintenance intégré](#run-the-built-in-maintenance-prompt) fonctionnent sur tous les fournisseurs, et avec [récupération de drapeau de fonctionnalité](/docs/fr/env-vars#features-that-need-feature-flag-fetching) désactivée. Sur Amazon Bedrock, Claude Platform on AWS, Google Cloud's Agent Platform et Microsoft Foundry, ou avec récupération désactivée, les deux nécessitent Claude Code v2.1.248 ou ultérieur. Dans ces cas, sur les versions antérieures, un prompt sans intervalle s'exécute selon un calendrier fixe de 10 minutes, et un `/loop` sans prompt imprime le message d'utilisation.87 Les intervalles choisis dynamiquement et le [prompt de maintenance intégré](#run-the-built-in-maintenance-prompt) fonctionnent sur tous les fournisseurs, et avec [récupération de drapeau de fonctionnalité](/docs/fr/env-vars#features-that-need-feature-flag-fetching) désactivée. Sur Amazon Bedrock, Claude Platform on AWS, Google Cloud's Agent Platform et Microsoft Foundry, ou avec récupération désactivée, les deux nécessitent Claude Code v2.1.248 ou ultérieur.

88</Note>88</Note>

89 89 

90<h3 id="run-the-built-in-maintenance-prompt">90<h3 id="run-the-built-in-maintenance-prompt">

Details

87Un runner sert un propriétaire à la fois. La première session qu'un runner récupère verrouille le runner à ce propriétaire de session, et le runner exécute ensuite les sessions uniquement pour ce propriétaire, jusqu'à une capacité configurée. Qui est le propriétaire dépend de la façon dont la session a démarré :87Un runner sert un propriétaire à la fois. La première session qu'un runner récupère verrouille le runner à ce propriétaire de session, et le runner exécute ensuite les sessions uniquement pour ce propriétaire, jusqu'à une capacité configurée. Qui est le propriétaire dépend de la façon dont la session a démarré :

88 88 

89* **Sessions qu'un utilisateur démarre** : le propriétaire est le compte de cet utilisateur.89* **Sessions qu'un utilisateur démarre** : le propriétaire est le compte de cet utilisateur.

90* **Sessions de canal Claude Tag** : Claude les exécute sans compte utilisateur attaché, donc le propriétaire est l'[agent Claude Tag](https://claude.com/docs/claude-tag/concepts/glossary#agent-identity) qui a démarré la session. Chaque session de canal que cet agent démarre a le même propriétaire, peu importe qui a envoyé le message Slack, donc un runner verrouillé à celui-ci sert les sessions que différentes personnes ont démarrées quand vous l'exécutez à une `--capacity` supérieure à un ou avec un `--drain-grace-sec` positif. Un runner verrouillé à un utilisateur ne récupère jamais ceux-ci, et un runner verrouillé à un agent Claude Tag ne récupère jamais les sessions d'un utilisateur.90* **Sessions de canal Claude Tag** : Claude les exécute sans compte utilisateur attaché, donc le propriétaire est l'[agent Claude Tag](https://claude.com/docs/claude-tag/concepts/glossary#agent-identity) qui a démarré la session. Chaque session de canal que cet agent démarre a le même propriétaire, peu importe qui a envoyé le message Slack, donc un runner verrouillé à celui-ci sert les sessions que différentes personnes ont démarrées quand vous l'exécutez à une `--capacity` supérieure à un ou avec un `--drain-grace-sec` positif.

91 91 

92La taille minimale de la flotte est donc le nombre de propriétaires que vous vous attendez à être actifs à la fois, en comptant les utilisateurs et les agents Claude Tag.92La taille minimale de la flotte est donc le nombre de propriétaires que vous vous attendez à être actifs à la fois, en comptant les utilisateurs et les agents Claude Tag.

93 93 

Details

163 Exceptions par clé entre sources gérées163 Exceptions par clé entre sources gérées

164</h3>164</h3>

165 165 

166Trois types de clés sont des exceptions à la règle de non-fusion :166Ces clés sont des exceptions à la règle de non-fusion :

167 167 

168* **Clés de verrouillage entre sources** : un petit ensemble de clés, telles que les verrous de liste d'autorisation du sandbox, [listées sur la page des paramètres gérés](/docs/fr/managed-settings#precedence-within-the-managed-tier). Claude Code les honore lorsqu'une source gérée contrôlée par un administrateur les définit ; le niveau de registre HKCU inscriptible par l'utilisateur est exclu.168* **Clés de verrouillage entre sources** : un petit ensemble de clés, telles que les verrous de liste d'autorisation du sandbox, [listées sur la page des paramètres gérés](/docs/fr/managed-settings#precedence-within-the-managed-tier). Claude Code les honore lorsqu'une source gérée contrôlée par un administrateur les définit ; le niveau de registre HKCU inscriptible par l'utilisateur est exclu.

169 169 


171* **Le bloc `env`** : à l'exception de l'unité de télémétrie et des variables de routage associées à une clé d'identifiant, toutes deux couvertes ci-dessous, il fusionne par clé entre les sources contrôlées par l'administrateur. Pour chaque variable d'environnement, la source de priorité la plus élevée qui la définit gagne, et les sources d'administrateur inférieures remplissent les variables que les sources supérieures laissent non définies. Une entrée `env` gérée par le point de terminaison s'applique donc chaque fois que la configuration gérée par le serveur laisse cette variable non définie, ou tandis qu'une valeur de serveur en cache pour elle est [retenue en attente de confirmation du serveur](#fetch-and-caching-behavior). Nécessite Claude Code v2.1.223 ou version ultérieure. Avant v2.1.223, Claude Code applique uniquement le bloc `env` de la source sélectionnée.171* **Le bloc `env`** : à l'exception de l'unité de télémétrie et des variables de routage associées à une clé d'identifiant, toutes deux couvertes ci-dessous, il fusionne par clé entre les sources contrôlées par l'administrateur. Pour chaque variable d'environnement, la source de priorité la plus élevée qui la définit gagne, et les sources d'administrateur inférieures remplissent les variables que les sources supérieures laissent non définies. Une entrée `env` gérée par le point de terminaison s'applique donc chaque fois que la configuration gérée par le serveur laisse cette variable non définie, ou tandis qu'une valeur de serveur en cache pour elle est [retenue en attente de confirmation du serveur](#fetch-and-caching-behavior). Nécessite Claude Code v2.1.223 ou version ultérieure. Avant v2.1.223, Claude Code applique uniquement le bloc `env` de la source sélectionnée.

172 * **Unité de télémétrie** : les clés d'exportateur `OTEL_EXPORTER_OTLP_*`, les bascules de capture de contenu `OTEL_LOG_*`, `OTEL_LOGS_EXPORTER`, et les variables de traçage bêta `ENABLE_BETA_TRACING_DETAILED` et `BETA_TRACING_ENDPOINT` suivent la source la plus élevée qui en définit l'une comme unité. Une source qui livre la clé d'identifiant `otelHeadersHelper` revendique également l'unité, mais ne place ces variables que lorsqu'elle est la source sélectionnée : une source qui n'est pas sélectionnée mais livre la clé ne contribue à aucune d'elles et bloque toujours les sources inférieures de les remplir. De toute façon, un point de terminaison d'exportateur d'une source ne peut jamais être associé à des identifiants d'une autre.172 * **Unité de télémétrie** : les clés d'exportateur `OTEL_EXPORTER_OTLP_*`, les bascules de capture de contenu `OTEL_LOG_*`, `OTEL_LOGS_EXPORTER`, et les variables de traçage bêta `ENABLE_BETA_TRACING_DETAILED` et `BETA_TRACING_ENDPOINT` suivent la source la plus élevée qui en définit l'une comme unité. Une source qui livre la clé d'identifiant `otelHeadersHelper` revendique également l'unité, mais ne place ces variables que lorsqu'elle est la source sélectionnée : une source qui n'est pas sélectionnée mais livre la clé ne contribue à aucune d'elles et bloque toujours les sources inférieures de les remplir. De toute façon, un point de terminaison d'exportateur d'une source ne peut jamais être associé à des identifiants d'une autre.

173 * **Routage associé à un identifiant** : une source qui associe des variables de routage à une clé d'identifiant sélectionnée uniquement, telle que `apiKeyHelper` ou `otelHeadersHelper`, contribue ces variables de routage uniquement lorsqu'elle remporte l'emplacement.173 * **Routage associé à un identifiant** : une source qui associe des variables de routage à une clé d'identifiant sélectionnée uniquement, telle que `apiKeyHelper` ou `otelHeadersHelper`, contribue ces variables de routage uniquement lorsqu'elle remporte l'emplacement.

174* **`allowedProviders`** : une liste définie sur la machine et une liste gérée par le serveur se combinent comme [l'entrée de sa note Scope](/docs/fr/settings-reference#allowedproviders) l'indique. Nécessite Claude Code v2.1.285 ou version ultérieure

174* **Clés de connexion à la passerelle** : Claude Code ne lit jamais [`forceLoginGatewayUrl`](/docs/fr/settings-reference#forcelogingatewayurl), [`gatewayInternalNetworks`](/docs/fr/settings-reference#gatewayinternalnetworks), ou la valeur `"gateway"` de [`forceLoginMethod`](/docs/fr/settings-reference#forceloginmethod) à partir des paramètres gérés par le serveur, de sorte qu'une valeur là-bas ne s'applique ni ne masque une définie dans une stratégie MDM ou un fichier de paramètres gérés. L'entrée [`managedSourcesBehavior`](/docs/fr/settings-reference#managedsourcesbehavior) indique quelle source d'administrateur sur la machine les fournit.175* **Clés de connexion à la passerelle** : Claude Code ne lit jamais [`forceLoginGatewayUrl`](/docs/fr/settings-reference#forcelogingatewayurl), [`gatewayInternalNetworks`](/docs/fr/settings-reference#gatewayinternalnetworks), ou la valeur `"gateway"` de [`forceLoginMethod`](/docs/fr/settings-reference#forceloginmethod) à partir des paramètres gérés par le serveur, de sorte qu'une valeur là-bas ne s'applique ni ne masque une définie dans une stratégie MDM ou un fichier de paramètres gérés. L'entrée [`managedSourcesBehavior`](/docs/fr/settings-reference#managedsourcesbehavior) indique quelle source d'administrateur sur la machine les fournit.

175 176 

176<h3 id="fetch-and-caching-behavior">177<h3 id="fetch-and-caching-behavior">

sessions.md +20 −2

Details

29 29 

30`claude --continue` ouvre une [session en arrière-plan](/docs/fr/agent-view) qui s'est terminée, mais pas une qui est toujours en cours d'exécution ; l'ouverture de sessions en arrière-plan terminées nécessite Claude Code v2.1.257 ou ultérieur. Si votre conversation la plus récente est une que vous [avez envoyée en arrière-plan](/docs/fr/agent-view#send-the-session-to-the-background) et qu'elle s'exécute toujours là-bas, Claude Code se termine avec `Your most recent conversation is running in the background` et l'ID de cette session. Attachez-vous à la session depuis [`claude agents`](/docs/fr/agent-view#attach-to-a-session), ou exécutez `claude --resume` pour en choisir une autre.30`claude --continue` ouvre une [session en arrière-plan](/docs/fr/agent-view) qui s'est terminée, mais pas une qui est toujours en cours d'exécution ; l'ouverture de sessions en arrière-plan terminées nécessite Claude Code v2.1.257 ou ultérieur. Si votre conversation la plus récente est une que vous [avez envoyée en arrière-plan](/docs/fr/agent-view#send-the-session-to-the-background) et qu'elle s'exécute toujours là-bas, Claude Code se termine avec `Your most recent conversation is running in the background` et l'ID de cette session. Attachez-vous à la session depuis [`claude agents`](/docs/fr/agent-view#attach-to-a-session), ou exécutez `claude --resume` pour en choisir une autre.

31 31 

32<span id="resume-a-running-background-session" />

33 

34Lorsque la conversation que vous reprenez avec `claude --resume` ou `/resume` appartient à une [session en arrière-plan](/docs/fr/agent-view) qui est toujours en cours d'exécution, Claude Code ouvre la session en cours d'exécution elle-même. Avec `--bg` sur la ligne de commande, la reprise est une [expédition en arrière-plan](/docs/fr/agent-view#from-your-shell) à la place. Avant la v2.1.285, Claude Code refusait et vous disait d'ouvrir la session avec `claude attach <id>`, ou de l'arrêter d'abord avec `claude stop <id>`.

35 

36* **Depuis votre shell** : `claude --resume <session>` exécute [`claude attach`](/docs/fr/agent-view#attach-to-a-session) sur cette session dans le même terminal au lieu de charger la transcription elle-même. Une invite que vous passez sur la ligne de commande, comme dans `claude --resume <session> "check the tests too"`, va à la session comme son prochain tour d'abord, et Claude Code affiche `Sent your prompt to the background session (<id>); opening it…` avant de s'attacher. `claude -p --resume <session> "prompt"` tapé à un terminal fait la même chose, donc `-p` ne garde pas cette exécution non-interactive.

37 

38 Claude Code n'ouvre pas la session lorsque la ligne de commande contient l'un de ceux-ci :

39 

40 * Entrée ou sortie redirigée ou canalisée

41 * Drapeaux qui configurent la session, tels que `--permission-mode`, `--model` ou `--settings`

42 * Drapeaux qui lisent la sortie, tels que `--output-format json` ou `--json-schema`

43 * Drapeaux qui limitent ou rembobinent l'exécution, tels que `--max-turns` ou `--max-budget-usd`

44 

45 Avec l'un de ceux-ci, ou lorsque la [vue agent est désactivée](/docs/fr/agent-view#turn-off-agent-view), Claude Code n'envoie rien et se termine avec le statut 1, en affichant que la session s'exécute en arrière-plan ainsi que la commande `claude attach <id>` qui l'ouvre, ou en vous disant de la trouver dans `claude agents` lorsqu'il ne peut pas déterminer l'ID. Ajoutez `--fork-session` pour reprendre une copie de la conversation à la place. Pour continuer la conversation elle-même dans une session qui vous appartient, avec vos drapeaux appliqués, exécutez `claude stop <id>` puis répétez la commande.

46 

47 Une invite qui commence par `/` ou `!` n'est pas envoyée, et non plus aucune invite pendant que la session attend votre réponse à une question. Dans les deux cas, Claude Code n'ouvre pas la session, et le message inclut `Your prompt was not sent to it` avec la raison.

48* **Depuis l'intérieur d'une session** : `/resume` déplace votre conversation actuelle en arrière-plan et attache ce terminal à la session en cours d'exécution, en affichant `Opening "<title>", running in the background (<id>)`. Appuyez sur `←` sur une invite vide pour revenir à la vue agent, qui liste également la conversation que vous avez laissée. Lorsque la conversation actuelle ne peut pas se déplacer en arrière-plan, par exemple parce que vous êtes déjà attaché à une session en arrière-plan ou que la persistance de session est désactivée, `/resume` affiche la commande `claude attach` à exécuter à la place.

49 

32Vous pouvez exécuter `claude --resume <session-id>` depuis n'importe quel répertoire : Claude Code cherche l'ID dans le répertoire de projet courant et ses git worktrees d'abord, puis dans tous les autres projets sur cette machine, ce qui lui permet de trouver une session qui a démarré ailleurs ou qui s'est déplacée avec [`/cd`](/docs/fr/commands). La recherche inter-projets résout l'ID uniquement lorsqu'exactement un autre projet contient une transcription avec des messages pour celui-ci, donc un doublon copié à la main fait que Claude Code signale non-trouvé plutôt que de reprendre une copie arbitraire. Si aucune session stockée ne correspond à l'ID, Claude Code signale `No conversation found with session ID: <session-id>`. Avant la v2.1.223, la recherche s'arrêtait au répertoire de projet courant et à ses git worktrees, donc vous deviez reprendre depuis le répertoire dans lequel la session avait travaillé en dernier.50Vous pouvez exécuter `claude --resume <session-id>` depuis n'importe quel répertoire : Claude Code cherche l'ID dans le répertoire de projet courant et ses git worktrees d'abord, puis dans tous les autres projets sur cette machine, ce qui lui permet de trouver une session qui a démarré ailleurs ou qui s'est déplacée avec [`/cd`](/docs/fr/commands). La recherche inter-projets résout l'ID uniquement lorsqu'exactement un autre projet contient une transcription avec des messages pour celui-ci, donc un doublon copié à la main fait que Claude Code signale non-trouvé plutôt que de reprendre une copie arbitraire. Si aucune session stockée ne correspond à l'ID, Claude Code signale `No conversation found with session ID: <session-id>`. Avant la v2.1.223, la recherche s'arrêtait au répertoire de projet courant et à ses git worktrees, donc vous deviez reprendre depuis le répertoire dans lequel la session avait travaillé en dernier.

33 51 

34<h3 id="what-a-resumed-session-restores">52<h3 id="what-a-resumed-session-restores">

35 Ce qu'une session reprise restaure53 Ce qu'une session reprise restaure

36</h3>54</h3>

37 55 

38Une session reprise restaure la conversation ainsi que l'état enregistré en elle :56Lorsque Claude Code charge une conversation à partir de sa transcription, la session reprise restaure la conversation ainsi que l'état enregistré en elle :

39 57 

40* Historique de conversation : l'historique complet, y compris les appels d'outils et les résultats. Un outil qui était toujours en cours d'exécution lorsque le processus précédent s'est terminé, par exemple lors d'un plantage, ne se termine pas ou ne s'exécute pas à nouveau lorsque vous reprenez. Claude voit l'appel marqué comme interrompu avant que son résultat ne soit enregistré et on lui dit de vérifier s'il a pris effet avant de l'exécuter à nouveau, sauf si [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/fr/env-vars#variables) est défini. Avant la v2.1.281, Claude Code supprimait l'appel interrompu de la conversation ou le montrait à Claude comme un appel que vous aviez interrompu.58* Historique de conversation : l'historique complet, y compris les appels d'outils et les résultats. Un outil qui était toujours en cours d'exécution lorsque le processus précédent s'est terminé, par exemple lors d'un plantage, ne se termine pas ou ne s'exécute pas à nouveau lorsque vous reprenez. Claude voit l'appel marqué comme interrompu avant que son résultat ne soit enregistré et on lui dit de vérifier s'il a pris effet avant de l'exécuter à nouveau, sauf si [`CLAUDE_CODE_RESUME_INTERRUPTED_TURN`](/docs/fr/env-vars#variables) est défini. Avant la v2.1.281, Claude Code supprimait l'appel interrompu de la conversation ou le montrait à Claude comme un appel que vous aviez interrompu.

41* Modèle : la session continue sur le modèle qu'elle utilisait. Le modèle n'est pas restauré lorsqu'il a été retiré ou n'est pas autorisé par `availableModels`, lorsqu'un drapeau `--model` ou une variable d'environnement de la famille `ANTHROPIC_MODEL` en choisit un au lancement, ou sur les fournisseurs qui utilisent des ID de déploiement spécifiques au fournisseur, tels que [Amazon Bedrock, Google Cloud's Agent Platform et Microsoft Foundry](/docs/fr/third-party-integrations) ; voir [configuration du modèle](/docs/fr/model-config#setting-your-model) pour l'ordre de résolution.59* Modèle : la session continue sur le modèle qu'elle utilisait. Le modèle n'est pas restauré lorsqu'il a été retiré ou n'est pas autorisé par `availableModels`, lorsqu'un drapeau `--model` ou une variable d'environnement de la famille `ANTHROPIC_MODEL` en choisit un au lancement, ou sur les fournisseurs qui utilisent des ID de déploiement spécifiques au fournisseur, tels que [Amazon Bedrock, Google Cloud's Agent Platform et Microsoft Foundry](/docs/fr/third-party-integrations) ; voir [configuration du modèle](/docs/fr/model-config#setting-your-model) pour l'ordre de résolution.


51 Mode de permission à la reprise69 Mode de permission à la reprise

52</h4>70</h4>

53 71 

54Le mode de permission dans lequel Claude Code démarre une session reprise dépend de la façon dont vous la reprenez :72Le mode de permission dans lequel Claude Code démarre une session reprise dépend de la façon dont vous la reprenez. Les cas ci-dessous s'appliquent lorsque Claude Code charge la conversation à partir de sa transcription ; lorsque vous [ouvrez une session en arrière-plan qui est toujours en cours d'exécution](#resume-a-running-background-session) à la place, cette session conserve le mode de permission dans lequel elle se trouve.

55 73 

56* Terminal : `claude --continue`, `claude --resume <session-id>` ou `claude --resume <name>` lorsque le nom correspond à une session, sans `-p`. Claude Code restaure le mode de permission dans lequel se trouvait la session, sauf dans les cas du tableau. Passez `--permission-mode` ou `--dangerously-skip-permissions` pour remplacer le mode restauré.74* Terminal : `claude --continue`, `claude --resume <session-id>` ou `claude --resume <name>` lorsque le nom correspond à une session, sans `-p`. Claude Code restaure le mode de permission dans lequel se trouvait la session, sauf dans les cas du tableau. Passez `--permission-mode` ou `--dangerously-skip-permissions` pour remplacer le mode restauré.

57* Non-interactif : `claude -p --resume` ou `claude -p --continue`. Claude Code démarre l'exécution dans le mode de permission qu'une nouvelle exécution `claude -p` démarrerait, sauf qu'une session qui s'est terminée en mode plan reprend en mode plan selon les [conditions ci-dessous](#resume-in-plan-mode-with-p).75* Non-interactif : `claude -p --resume` ou `claude -p --continue`. Claude Code démarre l'exécution dans le mode de permission qu'une nouvelle exécution `claude -p` démarrerait, sauf qu'une session qui s'est terminée en mode plan reprend en mode plan selon les [conditions ci-dessous](#resume-in-plan-mode-with-p).

Details

599| [`allowedChannelPlugins`](#allowedchannelplugins) | Remplacez la liste d'autorisation par défaut des [plugins de canal](/docs/fr/channels#restrict-which-channel-plugins-can-run) qui peuvent envoyer des messages | Plugins and skills | Managed |599| [`allowedChannelPlugins`](#allowedchannelplugins) | Remplacez la liste d'autorisation par défaut des [plugins de canal](/docs/fr/channels#restrict-which-channel-plugins-can-run) qui peuvent envoyer des messages | Plugins and skills | Managed |

600| [`allowedHttpHookUrls`](#allowedhttphookurls) | Limitez les URL que les [hooks HTTP](/docs/fr/hooks) peuvent cibler | Hooks and automation | Any file |600| [`allowedHttpHookUrls`](#allowedhttphookurls) | Limitez les URL que les [hooks HTTP](/docs/fr/hooks) peuvent cibler | Hooks and automation | Any file |

601| [`allowedMcpServers`](#allowedmcpservers) | Liste d'autorisation des [serveurs MCP](/docs/fr/mcp) que les utilisateurs peuvent ajouter | MCP | Any file |601| [`allowedMcpServers`](#allowedmcpservers) | Liste d'autorisation des [serveurs MCP](/docs/fr/mcp) que les utilisateurs peuvent ajouter | MCP | Any file |

602| [`allowedProviders`](#allowedproviders) | Limitez les [fournisseurs d'API](/docs/fr/third-party-integrations) qu'une machine peut utiliser | Authentication and providers | Managed |

602| [`allowManagedHooksOnly`](#allowmanagedhooksonly) | Exécutez uniquement les [hooks](/docs/fr/hooks) que votre organisation déploie | Hooks and automation | Managed |603| [`allowManagedHooksOnly`](#allowmanagedhooksonly) | Exécutez uniquement les [hooks](/docs/fr/hooks) que votre organisation déploie | Hooks and automation | Managed |

603| [`allowManagedMcpServersOnly`](#allowmanagedmcpserversonly) | Rendez la liste d'autorisation [MCP](/docs/fr/mcp) gérée la seule qui s'applique | MCP | Managed |604| [`allowManagedMcpServersOnly`](#allowmanagedmcpserversonly) | Rendez la liste d'autorisation [MCP](/docs/fr/mcp) gérée la seule qui s'applique | MCP | Managed |

604| [`allowManagedPermissionRulesOnly`](#allowmanagedpermissionrulesonly) | Rendez les [paramètres gérés](/docs/fr/managed-settings) la seule source de paramètres des [règles de permission](/docs/fr/permissions#managed-settings) | Permission settings | Managed |605| [`allowManagedPermissionRulesOnly`](#allowmanagedpermissionrulesonly) | Rendez les [paramètres gérés](/docs/fr/managed-settings) la seule source de paramètres des [règles de permission](/docs/fr/permissions#managed-settings) | Permission settings | Managed |

605| [`alwaysThinkingEnabled`](#alwaysthinkingenabled) | Désactivez la [réflexion étendue](/docs/fr/model-config#extended-thinking) pour chaque session | Model and responses | Any file |606| [`alwaysThinkingEnabled`](#alwaysthinkingenabled) | Désactivez la [réflexion étendue](/docs/fr/model-config#extended-thinking) pour chaque session | Model and responses | Any file |

606| [`apiKeyHelper`](#apikeyhelper) | Générez les [identifiants API](/docs/fr/authentication#credential-management) avec votre propre commande | Authentication and providers | Any file |607| [`apiKeyHelper`](#apikeyhelper) | Générez les [identifiants API](/docs/fr/authentication#credential-management) avec votre propre commande | Authentication and providers | Any file |

607| [`askUserQuestionTimeout`](#askuserquestiontimeout) | Laissez une question sans réponse [continuer automatiquement](/docs/fr/tools-reference#question-auto-continue-timeout) après un temps d'inactivité | Interface and terminal | User or managed |608| [`askUserQuestionTimeout`](#askuserquestiontimeout) | Laissez une question sans réponse [continuer automatiquement](/docs/fr/tools-reference#question-auto-continue-timeout) après un temps d'inactivité | Interface and terminal | User or managed |

609| [`appendPlugins`](#appendplugins) | Exécutez les [mods](/docs/fr/plugins/mods/admin) de votre organisation après chaque mod qu'un utilisateur installe | Plugins and skills | User or managed |

608| [`attribution`](#attribution) | Personnalisez l'attribution que Claude Code ajoute aux commits et aux demandes de tirage | Git and attribution | Any file |610| [`attribution`](#attribution) | Personnalisez l'attribution que Claude Code ajoute aux commits et aux demandes de tirage | Git and attribution | Any file |

609| [`attribution.commit`](#attribution-commit) | Modifiez ou masquez la bande-annonce que Claude Code ajoute aux commits | Git and attribution | Any file |611| [`attribution.commit`](#attribution-commit) | Modifiez ou masquez la bande-annonce que Claude Code ajoute aux commits | Git and attribution | Any file |

610| [`attribution.pr`](#attribution-pr) | Modifiez ou masquez la ligne d'attribution dans les descriptions des demandes de tirage | Git and attribution | Any file |612| [`attribution.pr`](#attribution-pr) | Modifiez ou masquez la ligne d'attribution dans les descriptions des demandes de tirage | Git and attribution | Any file |


729| [`policyHelper.timeoutMs`](#policyhelper-timeoutms) | Définissez le temps que Claude Code attend pour l'[aide](/docs/fr/managed-settings#compute-the-policy-with-a-helper-program) | Enterprise and managed settings | Managed |731| [`policyHelper.timeoutMs`](#policyhelper-timeoutms) | Définissez le temps que Claude Code attend pour l'[aide](/docs/fr/managed-settings#compute-the-policy-with-a-helper-program) | Enterprise and managed settings | Managed |

730| [`preferredNotifChannel`](#preferrednotifchannel) | Choisissez une [sonnerie de terminal ou une notification de bureau](/docs/fr/terminal-config#get-a-terminal-bell-or-notification) pour l'achèvement des tâches | Remote, desktop, and notifications | Any file |732| [`preferredNotifChannel`](#preferrednotifchannel) | Choisissez une [sonnerie de terminal ou une notification de bureau](/docs/fr/terminal-config#get-a-terminal-bell-or-notification) pour l'achèvement des tâches | Remote, desktop, and notifications | Any file |

731| [`prefersReducedMotion`](#prefersreducedmotion) | [Réduisez ou désactivez](/docs/fr/accessibility#accessibility-settings) les animations de spinner, shimmer et flash | Interface and terminal | Any file |733| [`prefersReducedMotion`](#prefersreducedmotion) | [Réduisez ou désactivez](/docs/fr/accessibility#accessibility-settings) les animations de spinner, shimmer et flash | Interface and terminal | Any file |

734| [`prependPlugins`](#prependplugins) | Exécutez les [mods](/docs/fr/plugins/mods/admin) de votre organisation avant chaque mod qu'un utilisateur installe | Plugins and skills | User or managed |

732| [`processWrapper`](#processwrapper) | Exécutez les processus d'arrière-plan de Claude Code via un [lanceur d'entreprise](/docs/fr/corporate-launcher) sur macOS et Linux | Agents, sessions, and worktrees | User or managed |735| [`processWrapper`](#processwrapper) | Exécutez les processus d'arrière-plan de Claude Code via un [lanceur d'entreprise](/docs/fr/corporate-launcher) sur macOS et Linux | Agents, sessions, and worktrees | User or managed |

733| [`promptCacheTtl`](#promptcachettl) | Choisissez la [durée de vie du cache d'invite](/docs/fr/prompt-caching#cache-lifetime) pour la conversation principale | Model and responses | Any file |736| [`promptCacheTtl`](#promptcachettl) | Choisissez la [durée de vie du cache d'invite](/docs/fr/prompt-caching#cache-lifetime) pour la conversation principale | Model and responses | Any file |

734| [`promptSuggestionEnabled`](#promptsuggestionenabled) | Masquez les [suggestions d'invite](/docs/fr/interactive-mode#prompt-suggestions) grisées dans la zone d'entrée | Interface and terminal | Any file |737| [`promptSuggestionEnabled`](#promptsuggestionenabled) | Masquez les [suggestions d'invite](/docs/fr/interactive-mode#prompt-suggestions) grisées dans la zone d'entrée | Interface and terminal | Any file |


3675 `spinnerTipsOverride`3678 `spinnerTipsOverride`

3676</h3>3679</h3>

3677 3680 

3678Ajoutez vos propres conseils aux [conseils du spinner](#spinnertipsenabled) que Claude Code affiche tandis que Claude travaille, ou remplacez les conseils intégrés par les vôtres. Claude Code met vos conseils dans la même rotation que les conseils intégrés : il choisit le conseil qui n'a pas été affiché le plus longtemps, ignore les conseils toujours dans leur période de refroidissement, et rompt les égalités par priorité.3681Ajoutez vos propres conseils aux [conseils du spinner](#spinnertipsenabled) que Claude Code affiche tandis que Claude travaille, ou remplacez les conseils intégrés par les vôtres. Claude Code met vos conseils dans la même rotation que les conseils intégrés.

3679 3682 

3680Si vous définissez [`spinnerTipsEnabled`](#spinnertipsenabled) à `false`, Claude Code masque tous les conseils, les vôtres inclus.3683Si vous définissez [`spinnerTipsEnabled`](#spinnertipsenabled) à `false`, Claude Code masque tous les conseils, les vôtres inclus.

3681 3684 


3683* **Type** : objet avec les champs `tips`, `tipsFile`, `label`, et `excludeDefault`, chacun optionnel3686* **Type** : objet avec les champs `tips`, `tipsFile`, `label`, et `excludeDefault`, chacun optionnel

3684* **Défaut** : non défini, donc Claude Code affiche uniquement les conseils intégrés3687* **Défaut** : non défini, donc Claude Code affiche uniquement les conseils intégrés

3685 3688 

3686Les objets de conseil, `tipsFile`, `label`, et la règle de la ligne Portée selon laquelle les paramètres de projet et local ne contribuent que des chaînes de caractères simples nécessitent Claude Code v2.1.247 ou ultérieur. Sur les versions antérieures, l'`excludeDefault` d'un fichier de projet ou local s'applique également.3689Les objets de conseil, `tipsFile`, `label`, et la règle de la ligne Portée selon laquelle les paramètres de projet et local ne contribuent que des chaînes de caractères simples nécessitent Claude Code v2.1.247 ou ultérieur.

3687 3690 

3688Chaque entrée `tips` est une chaîne de caractères simple ou un objet avec ces champs :3691Chaque entrée `tips` est une chaîne de caractères simple ou un objet avec ces champs :

3689 3692 


4305Lorsque vous le définissez à `true`, Claude Code change les hooks et les commandes de type hook qui se chargent :4308Lorsque vous le définissez à `true`, Claude Code change les hooks et les commandes de type hook qui se chargent :

4306 4309 

4307* **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](/docs/fr/agent-sdk/overview) enregistre en processus4310* **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](/docs/fr/agent-sdk/overview) enregistre en processus

4308* **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 reste4311* **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](/docs/fr/plugins/mods/overview) dans un tel plugin se charge uniquement lorsqu'il [compte comme celui de votre organisation](/docs/fr/plugins/mods/admin#install-your-organizations-mods)

4309* **Tout le reste est bloqué** : les hooks utilisateur, projet et local, les hooks d'autres plugins, et les hooks déclarés dans le frontmatter de l'agent4312* **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](/docs/fr/plugins/mods/overview#mods-built-into-claude-code) continuent de s'exécuter. Pour bloquer uniquement les mods des utilisateurs, définissez [`allowManagedModsOnly`](/docs/fr/plugins/mods/admin#set-options-on-the-built-in-guard) à la place.

4310* **Les plugins sourced par commande sont désactivés** : Claude Code désactive également les plugins avec une [`command` source](/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`4313* **Les plugins sourced par commande sont désactivés** : Claude Code désactive également les plugins avec une [`command` source](/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`

4311* **Les commandes `headersHelper` de la marketplace sont bloquées** : Claude Code bloque également les commandes [`headersHelper`](/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érieur4314* **Les commandes `headersHelper` de la marketplace sont bloquées** : Claude Code bloque également les commandes [`headersHelper`](/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

4312* **La ligne d'état et la suggestion de fichier se limitent aux paramètres gérés** : Claude Code lit [`statusLine`](/docs/fr/statusline), [`fileSuggestion`](#filesuggestion) et [`subagentStatusLine`](/docs/fr/statusline#subagent-status-lines) uniquement à partir des paramètres gérés, en suivant les [portes de ligne d'état et de suggestion de fichier](#status-line-and-file-suggestion-gates)4315* **La ligne d'état et la suggestion de fichier se limitent aux paramètres gérés** : Claude Code lit [`statusLine`](/docs/fr/statusline), [`fileSuggestion`](#filesuggestion) et [`subagentStatusLine`](/docs/fr/statusline#subagent-status-lines) uniquement à partir des paramètres gérés, en suivant les [portes de ligne d'état et de suggestion de fichier](#status-line-and-file-suggestion-gates)


5045* **`git`** : n'importe quelle URL git, avec `url`5048* **`git`** : n'importe quelle URL git, avec `url`

5046* **`url`** : une URL directe vers un fichier `marketplace.json`, avec `url` et `headers` optionnel et `headersHelper` pour l'accès authentifié. `headersHelper` nomme une commande qui imprime les en-têtes dont les valeurs sont trop éphémères pour lister dans `headers`, et nécessite Claude Code v2.1.238 ou ultérieur5049* **`url`** : une URL directe vers un fichier `marketplace.json`, avec `url` et `headers` optionnel et `headersHelper` pour l'accès authentifié. `headersHelper` nomme une commande qui imprime les en-têtes dont les valeurs sont trop éphémères pour lister dans `headers`, et nécessite Claude Code v2.1.238 ou ultérieur

5047* **`file`** : un chemin local vers un fichier `marketplace.json`, avec `path`5050* **`file`** : un chemin local vers un fichier `marketplace.json`, avec `path`

5048* **`directory`** : un chemin du système de fichiers local, avec `path`, pour le développement uniquement5051* **`directory`** : un chemin du système de fichiers local, avec `path`. Utilisez-le pour le développement, ou pour une marketplace que votre organisation [déploie sur chaque machine](/docs/fr/plugins/mods/admin#install-your-organizations-mods).

5049* **`settings`** : une marketplace en ligne déclarée directement dans le fichier de paramètres sans référentiel hébergé, avec `name` et `plugins`5052* **`settings`** : une marketplace en ligne déclarée directement dans le fichier de paramètres sans référentiel hébergé, avec `name` et `plugins`

5050 5053 

5051Le type de source `git` fonctionne avec n'importe quel service d'hébergement git, y compris GitLab auto-hébergé et Bitbucket. Claude Code clone le référentiel avec la même authentification que `git clone` utiliserait sur cette machine : assistants d'authentification configurés ou clés SSH. Un jeton de fournisseur tel que `GITHUB_TOKEN` prend effet via un assistant d'authentification qui le lit. Consultez [Référentiels privés](/docs/fr/plugins/host-marketplace#grant-access-to-a-private-marketplace) pour les détails de configuration.5054Le type de source `git` fonctionne avec n'importe quel service d'hébergement git, y compris GitLab auto-hébergé et Bitbucket. Claude Code clone le référentiel avec la même authentification que `git clone` utiliserait sur cette machine : assistants d'authentification configurés ou clés SSH. Un jeton de fournisseur tel que `GITHUB_TOKEN` prend effet via un assistant d'authentification qui le lit. Consultez [Référentiels privés](/docs/fr/plugins/host-marketplace#grant-access-to-a-private-marketplace) pour les détails de configuration.


5132 5135 

5133Claude Code ignore les entrées de projet et locales car il substitue ces valeurs dans les configurations de hook, MCP et LSP du plugin, et un référentiel cloné ne doit pas pouvoir les fournir. Avant v2.1.207, les paramètres de projet et locaux étaient également lus.5136Claude Code ignore les entrées de projet et locales car il substitue ces valeurs dans les configurations de hook, MCP et LSP du plugin, et un référentiel cloné ne doit pas pouvoir les fournir. Avant v2.1.207, les paramètres de projet et locaux étaient également lus.

5134 5137 

5138<h3 id="prependplugins">

5139 `prependPlugins`

5140</h3>

5141 

5142Listez les plugins gérés dont les [mods](/docs/fr/plugins/mods/overview) s'exécutent avant chaque mod qu'un utilisateur installe, dans l'ordre listé. Lorsque vous définissez cette clé dans les paramètres gérés, nommez `sec-default@builtin` dans la liste pour conserver la garde intégrée. Dans les paramètres gérés, Claude Code ignore un id dont le plugin ne compte pas comme celui de votre organisation. Consultez [Installer les mods de votre organisation et définir l'ordre](/docs/fr/plugins/mods/admin#install-your-organizations-mods) pour ces conditions et pour la façon dont les deux clés de commande fonctionnent ensemble.

5143 

5144* **Scope** : [`User or managed`](#scopes). Claude Code lit la clé à partir des paramètres gérés. Il lit la clé à partir des paramètres utilisateur uniquement sur une machine sans paramètres gérés, pour un utilisateur qui n'est pas connecté avec un plan Team ou Enterprise. Il ignore la clé dans les paramètres de projet et locaux et dans un fichier `--settings`.

5145* **Type** : tableau de chaînes `plugin-name@marketplace-name`

5146* **Default** : unset

5147 

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

5149{

5150 "extraKnownMarketplaces": {

5151 "acme-tools": {

5152 "source": { "source": "directory", "path": "/opt/acme/claude-plugins" }

5153 }

5154 },

5155 "enabledPlugins": { "acme-guard@acme-tools": true },

5156 "prependPlugins": ["acme-guard@acme-tools", "sec-default@builtin"]

5157}

5158```

5159 

5160<h3 id="appendplugins">

5161 `appendPlugins`

5162</h3>

5163 

5164Listez les plugins gérés dont les [mods](/docs/fr/plugins/mods/overview) s'exécutent après chaque mod qu'un utilisateur installe, dans l'ordre listé. Un id listé dans `prependPlugins` et `appendPlugins` est préfixé. Dans les paramètres gérés, Claude Code ignore un id dont le plugin ne [compte pas comme celui de votre organisation](/docs/fr/plugins/mods/admin#install-your-organizations-mods).

5165 

5166* **Scope** : [`User or managed`](#scopes). Claude Code lit la clé à partir des paramètres gérés. Il lit la clé à partir des paramètres utilisateur uniquement sur une machine sans paramètres gérés, pour un utilisateur qui n'est pas connecté avec un plan Team ou Enterprise. Il ignore la clé dans les paramètres de projet et locaux et dans un fichier `--settings`.

5167* **Type** : tableau de chaînes `plugin-name@marketplace-name`

5168* **Default** : unset

5169 

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

5171{

5172 "extraKnownMarketplaces": {

5173 "acme-tools": {

5174 "source": { "source": "directory", "path": "/opt/acme/claude-plugins" }

5175 }

5176 },

5177 "enabledPlugins": { "acme-audit@acme-tools": true },

5178 "appendPlugins": ["acme-audit@acme-tools"]

5179}

5180```

5181 

5135<h2 id="mcp">5182<h2 id="mcp">

5136 MCP5183 MCP

5137</h2>5184</h2>


5652 5699 

5653* **Portée** : [`Tout fichier`](#scopes)5700* **Portée** : [`Tout fichier`](#scopes)

5654* **Type** : Booléen5701* **Type** : Booléen

5655 * `true` : Claude Code désactive l'outil Artifact pour chaque session à laquelle le fichier s'applique, et aucun autre fichier ne le réactive. Avant v2.1.242, un fichier de priorité plus élevée pouvait remplacer le `true` d'un fichier de priorité inférieure plutôt que la clé agissant comme un verrou5702 * `true` : Claude Code désactive l'outil Artifact pour chaque session à laquelle le fichier s'applique, et aucun autre fichier ne le réactive

5656 * `false` : ignoré ; pour laisser l'outil activé, supprimez la clé5703 * `false` : ignoré ; pour laisser l'outil activé, supprimez la clé

5657* **Défaut** : non défini, donc l'outil suit la [disponibilité](/docs/fr/artifacts#availability) de votre compte5704* **Défaut** : non défini, donc l'outil suit la [disponibilité](/docs/fr/artifacts#availability) de votre compte

5658* **Remplacements par session** : [`CLAUDE_CODE_DISABLE_ARTIFACT`](/docs/fr/env-vars) défini sur `1` désactive l'outil pour une session5705* **Remplacements par session** : [`CLAUDE_CODE_DISABLE_ARTIFACT`](/docs/fr/env-vars) défini sur `1` désactive l'outil pour une session


5739}5786}

5740```5787```

5741 5788 

5742Tant qu'une source autre que vos propres paramètres utilisateur garde l'outil désactivé, Claude Code masque la ligne **Artifacts** dans `/config`, car l'activer là ne changerait rien. [Désactiver les artifacts](/docs/fr/artifacts#disable-artifacts) énumère tous les moyens de désactiver l'outil. Avant v2.1.242, Claude Code ignorait cette clé dans les paramètres de projet et locaux, et un fichier plus haut dans la [pile de priorité](/docs/fr/settings#settings-precedence) pouvait réactiver l'outil sur le désactiver d'un fichier inférieur.5789Tant qu'une source autre que vos propres paramètres utilisateur garde l'outil désactivé, Claude Code masque la ligne **Artifacts** dans `/config`, car l'activer là ne changerait rien. [Désactiver les artifacts](/docs/fr/artifacts#disable-artifacts) énumère tous les moyens de désactiver l'outil.

5743 5790 

5744<h3 id="inputneedednotifenabled">5791<h3 id="inputneedednotifenabled">

5745 `inputNeededNotifEnabled`5792 `inputNeededNotifEnabled`


5878 5925 

5879Fournissez les identifiants via des scripts d'aide et, pour les organisations, forcez une méthode de connexion ou une organisation. Voir [Authentification](/docs/fr/authentication).5926Fournissez les identifiants via des scripts d'aide et, pour les organisations, forcez une méthode de connexion ou une organisation. Voir [Authentification](/docs/fr/authentication).

5880 5927 

5928<h3 id="allowedproviders">

5929 `allowedProviders`

5930</h3>

5931 

5932Listez les services par lesquels une machine peut accéder à Claude, tels que l'API Anthropic, Amazon Bedrock ou une passerelle LLM. Une session sur un fournisseur qui n'est pas listé est refusée au démarrage, à la connexion et lorsqu'elle contacte ensuite l'API, donc le passage à un fournisseur non listé en cours de session est également refusé. Le [message de refus](/docs/fr/errors#managed-settings-dont-allow-this-api-provider) indique ce qui a sélectionné le fournisseur et les étapes à suivre. Nécessite Claude Code v2.1.285 ou ultérieur.

5933 

5934* **Portée** : [`Managed`](#scopes). Une liste que les sources d'administrateur de la machine définissent, les politiques MDM et les fichiers de paramètres gérés continuent d'appliquer lorsque les paramètres gérés par le serveur en fournissent également une : une session ne peut alors utiliser que les fournisseurs sur les deux listes, donc une liste gérée par le serveur peut réduire ce que la machine autorise mais jamais l'élargir. La source de machine dont `allowedProviders` compte suit [comment Claude Code combine les sources gérées](/docs/fr/managed-settings#how-claude-code-combines-managed-sources). Une liste fournie uniquement par les paramètres gérés par le serveur n'atteint que les sessions qui [récupèrent les paramètres gérés par le serveur](/docs/fr/server-managed-settings#platform-availability).

5935* **Type** : tableau de chaînes, chacune étant :

5936 * `"anthropic"` : l'API Anthropic sur le propre serveur d'Anthropic, via une connexion claude.ai ou Console ou une clé API. Associez-la à [`forceLoginMethod`](#forceloginmethod) ou [`forceLoginOrgUUID`](#forceloginorguuid) pour restreindre également la connexion

5937 * `"bedrock"` : [Amazon Bedrock](/docs/fr/amazon-bedrock)

5938 * `"vertex"` : [Agent Platform de Google Cloud](/docs/fr/google-vertex-ai), anciennement Vertex AI

5939 * `"foundry"` : [Microsoft Foundry](/docs/fr/microsoft-foundry)

5940 * `"anthropicAws"` : [Claude Platform sur AWS](/docs/fr/claude-platform-on-aws)

5941 * `"mantle"` : le point de terminaison Amazon Bedrock [Mantle](/docs/fr/amazon-bedrock#use-the-mantle-endpoint). Une session qui [exécute Mantle aux côtés de l'API Invoke](/docs/fr/amazon-bedrock#run-mantle-alongside-the-invoke-api) utilise les deux fournisseurs, donc listez `"bedrock"` et `"mantle"` ensemble pour cela

5942 * `"customEndpoint"` : l'API Anthropic ou l'API d'un fournisseur cloud envoyée à un autre serveur, tel qu'une [passerelle LLM](/docs/fr/llm-gateway) nommée par `ANTHROPIC_BASE_URL`, une variable `ANTHROPIC_*_BASE_URL` du fournisseur, ou une valeur `ANTHROPIC_FOUNDRY_RESOURCE` qui n'est pas un nom de ressource nu. Claude Code l'admet uniquement pour la valeur exacte qu'un bloc [`env`](#env) géré épingle

5943 * `"gateway"` : une connexion [passerelle Cloud](/docs/fr/claude-apps-gateway)

5944* **Défaut** : non défini, donc n'importe quel fournisseur peut être utilisé

5945 

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

5947{

5948 "allowedProviders": ["anthropic", "bedrock"]

5949}

5950```

5951 

5952L'entrée de chaque fournisseur cloud signifie le propre service de ce fournisseur, y compris ses points de terminaison régionaux, FIPS et privés.

5953 

5954Une entrée que Claude Code ne reconnaît pas comme un nom de fournisseur est supprimée et signalée, et le reste de la liste reste appliqué. Avec une liste vide, ou une dont chaque entrée n'est pas reconnue, Claude Code refuse chaque fournisseur et ne démarre pas sur la machine.

5955 

5956<h4 id="endpoints-that-need-a-pin-in-managed-env">

5957 Points de terminaison qui nécessitent une épingle dans `env` géré

5958</h4>

5959 

5960Une épingle est la valeur d'une variable de point de terminaison définie dans un bloc [`env`](#env) géré. Lorsqu'une session envoie le trafic d'un fournisseur ailleurs que vers le propre service de ce fournisseur, Claude Code l'admet uniquement si la valeur de la session est la même que l'épingle. Ces points de terminaison en ont besoin :

5961 

5962* **Sessions `"customEndpoint"`** : la variable qui nomme l'hôte, telle que `ANTHROPIC_BASE_URL`

5963* **Amazon Bedrock** : les variables `AWS_ENDPOINT_URL`, `AWS_ENDPOINT_URL_BEDROCK` et `AWS_ENDPOINT_URL_BEDROCK_RUNTIME` du SDK AWS lorsqu'elles pointent en dehors du propre service de Bedrock. La session reste sous `"bedrock"` plutôt que sous `"customEndpoint"`

5964* **L'URL de connexion d'une passerelle** : la session reste sous `"gateway"`, et [`forceLoginGatewayUrl`](#forcelogingatewayurl) compte également comme l'épingle

5965 

5966Les blocs `env` qui comptent comme des épingles dépendent de l'endroit où la liste est définie :

5967 

5968* **Une source d'administrateur sur la machine définit une liste** : seuls les blocs `env` des sources d'administrateur de la machine comptent

5969* **Seuls les paramètres gérés par le serveur définissent une liste** : une valeur `env` dans ces paramètres gérés par le serveur compte également

5970 

5971La liste ne juge pas les variables de credential et de tenancy d'un fournisseur cloud ou le chemin réseau, tels que `HTTPS_PROXY` et les paramètres de certificat. Définissez-les pour la flotte dans le bloc `env` géré.

5972 

5881<h3 id="apikeyhelper">5973<h3 id="apikeyhelper">

5882 `apiKeyHelper`5974 `apiKeyHelper`

5883</h3>5975</h3>

5884 5976 

5885Exécutez votre propre commande pour produire l'identifiant que Claude Code envoie avec les demandes de modèle. Claude Code exécute la commande via le shell système, `/bin/sh` sur macOS et Linux et `cmd` sur Windows, et envoie sa sortie comme en-têtes `X-Api-Key` et `Authorization: Bearer`. Utilisez-le pour les identifiants dynamiques ou rotatifs, tels que les jetons de courte durée récupérés à partir d'un coffre-fort.5977Exécutez votre propre commande pour produire l'identifiant que Claude Code envoie avec les demandes de modèle. Claude Code exécute la commande via le shell système, `/bin/sh` sur macOS et Linux et `cmd` sur Windows, et envoie sa sortie comme en-têtes `X-Api-Key` et `Authorization: Bearer`. Utilisez-la pour les identifiants dynamiques ou rotatifs, tels que les jetons de courte durée récupérés d'un coffre.

5886 5978 

5887* **Portée** : [`Any file`](#scopes)5979* **Portée** : [`Any file`](#scopes)

5888* **Type** : chaîne, une ligne de commande shell5980* **Type** : chaîne, une ligne de commande shell

5889* **Par défaut** : non défini, donc Claude Code n'exécute pas d'aide5981* **Défaut** : non défini, donc Claude Code n'exécute pas d'aide

5890 5982 

5891```json settings.json theme={null}5983```json settings.json theme={null}

5892{5984{


5902 5994 

5903Les deux derniers cas s'appliquent uniquement lorsque la sortie de l'aide est l'identifiant que Claude Code envoie et que `ANTHROPIC_AUTH_TOKEN` n'est pas défini.5995Les deux derniers cas s'appliquent uniquement lorsque la sortie de l'aide est l'identifiant que Claude Code envoie et que `ANTHROPIC_AUTH_TOKEN` n'est pas défini.

5904 5996 

5905Dans les sessions interactives, lorsque la commande provient des paramètres du projet ou locaux, Claude Code ne l'exécute pas jusqu'à ce que vous acceptiez l'invite de confiance de l'espace de travail. Voir [Gestion des identifiants](/docs/fr/authentication#credential-management).5997Dans les sessions interactives, lorsque la commande provient des paramètres de projet ou locaux, Claude Code ne l'exécute pas jusqu'à ce que vous acceptiez l'invite de confiance de l'espace de travail. Voir [Gestion des identifiants](/docs/fr/authentication#credential-management).

5906 5998 

5907<h3 id="awsauthrefresh">5999<h3 id="awsauthrefresh">

5908 `awsAuthRefresh`6000 `awsAuthRefresh`


5912 6004 

5913* **Portée** : [`Any file`](#scopes)6005* **Portée** : [`Any file`](#scopes)

5914* **Type** : chaîne, une ligne de commande shell6006* **Type** : chaîne, une ligne de commande shell

5915* **Par défaut** : non défini, donc Claude Code n'actualise pas les identifiants AWS pour vous6007* **Défaut** : non défini, donc Claude Code n'actualise pas les identifiants AWS pour vous

5916 6008 

5917```json settings.json theme={null}6009```json settings.json theme={null}

5918{6010{


5926 `awsCredentialExport`6018 `awsCredentialExport`

5927</h3>6019</h3>

5928 6020 

5929Exécutez votre propre commande qui imprime les identifiants AWS en JSON, afin que Claude Code puisse appeler [Amazon Bedrock](/docs/fr/amazon-bedrock) avec des identifiants qui ne vivent pas dans votre répertoire `.aws`. Claude Code accepte la forme de sortie `aws sts` et la forme plate `aws configure export-credentials`, et limite les identifiants à son propre client Bedrock, de sorte que les commandes shell que Claude Code exécute voient toujours vos identifiants ambiants.6021Exécutez votre propre commande qui imprime les identifiants AWS en JSON, afin que Claude Code puisse appeler [Amazon Bedrock](/docs/fr/amazon-bedrock) avec des identifiants qui ne vivent pas dans votre répertoire `.aws`. Claude Code accepte la forme de sortie `aws sts` et la forme plate `aws configure export-credentials`, et limite les identifiants à son propre client Bedrock, donc les commandes shell que Claude exécute voient toujours vos identifiants ambiants.

5930 6022 

5931* **Portée** : [`Any file`](#scopes)6023* **Portée** : [`Any file`](#scopes)

5932* **Type** : chaîne, une ligne de commande shell6024* **Type** : chaîne, une ligne de commande shell

5933* **Par défaut** : non défini, donc Claude Code utilise la chaîne d'identifiants AWS ambiante6025* **Défaut** : non défini, donc Claude Code utilise la chaîne d'identifiants AWS ambiante

5934 6026 

5935```json settings.json theme={null}6027```json settings.json theme={null}

5936{6028{


5944 `forceLoginMethod`6036 `forceLoginMethod`

5945</h3>6037</h3>

5946 6038 

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

5948 6040 

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

5950* **Type** : chaîne, l'une des :6042* **Type** : chaîne, l'une de :

5951 * `"claudeai"` : seuls les comptes claude.ai peuvent se connecter6043 * `"claudeai"` : seuls les comptes claude.ai peuvent se connecter

5952 * `"console"` : seuls les comptes Claude Console peuvent se connecter6044 * `"console"` : seuls les comptes Claude Console peuvent se connecter

5953 * `"gateway"` : Claude Code envoie les gens vers une passerelle cloud au lieu d'une connexion propriétaire6045 * `"gateway"` : Claude Code envoie les gens vers une passerelle cloud au lieu d'une connexion propriétaire

5954* **Par défaut** : non défini, donc les gens choisissent une méthode de connexion6046* **Défaut** : non défini, donc les gens choisissent une méthode de connexion

5955 6047 

5956```json settings.json theme={null}6048```json settings.json theme={null}

5957{6049{


5959}6051}

5960```6052```

5961 6053 

5962Chaque chemin de connexion propriétaire applique la restriction, y compris l'[extension VS Code](/docs/fr/vs-code), le SDK Agent, `claude setup-token`, et `/install-github-app`, sauf l'écran de connexion interactif du terminal, accessible via `/login` ou l'intégration au premier lancement, qui présélectionne la méthode sans l'appliquer. Avant v2.1.212, seules les connexions au terminal l'appliquaient. Voir [Restreindre la connexion à votre organisation](/docs/fr/authentication#restrict-login-to-your-organization) pour savoir comment chaque chemin de connexion, les identifiants d'environnement et les fournisseurs tiers sont traités.6054Chaque chemin de connexion propriétaire applique la restriction, y compris l'[extension VS Code](/docs/fr/vs-code), le SDK Agent, `claude setup-token` et `/install-github-app`, sauf l'écran de connexion interactif du terminal, accessible par `/login` ou l'intégration au premier lancement, qui présélectionne la méthode sans l'appliquer. Avant v2.1.212, seules les connexions au terminal l'appliquaient. Voir [Restreindre la connexion à votre organisation](/docs/fr/authentication#restrict-login-to-your-organization) pour savoir comment chaque chemin de connexion, les identifiants d'environnement et les fournisseurs tiers sont traités.

5963 6055 

5964Lorsqu'une source gérée sur la machine définit `"gateway"`, Claude Code n'utilise pas une connexion restante, une clé API ou un identifiant d'aide `apiKeyHelper`. Voir [La politique de l'administrateur nécessite une connexion à la passerelle Cloud](/docs/fr/errors#administrator-policy-requires-a-cloud-gateway-sign-in) pour le message que chacun produit. Si vous sélectionnez un fournisseur cloud via `CLAUDE_CODE_USE_BEDROCK` ou une variable d'environnement similaire, la session n'a pas besoin de la connexion à la passerelle. Avant v2.1.261, Claude Code utilisait une connexion restante sur ces machines.6056Lorsqu'une source gérée sur la machine définit `"gateway"`, Claude Code n'utilise pas une connexion restante, une clé API ou un identifiant d'aide `apiKeyHelper`. Voir [La politique de l'administrateur nécessite une connexion à la passerelle Cloud](/docs/fr/errors#administrator-policy-requires-a-cloud-gateway-sign-in) pour le message que chacun produit. Si vous sélectionnez un fournisseur cloud via `CLAUDE_CODE_USE_BEDROCK` ou une variable d'environnement similaire, la session n'a pas besoin de la connexion à la passerelle. Avant v2.1.261, Claude Code utilisait une connexion restante sur ces machines.

5965 6057 


5967 `forceLoginGatewayUrl`6059 `forceLoginGatewayUrl`

5968</h3>6060</h3>

5969 6061 

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

5971 6063 

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

5973 6065 

5974* **Portée** : [`Managed`](#scopes). Lecture uniquement à partir d'une source sur la machine : `managed-settings.json`, la plist macOS ou le registre Windows HKLM, ou un aide de politique. Claude Code l'ignore dans les paramètres HKCU et gérés par serveur.6066* **Portée** : [`Managed`](#scopes). Lisez uniquement à partir d'une source sur la machine : `managed-settings.json`, le plist macOS ou le registre HKLM Windows, ou un aide de politique. Claude Code l'ignore dans les paramètres HKCU et gérés par le serveur.

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

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

5977 6069 

5978```json managed-settings.json theme={null}6070```json managed-settings.json theme={null}

5979{6071{


5991 6083 

5992* **Portée** : [`Any file`](#scopes). Seule une source gérée applique la restriction ; un UUID unique dans n'importe quel autre fichier de paramètres présélectionne l'organisation lors de la connexion sans la restreindre.6084* **Portée** : [`Any file`](#scopes). Seule une source gérée applique la restriction ; un UUID unique dans n'importe quel autre fichier de paramètres présélectionne l'organisation lors de la connexion sans la restreindre.

5993* **Type** : chaîne, un UUID, ou tableau de chaînes, plusieurs UUID6085* **Type** : chaîne, un UUID, ou tableau de chaînes, plusieurs UUID

5994* **Par défaut** : non défini, donc n'importe quelle organisation peut se connecter6086* **Défaut** : non défini, donc n'importe quelle organisation peut se connecter

5995 6087 

5996Cet exemple accepte les connexions de l'une ou l'autre de deux organisations sans en présélectionner une :6088Cet exemple accepte les connexions de l'une ou l'autre de deux organisations sans en présélectionner une :

5997 6089 


6013 6105 

6014Sans cette clé, `/login` se connecte à n'importe quelle passerelle sur une adresse privée et rien d'autre. Avec elle, `/login` accepte également une passerelle à l'intérieur d'un bloc listé, sur une connexion directe uniquement. L'adresse propre de la machine sur cette connexion doit également être à l'intérieur du même bloc.6106Sans cette clé, `/login` se connecte à n'importe quelle passerelle sur une adresse privée et rien d'autre. Avec elle, `/login` accepte également une passerelle à l'intérieur d'un bloc listé, sur une connexion directe uniquement. L'adresse propre de la machine sur cette connexion doit également être à l'intérieur du même bloc.

6015 6107 

6016* **Portée** : [`Managed`](#scopes). Lecture uniquement à partir d'une source sur la machine : `managed-settings.json`, la plist macOS ou le registre Windows HKLM, ou un aide de politique. Claude Code l'ignore dans les paramètres HKCU et gérés par serveur.6108* **Portée** : [`Managed`](#scopes). Lisez uniquement à partir d'une source sur la machine : `managed-settings.json`, le plist macOS ou le registre HKLM Windows, ou un aide de politique. Claude Code l'ignore dans les paramètres HKCU et gérés par le serveur.

6017* **Type** : tableau de chaînes, au maximum quatre blocs IPv4 CIDR, chacun `/8` à `/32`, ne se chevauchant pas les uns les autres, et aucun ne chevauchant l'espace privé.6109* **Type** : tableau de chaînes, au maximum quatre blocs IPv4 CIDR, chacun `/8` à `/32`, ne se chevauchant pas les uns les autres, et aucun ne chevauchant l'espace privé.

6018* **Par défaut** : non défini, donc `/login` accepte uniquement les passerelles sur des adresses privées6110* **Défaut** : non défini, donc `/login` accepte uniquement les passerelles sur des adresses privées

6019 6111 

6020```json managed-settings.json theme={null}6112```json managed-settings.json theme={null}

6021{6113{


6023}6115}

6024```6116```

6025 6117 

6026Remplacez la plage de documentation dans l'exemple par votre propre bloc. Claude Code refuse les plages de documentation, les plages que les clients VPN et NAT64 utilisent localement, et l'espace réservé qu'aucun réseau n'est numéroté à partir de, comme la multidiffusion.6118Remplacez la plage de documentation dans l'exemple par votre propre bloc. Claude Code refuse les plages de documentation, les plages que les clients VPN et NAT64 utilisent localement, et l'espace réservé à partir duquel aucun réseau n'est numéroté, tel que la multidiffusion.

6027 6119 

6028Si une entrée est invalide, ou la valeur n'est pas une liste de chaînes, `/login` nomme le problème et refuse chaque nouvelle connexion à la passerelle sur la machine jusqu'à ce que vous corrigiez la valeur. Les connexions existantes continuent de fonctionner. Voir [Autoriser une passerelle sur l'espace d'adresses publiques que vous possédez](/docs/fr/claude-apps-gateway#allow-a-gateway-on-public-address-space-you-own) pour les règles complètes et ce que les développeurs voient.6120Si une entrée est invalide, ou la valeur n'est pas une liste de chaînes, `/login` nomme le problème et refuse chaque nouvelle connexion à la passerelle cloud sur la machine jusqu'à ce que vous corrigiez la valeur. Les connexions existantes continuent de fonctionner. Voir [Autoriser une passerelle sur l'espace d'adresses publiques que vous possédez](/docs/fr/claude-apps-gateway#allow-a-gateway-on-public-address-space-you-own) pour les règles complètes et ce que les développeurs voient.

6029 6121 

6030<h3 id="gcpauthrefresh">6122<h3 id="gcpauthrefresh">

6031 `gcpAuthRefresh`6123 `gcpAuthRefresh`

6032</h3>6124</h3>

6033 6125 

6034Exécutez votre propre commande pour actualiser les identifiants Google Cloud Application Default lorsque Claude Code découvre qu'ils ont expiré ou ne peuvent pas être chargés, afin que les demandes de [Google Cloud's Agent Platform](/docs/fr/google-vertex-ai) continuent de fonctionner sans que vous vous réauthentifiiez manuellement.6126Exécutez votre propre commande pour actualiser les identifiants Google Cloud Application Default lorsque Claude Code découvre qu'ils ont expiré ou ne peuvent pas être chargés, afin que les demandes [Agent Platform de Google Cloud](/docs/fr/google-vertex-ai) continuent de fonctionner sans que vous vous réauthentifiiez à la main.

6035 6127 

6036* **Portée** : [`Any file`](#scopes)6128* **Portée** : [`Any file`](#scopes)

6037* **Type** : chaîne, une ligne de commande shell6129* **Type** : chaîne, une ligne de commande shell

6038* **Par défaut** : non défini, donc l'erreur d'identifiant de Claude Code vous dit d'exécuter `gcloud auth application-default login` vous-même6130* **Défaut** : non défini, donc l'erreur d'identifiant de Claude Code vous dit d'exécuter `gcloud auth application-default login` vous-même

6039 6131 

6040```json settings.json theme={null}6132```json settings.json theme={null}

6041{6133{


6053 6145 

6054* **Portée** : [`Any file`](#scopes)6146* **Portée** : [`Any file`](#scopes)

6055* **Type** : chaîne, un chemin exécutable ou une ligne de commande shell6147* **Type** : chaîne, un chemin exécutable ou une ligne de commande shell

6056* **Par défaut** : non défini, donc Claude Code n'ajoute pas d'en-têtes générés par l'aide6148* **Défaut** : non défini, donc Claude Code n'ajoute pas d'en-têtes générés par l'aide

6057 6149 

6058```json settings.json theme={null}6150```json settings.json theme={null}

6059{6151{


6061}6153}

6062```6154```

6063 6155 

6064Définissez l'intervalle d'actualisation avec [`CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS`](/docs/fr/env-vars). Voir [En-têtes dynamiques](/docs/fr/monitoring-usage#dynamic-headers) pour les exigences du script et ce que les développeurs voient lorsque l'aide échoue.6156Définissez l'intervalle d'actualisation avec [`CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS`](/docs/fr/env-vars). Voir [En-têtes dynamiques](/docs/fr/monitoring-usage#dynamic-headers) pour les exigences du script et ce qui se passe lorsque l'aide échoue.

6065 6157 

6066<h2 id="updates-and-versioning">6158<h2 id="updates-and-versioning">

6067 Mises à jour et versioning6159 Mises à jour et versioning


6400| :- | :- | :- |6492| :- | :- | :- |

6401| Listes | Combine les entrées de chaque source | [`permissions.allow`](#permissions-allow), [`sandbox.network.allowedDomains`](#sandbox-network-alloweddomains) et autres clés de liste |6493| Listes | Combine les entrées de chaque source | [`permissions.allow`](#permissions-allow), [`sandbox.network.allowedDomains`](#sandbox-network-alloweddomains) et autres clés de liste |

6402| Verrous | Applique la valeur la plus stricte que n'importe quelle source définit. Lorsqu'aucune source ne définit une valeur stricte, applique une valeur plus souple uniquement de la source la plus haute | [`allowManagedPermissionRulesOnly`](#allowmanagedpermissionrulesonly), [`permissions.disableBypassPermissionsMode`](#permissions-disablebypasspermissionsmode) et autres verrous booléens ou énumérés |6494| Verrous | Applique la valeur la plus stricte que n'importe quelle source définit. Lorsqu'aucune source ne définit une valeur stricte, applique une valeur plus souple uniquement de la source la plus haute | [`allowManagedPermissionRulesOnly`](#allowmanagedpermissionrulesonly), [`permissions.disableBypassPermissionsMode`](#permissions-disablebypasspermissionsmode) et autres verrous booléens ou énumérés |

6403| Listes de restriction | Prend la liste en entier de la source la plus haute qui la définit, sans ajouter d'entrées de sources inférieures. Lorsque la source la plus haute n'en définit pas une, la prend en entier de la source suivante en bas | [`availableModels`](#availablemodels), [`allowedMcpServers`](#allowedmcpservers), [`strictKnownMarketplaces`](#strictknownmarketplaces), [`allowedChannelPlugins`](#allowedchannelplugins) et la chaîne [`fallbackModel`](#fallbackmodel) |6495| Listes de restriction | Prend la liste en entier de la source la plus haute qui la définit, sans ajouter d'entrées de sources inférieures. Lorsque la source la plus haute n'en définit pas une, la prend en entier de la source suivante en bas | [`availableModels`](#availablemodels), [`allowedMcpServers`](#allowedmcpservers), [`allowedProviders`](#allowedproviders), [`strictKnownMarketplaces`](#strictknownmarketplaces), [`allowedChannelPlugins`](#allowedchannelplugins) et la chaîne [`fallbackModel`](#fallbackmodel) |

6404| Valeurs prises en entier | Prend la valeur en entier de la source la plus haute qui la définit, sans combiner les entrées ou champs de sources inférieures. Lorsque la source la plus haute ne la définit pas, la prend en entier de la source suivante en bas | [`sandbox.credentials.awsPairs`](#sandbox-credentials-awspairs), [`sandbox.ripgrep`](#sandbox-ripgrep) |6496| Valeurs prises en entier | Prend la valeur en entier de la source la plus haute qui la définit, sans combiner les entrées ou champs de sources inférieures. Lorsque la source la plus haute ne la définit pas, la prend en entier de la source suivante en bas | [`sandbox.credentials.awsPairs`](#sandbox-credentials-awspairs), [`sandbox.ripgrep`](#sandbox-ripgrep) |

6405| Serveurs MCP fournis | Combine les noms de serveur de chaque source. Lorsque deux sources définissent le même nom, applique l'entrée entière de la source supérieure | [`managedMcpServers`](#managedmcpservers) |6497| Serveurs MCP fournis | Combine les noms de serveur de chaque source. Lorsque deux sources définissent le même nom, applique l'entrée entière de la source supérieure | [`managedMcpServers`](#managedmcpservers) |

6406| Lire uniquement de la source de plus haute priorité | Lit la clé uniquement de la source de plus haute priorité qui porte une clé de politique, de sorte que la valeur d'une source inférieure est ignorée même lorsque la source la plus haute n'en définit aucune | [`apiKeyHelper`](#apikeyhelper), [`awsAuthRefresh`](#awsauthrefresh), [`awsCredentialExport`](#awscredentialexport), [`gcpAuthRefresh`](#gcpauthrefresh), [`otelHeadersHelper`](#otelheadershelper), `proxyAuthHelper`, [`forceLoginOrgUUID`](#forceloginorguuid), les valeurs `"claudeai"` et `"console"` de [`forceLoginMethod`](#forceloginmethod), [`parentSettingsBehavior`](#parentsettingsbehavior), [`modelPicker`](#modelpicker), [`policyHelper`](#policyhelper), [`permissions.defaultMode`](#permissions-defaultmode) |6498| Lire uniquement de la source de plus haute priorité | Lit la clé uniquement de la source de plus haute priorité qui porte une clé de politique, de sorte que la valeur d'une source inférieure est ignorée même lorsque la source la plus haute n'en définit aucune | [`apiKeyHelper`](#apikeyhelper), [`awsAuthRefresh`](#awsauthrefresh), [`awsCredentialExport`](#awscredentialexport), [`gcpAuthRefresh`](#gcpauthrefresh), [`otelHeadersHelper`](#otelheadershelper), `proxyAuthHelper`, [`forceLoginOrgUUID`](#forceloginorguuid), les valeurs `"claudeai"` et `"console"` de [`forceLoginMethod`](#forceloginmethod), [`parentSettingsBehavior`](#parentsettingsbehavior), [`modelPicker`](#modelpicker), [`policyHelper`](#policyhelper), [`permissions.defaultMode`](#permissions-defaultmode) |


6414* **[`policyHelper`](#policyhelper)** : Claude Code l'honore uniquement lorsque la source la plus haute qui porte une clé de politique est une politique MDM ou un fichier de paramètres gérés, de sorte que sous les paramètres gérés par le serveur elle ne s'applique pas.6506* **[`policyHelper`](#policyhelper)** : Claude Code l'honore uniquement lorsque la source la plus haute qui porte une clé de politique est une politique MDM ou un fichier de paramètres gérés, de sorte que sous les paramètres gérés par le serveur elle ne s'applique pas.

6415* **[`modelOverrides`](#modeloverrides)** : s'apparie avec `availableModels`. Claude Code prend `modelOverrides` de la source la plus haute qui la définit, sauf si une source supérieure définit `availableModels` sans `modelOverrides`. Dans ce cas, il ignore `modelOverrides` de chaque source.6507* **[`modelOverrides`](#modeloverrides)** : s'apparie avec `availableModels`. Claude Code prend `modelOverrides` de la source la plus haute qui la définit, sauf si une source supérieure définit `availableModels` sans `modelOverrides`. Dans ce cas, il ignore `modelOverrides` de chaque source.

6416* **[`forceLoginGatewayUrl`](#forcelogingatewayurl), [`gatewayInternalNetworks`](#gatewayinternalnetworks) et la valeur `"gateway"` de [`forceLoginMethod`](#forceloginmethod)** : Claude Code ne les lit jamais de paramètres gérés par le serveur, de sorte qu'une valeur là ne s'applique ni ne cache une définie dans une politique MDM ou un fichier de paramètres gérés. Parmi les sources d'administrateur sur la machine, seule la plus haute classée qui porte une clé de politique les fournit, que les paramètres gérés par le serveur soient présents ou non.6508* **[`forceLoginGatewayUrl`](#forcelogingatewayurl), [`gatewayInternalNetworks`](#gatewayinternalnetworks) et la valeur `"gateway"` de [`forceLoginMethod`](#forceloginmethod)** : Claude Code ne les lit jamais de paramètres gérés par le serveur, de sorte qu'une valeur là ne s'applique ni ne cache une définie dans une politique MDM ou un fichier de paramètres gérés. Parmi les sources d'administrateur sur la machine, seule la plus haute classée qui porte une clé de politique les fournit, que les paramètres gérés par le serveur soient présents ou non.

6509* **[`allowedProviders`](#allowedproviders)** : après la règle du tableau, la liste de la machine elle-même limite toujours le résultat, comme le note l'entrée de sa Portée.

6417 6510 

6418Pour confirmer quelles sources se sont combinées sur une machine, exécutez `/status` et [lisez la ligne `Setting sources`](/docs/fr/managed-settings#read-the-source-in-/status).6511Pour confirmer quelles sources se sont combinées sur une machine, exécutez `/status` et [lisez la ligne `Setting sources`](/docs/fr/managed-settings#read-the-source-in-/status).

6419 6512 

skills.md +1 −1

Details

740 740 

741* **Répertoire de travail** : Claude Code exécute chaque commande dans le répertoire de travail actuel du shell de la session. Ce répertoire se déplace lorsque Claude exécute `cd`. Utilisez [`${CLAUDE_SKILL_DIR}` ou `${CLAUDE_PROJECT_DIR}`](#available-string-substitutions) dans les chemins qui doivent se résoudre de la même manière à chaque fois.741* **Répertoire de travail** : Claude Code exécute chaque commande dans le répertoire de travail actuel du shell de la session. Ce répertoire se déplace lorsque Claude exécute `cd`. Utilisez [`${CLAUDE_SKILL_DIR}` ou `${CLAUDE_PROJECT_DIR}`](#available-string-substitutions) dans les chemins qui doivent se résoudre de la même manière à chaque fois.

742* **stderr** : avec le shell `bash` par défaut, Claude Code fusionne stderr dans stdout. Tout ce que la commande écrit dans stderr apparaît dans le texte injecté.742* **stderr** : avec le shell `bash` par défaut, Claude Code fusionne stderr dans stdout. Tout ce que la commande écrit dans stderr apparaît dans le texte injecté.

743* **Délai d'expiration** : chaque commande s'exécute sous le [délai d'expiration](/docs/fr/tools-reference#timeout-and-output-limits) par défaut de 2 minutes de l'outil Bash. Lorsque l'outil Bash [déplace une commande expirée en arrière-plan](/docs/fr/tools-reference#background-commands), la compétence s'affiche toujours. Le texte injecté signale le déplacement et nomme la tâche en arrière-plan et le fichier collectant la sortie de la commande. Lorsque la commande est une que l'outil Bash ne met jamais automatiquement en arrière-plan, Claude Code la tue au délai d'expiration. Cet échec [abandonne l'invocation](#when-an-injected-command-fails).743* **Délai d'expiration** : chaque commande s'exécute sous le [délai d'expiration](/docs/fr/tools-reference#timeout-and-output-limits) par défaut de 2 minutes de l'outil Bash. Lorsque l'outil Bash [déplace une commande expirée en arrière-plan](/docs/fr/tools-reference#foreground-commands-that-move-to-the-background), la compétence s'affiche toujours. Le texte injecté signale le déplacement et nomme la tâche en arrière-plan et le fichier collectant la sortie de la commande. Lorsque la commande est une que l'outil Bash ne met jamais automatiquement en arrière-plan, Claude Code la tue au délai d'expiration. Cet échec [abandonne l'invocation](#when-an-injected-command-fails).

744* **Taille de la sortie** : la sortie au-delà du plafond en ligne de l'outil Bash arrive sous la forme d'un chemin de fichier plus un court aperçu, pas du texte tronqué. [Output limits](/docs/fr/tools-reference#output-limits) couvre le plafond et comment ajuster chaque limite.744* **Taille de la sortie** : la sortie au-delà du plafond en ligne de l'outil Bash arrive sous la forme d'un chemin de fichier plus un court aperçu, pas du texte tronqué. [Output limits](/docs/fr/tools-reference#output-limits) couvre le plafond et comment ajuster chaque limite.

745 745 

746L'outil PowerShell applique le même comportement de délai d'expiration, de mise en arrière-plan et de plafond de sortie aux commandes qu'il exécute. Voir la section [outil PowerShell](/docs/fr/tools-reference#powershell-tool) pour ses spécificités.746L'outil PowerShell applique le même comportement de délai d'expiration, de mise en arrière-plan et de plafond de sortie aux commandes qu'il exécute. Voir la section [outil PowerShell](/docs/fr/tools-reference#powershell-tool) pour ses spécificités.

statusline.md +7 −7

Details

20Voici un exemple d'une [barre de statut multi-lignes](#display-multiple-lines) qui affiche les informations git sur la première ligne et une barre de contexte codée par couleur sur la deuxième.20Voici un exemple d'une [barre de statut multi-lignes](#display-multiple-lines) qui affiche les informations git sur la première ligne et une barre de contexte codée par couleur sur la deuxième.

21 21 

22<Frame>22<Frame>

23 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-multiline.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=60f11387658acc9ff75158ae85f2ac87" alt="Une barre de statut multi-lignes affichant le nom du modèle, le répertoire, la branche git sur la première ligne, et une barre de progression d'utilisation du contexte avec le coût et la durée sur la deuxième ligne" width="776" height="212" data-path="images/statusline-multiline.png" />23 <img src="https://mintcdn.com/claude-code/HDAmBwgbrZVk0pOt/images/statusline-multiline.png?fit=max&auto=format&n=HDAmBwgbrZVk0pOt&q=85&s=a9d0a2fe8e446d80b1abc46da3f93270" alt="Une barre de statut multi-lignes affichant le nom du modèle, le répertoire, la branche git sur la première ligne, et une barre de progression d'utilisation du contexte avec le coût et la durée sur la deuxième ligne" width="1224" height="262" data-path="images/statusline-multiline.png" />

24</Frame>24</Frame>

25 25 

26Cette page vous guide à travers [la configuration d'une barre de statut basique](#set-up-a-status-line), explique [comment les données circulent](#how-status-lines-work) de Claude Code à votre script, liste [tous les champs que vous pouvez afficher](#available-data), et fournit [des exemples prêts à l'emploi](#examples) pour les modèles courants comme l'état git, le suivi des coûts et les barres de progression.26Cette page vous guide à travers [la configuration d'une barre de statut basique](#set-up-a-status-line), explique [comment les données circulent](#how-status-lines-work) de Claude Code à votre script, liste [tous les champs que vous pouvez afficher](#available-data), et fournit [des exemples prêts à l'emploi](#examples) pour les modèles courants comme l'état git, le suivi des coûts et les barres de progression.


93Ces exemples utilisent des scripts Bash, qui fonctionnent sur macOS et Linux. Sur Windows, voir [Configuration Windows](#windows-configuration) pour des exemples PowerShell et Git Bash.93Ces exemples utilisent des scripts Bash, qui fonctionnent sur macOS et Linux. Sur Windows, voir [Configuration Windows](#windows-configuration) pour des exemples PowerShell et Git Bash.

94 94 

95<Frame>95<Frame>

96 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-quickstart.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=696445e59ca0059213250651ad23db6b" alt="Une barre de statut affichant le nom du modèle, le répertoire et le pourcentage de contexte" width="726" height="164" data-path="images/statusline-quickstart.png" />96 <img src="https://mintcdn.com/claude-code/HDAmBwgbrZVk0pOt/images/statusline-quickstart.png?fit=max&auto=format&n=HDAmBwgbrZVk0pOt&q=85&s=88a7eab9c1038dd098ee8e284d96b7e6" alt="Une barre de statut affichant le nom du modèle, le répertoire et le pourcentage de contexte" width="1224" height="224" data-path="images/statusline-quickstart.png" />

97</Frame>97</Frame>

98 98 

99<Steps>99<Steps>


444Affiche le modèle actuel et l'utilisation de la fenêtre de contexte avec une barre de progression visuelle. Chaque script lit JSON depuis stdin, extrait le champ `used_percentage` et construit une barre de 10 caractères où les blocs remplis (▓) représentent l'utilisation :444Affiche le modèle actuel et l'utilisation de la fenêtre de contexte avec une barre de progression visuelle. Chaque script lit JSON depuis stdin, extrait le champ `used_percentage` et construit une barre de 10 caractères où les blocs remplis (▓) représentent l'utilisation :

445 445 

446<Frame>446<Frame>

447 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-context-window-usage.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=15b58ab3602f036939145dde3165c6f7" alt="Une barre de statut affichant le nom du modèle et une barre de progression avec pourcentage" width="448" height="152" data-path="images/statusline-context-window-usage.png" />447 <img src="https://mintcdn.com/claude-code/HDAmBwgbrZVk0pOt/images/statusline-context-window-usage.png?fit=max&auto=format&n=HDAmBwgbrZVk0pOt&q=85&s=f3918a549912dc47e90f2b69e68bc847" alt="Une barre de statut affichant le nom du modèle et une barre de progression avec pourcentage" width="1224" height="224" data-path="images/statusline-context-window-usage.png" />

448</Frame>448</Frame>

449 449 

450<CodeGroup>450<CodeGroup>


513Affiche la branche git avec des indicateurs codés par couleur pour les fichiers en attente et modifiés. Ce script utilise les [codes d'échappement ANSI](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors) pour les couleurs de terminal : `\033[32m` est vert, `\033[33m` est jaune, et `\033[0m` réinitialise à la valeur par défaut.513Affiche la branche git avec des indicateurs codés par couleur pour les fichiers en attente et modifiés. Ce script utilise les [codes d'échappement ANSI](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors) pour les couleurs de terminal : `\033[32m` est vert, `\033[33m` est jaune, et `\033[0m` réinitialise à la valeur par défaut.

514 514 

515<Frame>515<Frame>

516 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-git-context.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=e656f34f90d1d9a1d0e220988914345f" alt="Une barre de statut affichant le modèle, le répertoire, la branche git et des indicateurs colorés pour les fichiers en attente et modifiés" width="742" height="178" data-path="images/statusline-git-context.png" />516 <img src="https://mintcdn.com/claude-code/HDAmBwgbrZVk0pOt/images/statusline-git-context.png?fit=max&auto=format&n=HDAmBwgbrZVk0pOt&q=85&s=f13c190724d9ec7188c17cd2f98b7bf4" alt="Une barre de statut affichant le modèle, le répertoire, la branche git et des indicateurs colorés pour les fichiers en attente et modifiés" width="1224" height="224" data-path="images/statusline-git-context.png" />

517</Frame>517</Frame>

518 518 

519Chaque script vérifie si le répertoire actuel est un dépôt git, compte les fichiers en attente et modifiés, et affiche des indicateurs codés par couleur :519Chaque script vérifie si le répertoire actuel est un dépôt git, compte les fichiers en attente et modifiés, et affiche des indicateurs codés par couleur :


611Chaque script formate le coût en devise et convertit les millisecondes en minutes et secondes :611Chaque script formate le coût en devise et convertit les millisecondes en minutes et secondes :

612 612 

613<Frame>613<Frame>

614 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-cost-tracking.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=e3444a51fe6f3440c134bd5f1f08ad29" alt="Une barre de statut affichant le nom du modèle, le coût de session et la durée" width="588" height="180" data-path="images/statusline-cost-tracking.png" />614 <img src="https://mintcdn.com/claude-code/HDAmBwgbrZVk0pOt/images/statusline-cost-tracking.png?fit=max&auto=format&n=HDAmBwgbrZVk0pOt&q=85&s=925f7024c3b38be0f0eca63564bfb52f" alt="Une barre de statut affichant le nom du modèle, le coût de session et la durée" width="1224" height="224" data-path="images/statusline-cost-tracking.png" />

615</Frame>615</Frame>

616 616 

617<CodeGroup>617<CodeGroup>


672Votre script peut afficher plusieurs lignes pour créer un affichage plus riche.672Votre script peut afficher plusieurs lignes pour créer un affichage plus riche.

673 673 

674<Frame>674<Frame>

675 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-multiline.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=60f11387658acc9ff75158ae85f2ac87" alt="Une barre de statut multi-lignes affichant le nom du modèle, le répertoire, la branche git sur la première ligne, et une barre de progression d'utilisation du contexte avec le coût et la durée sur la deuxième ligne" width="776" height="212" data-path="images/statusline-multiline.png" />675 <img src="https://mintcdn.com/claude-code/HDAmBwgbrZVk0pOt/images/statusline-multiline.png?fit=max&auto=format&n=HDAmBwgbrZVk0pOt&q=85&s=a9d0a2fe8e446d80b1abc46da3f93270" alt="Une barre de statut multi-lignes affichant le nom du modèle, le répertoire, la branche git sur la première ligne, et une barre de progression d'utilisation du contexte avec le coût et la durée sur la deuxième ligne" width="1224" height="262" data-path="images/statusline-multiline.png" />

676</Frame>676</Frame>

677 677 

678Cet exemple combine plusieurs techniques : couleurs basées sur des seuils (vert sous 70 %, jaune 70-89 %, rouge 90 %+), une barre de progression et des informations de branche git. Chaque instruction `print` ou `echo` crée une ligne séparée :678Cet exemple combine plusieurs techniques : couleurs basées sur des seuils (vert sous 70 %, jaune 70-89 %, rouge 90 %+), une barre de progression et des informations de branche git. Chaque instruction `print` ou `echo` crée une ligne séparée :


781Cet exemple crée un lien cliquable vers votre dépôt GitHub. Maintenez Cmd (macOS) ou Ctrl (Windows/Linux) et cliquez pour ouvrir le lien dans votre navigateur.781Cet exemple crée un lien cliquable vers votre dépôt GitHub. Maintenez Cmd (macOS) ou Ctrl (Windows/Linux) et cliquez pour ouvrir le lien dans votre navigateur.

782 782 

783<Frame>783<Frame>

784 <img src="https://mintcdn.com/claude-code/nibzesLaJVh4ydOq/images/statusline-links.png?fit=max&auto=format&n=nibzesLaJVh4ydOq&q=85&s=4bcc6e7deb7cf52f41ab85a219b52661" alt="Une barre de statut affichant un lien cliquable vers un dépôt GitHub" width="726" height="198" data-path="images/statusline-links.png" />784 <img src="https://mintcdn.com/claude-code/HDAmBwgbrZVk0pOt/images/statusline-links.png?fit=max&auto=format&n=HDAmBwgbrZVk0pOt&q=85&s=4778a144a28cb498c99d5fa018bb374a" alt="Une barre de statut affichant un lien cliquable vers un dépôt GitHub" width="1224" height="224" data-path="images/statusline-links.png" />

785</Frame>785</Frame>

786 786 

787Chaque script obtient l'URL du dépôt distant, convertit le format SSH en HTTPS et enveloppe le nom du dépôt dans les codes d'échappement OSC 8. La version Bash utilise `printf '%b'` qui interprète les échappements de barre oblique inverse de manière plus fiable que `echo -e` sur différents shells :787Chaque script obtient l'URL du dépôt distant, convertit le format SSH en HTTPS et enveloppe le nom du dépôt dans les codes d'échappement OSC 8. La version Bash utilise `printf '%b'` qui interprète les échappements de barre oblique inverse de manière plus fiable que `echo -e` sur différents shells :

Details

253 253 

254Les équipes de sécurité peuvent configurer des autorisations gérées pour ce que Claude Code est et n'est pas autorisé à faire, ce qui ne peut pas être remplacé par la configuration locale. [En savoir plus](/docs/fr/security).254Les équipes de sécurité peuvent configurer des autorisations gérées pour ce que Claude Code est et n'est pas autorisé à faire, ce qui ne peut pas être remplacé par la configuration locale. [En savoir plus](/docs/fr/security).

255 255 

256Pour limiter les options de déploiement qu'une machine gérée peut utiliser, définissez [`allowedProviders`](/docs/fr/settings-reference#allowedproviders) dans les paramètres gérés. Par exemple, `["bedrock"]` autorise Amazon Bedrock et rien d'autre ; une flotte Bedrock qui active également le point de terminaison Mantle répertorie `"mantle"` également. L'entrée indique quelles variables de point de terminaison nécessitent également une épingle `env` gérée. Nécessite Claude Code v2.1.285 ou version ultérieure.

257 

256<h3 id="leverage-mcp-for-integrations">258<h3 id="leverage-mcp-for-integrations">

257 Tirer parti de MCP pour les intégrations259 Tirer parti de MCP pour les intégrations

258</h3>260</h3>

Details

174* `BASH_DEFAULT_TIMEOUT_MS` — le délai par défaut quand Claude ne transmet pas de délai d'expiration ; deux minutes par défaut174* `BASH_DEFAULT_TIMEOUT_MS` — le délai par défaut quand Claude ne transmet pas de délai d'expiration ; deux minutes par défaut

175* `BASH_MAX_TIMEOUT_MS` — avec le délai par défaut, définit le plafond qui limite ce que Claude demande : le plafond effectif est le plus grand des deux, dix minutes par défaut175* `BASH_MAX_TIMEOUT_MS` — avec le délai par défaut, définit le plafond qui limite ce que Claude demande : le plafond effectif est le plus grand des deux, dix minutes par défaut

176 176 

177Pour une commande que Claude démarre en arrière-plan, `timeout` définit plutôt la durée pendant laquelle la commande peut s'exécuter là, avec le délai par défaut et le maximum séparés décrits sous [Commandes en arrière-plan](#background-commands). L'[outil PowerShell](#powershell-tool) suit les mêmes règles de délai d'expiration et lit les deux mêmes variables.177Pour une commande que Claude démarre en arrière-plan, `timeout` définit plutôt la durée pendant laquelle la commande peut s'exécuter là, avec le délai par défaut et le maximum séparés décrits sous [Limite de temps pour les commandes en arrière-plan](#time-limit-for-background-commands). L'[outil PowerShell](#powershell-tool) suit les mêmes règles de délai d'expiration et lit les deux mêmes variables.

178 178 

179<h4 id="output-limits">179<h4 id="output-limits">

180 Limites de sortie180 Limites de sortie


199 199 

200Pour les processus de longue durée tels que les serveurs de développement ou les compilations de surveillance, Claude peut définir `run_in_background: true` pour démarrer la commande en tant que tâche en arrière-plan et continuer à travailler pendant qu'elle s'exécute. Listez et arrêtez les tâches en arrière-plan avec `/tasks`. Après en avoir arrêté une là, ou à partir d'un client connecté tel que l'application de bureau, Claude continue au lieu d'attendre. Si un sous-agent a démarré la commande, c'est ce sous-agent qui continue.200Pour les processus de longue durée tels que les serveurs de développement ou les compilations de surveillance, Claude peut définir `run_in_background: true` pour démarrer la commande en tant que tâche en arrière-plan et continuer à travailler pendant qu'elle s'exécute. Listez et arrêtez les tâches en arrière-plan avec `/tasks`. Après en avoir arrêté une là, ou à partir d'un client connecté tel que l'application de bureau, Claude continue au lieu d'attendre. Si un sous-agent a démarré la commande, c'est ce sous-agent qui continue.

201 201 

202Une commande qu'un [sous-agent au premier plan](/docs/fr/sub-agents#run-subagents-in-foreground-or-background) a démarrée s'arrête quand l'exécution de ce sous-agent se termine, qu'elle ait réussi, échoué ou ait été interrompue. Une commande que la conversation principale ou un sous-agent en arrière-plan a démarrée continue à s'exécuter après une réponse finale, jusqu'à ce qu'elle se termine, soit arrêtée, ou atteigne sa limite de temps. En mode non interactif avec l'indicateur `-p`, [les commandes en arrière-plan se terminent peu après le résultat final de l'exécution](/docs/fr/headless#background-tasks-at-exit).202<h4 id="when-a-background-command-stops">

203 Quand une commande en arrière-plan s'arrête

204</h4>

205 

206Une commande qu'un [sous-agent au premier plan](/docs/fr/sub-agents#run-subagents-in-foreground-or-background) a démarrée s'arrête quand l'exécution de ce sous-agent se termine, qu'elle ait réussi, échoué ou ait été interrompue. Une commande que la conversation principale ou un sous-agent en arrière-plan a démarrée continue à s'exécuter après une réponse finale, jusqu'à ce qu'elle se termine, soit arrêtée, ou atteigne sa [limite de temps](#time-limit-for-background-commands). En mode non interactif avec l'indicateur `-p`, [les commandes en arrière-plan se terminent peu après le résultat final de l'exécution](/docs/fr/headless#background-tasks-at-exit).

207 

208<h4 id="time-limit-for-background-commands">

209 Limite de temps pour les commandes en arrière-plan

210</h4>

203 211 

204Les commandes Bash et PowerShell en arrière-plan ont une limite de temps, comptée à partir du moment où la commande entre en arrière-plan :212Les commandes Bash et PowerShell en arrière-plan ont une limite de temps, comptée à partir du moment où la commande entre en arrière-plan :

205 213 

206* Une commande que Claude démarre en arrière-plan obtient 30 minutes, ou le `timeout` que Claude transmet avec `run_in_background`, jusqu'à un maximum de 2 heures214* Une commande que Claude démarre en arrière-plan obtient 30 minutes, ou le `timeout` que Claude transmet avec `run_in_background`, jusqu'à un maximum de 2 heures

207* Une commande qui démarre au premier plan puis passe en arrière-plan, par exemple avec `Ctrl+B` ou à son délai d'expiration, obtient 30 minutes à partir du passage215* Une commande qui démarre au premier plan puis passe en arrière-plan, par exemple avec `Ctrl+B` ou à son délai d'expiration, obtient 30 minutes à partir du passage

208 216 

217Quand une commande en arrière-plan atteint sa limite de temps, Claude Code l'arrête et dit à Claude pourquoi, et Claude peut redémarrer la commande avec un `timeout` plus long si le travail en a encore besoin. L'avis d'arrêt se lit `Background command "<description>" was stopped after reaching its background time limit`.

218 

219<h4 id="raise-the-time-limit-for-background-commands">

220 Augmenter la limite de temps pour les commandes en arrière-plan

221</h4>

222 

209Deux [variables d'environnement](/docs/fr/env-vars) augmentent ces limites, pour les commandes Bash et PowerShell de la même manière. Les deux prennent des millisecondes, et aucune ne peut raccourcir une limite : une valeur inférieure laisse le délai par défaut de 30 minutes et le maximum de 2 heures en place.223Deux [variables d'environnement](/docs/fr/env-vars) augmentent ces limites, pour les commandes Bash et PowerShell de la même manière. Les deux prennent des millisecondes, et aucune ne peut raccourcir une limite : une valeur inférieure laisse le délai par défaut de 30 minutes et le maximum de 2 heures en place.

210 224 

211* Définissez `BASH_DEFAULT_TIMEOUT_MS` au-dessus de `1800000` pour remplacer le délai par défaut de 30 minutes par cette valeur, à la fois pour les commandes que Claude démarre sans `timeout` et pour les commandes déplacées225* Définissez `BASH_DEFAULT_TIMEOUT_MS` au-dessus de `1800000` pour remplacer le délai par défaut de 30 minutes par cette valeur, à la fois pour les commandes que Claude démarre sans `timeout` et pour les commandes déplacées

212* Définissez `BASH_MAX_TIMEOUT_MS` au-dessus de `7200000` pour augmenter le maximum de 2 heures à cette valeur. Définir `BASH_DEFAULT_TIMEOUT_MS` au-dessus de `7200000` augmente le maximum de la même manière226* Définissez `BASH_MAX_TIMEOUT_MS` au-dessus de `7200000` pour augmenter le maximum de 2 heures à cette valeur. Définir `BASH_DEFAULT_TIMEOUT_MS` au-dessus de `7200000` augmente le maximum de la même manière

213 227 

214Quand une commande en arrière-plan atteint sa limite de temps, Claude Code l'arrête et dit à Claude pourquoi, et Claude peut redémarrer la commande avec un `timeout` plus long si le travail en a encore besoin. L'avis d'arrêt se lit `Background command "<description>" was stopped after reaching its background time limit`.228<h4 id="foreground-commands-that-move-to-the-background">

229 Commandes au premier plan qui passent en arrière-plan

230</h4>

215 231 

216Quand une commande au premier plan atteint son délai d'expiration sans se terminer, Claude Code la déplace en arrière-plan au lieu de l'arrêter, sauf si la commande commence par `sleep`. La limite de temps d'une commande déplacée est comptée à partir du déplacement, et la commande déplacée d'un sous-agent au premier plan s'arrête toujours quand l'exécution de ce sous-agent se termine.232Quand une commande au premier plan atteint son délai d'expiration sans se terminer, Claude Code la déplace en arrière-plan au lieu de l'arrêter, sauf si la commande commence par `sleep`. La [limite de temps](#time-limit-for-background-commands) d'une commande déplacée est comptée à partir du déplacement, et la commande déplacée d'un sous-agent au premier plan s'arrête toujours quand l'exécution de ce sous-agent se termine.

217 233 

218Définir [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1`](/docs/fr/env-vars#variables) désactive la mise en arrière-plan automatique ainsi que le reste de la fonctionnalité de tâche en arrière-plan.234Définir [`CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1`](/docs/fr/env-vars#variables) désactive la mise en arrière-plan automatique ainsi que le reste de la fonctionnalité de tâche en arrière-plan.

219 235 


246Quoi que vous listiez, ces règles s'appliquent :262Quoi que vous listiez, ces règles s'appliquent :

247 263 

248* **Noms inconnus** : Claude Code ignore les noms qu'il ne reconnaît pas264* **Noms inconnus** : Claude Code ignore les noms qu'il ne reconnaît pas

249* **Bash, PowerShell et Monitor** : Claude Code maintient les commandes des outils Bash, PowerShell et Monitor sous le plafond quoi que vous listiez

250* **Variable non définie** : Claude Code prend l'ensemble des autres types plafonnés à partir de la configuration qu'Anthropic livre depuis le serveur, et cet ensemble peut changer au fil du temps, donc définissez la variable quand vous avez besoin d'un ensemble qui ne change pas265* **Variable non définie** : Claude Code prend l'ensemble des autres types plafonnés à partir de la configuration qu'Anthropic livre depuis le serveur, et cet ensemble peut changer au fil du temps, donc définissez la variable quand vous avez besoin d'un ensemble qui ne change pas

251* **Hooks de permission-gating** : même avec chaque type plafonné, Claude Code exempte du plafond un hook qui peut bloquer ou modifier le résultat d'une action, et tout serveur MCP que ce hook appelle, donc le noyau arrêtant un hook de permission-gating ne peut pas permettre l'action qu'il bloquait266* **Hooks de permission-gating** : même avec chaque type plafonné, Claude Code exempte du plafond un hook qui peut bloquer ou modifier le résultat d'une action, et tout serveur MCP que ce hook appelle, donc le noyau arrêtant un hook de permission-gating ne peut pas permettre l'action qu'il bloquait

252 267 

ultrareview.md +1 −1

Details

66 66 

67En mode PR, le sandbox cloud clone la demande de tirage directement depuis l'hôte plutôt que de regrouper votre arborescence de travail locale. Le mode PR fonctionne avec les référentiels sur `github.com` et sur les instances [GitHub Enterprise Server](/docs/fr/github-enterprise-server) qu'un propriétaire a connectées à Claude Code.67En mode PR, le sandbox cloud clone la demande de tirage directement depuis l'hôte plutôt que de regrouper votre arborescence de travail locale. Le mode PR fonctionne avec les référentiels sur `github.com` et sur les instances [GitHub Enterprise Server](/docs/fr/github-enterprise-server) qu'un propriétaire a connectées à Claude Code.

68 68 

69Pour les référentiels sur `github.com`, le sandbox clone avec le compte GitHub connecté à votre compte Claude, donc le compte doit pouvoir lire le référentiel de la PR. Claude Code vérifie cela avant de créer la session cloud, sauf si vous avez défini [`CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`](/docs/fr/env-vars#variables), et refuse le lancement lorsque [aucun compte n'est connecté](/docs/fr/errors#no-github-account-is-connected-to-your-claude-account) ou [le compte ne peut pas voir le référentiel](/docs/fr/errors#your-connected-github-account-cant-see-the-repository) ; le refus nomme la correction. Avant v2.1.248, Claude Code ne vérifiait pas cela avant le lancement.69Pour les référentiels sur `github.com`, le sandbox clone avec le compte GitHub connecté à votre compte Claude, donc le compte doit pouvoir lire le référentiel de la PR.

70 70 

71Exécutez [`/web-setup`](/docs/fr/web-quickstart#connect-from-your-terminal) pour connecter votre connexion GitHub CLI à votre compte Claude.71Exécutez [`/web-setup`](/docs/fr/web-quickstart#connect-from-your-terminal) pour connecter votre connexion GitHub CLI à votre compte Claude.

72 72 

vs-code.md +25 −5

Details

58 58 

59 * **Barre d'activité** : cliquez sur l'icône Spark dans la barre latérale gauche pour ouvrir la liste des sessions. Cliquez sur n'importe quelle session pour l'ouvrir à votre [emplacement préféré](#extension-settings), ou démarrez-en une nouvelle. Cette icône est toujours visible dans la Barre d'activité.59 * **Barre d'activité** : cliquez sur l'icône Spark dans la barre latérale gauche pour ouvrir la liste des sessions. Cliquez sur n'importe quelle session pour l'ouvrir à votre [emplacement préféré](#extension-settings), ou démarrez-en une nouvelle. Cette icône est toujours visible dans la Barre d'activité.

60 * **Palette de commandes** : `Cmd+Shift+P` (Mac) ou `Ctrl+Shift+P` (Windows/Linux), tapez « Claude Code », et sélectionnez une option comme « Open in New Tab »60 * **Palette de commandes** : `Cmd+Shift+P` (Mac) ou `Ctrl+Shift+P` (Windows/Linux), tapez « Claude Code », et sélectionnez une option comme « Open in New Tab »

61 * **Barre d'état** : si vous avez défini [`preferredLocation`](#extension-settings) sur `sidebar`, ou ouvert Claude avec **Claude Code: Open in Side Bar**, cliquez sur **✻ Claude Code** dans le coin inférieur droit de la fenêtre. Cela fonctionne même quand aucun fichier n'est ouvert.61 * **Barre d'état** : cliquez sur **✻ Claude Code** dans le coin inférieur droit de la fenêtre. Cela fonctionne même quand aucun fichier n'est ouvert.

62 62 

63 Vous pouvez faire glisser le panneau Claude pour le repositionner n'importe où dans VS Code. Consultez [Personnaliser votre flux de travail](#customize-your-workflow) pour plus de détails.63 Vous pouvez faire glisser le panneau Claude pour le repositionner n'importe où dans VS Code. Consultez [Personnaliser votre flux de travail](#customize-your-workflow) pour plus de détails.

64 </Step>64 </Step>


362 362 

363Dans l'onglet Plugins :363Dans l'onglet Plugins :

364 364 

365* Les **plugins installés** apparaissent en haut avec des commutateurs pour les activer ou les désactiver365* Les **plugins installés** apparaissent en haut avec des commutateurs pour les activer ou les désactiver.

366 * Si vous désactivez un plugin que le fichier `.claude/settings.json` partagé de votre projet active, l'extension vous demande d'abord : **Désactiver pour moi** le désactive uniquement pour vous, tandis que **Désactiver pour tout le monde** modifie le fichier partagé.

366* Les **plugins disponibles** de vos marketplaces configurées apparaissent ci-dessous367* Les **plugins disponibles** de vos marketplaces configurées apparaissent ci-dessous

367* Recherchez pour filtrer les plugins par nom ou description368* Recherchez pour filtrer les plugins par nom ou description

368* Cliquez sur **Installer** sur n'importe quel plugin disponible369* Cliquez sur **Installer** sur n'importe quel plugin disponible


373* **Installer pour ce projet** : partagé avec les collaborateurs du projet (étendue du projet)374* **Installer pour ce projet** : partagé avec les collaborateurs du projet (étendue du projet)

374* **Installer localement** : uniquement pour vous, uniquement dans ce référentiel (étendue locale)375* **Installer localement** : uniquement pour vous, uniquement dans ce référentiel (étendue locale)

375 376 

377Une fois l'installation terminée, un formulaire vous demande les [options de configuration](/docs/fr/plugins/components#user-configuration) du plugin qui ne sont pas encore définies. Pour examiner ou modifier les options ultérieurement, cliquez sur l'icône d'engrenage sur la ligne du plugin.

378 

379Les champs de texte sensibles sont masqués, et un secret que vous avez enregistré précédemment affiche **(inchangé)**. Laissez le champ vide pour conserver la valeur enregistrée.

380 

381Après avoir enregistré les modifications, les sessions ouvertes rechargent leurs plugins et la boîte de dialogue affiche **Redémarrer Claude pour appliquer les modifications de plugin**.

382 

383<h3 id="uninstall-plugins">

384 Désinstaller les plugins

385</h3>

386 

387Chaque ligne installée indique l'[étendue](/docs/fr/plugins/install#choose-an-install-scope) à laquelle elle est installée. Pour désinstaller cette installation, cliquez sur l'icône de corbeille de la ligne. Une icône de corbeille estompée marque une ligne que vous ne pouvez pas désinstaller de cet espace de travail, comme un plugin que votre organisation gère ou un plugin installé pour un autre projet.

388 

389L'extension vous demande d'abord dans deux cas :

390 

391* **Un plugin que le fichier `.claude/settings.json` partagé de votre projet active** : choisissez **Désactiver pour moi**, qui garde le plugin installé pour vos collaborateurs, ou **Désinstaller pour tout le monde**, qui supprime l'installation du projet avec [`--keep-data`](/docs/fr/plugins/cli-reference#what-an-uninstall-deletes-and-keeps), de sorte que le répertoire de données enregistrées du plugin reste. Si vous avez déjà désactivé le plugin pour vous-même, l'icône de corbeille supprime votre propre installation sans la question.

392* **Sinon, la dernière installation d'un plugin avec des données enregistrées** : choisissez si vous souhaitez conserver ou supprimer les données ; **Conserver** est la valeur par défaut

393 

376<h3 id="share-a-plugin-install-link">394<h3 id="share-a-plugin-install-link">

377 Partager un lien d'installation de plugin395 Partager un lien d'installation de plugin

378</h3>396</h3>


407 425 

408* Entrez un référentiel GitHub, une URL ou un chemin local pour ajouter une nouvelle marketplace426* Entrez un référentiel GitHub, une URL ou un chemin local pour ajouter une nouvelle marketplace

409* Cliquez sur l'icône d'actualisation pour mettre à jour la liste des plugins d'une marketplace427* Cliquez sur l'icône d'actualisation pour mettre à jour la liste des plugins d'une marketplace

410* Cliquez sur l'icône de corbeille pour supprimer une marketplace428* Cliquez sur l'icône de corbeille pour supprimer une marketplace. La supprimer [désinstalle tous les plugins que vous avez installés à partir de celle-ci](/docs/fr/plugins/install#manage-marketplaces), donc une confirmation nomme d'abord ces plugins

429 

430Les modifications apportées aux plugins dans la boîte de dialogue s'appliquent immédiatement aux sessions Claude Code ouvertes dans cette fenêtre VS Code.

411 431 

412Les modifications apportées aux plugins dans la boîte de dialogue s'appliquent immédiatement aux sessions Claude Code ouvertes dans cette fenêtre VS Code. Si la session à partir de laquelle vous avez ouvert la boîte de dialogue ne peut pas recharger ses plugins, la boîte de dialogue vous propose de réessayer ou de redémarrer Claude dans cette session.432Si la session à partir de laquelle vous avez ouvert la boîte de dialogue ne peut pas recharger ses plugins, la boîte de dialogue vous propose de réessayer ou de redémarrer Claude dans cette session.

413 433 

414<Note>434<Note>

415 La gestion des plugins dans VS Code utilise les mêmes commandes CLI en arrière-plan. Les plugins et les marketplaces que vous configurez dans l'extension sont également disponibles dans la CLI, et vice versa.435 La gestion des plugins dans VS Code utilise les mêmes commandes CLI en arrière-plan. Les plugins et les marketplaces que vous configurez dans l'extension sont également disponibles dans la CLI, et vice versa.


7904. **Désactivez les extensions conflictuelles** : Désactivez temporairement les autres extensions IA (Cline, Continue, etc.)8104. **Désactivez les extensions conflictuelles** : Désactivez temporairement les autres extensions IA (Cline, Continue, etc.)

7915. **Vérifiez la confiance de l'espace de travail** : L'extension ne fonctionne pas en mode restreint8115. **Vérifiez la confiance de l'espace de travail** : L'extension ne fonctionne pas en mode restreint

792 812 

793Sinon, si vous avez défini [`preferredLocation`](#extension-settings) sur `sidebar`, ou ouvert Claude avec **Claude Code: Open in Side Bar**, cliquez sur « ✻ Claude Code » dans la **Barre d'état** (coin inférieur droit). Cela fonctionne même sans fichier ouvert. Vous pouvez également utiliser la **Palette de commandes** (`Cmd+Shift+P` / `Ctrl+Shift+P`) et taper « Claude Code ».813Sinon, cliquez sur **✻ Claude Code** dans la **Barre d'état** en bas à droite de la fenêtre. Cela fonctionne même sans fichier ouvert. Vous pouvez également utiliser la **Palette de commandes** (`Cmd+Shift+P` / `Ctrl+Shift+P`) et taper « Claude Code ».

794 814 

795<h3 id="cmd-esc-does-nothing-on-macos">815<h3 id="cmd-esc-does-nothing-on-macos">

796 Cmd+Esc ne fait rien sur macOS816 Cmd+Esc ne fait rien sur macOS

worktrees.md +1 −1

Details

145* Le worktree appartient à une session `--worktree` que vous n'avez pas mise en arrière-plan, quel que soit son âge.145* Le worktree appartient à une session `--worktree` que vous n'avez pas mise en arrière-plan, quel que soit son âge.

146* Vous avez créé le worktree vous-même avec `git worktree add`, même si vous avez ensuite exécuté une session `--worktree <name>` dedans et l'avez mise en arrière-plan.146* Vous avez créé le worktree vous-même avec `git worktree add`, même si vous avez ensuite exécuté une session `--worktree <name>` dedans et l'avez mise en arrière-plan.

147 147 

148Claude Code écrit un marqueur dans les métadonnées git de chaque worktree qu'il crée avec git, et le balayage conserve tout worktree sans celui-ci, y compris un worktree qu'un hook [`WorktreeCreate`](#non-git-version-control) a créé. Avant la v2.1.246, le balayage ne vérifiait pas le marqueur, et pouvait supprimer un worktree que vous avez créé vous-même quand un ancien enregistrement de session en arrière-plan pointait vers lui.148Claude Code écrit un marqueur dans les métadonnées git de chaque worktree qu'il crée avec git, et le balayage conserve tout worktree sans celui-ci, y compris un worktree qu'un hook [`WorktreeCreate`](#non-git-version-control) a créé.

149 149 

150Pendant qu'un agent s'exécute, Claude Code maintient un `git worktree lock` sur son worktree pour que le nettoyage concurrent ne puisse pas le supprimer, et libère le verrou quand l'agent se termine. Claude Code maintient le même verrou sur le worktree qu'il a créé pour une session mise en arrière-plan pendant que la session s'exécute, pour que le balayage laisse le worktree en place et `git worktree remove` refuse de le supprimer.150Pendant qu'un agent s'exécute, Claude Code maintient un `git worktree lock` sur son worktree pour que le nettoyage concurrent ne puisse pas le supprimer, et libère le verrou quand l'agent se termine. Claude Code maintient le même verrou sur le worktree qu'il a créé pour une session mise en arrière-plan pendant que la session s'exécute, pour que le balayage laisse le worktree en place et `git worktree remove` refuse de le supprimer.

151 151