Intermédiaire·2 min·29 mai 2026

Claude Code Hooks : contrôler l'IA avec du Python simple

🎧 Résumé audio0:00 / 0:00
Une lib Python qui te laisse valider, intercepter et bloquer les actions de Claude Code sans écrire du code générique répétitif.
Claude Code Hooks : contrôler l'IA avec du Python simple

Pourquoi ça compte pour toi

Si tu utilises Claude Code pour automatiser du développement, tu dois pouvoir ajouter tes propres garde-fous : vérifier que Claude ne modifie que certains fichiers, appliquer tes standards de code, journaliser ses décisions. Cette lib fait exactement ça sans t'obliger à gérer JSON, stdin/stdout ou les schémas de réponse.

Ce qu'il faut retenir

  • 1.4 types de hooks : avant/après exécution d'outils, validation de prompts, initialisation de session
  • 2.Tu hérites de HookHandler, tu surcharges la méthode du hook que tu veux, c'est tout
  • 3.Dataclasses typées + builder pattern pour les réponses (allow/deny/ask)
  • 4.Journaux JSONL automatiques avec session ID, namespace, timestamps — debug sans prise de tête

Tu galères avec le jargon ?

Lis la version réécrite en mode débutant — toutes les idées, sans le jargon.

Pourquoi les hooks ?

Quand Claude Code génère du code, tu veux souvent lui imposer des règles : "pas de modifications en dehors de /app/src", "tout fichier Vue doit avoir setup lang=ts", "bloque les FormRequest, pousse vers les Data Classes". Sans les hooks, tu dois vérifier manuellement ou refuser tout en bloc. Avec les hooks, tu automatises la validation.

Trois patterns concrets

Valider la structure Vue

class VueValidator(HookHandler):
    def pre_tool_use(self, input: PreToolUseInput) -> PreToolUseResponse | None:
        if not input.file_path_matches('**/*.vue'):
            return None
        
        content = input.content or ''
        if '<script setup lang="ts">' not in content:
            return PreToolUseResponse.deny(
                "Vue doit utiliser <script setup lang=\"ts\">"
            )
        return PreToolUseResponse.allow()

Tu étends HookHandler, tu implémentes pre_tool_use(), tu retournes allow/deny/ask. Fini.

Confiner les contrôleurs Laravel

class ControllerValidator(HookHandler):
    def pre_tool_use(self, input: PreToolUseInput) -> PreToolUseResponse | None:
        if not input.file_path_matches('**/*Controller.php'):
            return None
        
        if not input.file_path_matches('**/app/Http/Controllers/**'):
            return PreToolUseResponse.deny(
                f"Les contrôleurs doivent être dans app/Http/Controllers/. "
                f"Trouvé: {input.file_path}"
            )
        return PreToolUseResponse.allow()

Journaliser les décisions

Chaque handler reçoit un HookLogger. Les journaux vont dans .claude/logs/{namespace}/hooks.jsonl — un objet JSON par ligne, avec timestamp, niveau, session ID, raison. Parfait pour comprendre pourquoi Claude a fait un truc ou non.

Points clés

Minimaliste : tu n'as que ce qu'il te faut. Pas de dépendances lourdes. Si tu veux appeler une IA pour la validation, tu importes ton SDK toi-même.

Type-safe : les inputs et outputs sont des dataclasses. Ton IDE te complète, les erreurs remontent à la compilation.

Multi-hook : un même script Python peut gérer PreToolUse, PostToolUse, UserPromptSubmit, SessionStart. Tu surcharges juste ce que tu dois.

Réactions fines : allow/deny/ask, et tu peux même modifier l'input avant qu'il n'arrive à Claude (with_updated_input).

Configuration

Tu déclares tes hooks dans .claude/settings.json :

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [{
          "type": "command",
          "command": "python3 /path/to/validator.py"
        }]
      }
    ]
  }
}

C'est ça. Claude passe par stdin, tu retournes la réponse sur stdout, la lib gère le reste.

Qui devrait l'utiliser ?

Si tu utilises Claude Code dans une équipe ou un projet avec des standards stricts (structure de dossiers, conventions de code, fichiers protégés), cette lib te sauve du temps de relecture manuelle. Tu écris une fois, ça roule à chaque suggestion de Claude.

Et concrètement pour toi ?

Choisis ton profil — la lecture de l'article change selon qui tu es.

🔭 Curieux

Pour toi, cette lib montre concrètement pourquoi on peut pas juste lâcher l'IA seule : même le meilleur modèle a besoin de garde-fous humains intégrés, pas ajoutés après coup.

📊 Cours en bourse

Newsletters Noésis

3 minutes d'IA dans ta boîte mail, chaque matin.

Rejoins les francophones qui comprennent, essaient et progressent avec l'IA. Choisis ce que tu veux recevoir. Désabonnement en 1 clic.

Explorer les thèmes de cet article :