35Le tableau ci-dessous résume le moment où chaque événement se déclenche. La section [Événements de hook](#hook-events) documente le schéma d'entrée complet et les options de contrôle de décision pour chacun.35Le tableau ci-dessous résume le moment où chaque événement se déclenche. La section [Événements de hook](#hook-events) documente le schéma d'entrée complet et les options de contrôle de décision pour chacun.
36 36
37| Événement | Quand il se déclenche |37| Événement | Quand il se déclenche |
38| :-------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |38| :- | :- |
39| `SessionStart` | Quand une session commence ou reprend |39| `SessionStart` | Quand une session commence ou reprend |
40| `Setup` | Quand vous démarrez Claude Code avec `--init-only`, ou avec `--init` ou `--maintenance` en mode `-p`. Pour une préparation unique en CI ou dans les scripts |40| `Setup` | Quand vous démarrez Claude Code avec `--init-only`, ou avec `--init` ou `--maintenance` en mode `-p`. Pour une préparation unique en CI ou dans les scripts |
41| `UserPromptSubmit` | Quand vous soumettez une invite, avant que Claude la traite |41| `UserPromptSubmit` | Quand vous soumettez une invite, avant que Claude la traite |
259L'endroit où vous définissez un hook détermine sa portée :259L'endroit où vous définissez un hook détermine sa portée :
260 260
261| Emplacement | Portée | Partageable |261| Emplacement | Portée | Partageable |
262| :------------------------------------------------ | :--------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- |262| :- | :- | :- |
263| `~/.claude/settings.json` | Tous vos projets | Non, local à votre machine |263| `~/.claude/settings.json` | Tous vos projets | Non, local à votre machine |
264| `.claude/settings.json` | Projet unique | Oui, peut être commité dans le repo |264| `.claude/settings.json` | Projet unique | Oui, peut être commité dans le repo |
265| `.claude/settings.local.json` | Projet unique | Non, ignoré par git lorsque Claude Code enregistre un paramètre dedans |265| `.claude/settings.local.json` | Projet unique | Non, ignoré par git lorsque Claude Code enregistre un paramètre dedans |
297Le champ `matcher` filtre quand les hooks se déclenchent. La façon dont un matcher est évalué dépend des caractères qu'il contient :297Le champ `matcher` filtre quand les hooks se déclenchent. La façon dont un matcher est évalué dépend des caractères qu'il contient :
298 298
299| Valeur du matcher | Évalué comme | Exemple |299| Valeur du matcher | Évalué comme | Exemple |
300| :----------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |300| :- | :- | :- |
301| `"*"`, `""` ou omis | Correspondre à tous | se déclenche à chaque occurrence de l'événement |301| `"*"`, `""` ou omis | Correspondre à tous | se déclenche à chaque occurrence de l'événement |
302| Uniquement des lettres, des chiffres, `_`, `-`, des espaces, `,` et `\|` | Chaîne exacte ou liste de chaînes exactes séparées par `\|` ou `,` avec espaces blancs optionnels autour | `Bash` correspond uniquement à l'outil Bash ; `Edit\|Write` et `Edit, Write` correspondent chacun à l'un ou l'autre outil exactement ; `code-reviewer` correspond uniquement à ce type d'agent |302| Uniquement des lettres, des chiffres, `_`, `-`, des espaces, `,` et `\|` | Chaîne exacte ou liste de chaînes exactes séparées par `\|` ou `,` avec espaces blancs optionnels autour | `Bash` correspond uniquement à l'outil Bash ; `Edit\|Write` et `Edit, Write` correspondent chacun à l'un ou l'autre outil exactement ; `code-reviewer` correspond uniquement à ce type d'agent |
303| Contient tout autre caractère | Expression régulière JavaScript, non ancrée | `^Notebook` correspond à tout outil commençant par Notebook ; `mcp__memory__.*` correspond à chaque outil du serveur `memory` |303| Contient tout autre caractère | Expression régulière JavaScript, non ancrée | `^Notebook` correspond à tout outil commençant par Notebook ; `mcp__memory__.*` correspond à chaque outil du serveur `memory` |
313Chaque type d'événement correspond sur un champ différent :313Chaque type d'événement correspond sur un champ différent :
314 314
315| Événement | Ce que le matcher filtre | Exemples de valeurs de matcher |315| Événement | Ce que le matcher filtre | Exemples de valeurs de matcher |
316| :------------------------------------------------------------------------------------------------------------------------------------------------ | :---------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |316| :- | :- | :- |
317| `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `PermissionDenied` | nom de l'outil | `Bash`, `Edit\|Write`, `mcp__.*` |317| `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `PermissionDenied` | nom de l'outil | `Bash`, `Edit\|Write`, `mcp__.*` |
318| `SessionStart` | comment la session a démarré | `startup`, `resume`, `clear`, `compact`, `fork` |318| `SessionStart` | comment la session a démarré | `startup`, `resume`, `clear`, `compact`, `fork` |
319| `Setup` | quel drapeau CLI a déclenché la configuration | `init`, `maintenance` |319| `Setup` | quel drapeau CLI a déclenché la configuration | `init`, `maintenance` |
438Ces champs s'appliquent à tous les types de hooks :438Ces champs s'appliquent à tous les types de hooks :
439 439
440| Champ | Requis | Description |440| Champ | Requis | Description |
441| :-------------- | :----- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |441| :- | :- | :- |
442| `type` | oui | `"command"`, `"http"`, `"mcp_tool"`, `"prompt"` ou `"agent"` |442| `type` | oui | `"command"`, `"http"`, `"mcp_tool"`, `"prompt"` ou `"agent"` |
443| `if` | non | Syntaxe de règle de permission pour filtrer quand ce hook s'exécute, comme `"Bash(git *)"` ou `"Edit(*.ts)"`. Le hook de commande ne s'exécute que si l'appel d'outil correspond au modèle. Consultez le [tableau de correspondance Bash](#bash-if-matching) ci-dessous pour voir comment les modèles Bash s'évaluent par rapport aux sous-commandes, `$()` et aux backticks. Évalué uniquement sur les événements d'outil : `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest` et `PermissionDenied`. Sur les autres événements, un hook avec `if` défini ne s'exécute jamais. Utilise la même syntaxe que les [règles de permission](/docs/fr/permissions) |443| `if` | non | Syntaxe de règle de permission pour filtrer quand ce hook s'exécute, comme `"Bash(git *)"` ou `"Edit(*.ts)"`. Le hook de commande ne s'exécute que si l'appel d'outil correspond au modèle. Consultez le [tableau de correspondance Bash](#bash-if-matching) ci-dessous pour voir comment les modèles Bash s'évaluent par rapport aux sous-commandes, `$()` et aux backticks. Évalué uniquement sur les événements d'outil : `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest` et `PermissionDenied`. Sur les autres événements, un hook avec `if` défini ne s'exécute jamais. Utilise la même syntaxe que les [règles de permission](/docs/fr/permissions) |
444| `timeout` | non | Secondes avant annulation. Claude Code ne l'applique pas sur un hook de commande que vous exécutez avec [`async: true`](#run-hooks-in-the-background). Valeurs par défaut : 600 pour `command`, `http` et `mcp_tool` ; 30 pour `prompt` ; 60 pour `agent`. Claude Code abaisse la valeur par défaut de `command`, `http` et `mcp_tool` à 30 sur [`UserPromptSubmit`](#userpromptsubmit), [`PreModelSwitch`](#premodelswitch) et [`PostModelSwitch`](#postmodelswitch), et à 10 sur [`MessageDisplay`](#messagedisplay). Les hooks [`SessionEnd`](#sessionend) partagent un budget de 1,5 seconde ; si vos paramètres définissent un `timeout` par hook plus long, Claude Code augmente le budget pour correspondre, jusqu'à 60 secondes |444| `timeout` | non | Secondes avant annulation. Claude Code ne l'applique pas sur un hook de commande que vous exécutez avec [`async: true`](#run-hooks-in-the-background). Valeurs par défaut : 600 pour `command`, `http` et `mcp_tool` ; 30 pour `prompt` ; 60 pour `agent`. Claude Code abaisse la valeur par défaut de `command`, `http` et `mcp_tool` à 30 sur [`UserPromptSubmit`](#userpromptsubmit), [`PreModelSwitch`](#premodelswitch) et [`PostModelSwitch`](#postmodelswitch), et à 10 sur [`MessageDisplay`](#messagedisplay). Les hooks [`SessionEnd`](#sessionend) partagent un budget de 1,5 seconde ; si vos paramètres définissent un `timeout` par hook plus long, Claude Code augmente le budget pour correspondre, jusqu'à 60 secondes |
452<span id="bash-if-matching" />Pour les modèles Bash, le fait que votre commande de hook s'exécute dépend de la forme du modèle et de la commande Bash que Claude invoque. Les affectations `VAR=value` en début sont supprimées avant la correspondance.452<span id="bash-if-matching" />Pour les modèles Bash, le fait que votre commande de hook s'exécute dépend de la forme du modèle et de la commande Bash que Claude invoque. Les affectations `VAR=value` en début sont supprimées avant la correspondance.
453 453
454| Modèle `if` | Commande Bash | Le hook s'exécute-t-il ? | Pourquoi |454| Modèle `if` | Commande Bash | Le hook s'exécute-t-il ? | Pourquoi |
455| :----------------- | :-------------------------- | :----------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------ |455| :- | :- | :- | :- |
456| `Bash(git *)` | `FOO=bar git push` | oui | les affectations en début sont supprimées ; `git push` correspond |456| `Bash(git *)` | `FOO=bar git push` | oui | les affectations en début sont supprimées ; `git push` correspond |
457| `Bash(git *)` | `npm test && git push` | oui | chaque sous-commande est vérifiée ; `git push` correspond |457| `Bash(git *)` | `npm test && git push` | oui | chaque sous-commande est vérifiée ; `git push` correspond |
458| `Bash(rm *)` | `echo $(rm -rf /)` | oui | les commandes à l'intérieur de `$()` et des backticks sont vérifiées ; `rm -rf /` correspond |458| `Bash(rm *)` | `echo $(rm -rf /)` | oui | les commandes à l'intérieur de `$()` et des backticks sont vérifiées ; `rm -rf /` correspond |
470En plus des [champs communs](#common-fields), les hooks de commande acceptent ces champs :470En plus des [champs communs](#common-fields), les hooks de commande acceptent ces champs :
471 471
472| Champ | Requis | Description |472| Champ | Requis | Description |
473| :------------ | :----- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |473| :- | :- | :- |
474| `command` | oui | Commande shell à exécuter. Avec `args`, l'exécutable à lancer directement. Consultez [Forme exec et forme shell](#exec-form-and-shell-form) |474| `command` | oui | Commande shell à exécuter. Avec `args`, l'exécutable à lancer directement. Consultez [Forme exec et forme shell](#exec-form-and-shell-form) |
475| `args` | non | Liste d'arguments. Lorsqu'elle est présente, `command` est résolu comme un exécutable et lancé directement avec `args` comme vecteur d'arguments, sans shell. Consultez [Forme exec et forme shell](#exec-form-and-shell-form) |475| `args` | non | Liste d'arguments. Lorsqu'elle est présente, `command` est résolu comme un exécutable et lancé directement avec `args` comme vecteur d'arguments, sans shell. Consultez [Forme exec et forme shell](#exec-form-and-shell-form) |
476| `async` | non | Si `true`, s'exécute en arrière-plan sans bloquer. Consultez [Exécuter les hooks en arrière-plan](#run-hooks-in-the-background) |476| `async` | non | Si `true`, s'exécute en arrière-plan sans bloquer. Consultez [Exécuter les hooks en arrière-plan](#run-hooks-in-the-background) |
529En plus des [champs communs](#common-fields), les hooks HTTP acceptent ces champs :529En plus des [champs communs](#common-fields), les hooks HTTP acceptent ces champs :
530 530
531| Champ | Requis | Description |531| Champ | Requis | Description |
532| :--------------- | :----- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |532| :- | :- | :- |
533| `url` | oui | URL vers laquelle envoyer la requête POST |533| `url` | oui | URL vers laquelle envoyer la requête POST |
534| `headers` | non | En-têtes HTTP supplémentaires sous forme de paires clé-valeur. Les valeurs supportent l'interpolation de variables d'environnement en utilisant la syntaxe `$VAR_NAME` ou `${VAR_NAME}`. Seules les variables listées dans `allowedEnvVars` sont résolues |534| `headers` | non | En-têtes HTTP supplémentaires sous forme de paires clé-valeur. Les valeurs supportent l'interpolation de variables d'environnement en utilisant la syntaxe `$VAR_NAME` ou `${VAR_NAME}`. Seules les variables listées dans `allowedEnvVars` sont résolues |
535| `allowedEnvVars` | non | Liste des noms de variables d'environnement qui peuvent être interpolés dans les valeurs d'en-tête. Les références aux variables non listées sont remplacées par des chaînes vides. Requis pour que l'interpolation de variables d'environnement fonctionne |535| `allowedEnvVars` | non | Liste des noms de variables d'environnement qui peuvent être interpolés dans les valeurs d'en-tête. Les références aux variables non listées sont remplacées par des chaînes vides. Requis pour que l'interpolation de variables d'environnement fonctionne |
570En plus des [champs communs](#common-fields), les hooks de l'outil MCP acceptent ces champs :570En plus des [champs communs](#common-fields), les hooks de l'outil MCP acceptent ces champs :
571 571
572| Champ | Requis | Description |572| Champ | Requis | Description |
573| :------- | :----- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |573| :- | :- | :- |
574| `server` | oui | Nom d'un serveur MCP configuré. Pour un [serveur fourni par un plugin](/docs/fr/mcp#plugin-provided-mcp-servers), c'est le nom limité `plugin:<plugin-name>:<server-name>`, comme `plugin:my-plugin:db`, pas la clé de serveur nue. Le serveur doit déjà être connecté ; le hook ne déclenche jamais un flux OAuth ou de connexion |574| `server` | oui | Nom d'un serveur MCP configuré. Pour un [serveur fourni par un plugin](/docs/fr/mcp#plugin-provided-mcp-servers), c'est le nom limité `plugin:<plugin-name>:<server-name>`, comme `plugin:my-plugin:db`, pas la clé de serveur nue. Le serveur doit déjà être connecté ; le hook ne déclenche jamais un flux OAuth ou de connexion |
575| `tool` | oui | Nom de l'outil à appeler sur ce serveur |575| `tool` | oui | Nom de l'outil à appeler sur ce serveur |
576| `input` | non | Arguments passés à l'outil. Les valeurs de chaîne supportent la substitution `${path}` de l'[entrée JSON](#hook-input-and-output) du hook, comme `"${tool_input.file_path}"` |576| `input` | non | Arguments passés à l'outil. Les valeurs de chaîne supportent la substitution `${path}` de l'[entrée JSON](#hook-input-and-output) du hook, comme `"${tool_input.file_path}"` |
634En plus des [champs communs](#common-fields), les hooks de prompt et d'agent acceptent ces champs :634En plus des [champs communs](#common-fields), les hooks de prompt et d'agent acceptent ces champs :
635 635
636| Champ | Requis | Description |636| Champ | Requis | Description |
637| :------- | :----- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |637| :- | :- | :- |
638| `prompt` | oui | Texte du prompt à envoyer au modèle. Utilisez `$ARGUMENTS` comme placeholder pour l'entrée JSON du hook. Échappez avec une barre oblique inverse pour inclure du texte littéral : `\$1.00` s'affiche comme `$1.00` |638| `prompt` | oui | Texte du prompt à envoyer au modèle. Utilisez `$ARGUMENTS` comme placeholder pour l'entrée JSON du hook. Échappez avec une barre oblique inverse pour inclure du texte littéral : `\$1.00` s'affiche comme `$1.00` |
639| `model` | non | Modèle à utiliser pour l'évaluation. Par défaut un modèle rapide |639| `model` | non | Modèle à utiliser pour l'évaluation. Par défaut un modèle rapide |
640 640
786Les événements de hook reçoivent ces champs en JSON, en plus des champs spécifiques à l'événement documentés dans chaque section [événement de hook](#hook-events). Pour les hooks de commande, ce JSON arrive via stdin. Pour les hooks HTTP, il arrive dans le corps de la requête POST.786Les événements de hook reçoivent ces champs en JSON, en plus des champs spécifiques à l'événement documentés dans chaque section [événement de hook](#hook-events). Pour les hooks de commande, ce JSON arrive via stdin. Pour les hooks HTTP, il arrive dans le corps de la requête POST.
787 787
788| Champ | Description |788| Champ | Description |
789| :---------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |789| :- | :- |
790| `session_id` | Identifiant de session actuel |790| `session_id` | Identifiant de session actuel |
791| `prompt_id` | UUID identifiant le prompt utilisateur actuellement traité. Correspond à l'[attribut `prompt.id` sur les événements OpenTelemetry](/docs/fr/monitoring-usage#event-correlation-attributes), afin que vous puissiez corréler la sortie du hook avec la télémétrie pour un seul prompt. Absent jusqu'à la première entrée utilisateur. Nécessite Claude Code v2.1.196 ou ultérieur |791| `prompt_id` | UUID identifiant le prompt utilisateur actuellement traité. Correspond à l'[attribut `prompt.id` sur les événements OpenTelemetry](/docs/fr/monitoring-usage#event-correlation-attributes), afin que vous puissiez corréler la sortie du hook avec la télémétrie pour un seul prompt. Absent jusqu'à la première entrée utilisateur. Nécessite Claude Code v2.1.196 ou ultérieur |
792| `transcript_path` | Chemin vers le JSON de conversation. Le fichier de transcription est écrit de manière asynchrone et peut être en retard par rapport à la conversation en mémoire, il se peut donc qu'il n'inclue pas encore les messages les plus récents du tour actuel lorsqu'un hook se déclenche. Les hooks qui ont besoin du texte final de l'assistant du tour actuel doivent utiliser `last_assistant_message` sur [Stop](#stop) et [SubagentStop](#subagentstop) au lieu de lire la transcription |792| `transcript_path` | Chemin vers le JSON de conversation. Le fichier de transcription est écrit de manière asynchrone et peut être en retard par rapport à la conversation en mémoire, il se peut donc qu'il n'inclue pas encore les messages les plus récents du tour actuel lorsqu'un hook se déclenche. Les hooks qui ont besoin du texte final de l'assistant du tour actuel doivent utiliser `last_assistant_message` sur [Stop](#stop) et [SubagentStop](#subagentstop) au lieu de lire la transcription |
799Lors de l'exécution avec `--agent` ou à l'intérieur d'un subagent, deux champs supplémentaires sont inclus :799Lors de l'exécution avec `--agent` ou à l'intérieur d'un subagent, deux champs supplémentaires sont inclus :
800 800
801| Champ | Description |801| Champ | Description |
802| :----------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |802| :- | :- |
803| `agent_id` | Identifiant unique pour le subagent. Présent uniquement lorsque le hook se déclenche à l'intérieur d'un appel de subagent. Utilisez ceci pour distinguer les appels de hook de subagent des appels du thread principal. |803| `agent_id` | Identifiant unique pour le subagent. Présent uniquement lorsque le hook se déclenche à l'intérieur d'un appel de subagent. Utilisez ceci pour distinguer les appels de hook de subagent des appels du thread principal. |
804| `agent_type` | Nom de l'agent (par exemple, `"Explore"` ou `"security-reviewer"`). Présent lorsque la session utilise `--agent` ou que le hook se déclenche à l'intérieur d'un subagent. Pour les subagents, le type du subagent prend précédence sur la valeur `--agent` de la session. Consultez [SubagentStart](#subagentstart) pour les valeurs que les subagents personnalisés et fournis par un plugin rapportent et comment écrire un matcher contre un nom scoped du plugin. |804| `agent_type` | Nom de l'agent (par exemple, `"Explore"` ou `"security-reviewer"`). Présent lorsque la session utilise `--agent` ou que le hook se déclenche à l'intérieur d'un subagent. Pour les subagents, le type du subagent prend précédence sur la valeur `--agent` de la session. Consultez [SubagentStart](#subagentstart) pour les valeurs que les subagents personnalisés et fournis par un plugin rapportent et comment écrire un matcher contre un nom scoped du plugin. |
805 805
926Exit code 2 est la façon dont un hook signale « arrêtez, ne faites pas cela ». L'effet dépend de l'événement, car certains événements représentent des actions qui peuvent être bloquées (comme un appel d'outil qui ne s'est pas encore produit) et d'autres représentent des choses qui se sont déjà produites ou ne peuvent pas être empêchées.926Exit code 2 est la façon dont un hook signale « arrêtez, ne faites pas cela ». L'effet dépend de l'événement, car certains événements représentent des actions qui peuvent être bloquées (comme un appel d'outil qui ne s'est pas encore produit) et d'autres représentent des choses qui se sont déjà produites ou ne peuvent pas être empêchées.
927 927
928| Événement de hook | Peut bloquer ? | Ce qui se passe sur exit 2 |928| Événement de hook | Peut bloquer ? | Ce qui se passe sur exit 2 |
929| :-------------------- | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |929| :- | :- | :- |
930| `PreToolUse` | Oui | Bloque l'appel d'outil |930| `PreToolUse` | Oui | Bloque l'appel d'outil |
931| `PermissionRequest` | Non | Exit code 2 n'est pas honoré pour cet événement et le flux de permission procède inchangé. Refusez via l'objet [`decision`](#permissionrequest-decision-control) à la place |931| `PermissionRequest` | Non | Exit code 2 n'est pas honoré pour cet événement et le flux de permission procède inchangé. Refusez via l'objet [`decision`](#permissionrequest-decision-control) à la place |
932| `UserPromptSubmit` | Oui | Bloque le traitement du prompt et efface le prompt |932| `UserPromptSubmit` | Oui | Bloque le traitement du prompt et efface le prompt |
1003* **`hookSpecificOutput`** est un objet imbriqué pour les événements qui ont besoin d'un contrôle plus riche. Il nécessite un champ `hookEventName` défini au nom de l'événement.1003* **`hookSpecificOutput`** est un objet imbriqué pour les événements qui ont besoin d'un contrôle plus riche. Il nécessite un champ `hookEventName` défini au nom de l'événement.
1004 1004
1005| Champ | Par défaut | Description |1005| Champ | Par défaut | Description |
1006| :----------------- | :--------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1006| :- | :- | :- |
1007| `continue` | `true` | Si `false`, Claude arrête complètement le traitement après l'exécution du hook. Prend précédence sur tous les champs de décision spécifiques à l'événement |1007| `continue` | `true` | Si `false`, Claude arrête complètement le traitement après l'exécution du hook. Prend précédence sur tous les champs de décision spécifiques à l'événement |
1008| `stopReason` | aucun | Message affiché à l'utilisateur lorsque `continue` est `false`. Il reste dans la conversation, afin que Claude le voie si la conversation continue |1008| `stopReason` | aucun | Message affiché à l'utilisateur lorsque `continue` est `false`. Il reste dans la conversation, afin que Claude le voie si la conversation continue |
1009| `suppressOutput` | `false` | N'a aucun effet : Claude Code accepte le champ mais n'agit pas dessus. La sortie stdout d'un hook réussi n'est jamais affichée dans la transcription et est enregistrée dans le journal de débogage |1009| `suppressOutput` | `false` | N'a aucun effet : Claude Code accepte le champ mais n'agit pas dessus. La sortie stdout d'un hook réussi n'est jamais affichée dans la transcription et est enregistrée dans le journal de débogage |
1101Tous les événements ne supportent pas le blocage ou le contrôle du comportement via JSON. Les événements qui le font utilisent chacun un ensemble différent de champs pour exprimer cette décision. Utilisez ce tableau comme référence rapide avant d'écrire un hook :1101Tous les événements ne supportent pas le blocage ou le contrôle du comportement via JSON. Les événements qui le font utilisent chacun un ensemble différent de champs pour exprimer cette décision. Utilisez ce tableau comme référence rapide avant d'écrire un hook :
1102 1102
1103| Événements | Modèle de décision | Champs clés |1103| Événements | Modèle de décision | Champs clés |
1104| :---------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1104| :- | :- | :- |
1105| UserPromptSubmit, UserPromptExpansion, PostToolUse, PostToolUseFailure, PostToolBatch, Stop, SubagentStop, ConfigChange, PreCompact | `decision` au niveau supérieur | `decision: "block"`, `reason`. Stop et SubagentStop acceptent également `hookSpecificOutput.additionalContext` pour [les commentaires non-erreur qui continuent la conversation](#stop-decision-control) |1105| UserPromptSubmit, UserPromptExpansion, PostToolUse, PostToolUseFailure, PostToolBatch, Stop, SubagentStop, ConfigChange, PreCompact | `decision` au niveau supérieur | `decision: "block"`, `reason`. Stop et SubagentStop acceptent également `hookSpecificOutput.additionalContext` pour [les commentaires non-erreur qui continuent la conversation](#stop-decision-control) |
1106| TeammateIdle, TaskCompleted | Exit code ou `continue: false` | Exit code 2 bloque l'action avec commentaires stderr. JSON `{"continue": false, "stopReason": "..."}` arrête également complètement le coéquipier, correspondant au comportement du hook `Stop` ; [TaskCompleted l'ignore lorsque l'outil `TaskUpdate` a déclenché l'événement](#taskcompleted-decision-control) |1106| TeammateIdle, TaskCompleted | Exit code ou `continue: false` | Exit code 2 bloque l'action avec commentaires stderr. JSON `{"continue": false, "stopReason": "..."}` arrête également complètement le coéquipier, correspondant au comportement du hook `Stop` ; [TaskCompleted l'ignore lorsque l'outil `TaskUpdate` a déclenché l'événement](#taskcompleted-decision-control) |
1107| TaskCreated | Exit code ou `decision` au niveau supérieur | Exit code 2 ou `decision: "block"` [annule la tâche](#taskcreated-decision-control) et retourne le message à Claude. `continue: false` est ignoré |1107| TaskCreated | Exit code ou `decision` au niveau supérieur | Exit code 2 ou `decision: "block"` [annule la tâche](#taskcreated-decision-control) et retourne le message à Claude. `continue: false` est ignoré |
1192La valeur du matcher correspond à la façon dont la session a été initiée :1192La valeur du matcher correspond à la façon dont la session a été initiée :
1193 1193
1194| Matcher | Quand il se déclenche |1194| Matcher | Quand il se déclenche |
1195| :-------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |1195| :- | :- |
1196| `startup` | Nouvelle session |1196| `startup` | Nouvelle session |
1197| `resume` | `--resume`, `--continue`, ou `/resume` |1197| `resume` | `--resume`, `--continue`, ou `/resume` |
1198| `clear` | `/clear` |1198| `clear` | `/clear` |
1216En plus des [champs d'entrée communs](#common-input-fields), les hooks SessionStart reçoivent `source` et optionnellement `model`, `agent_type`, et `session_title` :1216En plus des [champs d'entrée communs](#common-input-fields), les hooks SessionStart reçoivent `source` et optionnellement `model`, `agent_type`, et `session_title` :
1217 1217
1218| Champ | Description |1218| Champ | Description |
1219| :-------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1219| :- | :- |
1220| `source` | Comment la session a démarré : `"startup"` pour les nouvelles sessions, `"resume"` pour les sessions reprises, `"clear"` après `/clear`, `"compact"` après compaction, ou `"fork"` pour une nouvelle session créée à partir d'une session existante |1220| `source` | Comment la session a démarré : `"startup"` pour les nouvelles sessions, `"resume"` pour les sessions reprises, `"clear"` après `/clear`, `"compact"` après compaction, ou `"fork"` pour une nouvelle session créée à partir d'une session existante |
1221| `model` | L'identifiant du modèle actif. Il peut être omis, par exemple après `/clear` ou quand une session est restaurée via la récupération de conversation, donc vérifiez le champ avant de le lire |1221| `model` | L'identifiant du modèle actif. Il peut être omis, par exemple après `/clear` ou quand une session est restaurée via la récupération de conversation, donc vérifiez le champ avant de le lire |
1222| `agent_type` | Le nom de l'agent, présent quand vous démarrez Claude Code avec `claude --agent <name>` |1222| `agent_type` | Le nom de l'agent, présent quand vous démarrez Claude Code avec `claude --agent <name>` |
1225Quand `source` est `"resume"` ou `"fork"` et que la transcription contient au moins une réponse de Claude, les hooks SessionStart reçoivent également les quatre champs ci-dessous. Votre hook peut les utiliser pour signaler le coût de reprendre une conversation obsolète avant la première requête, par exemple dans un [`systemMessage`](#json-output). Ces champs nécessitent Claude Code v2.1.251 ou ultérieur.1225Quand `source` est `"resume"` ou `"fork"` et que la transcription contient au moins une réponse de Claude, les hooks SessionStart reçoivent également les quatre champs ci-dessous. Votre hook peut les utiliser pour signaler le coût de reprendre une conversation obsolète avant la première requête, par exemple dans un [`systemMessage`](#json-output). Ces champs nécessitent Claude Code v2.1.251 ou ultérieur.
1226 1226
1227| Champ | Description |1227| Champ | Description |
1228| :---------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1228| :- | :- |
1229| `seconds_since_last_response` | Secondes d'horloge murale depuis la dernière réponse dans la transcription reprise |1229| `seconds_since_last_response` | Secondes d'horloge murale depuis la dernière réponse dans la transcription reprise |
1230| `context_tokens` | Tokens que la première requête de la session reprise renvoie comme son invite |1230| `context_tokens` | Tokens que la première requête de la session reprise renvoie comme son invite |
1231| `prompt_cache_likely_expired` | `true` quand la dernière réponse est plus ancienne que la [durée de vie du cache d'invite](/docs/fr/prompt-caching#cache-lifetime) de la session ou qu'une compaction ultérieure a remplacé la conversation en cache |1231| `prompt_cache_likely_expired` | `true` quand la dernière réponse est plus ancienne que la [durée de vie du cache d'invite](/docs/fr/prompt-caching#cache-lifetime) de la session ou qu'une compaction ultérieure a remplacé la conversation en cache |
1255Claude Code ajoute la sortie standard qu'il [traite comme du texte brut](#exit-code-0) au contexte de Claude. En plus des [champs de sortie JSON](#json-output) disponibles pour tous les hooks, vous pouvez retourner ces champs spécifiques à l'événement :1255Claude Code ajoute la sortie standard qu'il [traite comme du texte brut](#exit-code-0) au contexte de Claude. En plus des [champs de sortie JSON](#json-output) disponibles pour tous les hooks, vous pouvez retourner ces champs spécifiques à l'événement :
1256 1256
1257| Champ | Description |1257| Champ | Description |
1258| :------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1258| :- | :- |
1259| `additionalContext` | Chaîne ajoutée au contexte de Claude au début de la conversation, avant la première invite. Voir [Ajouter du contexte pour Claude](#add-context-for-claude) pour savoir comment le texte est livré et ce qu'il faut y mettre |1259| `additionalContext` | Chaîne ajoutée au contexte de Claude au début de la conversation, avant la première invite. Voir [Ajouter du contexte pour Claude](#add-context-for-claude) pour savoir comment le texte est livré et ce qu'il faut y mettre |
1260| `initialUserMessage` | Chaîne utilisée comme premier message utilisateur de la session. S'applique en [mode non-interactif](/docs/fr/headless) avec le drapeau `-p`, où elle devient le premier tour même si aucune invite n'est fournie. Si une invite est fournie, elle suit comme le tour suivant. Contrairement à `additionalContext`, qui s'attache à un tour existant, ceci crée le tour |1260| `initialUserMessage` | Chaîne utilisée comme premier message utilisateur de la session. S'applique en [mode non-interactif](/docs/fr/headless) avec le drapeau `-p`, où elle devient le premier tour même si aucune invite n'est fournie. Si une invite est fournie, elle suit comme le tour suivant. Contrairement à `additionalContext`, qui s'attache à un tour existant, ceci crée le tour |
1261| `sessionTitle` | Définit le titre de la session, avec le même effet que `/rename`. Utilisez pour nommer les sessions automatiquement à partir du dossier de lancement, de la branche git, ou du nom du worktree. S'applique quand `source` est `"startup"`, `"resume"`, ou `"fork"` ; ignoré sur `"clear"` et `"compact"` |1261| `sessionTitle` | Définit le titre de la session, avec le même effet que `/rename`. Utilisez pour nommer les sessions automatiquement à partir du dossier de lancement, de la branche git, ou du nom du worktree. S'applique quand `source` est `"startup"`, `"resume"`, ou `"fork"` ; ignoré sur `"clear"` et `"compact"` |
1339La valeur du matcher correspond au drapeau CLI qui a déclenché le hook :1339La valeur du matcher correspond au drapeau CLI qui a déclenché le hook :
1340 1340
1341| Matcher | Quand il se déclenche |1341| Matcher | Quand il se déclenche |
1342| :------------ | :----------------------------------------- |1342| :- | :- |
1343| `init` | `claude --init-only` ou `claude -p --init` |1343| `init` | `claude --init-only` ou `claude -p --init` |
1344| `maintenance` | `claude -p --maintenance` |1344| `maintenance` | `claude -p --maintenance` |
1345 1345
1392En plus des [champs d'entrée communs](#common-input-fields), les hooks InstructionsLoaded reçoivent ces champs :1392En plus des [champs d'entrée communs](#common-input-fields), les hooks InstructionsLoaded reçoivent ces champs :
1393 1393
1394| Champ | Description |1394| Champ | Description |
1395| :------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1395| :- | :- |
1396| `file_path` | Chemin absolu du fichier d'instructions qui a été chargé |1396| `file_path` | Chemin absolu du fichier d'instructions qui a été chargé |
1397| `memory_type` | Portée du fichier : `"User"`, `"Project"`, `"Local"`, ou `"Managed"` |1397| `memory_type` | Portée du fichier : `"User"`, `"Project"`, `"Local"`, ou `"Managed"` |
1398| `load_reason` | Pourquoi le fichier a été chargé : `"session_start"`, `"nested_traversal"`, `"path_glob_match"`, `"include"`, ou `"compact"`. La valeur `"compact"` se déclenche quand les fichiers d'instructions sont rechargés après un événement de compaction |1398| `load_reason` | Pourquoi le fichier a été chargé : `"session_start"`, `"nested_traversal"`, `"path_glob_match"`, `"include"`, ou `"compact"`. La valeur `"compact"` se déclenche quand les fichiers d'instructions sont rechargés après un événement de compaction |
1463Pour bloquer une invite, retournez un objet JSON avec `decision` défini à `"block"` :1463Pour bloquer une invite, retournez un objet JSON avec `decision` défini à `"block"` :
1464 1464
1465| Champ | Description |1465| Champ | Description |
1466| :----------------------- | :---------------------------------------------------------------------------------------------------------------------------------- |1466| :- | :- |
1467| `decision` | `"block"` empêche l'invite d'être traitée et l'efface du contexte. Omettez pour permettre à l'invite de procéder |1467| `decision` | `"block"` empêche l'invite d'être traitée et l'efface du contexte. Omettez pour permettre à l'invite de procéder |
1468| `reason` | Montré à l'utilisateur quand `decision` est `"block"`. Non ajouté au contexte |1468| `reason` | Montré à l'utilisateur quand `decision` est `"block"`. Non ajouté au contexte |
1469| `additionalContext` | Chaîne ajoutée au contexte de Claude aux côtés de l'invite soumise. Voir [Ajouter du contexte pour Claude](#add-context-for-claude) |1469| `additionalContext` | Chaîne ajoutée au contexte de Claude aux côtés de l'invite soumise. Voir [Ajouter du contexte pour Claude](#add-context-for-claude) |
1522Les hooks `UserPromptExpansion` peuvent bloquer l'expansion ou ajouter du contexte. Tous les [champs de sortie JSON](#json-output) sont disponibles.1522Les hooks `UserPromptExpansion` peuvent bloquer l'expansion ou ajouter du contexte. Tous les [champs de sortie JSON](#json-output) sont disponibles.
1523 1523
1524| Champ | Description |1524| Champ | Description |
1525| :------------------ | :------------------------------------------------------------------------------------------------------------------------------------- |1525| :- | :- |
1526| `decision` | `"block"` empêche la commande de se développer. Omettez pour permettre à la commande de procéder |1526| `decision` | `"block"` empêche la commande de se développer. Omettez pour permettre à la commande de procéder |
1527| `reason` | Montré à l'utilisateur quand `decision` est `"block"` |1527| `reason` | Montré à l'utilisateur quand `decision` est `"block"` |
1528| `additionalContext` | Chaîne ajoutée au contexte de Claude aux côtés de l'invite développée. Voir [Ajouter du contexte pour Claude](#add-context-for-claude) |1528| `additionalContext` | Chaîne ajoutée au contexte de Claude aux côtés de l'invite développée. Voir [Ajouter du contexte pour Claude](#add-context-for-claude) |
1567En plus des [champs d'entrée communs](#common-input-fields), les hooks MessageDisplay reçoivent des identifiants pour le tour et le message, la position de cet appel dans le message, et le nouveau texte dans `delta`. Les limites de lot dépendent de la façon dont le texte s'affiche, donc utilisez `index` et `final` pour suivre la progression à travers un message plutôt que de vous attendre à ce que les lignes soient groupées d'une manière particulière.1567En plus des [champs d'entrée communs](#common-input-fields), les hooks MessageDisplay reçoivent des identifiants pour le tour et le message, la position de cet appel dans le message, et le nouveau texte dans `delta`. Les limites de lot dépendent de la façon dont le texte s'affiche, donc utilisez `index` et `final` pour suivre la progression à travers un message plutôt que de vous attendre à ce que les lignes soient groupées d'une manière particulière.
1568 1568
1569| Champ | Description |1569| Champ | Description |
1570| :----------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1570| :- | :- |
1571| `turn_id` | UUID du tour actuel |1571| `turn_id` | UUID du tour actuel |
1572| `message_id` | UUID du message d'assistant en cours d'affichage. Stable à travers chaque lot du même message. Ce n'est pas l'API `msg_…` id, donc il ne peut pas être corrélé avec les ids de message de transcription |1572| `message_id` | UUID du message d'assistant en cours d'affichage. Stable à travers chaque lot du même message. Ce n'est pas l'API `msg_…` id, donc il ne peut pas être corrélé avec les ids de message de transcription |
1573| `index` | Index de base zéro de ce lot dans le message |1573| `index` | Index de base zéro de ce lot dans le message |
1595En plus des [champs de sortie JSON](#json-output) disponibles pour tous les hooks, les hooks MessageDisplay peuvent retourner `displayContent` pour remplacer le delta à l'écran :1595En plus des [champs de sortie JSON](#json-output) disponibles pour tous les hooks, les hooks MessageDisplay peuvent retourner `displayContent` pour remplacer le delta à l'écran :
1596 1596
1597| Champ | Description |1597| Champ | Description |
1598| :--------------- | :--------------------------------------------------------------------- |1598| :- | :- |
1599| `displayContent` | Texte affiché à la place du delta. Omettez-le pour afficher l'original |1599| `displayContent` | Texte affiché à la place du delta. Omettez-le pour afficher l'original |
1600 1600
1601Les hooks MessageDisplay n'ont pas de contrôle de décision. Ils ne peuvent pas bloquer le message ou changer ce qui est stocké dans la transcription ou envoyé à Claude. Claude Code agit sur `displayContent` de leur sortie JSON et rejette `systemMessage` et `continue`.1601Les hooks MessageDisplay n'ont pas de contrôle de décision. Ils ne peuvent pas bloquer le message ou changer ce qui est stocké dans la transcription ou envoyé à Claude. Claude Code agit sur `displayContent` de leur sortie JSON et rejette `systemMessage` et `continue`.
1736Exécute les commandes shell.1736Exécute les commandes shell.
1737 1737
1738| Champ | Type | Exemple | Description |1738| Champ | Type | Exemple | Description |
1739| :------------------ | :------ | :----------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1739| :- | :- | :- | :- |
1740| `command` | string | `"npm test"` | La commande shell à exécuter |1740| `command` | string | `"npm test"` | La commande shell à exécuter |
1741| `description` | string | `"Run test suite"` | Description optionnelle de ce que la commande fait |1741| `description` | string | `"Run test suite"` | Description optionnelle de ce que la commande fait |
1742| `timeout` | number | `120000` | Délai d'expiration optionnel en millisecondes. Les valeurs au-dessus du [maximum](/docs/fr/tools-reference#bash-tool-behavior) sont réduites au maximum plutôt que rejetées |1742| `timeout` | number | `120000` | Délai d'expiration optionnel en millisecondes. Les valeurs au-dessus du [maximum](/docs/fr/tools-reference#bash-tool-behavior) sont réduites au maximum plutôt que rejetées |
1753`changedFiles` et `files` listent ce que la commande a changé ; les champs restants disent à quel point cette liste est complète et fiable.1753`changedFiles` et `files` listent ce que la commande a changé ; les champs restants disent à quel point cette liste est complète et fiable.
1754 1754
1755| Champ | Type | Exemple | Description |1755| Champ | Type | Exemple | Description |
1756| :------------- | :------ | :------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |1756| :- | :- | :- | :- |
1757| `changedFiles` | array | `["/path/to/src/app.ts"]` | Chemins absolus des fichiers que la commande a changés, au maximum 200. Présent chaque fois que `files` contient un diff ou `moreFiles` est au-dessus de zéro |1757| `changedFiles` | array | `["/path/to/src/app.ts"]` | Chemins absolus des fichiers que la commande a changés, au maximum 200. Présent chaque fois que `files` contient un diff ou `moreFiles` est au-dessus de zéro |
1758| `files` | array | `[{"filePath": "/path/to/src/app.ts", "hunks": [...]}]` | Diffs de jusqu'à 5 fichiers modifiés, pour l'affichage. `created` ou `deleted` est `true` pour un fichier que la commande a ajouté ou supprimé |1758| `files` | array | `[{"filePath": "/path/to/src/app.ts", "hunks": [...]}]` | Diffs de jusqu'à 5 fichiers modifiés, pour l'affichage. `created` ou `deleted` est `true` pour un fichier que la commande a ajouté ou supprimé |
1759| `moreFiles` | number | `2` | Nombre de fichiers modifiés sans diff dans `files` |1759| `moreFiles` | number | `2` | Nombre de fichiers modifiés sans diff dans `files` |
1772Les champs correspondent à l'outil Bash, avec la chaîne de commande dans `command` :1772Les champs correspondent à l'outil Bash, avec la chaîne de commande dans `command` :
1773 1773
1774| Champ | Type | Exemple | Description |1774| Champ | Type | Exemple | Description |
1775| :------------------ | :------ | :------------------------- | :------------------------------------------------- |1775| :- | :- | :- | :- |
1776| `command` | string | `"Get-ChildItem -Recurse"` | La commande PowerShell à exécuter |1776| `command` | string | `"Get-ChildItem -Recurse"` | La commande PowerShell à exécuter |
1777| `description` | string | `"List files recursively"` | Description optionnelle de ce que la commande fait |1777| `description` | string | `"List files recursively"` | Description optionnelle de ce que la commande fait |
1778| `timeout` | number | `120000` | Délai d'expiration optionnel en millisecondes |1778| `timeout` | number | `120000` | Délai d'expiration optionnel en millisecondes |
1791Crée ou remplace un fichier.1791Crée ou remplace un fichier.
1792 1792
1793| Champ | Type | Exemple | Description |1793| Champ | Type | Exemple | Description |
1794| :---------- | :----- | :-------------------- | :-------------------------------- |1794| :- | :- | :- | :- |
1795| `file_path` | string | `"/path/to/file.txt"` | Chemin absolu du fichier à écrire |1795| `file_path` | string | `"/path/to/file.txt"` | Chemin absolu du fichier à écrire |
1796| `content` | string | `"file content"` | Contenu à écrire dans le fichier |1796| `content` | string | `"file content"` | Contenu à écrire dans le fichier |
1797 1797
1802Remplace une chaîne dans un fichier existant.1802Remplace une chaîne dans un fichier existant.
1803 1803
1804| Champ | Type | Exemple | Description |1804| Champ | Type | Exemple | Description |
1805| :------------ | :------ | :-------------------- | :---------------------------------------------- |1805| :- | :- | :- | :- |
1806| `file_path` | string | `"/path/to/file.txt"` | Chemin absolu du fichier à éditer |1806| `file_path` | string | `"/path/to/file.txt"` | Chemin absolu du fichier à éditer |
1807| `old_string` | string | `"original text"` | Texte à trouver et remplacer |1807| `old_string` | string | `"original text"` | Texte à trouver et remplacer |
1808| `new_string` | string | `"replacement text"` | Texte de remplacement |1808| `new_string` | string | `"replacement text"` | Texte de remplacement |
1815Lit le contenu des fichiers.1815Lit le contenu des fichiers.
1816 1816
1817| Champ | Type | Exemple | Description |1817| Champ | Type | Exemple | Description |
1818| :---------- | :----- | :-------------------- | :-------------------------------------------------- |1818| :- | :- | :- | :- |
1819| `file_path` | string | `"/path/to/file.txt"` | Chemin absolu du fichier à lire |1819| `file_path` | string | `"/path/to/file.txt"` | Chemin absolu du fichier à lire |
1820| `offset` | number | `10` | Numéro de ligne optionnel pour commencer la lecture |1820| `offset` | number | `10` | Numéro de ligne optionnel pour commencer la lecture |
1821| `limit` | number | `50` | Nombre optionnel de lignes à lire |1821| `limit` | number | `50` | Nombre optionnel de lignes à lire |
1827Trouve les fichiers correspondant à un modèle glob.1827Trouve les fichiers correspondant à un modèle glob.
1828 1828
1829| Champ | Type | Exemple | Description |1829| Champ | Type | Exemple | Description |
1830| :-------- | :----- | :--------------- | :---------------------------------------------------------------------------- |1830| :- | :- | :- | :- |
1831| `pattern` | string | `"**/*.ts"` | Modèle glob pour correspondre aux fichiers |1831| `pattern` | string | `"**/*.ts"` | Modèle glob pour correspondre aux fichiers |
1832| `path` | string | `"/path/to/dir"` | Répertoire optionnel à rechercher. Par défaut le répertoire de travail actuel |1832| `path` | string | `"/path/to/dir"` | Répertoire optionnel à rechercher. Par défaut le répertoire de travail actuel |
1833 1833
1838Recherche le contenu des fichiers avec des expressions régulières.1838Recherche le contenu des fichiers avec des expressions régulières.
1839 1839
1840| Champ | Type | Exemple | Description |1840| Champ | Type | Exemple | Description |
1841| :------------ | :------ | :--------------- | :----------------------------------------------------------------------------------- |1841| :- | :- | :- | :- |
1842| `pattern` | string | `"TODO.*fix"` | Modèle d'expression régulière à rechercher |1842| `pattern` | string | `"TODO.*fix"` | Modèle d'expression régulière à rechercher |
1843| `path` | string | `"/path/to/dir"` | Fichier ou répertoire optionnel à rechercher |1843| `path` | string | `"/path/to/dir"` | Fichier ou répertoire optionnel à rechercher |
1844| `glob` | string | `"*.ts"` | Modèle glob optionnel pour filtrer les fichiers |1844| `glob` | string | `"*.ts"` | Modèle glob optionnel pour filtrer les fichiers |
1853Récupère et traite le contenu web.1853Récupère et traite le contenu web.
1854 1854
1855| Champ | Type | Exemple | Description |1855| Champ | Type | Exemple | Description |
1856| :------- | :----- | :---------------------------- | :---------------------------------------- |1856| :- | :- | :- | :- |
1857| `url` | string | `"https://example.com/api"` | URL pour récupérer le contenu |1857| `url` | string | `"https://example.com/api"` | URL pour récupérer le contenu |
1858| `prompt` | string | `"Extract the API endpoints"` | Invite à exécuter sur le contenu récupéré |1858| `prompt` | string | `"Extract the API endpoints"` | Invite à exécuter sur le contenu récupéré |
1859 1859
1864Recherche le web.1864Recherche le web.
1865 1865
1866| Champ | Type | Exemple | Description |1866| Champ | Type | Exemple | Description |
1867| :---------------- | :----- | :----------------------------- | :----------------------------------------------------------- |1867| :- | :- | :- | :- |
1868| `query` | string | `"react hooks best practices"` | Requête de recherche |1868| `query` | string | `"react hooks best practices"` | Requête de recherche |
1869| `allowed_domains` | array | `["docs.example.com"]` | Optionnel : inclure uniquement les résultats de ces domaines |1869| `allowed_domains` | array | `["docs.example.com"]` | Optionnel : inclure uniquement les résultats de ces domaines |
1870| `blocked_domains` | array | `["spam.example.com"]` | Optionnel : exclure les résultats de ces domaines |1870| `blocked_domains` | array | `["spam.example.com"]` | Optionnel : exclure les résultats de ces domaines |
1876Crée un [sous-agent](/docs/fr/sub-agents).1876Crée un [sous-agent](/docs/fr/sub-agents).
1877 1877
1878| Champ | Type | Exemple | Description |1878| Champ | Type | Exemple | Description |
1879| :-------------- | :----- | :------------------------- | :------------------------------------------------- |1879| :- | :- | :- | :- |
1880| `prompt` | string | `"Find all API endpoints"` | La tâche pour l'agent à effectuer |1880| `prompt` | string | `"Find all API endpoints"` | La tâche pour l'agent à effectuer |
1881| `description` | string | `"Find API endpoints"` | Description courte de la tâche |1881| `description` | string | `"Find API endpoints"` | Description courte de la tâche |
1882| `subagent_type` | string | `"Explore"` | Type d'agent spécialisé à utiliser |1882| `subagent_type` | string | `"Explore"` | Type d'agent spécialisé à utiliser |
1885Quand un appel Agent au premier plan se termine, votre [hook PostToolUse](#posttooluse) reçoit le résultat du sous-agent et la télémétrie d'exécution dans `tool_response`. Lisez ces champs pour inspecter l'exécution ; pour les totalisations de tokens et de coûts entre les sous-agents, utilisez les [compteurs de tokens et de coûts](/docs/fr/monitoring-usage#token-counter) filtrés à `query_source` `"subagent"`, puisque `totalTokens` et `usage` couvrent uniquement la requête finale :1885Quand un appel Agent au premier plan se termine, votre [hook PostToolUse](#posttooluse) reçoit le résultat du sous-agent et la télémétrie d'exécution dans `tool_response`. Lisez ces champs pour inspecter l'exécution ; pour les totalisations de tokens et de coûts entre les sous-agents, utilisez les [compteurs de tokens et de coûts](/docs/fr/monitoring-usage#token-counter) filtrés à `query_source` `"subagent"`, puisque `totalTokens` et `usage` couvrent uniquement la requête finale :
1886 1886
1887| Champ | Type | Exemple | Description |1887| Champ | Type | Exemple | Description |
1888| :------------------ | :----- | :---------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1888| :- | :- | :- | :- |
1889| `status` | string | `"completed"` | `"completed"` pour les sous-agents au premier plan, `"async_launched"` pour les sous-agents en arrière-plan. À partir de v2.1.198, les sous-agents s'exécutent en arrière-plan par défaut, donc un `run_in_background` omis produit également `"async_launched"` |1889| `status` | string | `"completed"` | `"completed"` pour les sous-agents au premier plan, `"async_launched"` pour les sous-agents en arrière-plan. À partir de v2.1.198, les sous-agents s'exécutent en arrière-plan par défaut, donc un `run_in_background` omis produit également `"async_launched"` |
1890| `agentId` | string | `"a4d2c8f1e0b3a297"` | Identifiant pour l'exécution du sous-agent |1890| `agentId` | string | `"a4d2c8f1e0b3a297"` | Identifiant pour l'exécution du sous-agent |
1891| `content` | array | `[{"type": "text", "text": "Found 12 endpoints..."}]` | Les blocs de texte final du sous-agent, ou, pour un sous-agent dont le rapport passe par `SubagentHandback`, une brève note à ce sujet à leur place |1891| `content` | array | `[{"type": "text", "text": "Found 12 endpoints..."}]` | Les blocs de texte final du sous-agent, ou, pour un sous-agent dont le rapport passe par `SubagentHandback`, une brève note à ce sujet à leur place |
1911Pose à l'utilisateur une à quatre questions à choix multiples.1911Pose à l'utilisateur une à quatre questions à choix multiples.
1912 1912
1913| Champ | Type | Exemple | Description |1913| Champ | Type | Exemple | Description |
1914| :---------- | :----- | :----------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1914| :- | :- | :- | :- |
1915| `questions` | array | `[{"question": "Which framework?", "header": "Framework", "options": [{"label": "React"}], "multiSelect": false}]` | Questions à présenter, chacune avec une chaîne `question`, un court `header`, un tableau `options`, et un drapeau `multiSelect` optionnel |1915| `questions` | array | `[{"question": "Which framework?", "header": "Framework", "options": [{"label": "React"}], "multiSelect": false}]` | Questions à présenter, chacune avec une chaîne `question`, un court `header`, un tableau `options`, et un drapeau `multiSelect` optionnel |
1916| `answers` | object | `{"Which framework?": "React"}` | Optionnel. Mappe le texte de la question à l'étiquette de l'option sélectionnée. Les réponses multi-sélection joignent les étiquettes avec des virgules. Claude ne définit pas ce champ ; fournissez-le via `updatedInput` pour répondre par programmation |1916| `answers` | object | `{"Which framework?": "React"}` | Optionnel. Mappe le texte de la question à l'étiquette de l'option sélectionnée. Les réponses multi-sélection joignent les étiquettes avec des virgules. Claude ne définit pas ce champ ; fournissez-le via `updatedInput` pour répondre par programmation |
1917 1917
1922Présente un plan et demande à l'utilisateur de l'approuver avant que Claude quitte le [mode plan](/docs/fr/permission-modes#analyze-before-you-edit-with-plan-mode). Claude écrit le plan dans un fichier sur le disque avant d'appeler l'outil, donc le `tool_input` littéral du modèle est généralement vide. Claude Code injecte le contenu du plan et le chemin du fichier avant de passer l'entrée aux hooks.1922Présente un plan et demande à l'utilisateur de l'approuver avant que Claude quitte le [mode plan](/docs/fr/permission-modes#analyze-before-you-edit-with-plan-mode). Claude écrit le plan dans un fichier sur le disque avant d'appeler l'outil, donc le `tool_input` littéral du modèle est généralement vide. Claude Code injecte le contenu du plan et le chemin du fichier avant de passer l'entrée aux hooks.
1923 1923
1924| Champ | Type | Exemple | Description |1924| Champ | Type | Exemple | Description |
1925| :--------------- | :----- | :------------------------------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1925| :- | :- | :- | :- |
1926| `plan` | string | `"## Refactor auth\n1. Extract..."` | Contenu du plan en Markdown. Injecté à partir du fichier de plan sur le disque |1926| `plan` | string | `"## Refactor auth\n1. Extract..."` | Contenu du plan en Markdown. Injecté à partir du fichier de plan sur le disque |
1927| `planFilePath` | string | `"/Users/.../plans/refactor-auth.md"` | Chemin du fichier de plan. Injecté |1927| `planFilePath` | string | `"/Users/.../plans/refactor-auth.md"` | Chemin du fichier de plan. Injecté |
1928| `allowedPrompts` | array | `[{"tool": "Bash", "prompt": "run tests"}]` | Déprécié. Claude Code accepte le champ mais l'ignore. Avant v2.1.205, il portait les permissions basées sur les invites que Claude a demandées pour implémenter le plan |1928| `allowedPrompts` | array | `[{"tool": "Bash", "prompt": "run tests"}]` | Déprécié. Claude Code accepte le champ mais l'ignore. Avant v2.1.205, il portait les permissions basées sur les invites que Claude a demandées pour implémenter le plan |
1936Les hooks `PreToolUse` peuvent contrôler si un appel d'outil procède. Contrairement aux autres hooks qui utilisent un champ `decision` de haut niveau, PreToolUse retourne sa décision à l'intérieur d'un objet `hookSpecificOutput`. Cela lui donne un contrôle plus riche : quatre résultats (permettre, refuser, demander, ou différer) plus la capacité de modifier l'entrée d'outil avant l'exécution.1936Les hooks `PreToolUse` peuvent contrôler si un appel d'outil procède. Contrairement aux autres hooks qui utilisent un champ `decision` de haut niveau, PreToolUse retourne sa décision à l'intérieur d'un objet `hookSpecificOutput`. Cela lui donne un contrôle plus riche : quatre résultats (permettre, refuser, demander, ou différer) plus la capacité de modifier l'entrée d'outil avant l'exécution.
1937 1937
1938| Champ | Description |1938| Champ | Description |
1939| :------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |1939| :- | :- |
1940| `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"` invite l'utilisateur à 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| `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"` invite l'utilisateur à 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 |
1941| `permissionDecisionReason` | Pour `"allow"` et `"ask"`, montré à l'utilisateur mais pas à Claude. Pour `"deny"`, montré à Claude. Pour `"defer"`, ignoré |1941| `permissionDecisionReason` | Pour `"allow"` et `"ask"`, montré à l'utilisateur mais pas à Claude. Pour `"deny"`, montré à Claude. Pour `"defer"`, ignoré |
1942| `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é |1942| `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é |
2069Les hooks `PermissionRequest` peuvent permettre ou refuser les demandes de permission. En plus des [champs de sortie JSON](#json-output) disponibles pour tous les hooks, votre script de hook peut retourner un objet `decision` avec ces champs spécifiques à l'événement :2069Les hooks `PermissionRequest` peuvent permettre ou refuser les demandes de permission. En plus des [champs de sortie JSON](#json-output) disponibles pour tous les hooks, votre script de hook peut retourner un objet `decision` avec ces champs spécifiques à l'événement :
2070 2070
2071| Champ | Description |2071| Champ | Description |
2072| :------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2072| :- | :- |
2073| `behavior` | `"allow"` accorde la permission, `"deny"` la refuse. Les [règles de refus et de demande](/docs/fr/permissions#manage-permissions) sont toujours évaluées, donc un hook retournant `"allow"` ne remplace pas une règle de refus correspondante |2073| `behavior` | `"allow"` accorde la permission, `"deny"` la refuse. Les [règles de refus et de demande](/docs/fr/permissions#manage-permissions) sont toujours évaluées, donc un hook retournant `"allow"` ne remplace pas une règle de refus correspondante |
2074| `updatedInput` | Pour `"allow"` uniquement : 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. L'entrée modifiée est réévaluée contre les règles de refus et de demande |2074| `updatedInput` | Pour `"allow"` uniquement : 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. L'entrée modifiée est réévaluée contre les règles de refus et de demande |
2075| `updatedPermissions` | Pour `"allow"` uniquement : tableau des [entrées de mise à jour de permission](#permission-update-entries) à appliquer, comme ajouter une règle d'autorisation ou changer le mode de permission de la session |2075| `updatedPermissions` | Pour `"allow"` uniquement : tableau des [entrées de mise à jour de permission](#permission-update-entries) à appliquer, comme ajouter une règle d'autorisation ou changer le mode de permission de la session |
2099Le champ de sortie `updatedPermissions` et le champ d'entrée [`permission_suggestions`](#permissionrequest-input) utilisent tous deux le même tableau d'objets d'entrée. Chaque entrée a un `type` qui détermine ses autres champs, et une `destination` qui contrôle où le changement est écrit.2099Le champ de sortie `updatedPermissions` et le champ d'entrée [`permission_suggestions`](#permissionrequest-input) utilisent tous deux le même tableau d'objets d'entrée. Chaque entrée a un `type` qui détermine ses autres champs, et une `destination` qui contrôle où le changement est écrit.
2100 2100
2101| `type` | Champs | Effet |2101| `type` | Champs | Effet |
2102| :------------------ | :--------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2102| :- | :- | :- |
2103| `addRules` | `rules`, `behavior`, `destination` | Ajoute des règles de permission. `rules` est un tableau d'objets `{toolName, ruleContent?}`. Omettez `ruleContent` pour correspondre à l'outil entier. `behavior` est `"allow"`, `"deny"`, ou `"ask"` |2103| `addRules` | `rules`, `behavior`, `destination` | Ajoute des règles de permission. `rules` est un tableau d'objets `{toolName, ruleContent?}`. Omettez `ruleContent` pour correspondre à l'outil entier. `behavior` est `"allow"`, `"deny"`, ou `"ask"` |
2104| `replaceRules` | `rules`, `behavior`, `destination` | Remplace toutes les règles du `behavior` donné à la `destination` par les `rules` fournies |2104| `replaceRules` | `rules`, `behavior`, `destination` | Remplace toutes les règles du `behavior` donné à la `destination` par les `rules` fournies |
2105| `removeRules` | `rules`, `behavior`, `destination` | Supprime les règles correspondantes du `behavior` donné |2105| `removeRules` | `rules`, `behavior`, `destination` | Supprime les règles correspondantes du `behavior` donné |
2116Le champ `destination` sur chaque entrée détermine si le changement reste en mémoire ou persiste dans un fichier de paramètres.2116Le champ `destination` sur chaque entrée détermine si le changement reste en mémoire ou persiste dans un fichier de paramètres.
2117 2117
2118| `destination` | Écrit dans |2118| `destination` | Écrit dans |
2119| :---------------- | :-------------------------------------------------------- |2119| :- | :- |
2120| `session` | en mémoire uniquement, rejeté quand la session se termine |2120| `session` | en mémoire uniquement, rejeté quand la session se termine |
2121| `localSettings` | `.claude/settings.local.json` |2121| `localSettings` | `.claude/settings.local.json` |
2122| `projectSettings` | `.claude/settings.json` |2122| `projectSettings` | `.claude/settings.json` |
2165```2165```
2166 2166
2167| Champ | Description |2167| Champ | Description |
2168| :------------ | :------------------------------------------------------------------------------------------------------------------------------------- |2168| :- | :- |
2169| `duration_ms` | Optionnel. Temps d'exécution de l'outil en millisecondes. Exclut le temps passé dans les invites de permission et les hooks PreToolUse |2169| `duration_ms` | Optionnel. Temps d'exécution de l'outil en millisecondes. Exclut le temps passé dans les invites de permission et les hooks PreToolUse |
2170 2170
2171<h4 id="posttooluse-decision-control">2171<h4 id="posttooluse-decision-control">
2175Les hooks `PostToolUse` peuvent fournir des commentaires à Claude après l'exécution de l'outil. En plus des [champs de sortie JSON](#json-output) disponibles pour tous les hooks, votre script de hook peut retourner ces champs spécifiques à l'événement :2175Les hooks `PostToolUse` peuvent fournir des commentaires à Claude après l'exécution de l'outil. En plus des [champs de sortie JSON](#json-output) disponibles pour tous les hooks, votre script de hook peut retourner ces champs spécifiques à l'événement :
2176 2176
2177| Champ | Description |2177| Champ | Description |
2178| :--------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |2178| :- | :- |
2179| `decision` | `"block"` ajoute la `reason` à côté du résultat de l'outil. Claude voit toujours la sortie originale ; pour la remplacer, utilisez `updatedToolOutput` |2179| `decision` | `"block"` ajoute la `reason` à côté du résultat de l'outil. Claude voit toujours la sortie originale ; pour la remplacer, utilisez `updatedToolOutput` |
2180| `reason` | Explication montrée à Claude quand `decision` est `"block"` |2180| `reason` | Explication montrée à Claude quand `decision` est `"block"` |
2181| `additionalContext` | Chaîne ajoutée au contexte de Claude aux côtés du résultat de l'outil. Voir [Ajouter du contexte pour Claude](#add-context-for-claude) |2181| `additionalContext` | Chaîne ajoutée au contexte de Claude aux côtés du résultat de l'outil. Voir [Ajouter du contexte pour Claude](#add-context-for-claude) |
2277```2277```
2278 2278
2279| Champ | Description |2279| Champ | Description |
2280| :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2280| :- | :- |
2281| `error` | Chaîne décrivant ce qui s'est mal passé. Le format dépend de l'outil qui a échoué |2281| `error` | Chaîne décrivant ce qui s'est mal passé. Le format dépend de l'outil qui a échoué |
2282| `is_interrupt` | Booléen optionnel. True quand l'échec a atteint Claude Code comme un abandon plutôt que comme une erreur que l'outil a signalée. L'annulation d'un outil en cours d'exécution ne déclenche pas ce hook ; le résultat de l'outil porte le message d'interruption à la place |2282| `is_interrupt` | Booléen optionnel. True quand l'échec a atteint Claude Code comme un abandon plutôt que comme une erreur que l'outil a signalée. L'annulation d'un outil en cours d'exécution ne déclenche pas ce hook ; le résultat de l'outil porte le message d'interruption à la place |
2283| `duration_ms` | Optionnel. Temps d'exécution de l'outil en millisecondes. Exclut le temps passé dans les invites de permission et les hooks PreToolUse |2283| `duration_ms` | Optionnel. Temps d'exécution de l'outil en millisecondes. Exclut le temps passé dans les invites de permission et les hooks PreToolUse |
2295Les hooks `PostToolUseFailure` peuvent fournir du contexte à Claude après un échec d'outil. En plus des [champs de sortie JSON](#json-output) disponibles pour tous les hooks, votre script de hook peut retourner ces champs spécifiques à l'événement :2295Les hooks `PostToolUseFailure` peuvent fournir du contexte à Claude après un échec d'outil. En plus des [champs de sortie JSON](#json-output) disponibles pour tous les hooks, votre script de hook peut retourner ces champs spécifiques à l'événement :
2296 2296
2297| Champ | Description |2297| Champ | Description |
2298| :------------------ | :-------------------------------------------------------------------------------------------------------------------------- |2298| :- | :- |
2299| `additionalContext` | Chaîne ajoutée au contexte de Claude aux côtés de l'erreur. Voir [Ajouter du contexte pour Claude](#add-context-for-claude) |2299| `additionalContext` | Chaîne ajoutée au contexte de Claude aux côtés de l'erreur. Voir [Ajouter du contexte pour Claude](#add-context-for-claude) |
2300 2300
2301```json theme={null}2301```json theme={null}
2356Les hooks `PostToolBatch` peuvent injecter du contexte pour Claude. En plus des [champs de sortie JSON](#json-output) disponibles pour tous les hooks, votre script de hook peut retourner ces champs spécifiques à l'événement :2356Les hooks `PostToolBatch` peuvent injecter du contexte pour Claude. En plus des [champs de sortie JSON](#json-output) disponibles pour tous les hooks, votre script de hook peut retourner ces champs spécifiques à l'événement :
2357 2357
2358| Champ | Description |2358| Champ | Description |
2359| :------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2359| :- | :- |
2360| `additionalContext` | Chaîne de contexte injectée une fois avant l'appel du modèle suivant. Voir [Ajouter du contexte pour Claude](#add-context-for-claude) pour les détails de livraison, ce qu'il faut y mettre, et comment les sessions reprises gèrent les valeurs passées |2360| `additionalContext` | Chaîne de contexte injectée une fois avant l'appel du modèle suivant. Voir [Ajouter du contexte pour Claude](#add-context-for-claude) pour les détails de livraison, ce qu'il faut y mettre, et comment les sessions reprises gèrent les valeurs passées |
2361 2361
2362```json theme={null}2362```json theme={null}
2402```2402```
2403 2403
2404| Champ | Description |2404| Champ | Description |
2405| :------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2405| :- | :- |
2406| `reason` | La raison du refus. Pour un verdict du classificateur, dans la plupart des sessions, il nomme la règle correspondante entre crochets, comme `[Data Exfiltration]` ; voir [Examiner les refus](/docs/fr/auto-mode-config#review-denials) pour les autres formes. Pour un [refus sans verdict](#permissiondenied-decision-control), il commence par `Auto mode could not evaluate this action and is blocking it for safety`. Pour un refus parce que le modèle du classificateur n'était pas disponible, c'est le texte fixe `Classifier unavailable` |2406| `reason` | La raison du refus. Pour un verdict du classificateur, dans la plupart des sessions, il nomme la règle correspondante entre crochets, comme `[Data Exfiltration]` ; voir [Examiner les refus](/docs/fr/auto-mode-config#review-denials) pour les autres formes. Pour un [refus sans verdict](#permissiondenied-decision-control), il commence par `Auto mode could not evaluate this action and is blocking it for safety`. Pour un refus parce que le modèle du classificateur n'était pas disponible, c'est le texte fixe `Classifier unavailable` |
2407 2407
2408<h4 id="permissiondenied-decision-control">2408<h4 id="permissiondenied-decision-control">
2433Vous recevez ces événements de hook même avec les notifications de bureau désactivées : le paramètre `preferredNotifChannel`, y compris `notifications_disabled`, change uniquement comment vous êtes alerté, pas si votre hook s'exécute.2433Vous recevez ces événements de hook même avec les notifications de bureau désactivées : le paramètre `preferredNotifChannel`, y compris `notifications_disabled`, change uniquement comment vous êtes alerté, pas si votre hook s'exécute.
2434 2434
2435| Matcher | Quand il se déclenche |2435| Matcher | Quand il se déclenche |
2436| :--------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2436| :- | :- |
2437| `permission_prompt` | Claude a besoin de votre permission pour utiliser un outil ou la [requête réseau](/docs/fr/sandboxing#network-isolation) d'une commande en sandbox, et l'invite a attendu environ six secondes |2437| `permission_prompt` | Claude a besoin de votre permission pour utiliser un outil ou la [requête réseau](/docs/fr/sandboxing#network-isolation) d'une commande en sandbox, et l'invite a attendu environ six secondes |
2438| `idle_prompt` | Claude a fini de répondre il y a environ 60 secondes et vous n'avez pas tapé depuis |2438| `idle_prompt` | Claude a fini de répondre il y a environ 60 secondes et vous n'avez pas tapé depuis |
2439| `auth_success` | L'authentification se termine |2439| `auth_success` | L'authentification se termine |
2550Les hooks SubagentStart ne peuvent pas bloquer la création de sous-agent, mais ils peuvent injecter du contexte dans le sous-agent. En plus des [champs de sortie JSON](#json-output) disponibles pour tous les hooks, vous pouvez retourner :2550Les hooks SubagentStart ne peuvent pas bloquer la création de sous-agent, mais ils peuvent injecter du contexte dans le sous-agent. En plus des [champs de sortie JSON](#json-output) disponibles pour tous les hooks, vous pouvez retourner :
2551 2551
2552| Champ | Description |2552| Champ | Description |
2553| :------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- |2553| :- | :- |
2554| `additionalContext` | Chaîne ajoutée au contexte du sous-agent au début de sa conversation, avant sa première invite. Voir [Ajouter du contexte pour Claude](#add-context-for-claude) |2554| `additionalContext` | Chaîne ajoutée au contexte du sous-agent au début de sa conversation, avant sa première invite. Voir [Ajouter du contexte pour Claude](#add-context-for-claude) |
2555 2555
2556```json theme={null}2556```json theme={null}
2632```2632```
2633 2633
2634| Champ | Description |2634| Champ | Description |
2635| :----------------- | :---------------------------------------------------------------------------------- |2635| :- | :- |
2636| `task_id` | Identifiant de la tâche en cours de création |2636| `task_id` | Identifiant de la tâche en cours de création |
2637| `task_subject` | Titre de la tâche |2637| `task_subject` | Titre de la tâche |
2638| `task_description` | Description détaillée de la tâche. Peut être absent |2638| `task_description` | Description détaillée de la tâche. Peut être absent |
2693```2693```
2694 2694
2695| Champ | Description |2695| Champ | Description |
2696| :----------------- | :---------------------------------------------------------------------------------- |2696| :- | :- |
2697| `task_id` | Identifiant de la tâche en cours de complétion |2697| `task_id` | Identifiant de la tâche en cours de complétion |
2698| `task_subject` | Titre de la tâche |2698| `task_subject` | Titre de la tâche |
2699| `task_description` | Description détaillée de la tâche. Peut être absent |2699| `task_description` | Description détaillée de la tâche. Peut être absent |
2748Chaque entrée dans `background_tasks` décrit une tâche en vol et utilise ces champs :2748Chaque entrée dans `background_tasks` décrit une tâche en vol et utilise ces champs :
2749 2749
2750| Champ | Description |2750| Champ | Description |
2751| :------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2751| :- | :- |
2752| `id` | Identifiant de tâche |2752| `id` | Identifiant de tâche |
2753| `type` | Étiquette de type de tâche conviviale comme `shell`, `subagent`, `monitor`, `workflow`, `teammate`, `cloud session`, ou `MCP task`. Chaque étiquette identifie quelle fonctionnalité Claude Code a créé la tâche. Revient au discriminant brut pour les types non reconnus |2753| `type` | Étiquette de type de tâche conviviale comme `shell`, `subagent`, `monitor`, `workflow`, `teammate`, `cloud session`, ou `MCP task`. Chaque étiquette identifie quelle fonctionnalité Claude Code a créé la tâche. Revient au discriminant brut pour les types non reconnus |
2754| `status` | État actuel de la tâche |2754| `status` | État actuel de la tâche |
2762Chaque entrée dans `session_crons` décrit un réveil programmé scoped à la session, provenant de `CronCreate`, `ScheduleWakeup`, et `/loop` :2762Chaque entrée dans `session_crons` décrit un réveil programmé scoped à la session, provenant de `CronCreate`, `ScheduleWakeup`, et `/loop` :
2763 2763
2764| Champ | Description |2764| Champ | Description |
2765| :---------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------- |2765| :- | :- |
2766| `id` | Identifiant de tâche cron |2766| `id` | Identifiant de tâche cron |
2767| `schedule` | Expression cron, par exemple `0 9 * * 1-5` |2767| `schedule` | Expression cron, par exemple `0 9 * * 1-5` |
2768| `recurring` | `false` pour les réveils ponctuels dont l'horaire encode un seul temps de déclenchement, `true` pour les tâches qui se redéclenchent à chaque correspondance |2768| `recurring` | `false` pour les réveils ponctuels dont l'horaire encode un seul temps de déclenchement, `true` pour les tâches qui se redéclenchent à chaque correspondance |
2806Les hooks `Stop` et `SubagentStop` peuvent contrôler si Claude continue. En plus des [champs de sortie JSON](#json-output) disponibles pour tous les hooks, votre script de hook peut retourner ces champs spécifiques à l'événement :2806Les hooks `Stop` et `SubagentStop` peuvent contrôler si Claude continue. En plus des [champs de sortie JSON](#json-output) disponibles pour tous les hooks, votre script de hook peut retourner ces champs spécifiques à l'événement :
2807 2807
2808| Champ | Description |2808| Champ | Description |
2809| :------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2809| :- | :- |
2810| `decision` | `"block"` empêche Claude de s'arrêter. Omettez pour permettre à Claude de s'arrêter |2810| `decision` | `"block"` empêche Claude de s'arrêter. Omettez pour permettre à Claude de s'arrêter |
2811| `reason` | Requis quand `decision` est `"block"`. Dit à Claude pourquoi il devrait continuer |2811| `reason` | Requis quand `decision` est `"block"`. Dit à Claude pourquoi il devrait continuer |
2812| `hookSpecificOutput.additionalContext` | Commentaires sans erreur pour Claude. La conversation continue pour que Claude puisse agir dessus, mais contrairement à `decision: "block"`, elle est montrée dans la transcription comme commentaire de hook plutôt qu'une erreur de hook |2812| `hookSpecificOutput.additionalContext` | Commentaires sans erreur pour Claude. La conversation continue pour que Claude puisse agir dessus, mais contrairement à `decision: "block"`, elle est montrée dans la transcription comme commentaire de hook plutôt qu'une erreur de hook |
2844En plus des [champs d'entrée communs](#common-input-fields), les hooks StopFailure reçoivent `error`, optionnel `error_details`, et optionnel `last_assistant_message`. Le champ `error` identifie le type d'erreur et est utilisé pour le filtrage du matcher.2844En plus des [champs d'entrée communs](#common-input-fields), les hooks StopFailure reçoivent `error`, optionnel `error_details`, et optionnel `last_assistant_message`. Le champ `error` identifie le type d'erreur et est utilisé pour le filtrage du matcher.
2845 2845
2846| Champ | Description |2846| Champ | Description |
2847| :----------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |2847| :- | :- |
2848| `error` | Type d'erreur : `rate_limit`, `overloaded`, `authentication_failed`, `oauth_org_not_allowed`, `account_on_hold`, `billing_error`, `invalid_request`, `model_not_found`, `server_error`, `max_output_tokens`, `cloud_credential_error`, ou `unknown` |2848| `error` | Type d'erreur : `rate_limit`, `overloaded`, `authentication_failed`, `oauth_org_not_allowed`, `account_on_hold`, `billing_error`, `invalid_request`, `model_not_found`, `server_error`, `max_output_tokens`, `cloud_credential_error`, ou `unknown` |
2849| `error_details` | Détails supplémentaires sur l'erreur, quand disponibles |2849| `error_details` | Détails supplémentaires sur l'erreur, quand disponibles |
2850| `last_assistant_message` | Le texte d'erreur rendu montré dans la conversation. Contrairement à `Stop` et `SubagentStop`, où ce champ contient la sortie conversationnelle de Claude, pour `StopFailure`, il contient la chaîne d'erreur API elle-même, comme `"API Error: Rate limit reached"` |2850| `last_assistant_message` | Le texte d'erreur rendu montré dans la conversation. Contrairement à `Stop` et `SubagentStop`, où ce champ contient la sortie conversationnelle de Claude, pour `StopFailure`, il contient la chaîne d'erreur API elle-même, comme `"API Error: Rate limit reached"` |
2890```2890```
2891 2891
2892| Champ | Description |2892| Champ | Description |
2893| :-------------- | :---------------------------------------------------------------------------------- |2893| :- | :- |
2894| `teammate_name` | Nom du coéquipier qui est sur le point de devenir inactif |2894| `teammate_name` | Nom du coéquipier qui est sur le point de devenir inactif |
2895| `team_name` | Déprécié. Nom d'équipe dérivé de la session ; sera supprimé dans une version future |2895| `team_name` | Déprécié. Nom d'équipe dérivé de la session ; sera supprimé dans une version future |
2896 2896
2927Le matcher filtre sur la source de configuration :2927Le matcher filtre sur la source de configuration :
2928 2928
2929| Matcher | Quand il se déclenche |2929| Matcher | Quand il se déclenche |
2930| :----------------- | :---------------------------------------------------------------------- |2930| :- | :- |
2931| `user_settings` | `~/.claude/settings.json` change |2931| `user_settings` | `~/.claude/settings.json` change |
2932| `project_settings` | `.claude/settings.json` change |2932| `project_settings` | `.claude/settings.json` change |
2933| `local_settings` | `.claude/settings.local.json` change |2933| `local_settings` | `.claude/settings.local.json` change |
2978Les hooks ConfigChange peuvent bloquer les changements de configuration de prendre effet. Utilisez le code de sortie 2 ou un JSON `decision` pour empêcher le changement. Quand bloqué, les nouveaux paramètres ne sont pas appliqués à la session en cours d'exécution.2978Les hooks ConfigChange peuvent bloquer les changements de configuration de prendre effet. Utilisez le code de sortie 2 ou un JSON `decision` pour empêcher le changement. Quand bloqué, les nouveaux paramètres ne sont pas appliqués à la session en cours d'exécution.
2979 2979
2980| Champ | Description |2980| Champ | Description |
2981| :--------- | :----------------------------------------------------------------------------------------------------- |2981| :- | :- |
2982| `decision` | `"block"` empêche le changement de configuration d'être appliqué. Omettez pour permettre le changement |2982| `decision` | `"block"` empêche le changement de configuration d'être appliqué. Omettez pour permettre le changement |
2983| `reason` | Accepté mais jamais montré |2983| `reason` | Accepté mais jamais montré |
2984 2984
3027En plus des [champs de sortie JSON](#json-output) disponibles pour tous les hooks, les hooks CwdChanged peuvent retourner `watchPaths` pour définir dynamiquement quels chemins de fichier [FileChanged](#filechanged) surveille :3027En plus des [champs de sortie JSON](#json-output) disponibles pour tous les hooks, les hooks CwdChanged peuvent retourner `watchPaths` pour définir dynamiquement quels chemins de fichier [FileChanged](#filechanged) surveille :
3028 3028
3029| Champ | Description |3029| Champ | Description |
3030| :----------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |3030| :- | :- |
3031| `watchPaths` | Tableau de chemins absolus. Remplace la liste de surveillance dynamique actuelle. Les chemins de votre configuration `matcher` sont toujours surveillés. Retourner un tableau vide efface la liste dynamique, ce qui est typique quand vous entrez dans un nouveau répertoire |3031| `watchPaths` | Tableau de chemins absolus. Remplace la liste de surveillance dynamique actuelle. Les chemins de votre configuration `matcher` sont toujours surveillés. Retourner un tableau vide efface la liste dynamique, ce qui est typique quand vous entrez dans un nouveau répertoire |
3032 3032
3033Les hooks CwdChanged n'ont pas de contrôle de décision. Ils ne peuvent pas bloquer le changement de répertoire.3033Les hooks CwdChanged n'ont pas de contrôle de décision. Ils ne peuvent pas bloquer le changement de répertoire.
3053Le matcher filtre sur la façon dont le répertoire a été ajouté :3053Le matcher filtre sur la façon dont le répertoire a été ajouté :
3054 3054
3055| Matcher | Quand il se déclenche |3055| Matcher | Quand il se déclenche |
3056| :------------------- | :---------------------------------------------------------------------------------- |3056| :- | :- |
3057| `slash_command` | Vous ajoutez un répertoire avec `/add-dir` |3057| `slash_command` | Vous ajoutez un répertoire avec `/add-dir` |
3058| `register_repo_root` | Un client SDK ajoute un répertoire avec la requête de contrôle `register_repo_root` |3058| `register_repo_root` | Un client SDK ajoute un répertoire avec la requête de contrôle `register_repo_root` |
3059 3059
3064En plus des [champs d'entrée communs](#common-input-fields), les hooks DirectoryAdded reçoivent `directory` et `source`.3064En plus des [champs d'entrée communs](#common-input-fields), les hooks DirectoryAdded reçoivent `directory` et `source`.
3065 3065
3066| Champ | Description |3066| Champ | Description |
3067| :---------- | :------------------------------------------------------------------------------------------------------------------------------ |3067| :- | :- |
3068| `directory` | Chemin absolu du répertoire qui a été ajouté |3068| `directory` | Chemin absolu du répertoire qui a été ajouté |
3069| `source` | Comment le répertoire a été ajouté, `"slash_command"` pour `/add-dir` ou `"register_repo_root"` pour la requête de contrôle SDK |3069| `source` | Comment le répertoire a été ajouté, `"slash_command"` pour `/add-dir` ou `"register_repo_root"` pour la requête de contrôle SDK |
3070 3070
3138En plus des [champs d'entrée communs](#common-input-fields), les hooks FileChanged reçoivent `file_path` et `event`.3138En plus des [champs d'entrée communs](#common-input-fields), les hooks FileChanged reçoivent `file_path` et `event`.
3139 3139
3140| Champ | Description |3140| Champ | Description |
3141| :---------- | :---------------------------------------------------------------------------------------------------------------------------- |3141| :- | :- |
3142| `file_path` | Chemin absolu du fichier qui a changé |3142| `file_path` | Chemin absolu du fichier qui a changé |
3143| `event` | Ce qui s'est passé : `"change"` pour un fichier modifié, `"add"` pour un fichier créé, ou `"unlink"` pour un fichier supprimé |3143| `event` | Ce qui s'est passé : `"change"` pour un fichier modifié, `"add"` pour un fichier créé, ou `"unlink"` pour un fichier supprimé |
3144 3144
3160En plus des [champs de sortie JSON](#json-output) disponibles pour tous les hooks, les hooks FileChanged peuvent retourner `watchPaths` pour mettre à jour dynamiquement quels chemins de fichier sont surveillés :3160En plus des [champs de sortie JSON](#json-output) disponibles pour tous les hooks, les hooks FileChanged peuvent retourner `watchPaths` pour mettre à jour dynamiquement quels chemins de fichier sont surveillés :
3161 3161
3162| Champ | Description |3162| Champ | Description |
3163| :----------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |3163| :- | :- |
3164| `watchPaths` | Tableau de chemins absolus. Remplace la liste de surveillance dynamique actuelle. Les chemins de votre configuration `matcher` sont toujours surveillés. Utilisez ceci quand votre script de hook découvre des fichiers supplémentaires à surveiller en fonction du fichier modifié |3164| `watchPaths` | Tableau de chemins absolus. Remplace la liste de surveillance dynamique actuelle. Les chemins de votre configuration `matcher` sont toujours surveillés. Utilisez ceci quand votre script de hook découvre des fichiers supplémentaires à surveiller en fonction du fichier modifié |
3165 3165
3166Les hooks FileChanged n'ont pas de contrôle de décision. Ils ne peuvent pas bloquer le changement de fichier de se produire.3166Les hooks FileChanged n'ont pas de contrôle de décision. Ils ne peuvent pas bloquer le changement de fichier de se produire.
3296La valeur du matcher indique si la compaction a été déclenchée manuellement ou automatiquement :3296La valeur du matcher indique si la compaction a été déclenchée manuellement ou automatiquement :
3297 3297
3298| Matcher | Quand il se déclenche |3298| Matcher | Quand il se déclenche |
3299| :------- | :---------------------------------------------------------------------------------------------------------------------------------------- |3299| :- | :- |
3300| `manual` | `/compact` |3300| `manual` | `/compact` |
3301| `auto` | Compaction automatique quand la conversation atteint la [fenêtre de compaction automatique](/docs/fr/model-config#set-the-auto-compact-window) |3301| `auto` | Compaction automatique quand la conversation atteint la [fenêtre de compaction automatique](/docs/fr/model-config#set-the-auto-compact-window) |
3302 3302
3332Les mêmes valeurs de matcher s'appliquent que pour `PreCompact` :3332Les mêmes valeurs de matcher s'appliquent que pour `PreCompact` :
3333 3333
3334| Matcher | Quand il se déclenche |3334| Matcher | Quand il se déclenche |
3335| :------- | :------------------------------------------------------------------------------------------------------------------------------------------------- |3335| :- | :- |
3336| `manual` | Après `/compact` |3336| `manual` | Après `/compact` |
3337| `auto` | Après la compaction automatique quand la conversation atteint la [fenêtre de compaction automatique](/docs/fr/model-config#set-the-auto-compact-window) |3337| `auto` | Après la compaction automatique quand la conversation atteint la [fenêtre de compaction automatique](/docs/fr/model-config#set-the-auto-compact-window) |
3338 3338
3450En plus des [champs d'entrée communs](#common-input-fields), les hooks PreModelSwitch reçoivent les champs de ce tableau. Les cinq derniers décrivent ce que renvoyer la conversation au nouveau modèle coûte, pour qu'un hook puisse montrer ce chiffre avant que le changement se produise.3450En plus des [champs d'entrée communs](#common-input-fields), les hooks PreModelSwitch reçoivent les champs de ce tableau. Les cinq derniers décrivent ce que renvoyer la conversation au nouveau modèle coûte, pour qu'un hook puisse montrer ce chiffre avant que le changement se produise.
3451 3451
3452| Champ | Type | Description |3452| Champ | Type | Description |
3453| :-------------------------- | :--------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |3453| :- | :- | :- |
3454| `from_model` | string | ID du modèle que le changement change |3454| `from_model` | string | ID du modèle que le changement change |
3455| `to_model` | string | ID du modèle que le changement change vers. Le matcher compare contre le nom canonique de ce modèle |3455| `to_model` | string | ID du modèle que le changement change vers. Le matcher compare contre le nom canonique de ce modèle |
3456| `requested_model` | string ou `null` | Le modèle que la requête a nommé : un alias comme `opus`, un ID de modèle complet, ou `null` quand la requête était pour le modèle par défaut |3456| `requested_model` | string ou `null` | Le modèle que la requête a nommé : un alias comme `opus`, un ID de modèle complet, ou `null` quand la requête était pour le modèle par défaut |
3490Pour un contrôle plus fin, retournez `permissionDecision` et `permissionDecisionReason` dans un objet `hookSpecificOutput`, comme sur [PreToolUse](#pretooluse-decision-control). `PreModelSwitch` accepte `"allow"`, `"deny"`, et `"ask"`. Il n'accepte pas `"defer"`, `updatedInput`, ou `additionalContext`. Le tableau ci-dessous décrit les deux champs :3490Pour un contrôle plus fin, retournez `permissionDecision` et `permissionDecisionReason` dans un objet `hookSpecificOutput`, comme sur [PreToolUse](#pretooluse-decision-control). `PreModelSwitch` accepte `"allow"`, `"deny"`, et `"ask"`. Il n'accepte pas `"defer"`, `updatedInput`, ou `additionalContext`. Le tableau ci-dessous décrit les deux champs :
3491 3491
3492| Champ | Description |3492| Champ | Description |
3493| :------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |3493| :- | :- |
3494| `permissionDecision` | `"allow"` procède et ignore la [confirmation que Claude Code montre pendant que le cache d'invite est chaud](/docs/fr/prompt-caching#switching-models). `"deny"` annule le changement. `"ask"` invite l'utilisateur à le confirmer |3494| `permissionDecision` | `"allow"` procède et ignore la [confirmation que Claude Code montre pendant que le cache d'invite est chaud](/docs/fr/prompt-caching#switching-models). `"deny"` annule le changement. `"ask"` invite l'utilisateur à le confirmer |
3495| `permissionDecisionReason` | Pour `"deny"`, montré à l'utilisateur comme la raison du blocage du changement, ou retourné comme l'erreur pour une requête `set_model`. Pour `"ask"`, montré dans l'invite de confirmation. Ignoré pour `"allow"` |3495| `permissionDecisionReason` | Pour `"deny"`, montré à l'utilisateur comme la raison du blocage du changement, ou retourné comme l'erreur pour une requête `set_model`. Pour `"ask"`, montré dans l'invite de confirmation. Ignoré pour `"allow"` |
3496 3496
3570Claude Code prend votre sortie standard [texte brut](#exit-code-0) du hook sur la sortie 0, ou `additionalContext` de la sortie JSON, et la livre à Claude avec la requête suivante après le changement. En plus des [champs de sortie JSON](#json-output) disponibles pour tous les hooks, vous pouvez retourner :3570Claude Code prend votre sortie standard [texte brut](#exit-code-0) du hook sur la sortie 0, ou `additionalContext` de la sortie JSON, et la livre à Claude avec la requête suivante après le changement. En plus des [champs de sortie JSON](#json-output) disponibles pour tous les hooks, vous pouvez retourner :
3571 3571
3572| Champ | Description |3572| Champ | Description |
3573| :------------------ | :----------------------------------------------------------------------------------------------------------------------------- |3573| :- | :- |
3574| `additionalContext` | Chaîne ajoutée au contexte de Claude avec la requête suivante. Voir [Ajouter du contexte pour Claude](#add-context-for-claude) |3574| `additionalContext` | Chaîne ajoutée au contexte de Claude avec la requête suivante. Voir [Ajouter du contexte pour Claude](#add-context-for-claude) |
3575 3575
3576Si le hook n'a pas fini dans les cinq secondes après que vous envoyiez la requête suivante, Claude Code envoie cette requête sans la sortie et l'attache à la requête suivante à la place. Si le modèle change plusieurs fois avant la requête suivante, Claude Code livre uniquement la sortie pour le modèle cible du dernier changement.3576Si le hook n'a pas fini dans les cinq secondes après que vous envoyiez la requête suivante, Claude Code envoie cette requête sans la sortie et l'attache à la requête suivante à la place. Si le modèle change plusieurs fois avant la requête suivante, Claude Code livre uniquement la sortie pour le modèle cible du dernier changement.
3584Le champ `reason` dans l'entrée du hook indique pourquoi la session s'est terminée :3584Le champ `reason` dans l'entrée du hook indique pourquoi la session s'est terminée :
3585 3585
3586| Raison | Description |3586| Raison | Description |
3587| :---------------------------- | :---------------------------------------------------------------------------------------------- |3587| :- | :- |
3588| `clear` | Session effacée avec la commande `/clear` |3588| `clear` | Session effacée avec la commande `/clear` |
3589| `resume` | Session changée via `/resume` interactif |3589| `resume` | Session changée via `/resume` interactif |
3590| `logout` | L'utilisateur s'est déconnecté |3590| `logout` | L'utilisateur s'est déconnecté |
3691```3691```
3692 3692
3693| Champ | Valeurs | Description |3693| Champ | Valeurs | Description |
3694| :-------- | :---------------------------- | :------------------------------------------------------------------------------------------- |3694| :- | :- | :- |
3695| `action` | `accept`, `decline`, `cancel` | Si vous acceptez, refusez, ou annulez la requête |3695| `action` | `accept`, `decline`, `cancel` | Si vous acceptez, refusez, ou annulez la requête |
3696| `content` | object | Valeurs des champs de formulaire à soumettre. Utilisé uniquement quand `action` est `accept` |3696| `content` | object | Valeurs des champs de formulaire à soumettre. Utilisé uniquement quand `action` est `accept` |
3697 3697
3744```3744```
3745 3745
3746| Champ | Valeurs | Description |3746| Champ | Valeurs | Description |
3747| :-------- | :---------------------------- | :------------------------------------------------------------------------------------------------- |3747| :- | :- | :- |
3748| `action` | `accept`, `decline`, `cancel` | Remplace l'action de l'utilisateur |3748| `action` | `accept`, `decline`, `cancel` | Remplace l'action de l'utilisateur |
3749| `content` | object | Remplace les valeurs des champs de formulaire. Significatif uniquement quand `action` est `accept` |3749| `content` | object | Remplace les valeurs des champs de formulaire. Significatif uniquement quand `action` est `accept` |
3750 3750
3834```3834```
3835 3835
3836| Champ | Requis | Description |3836| Champ | Requis | Description |
3837| :---------------- | :----- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |3837| :- | :- | :- |
3838| `type` | oui | Doit être `"prompt"` |3838| `type` | oui | Doit être `"prompt"` |
3839| `prompt` | oui | Le texte du prompt à envoyer au LLM. Utilisez `$ARGUMENTS` comme placeholder pour l'entrée JSON du hook. Si `$ARGUMENTS` n'est pas présent, l'entrée JSON est ajoutée au prompt |3839| `prompt` | oui | Le texte du prompt à envoyer au LLM. Utilisez `$ARGUMENTS` comme placeholder pour l'entrée JSON du hook. Si `$ARGUMENTS` n'est pas présent, l'entrée JSON est ajoutée au prompt |
3840| `model` | non | Modèle à utiliser pour l'évaluation. Par défaut un modèle rapide |3840| `model` | non | Modèle à utiliser pour l'évaluation. Par défaut un modèle rapide |
3856```3856```
3857 3857
3858| Champ | Description |3858| Champ | Description |
3859| :----------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |3859| :- | :- |
3860| `ok` | `true` pour autoriser. Pour `false`, voir le comportement par événement ci-dessous |3860| `ok` | `true` pour autoriser. Pour `false`, voir le comportement par événement ci-dessous |
3861| `reason` | Requis lorsque `ok` est `false` |3861| `reason` | Requis lorsque `ok` est `false` |
3862| `impossible` | Optionnel. Le modèle le retourne avec `ok: false` lorsqu'il juge que la condition ne peut jamais être satisfaite. Sur `Stop` et `SubagentStop`, Claude Code laisse alors le tour se terminer au lieu de renvoyer la raison. Les hooks d'agent et les autres événements l'ignorent |3862| `impossible` | Optionnel. Le modèle le retourne avec `ok: false` lorsqu'il juge que la condition ne peut jamais être satisfaite. Sur `Stop` et `SubagentStop`, Claude Code laisse alors le tour se terminer au lieu de renvoyer la raison. Les hooks d'agent et les autres événements l'ignorent |