Hook
Hook PostToolUse qui formate chaque fichier modifié
Extrait de settings.json pour Claude Code : un hook PostToolUse lance Prettier sur chaque fichier créé ou modifié par les outils Edit et Write.
Faits vérifiés le source officiellejournal des changements
Où le placer.claude/settings.json (clé hooks)
{
"hooks": {
"PostToolUse": [
{
"matcher": "Edit|Write",
"hooks": [
{
"type": "command",
"command": "jq -r '.tool_input.file_path' | xargs npx prettier --write --ignore-unknown"
}
]
}
]
}
}Demander à Claude de « bien formater le code » consomme des échanges et donne un résultat variable. Il est plus simple de confier ce travail au formateur du projet, lancé automatiquement après chaque modification. Ce modèle déclare un hook sur l'événement PostToolUse, déclenché après un appel d'outil réussi, et le limite aux outils d'édition de fichiers grâce au filtre "matcher": "Edit|Write".
Comment ça fonctionne
Après chaque création ou modification de fichier, Claude Code envoie au hook un objet JSON sur l'entrée standard. Le chemin du fichier se trouve dans .tool_input.file_path. La commande l'extrait avec jq et le transmet à Prettier via xargs. L'option --ignore-unknown de Prettier évite une erreur quand le fichier modifié n'est pas d'un type que Prettier sait formater.
Le hook s'exécute en silence : quand tout se passe bien, rien n'apparaît dans la conversation. Le fichier est simplement reformaté sur le disque.
Installation
- Ouvrez
.claude/settings.jsonà la racine du projet (créez-le au besoin). - Fusionnez l'extrait : s'il existe déjà une clé
hooks, ajoutez-y l'entréePostToolUsesans écraser les autres événements. - Vérifiez que
jqest installé et que Prettier est disponible dans le projet (npx prettier --version). - Tapez
/hooksdans Claude Code pour contrôler que le hook apparaît.
Comment l'adapter
- Autre formateur : remplacez la fin de la commande par l'outil de votre langage, par exemple
ruff formatpour Python ougofmt -wpour Go. - Filtrer par extension : pour ne formater que certains fichiers, passez par un petit script qui teste l'extension avant d'appeler le formateur.
- Portée personnelle : placé dans
~/.claude/settings.json, le hook s'applique à tous vos projets ; dans.claude/settings.json, il est partagé avec l'équipe via Git.
Pièges fréquents
- Modifications faites par le shell : ce hook ne voit que les outils
EditetWrite. Un fichier réécrit par une commande Bash n'est pas formaté ; la documentation suggère un hookFileChangedpour ce cas. - Formateur lent : le hook s'exécute après chaque édition. Un outil lent ralentit toute la session.
- Chemins avec espaces :
xargsdécoupe sur les espaces ; si vos noms de fichiers en contiennent, préférez un script qui lit le chemin avecjqet le passe entre guillemets.
La leçon Les hooks explique la différence entre les événements PreToolUse et PostToolUse et quand utiliser chacun.