Maîtriser les Hooks de Claude Code : Formatage automatique, tests automatiques et plus encore
Apprenez à configurer le formatage et les tests automatiques avec les hooks de Claude Code. Inclut des exemples de configuration pratiques et des cas d'utilisation concrets.
Que sont les Hooks ?
Les hooks de Claude Code vous permettent d’exécuter automatiquement des commandes personnalisées avant ou après des actions spécifiques. Vous pouvez configurer le formatage automatique après la sauvegarde de fichiers, l’exécution automatique de tests après des modifications de code, et bien plus encore.
Les hooks sont définis dans .claude/settings.json et exécutent des commandes shell lorsque Claude Code effectue certaines opérations.
Types de Hooks
Claude Code prend en charge les hooks aux points d’événement suivants :
| Événement du Hook | Déclenchement |
|---|---|
PreToolUse | Avant l’exécution d’un outil |
PostToolUse | Après l’exécution d’un outil |
Notification | Lors de l’envoi d’une notification |
Stop | Lorsque Claude Code termine sa réponse |
Configuration de base
Les hooks sont définis dans le champ hooks de .claude/settings.json :
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"command": "npx prettier --write \"$CLAUDE_FILE_PATH\""
}
]
}
}
Structure de la configuration
- matcher : Un pattern regex qui correspond au nom de l’outil déclenchant le hook
- command : La commande shell à exécuter
Cas d’utilisation 1 : Formatage automatique
Exécuter automatiquement Prettier après chaque modification de fichier :
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"command": "npx prettier --write \"$CLAUDE_FILE_PATH\""
}
]
}
}
Avec cette configuration, chaque fois que Claude Code crée ou modifie un fichier, Prettier le formate automatiquement. Le style de code de votre équipe reste cohérent sans aucun effort manuel.
Cas d’utilisation 2 : Linting automatique
Voici comment intégrer la correction automatique d’ESLint :
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"command": "npx eslint --fix \"$CLAUDE_FILE_PATH\" 2>/dev/null || true"
}
]
}
}
Le suffixe || true empêche les erreurs de lint de faire échouer le hook, permettant à Claude Code de continuer le traitement.
Cas d’utilisation 3 : Tests automatiques lors des modifications
Exécuter automatiquement les tests associés après la modification de fichiers et obtenir un retour :
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"command": "npx vitest related \"$CLAUDE_FILE_PATH\" --run 2>&1 | tail -20"
}
]
}
}
L’option related de Vitest n’exécute que les tests liés au fichier modifié, fournissant un retour bien plus rapide qu’une suite de tests complète.
Cas d’utilisation 4 : Vérification automatique des types
Exécuter la vérification de types TypeScript après les modifications de fichiers :
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write|Edit",
"command": "npx tsc --noEmit 2>&1 | head -30"
}
]
}
}
Cas d’utilisation 5 : Bloquer les commandes dangereuses
Un hook PreToolUse qui empêche l’exécution de commandes risquées :
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"command": "if echo \"$CLAUDE_TOOL_INPUT\" | grep -qE 'rm -rf|drop table|git push.*force'; then echo 'BLOQUÉ : Commande dangereuse détectée' >&2; exit 1; fi"
}
]
}
}
Lorsque le hook se termine avec le code 1, Claude Code annule complètement l’exécution de l’outil.
Cas d’utilisation 6 : Notifications à la fin
Envoyer une notification lorsque Claude Code termine une tâche :
{
"hooks": {
"Stop": [
{
"matcher": "",
"command": "notify-send 'Claude Code' 'Tâche terminée' 2>/dev/null; echo 'Terminé'"
}
]
}
}
Sur macOS, vous pouvez utiliser :
{
"hooks": {
"Stop": [
{
"matcher": "",
"command": "osascript -e 'display notification \"Tâche terminée\" with title \"Claude Code\"'"
}
]
}
}
Combiner plusieurs hooks
Dans les projets réels, combiner plusieurs hooks est l’approche la plus efficace :
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"command": "if echo \"$CLAUDE_TOOL_INPUT\" | grep -qE 'rm -rf /'; then exit 1; fi"
}
],
"PostToolUse": [
{
"matcher": "Write|Edit",
"command": "npx prettier --write \"$CLAUDE_FILE_PATH\" 2>/dev/null || true"
},
{
"matcher": "Write|Edit",
"command": "npx eslint --fix \"$CLAUDE_FILE_PATH\" 2>/dev/null || true"
}
],
"Stop": [
{
"matcher": "",
"command": "echo '✓ Tâche terminée'"
}
]
}
}
Conseils pour écrire des hooks
1. Gardez un temps d’exécution court
Les hooks s’exécutent de manière synchrone, donc les opérations lourdes ralentiront les réponses de Claude Code. Utilisez des options comme related pour limiter la portée des tests, et head ou tail pour réduire la sortie.
2. Gérez les erreurs avec soin
Un hook qui se termine avec une erreur peut perturber le workflow de Claude Code. Utilisez || true et 2>/dev/null pour assurer la stabilité.
3. Utilisez les variables d’environnement
Profitez des variables d’environnement disponibles dans les hooks. $CLAUDE_FILE_PATH vous donne le chemin du fichier en cours de traitement.
Conclusion
Les hooks vous permettent de personnaliser en profondeur le workflow de Claude Code. La combinaison du formatage automatique et des tests automatiques est particulièrement puissante pour maintenir la qualité du code. Commencez par le formatage automatique avec Prettier et développez à partir de là.