?
Skillintermédiaire

Hooks pre/post-commit pour CI locale

Configurer des hooks Claude Code qui valident le code avant chaque commit automatiquement.

Les hooks Claude Code

Les hooks sont des commandes exécutées automatiquement par Claude Code à des moments clés du workflow. Ils permettent d'automatiser la validation, le formatage, et les vérifications sans intervention manuelle.

Types de hooks disponibles

  • PreToolCall : S'exécute avant qu'un outil soit appelé (ex: avant un Bash, avant un Edit)
  • PostToolCall : S'exécute après l'appel d'un outil
  • Notification : S'exécute quand Claude Code envoie une notification
  • Stop : S'exécute quand Claude Code termine son tour

Configuration dans settings.json

Les hooks se configurent dans .claude/settings.json ou ~/.claude/settings.json :

{
  "hooks": {
    "PreToolCall": [
      {
        "matcher": "Bash(git commit.*)",
        "hooks": [
          {
            "type": "command",
            "command": "pnpm lint && pnpm test"
          }
        ]
      }
    ]
  }
}

Cas d'usage : validation pre-commit

Ce hook exécute le linter et les tests avant chaque commit :

{
  "hooks": {
    "PreToolCall": [
      {
        "matcher": "Bash(git commit.*)",
        "hooks": [
          {
            "type": "command",
            "command": "npm run lint:staged"
          }
        ]
      }
    ]
  }
}

Si le hook échoue (code de sortie non-zero), l'opération est bloquée et Claude Code voit l'erreur.

Cas d'usage : formatage post-edit

Formater automatiquement après chaque modification de fichier :

{
  "hooks": {
    "PostToolCall": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "prettier --write $CLAUDE_FILE_PATH"
          }
        ]
      }
    ]
  }
}

Bonnes pratiques

  • Gardez les hooks rapides : Un hook lent ralentit tout le workflow
  • Utilisez des matchers précis : Évitez les hooks trop larges qui se déclenchent inutilement
  • Testez en isolation : Vérifiez que la commande fonctionne seule avant de la mettre en hook
  • Combinez avec CLAUDE.md : Documentez vos hooks pour l'équipe

Debugging

Si un hook ne se déclenche pas, vérifiez : 1. La syntaxe du matcher (regex) 2. Que le fichier settings.json est bien chargé 3. Les permissions d'exécution de la commande

Sources

claude-codehooksCI