Cette page fournit une documentation de référence pour l’implémentation des hooks dans Claude Code.
~/.claude/settings.json
- Paramètres utilisateur.claude/settings.json
- Paramètres du projet.claude/settings.local.json
- Paramètres locaux du projet (non committé)PreToolUse
et PostToolUse
)
Write
correspond uniquement à l’outil WriteEdit|Write
ou Notebook.*
*
pour correspondre à tous les outils. Vous pouvez également utiliser une chaîne vide (""
) ou laisser
matcher
vide.type
: Actuellement, seul "command"
est pris en chargecommand
: La commande bash à exécuter (peut utiliser la variable d’environnement $CLAUDE_PROJECT_DIR
)timeout
: (Optionnel) Combien de temps une commande doit s’exécuter, en secondes, avant
d’annuler cette commande spécifique.UserPromptSubmit
, Notification
, Stop
, et SubagentStop
qui n’utilisent pas de matchers, vous pouvez omettre le champ matcher :
CLAUDE_PROJECT_DIR
(disponible uniquement lorsque
Claude Code génère la commande hook) pour référencer des scripts stockés dans votre projet,
en s’assurant qu’ils fonctionnent quel que soit le répertoire courant de Claude :
Task
- Tâches de sous-agent (voir documentation des sous-agents)Bash
- Commandes shellGlob
- Correspondance de motifs de fichiersGrep
- Recherche de contenuRead
- Lecture de fichiersEdit
, MultiEdit
- Édition de fichiersWrite
- Écriture de fichiersWebFetch
, WebSearch
- Opérations webmanual
- Invoqué depuis /compact
auto
- Invoqué depuis le compactage automatique (à cause d’une fenêtre de contexte pleine)startup
- Invoqué depuis le démarrageresume
- Invoqué depuis --resume
, --continue
, ou /resume
clear
- Invoqué depuis /clear
compact
- Invoqué depuis un compactage automatique ou manuel.reason
dans l’entrée du hook sera l’un des suivants :
clear
- Session effacée avec la commande /clearlogout
- Utilisateur déconnectéprompt_input_exit
- Utilisateur sorti pendant que l’entrée de prompt était visibleother
- Autres raisons de sortietool_input
dépend de l’outil.
tool_input
et tool_response
dépend de l’outil.
stop_hook_active
est vrai lorsque Claude Code continue déjà à la suite d’un
hook d’arrêt. Vérifiez cette valeur ou traitez la transcription pour empêcher Claude Code
de s’exécuter indéfiniment.
manual
, custom_instructions
provient de ce que l’utilisateur passe dans
/compact
. Pour auto
, custom_instructions
est vide.
stdout
est montré à l’utilisateur en mode transcription
(CTRL-R), sauf pour UserPromptSubmit
et SessionStart
, où stdout est
ajouté au contexte.stderr
est renvoyé à Claude pour traitement
automatique. Voir le comportement par événement de hook ci-dessous.stderr
est montré à l’utilisateur et
l’exécution continue.UserPromptSubmit
où stdout est injecté comme contexte.Événement de Hook | Comportement |
---|---|
PreToolUse | Bloque l’appel d’outil, montre stderr à Claude |
PostToolUse | Montre stderr à Claude (l’outil a déjà été exécuté) |
Notification | N/A, montre stderr à l’utilisateur seulement |
UserPromptSubmit | Bloque le traitement du prompt, efface le prompt, montre stderr à l’utilisateur seulement |
Stop | Bloque l’arrêt, montre stderr à Claude |
SubagentStop | Bloque l’arrêt, montre stderr au sous-agent Claude |
PreCompact | N/A, montre stderr à l’utilisateur seulement |
SessionStart | N/A, montre stderr à l’utilisateur seulement |
SessionEnd | N/A, montre stderr à l’utilisateur seulement |
stdout
pour un contrôle plus sophistiqué :
continue
est false, Claude arrête le traitement après l’exécution des hooks.
PreToolUse
, c’est différent de "permissionDecision": "deny"
, qui
bloque seulement un appel d’outil spécifique et fournit un retour automatique à Claude.PostToolUse
, c’est différent de "decision": "block"
, qui
fournit un retour automatisé à Claude.UserPromptSubmit
, cela empêche le prompt d’être traité.Stop
et SubagentStop
, cela prend la priorité sur toute
sortie "decision": "block"
."continue" = false
prend la priorité sur toute
sortie "decision": "block"
.stopReason
accompagne continue
avec une raison montrée à l’utilisateur, pas montrée
à Claude.
PreToolUse
PreToolUse
peuvent contrôler si un appel d’outil procède.
"allow"
contourne le système de permission. permissionDecisionReason
est montré
à l’utilisateur mais pas à Claude."deny"
empêche l’appel d’outil de s’exécuter. permissionDecisionReason
est
montré à Claude."ask"
demande à l’utilisateur de confirmer l’appel d’outil dans l’interface utilisateur.
permissionDecisionReason
est montré à l’utilisateur mais pas à Claude.decision
et reason
sont dépréciés pour les hooks PreToolUse.
Utilisez hookSpecificOutput.permissionDecision
et
hookSpecificOutput.permissionDecisionReason
à la place. Les champs dépréciés
"approve"
et "block"
correspondent respectivement à "allow"
et "deny"
.PostToolUse
PostToolUse
peuvent fournir un retour à Claude après l’exécution de l’outil.
"block"
invite automatiquement Claude avec reason
.undefined
ne fait rien. reason
est ignoré."hookSpecificOutput.additionalContext"
ajoute du contexte pour que Claude le considère.UserPromptSubmit
UserPromptSubmit
peuvent contrôler si un prompt utilisateur est traité.
"block"
empêche le prompt d’être traité. Le prompt soumis est
effacé du contexte. "reason"
est montré à l’utilisateur mais pas ajouté au contexte.undefined
permet au prompt de procéder normalement. "reason"
est ignoré."hookSpecificOutput.additionalContext"
ajoute la chaîne au contexte si pas
bloqué.Stop
/SubagentStop
Stop
et SubagentStop
peuvent contrôler si Claude doit continuer.
"block"
empêche Claude de s’arrêter. Vous devez remplir reason
pour que Claude
sache comment procéder.undefined
permet à Claude de s’arrêter. reason
est ignoré.SessionStart
SessionStart
vous permettent de charger du contexte au début d’une session.
"hookSpecificOutput.additionalContext"
ajoute la chaîne au contexte.additionalContext
de plusieurs hooks sont concaténées.SessionEnd
SessionEnd
s’exécutent lorsqu’une session se termine. Ils ne peuvent pas bloquer la terminaison de session
mais peuvent effectuer des tâches de nettoyage.
UserPromptSubmit
, vous pouvez injecter du contexte en utilisant l’une ou l’autre méthode :UserPromptSubmit
)mcp__<server>__<tool>
, par exemple :
mcp__memory__create_entities
- Outil de création d’entités du serveur de mémoiremcp__filesystem__read_file
- Outil de lecture de fichier du serveur de système de fichiersmcp__github__search_repositories
- Outil de recherche du serveur GitHub"$VAR"
pas $VAR
..
dans les chemins de fichiers$CLAUDE_PROJECT_DIR
pour le chemin du projet).env
, .git/
, les clés, etc./hooks
pour que les changements s’appliquentCLAUDE_PROJECT_DIR
est disponible et contient le
chemin absolu vers le répertoire racine du projet (où Claude Code a été démarré)--debug
)/hooks
pour voir si votre hook est enregistréclaude --debug
pour voir les détails d’exécution des hooks\"
à l’intérieur des chaînes JSONclaude --debug
pour voir l’exécution détaillée des hooksclaude --debug
pour voir les détails d’exécution des hooks :