iducationducation
IndexArticlesFormationsProfilOutilsBibliothech
N°014 — 2026
Navigation
01Index02Articles03Formations04Profil05Outils06Bibliothech
N°014 — 2026
iducationducation
IndexArticlesFormationsProfilOutilsBibliothech
N°014 — 2026
Navigation
01Index02Articles03Formations04Profil05Outils06Bibliothech
N°014 — 2026
Formations
CLI / IA · Intermédiaire

Claude Code

Maîtriser Claude Code de A à Z : CLAUDE.md, mémoire persistante, skills custom, agents parallèles, MCP et hooks — pour transformer Claude en collaborateur de développement sur mesure.

Claude CodeCLAUDE.mdMCPAgentsHooks
01Introduction et prise en main02CLAUDE.md — configurer Claude pour votre projet03Mémoire persistante04Skills — slash commands personnalisées05Agents — déléguer et paralléliser06MCP — connecter Claude à des outils externes07Hooks, settings.json et automatisation
Chapitre 7·25 min

Hooks, settings.json et automatisation

settings.json est le fichier de configuration de Claude Code. Il contrôle les permissions, les modèles, les variables d'environnement, les serveurs MCP — et les hooks : des commandes shell qui s'exécutent automatiquement en réponse à des événements Claude.

Structure de settings.json

Deux niveaux :

~/.claude/settings.json        ← global (toutes sessions)
.claude/settings.json          ← projet (commité dans le repo)
.claude/settings.local.json    ← projet local (non commité, pour les secrets)

Structure de base :

{
  "model": "claude-sonnet-4-6",
  "theme": "dark",
  "permissions": {
    "allow": [],
    "deny": []
  },
  "env": {},
  "mcpServers": {},
  "hooks": {}
}

Permissions

Les permissions contrôlent quels outils Claude peut utiliser sans demander confirmation.

Syntaxe

{
  "permissions": {
    "allow": [
      "Bash(git *)",
      "Bash(npm run *)",
      "Read",
      "Glob",
      "Grep"
    ],
    "deny": [
      "Bash(rm -rf *)",
      "Bash(git push --force *)"
    ]
  }
}

Les patterns utilisent des wildcards * pour matcher des commandes partielles.

Permissions courantes à autoriser

{
  "permissions": {
    "allow": [
      "Read",
      "Glob",
      "Grep",
      "Bash(git status)",
      "Bash(git diff *)",
      "Bash(git log *)",
      "Bash(git add *)",
      "Bash(npm run *)",
      "Bash(npx *)",
      "Bash(ls *)"
    ]
  }
}

Claude peut lire, chercher, voir l'état git, ajouter des fichiers, lancer des scripts npm — tout ça sans demander. Les actions dangereuses (push, rm, reset) restent derrière une confirmation.

deny — bloquer des actions précises

{
  "permissions": {
    "deny": [
      "Bash(git push --force *)",
      "Bash(rm -rf *)",
      "Bash(DROP *)",
      "Bash(* --no-verify)"
    ]
  }
}

Les règles deny ont priorité sur allow. Un outil dans les deux listes est bloqué.

Variables d'environnement

Injecter des variables dans toutes les sessions Claude :

{
  "env": {
    "NODE_ENV": "development",
    "DATABASE_URL": "postgresql://localhost/myapp_dev",
    "LOG_LEVEL": "debug"
  }
}

Pour les secrets en local (non commités) :

// .claude/settings.local.json
{
  "env": {
    "API_KEY": "sk-..."
  }
}

Hooks — automatiser des actions

Les hooks sont des commandes shell déclenchées par des événements Claude Code. Ils permettent d'automatiser des vérifications, des notifications, des transformations — sans modifier le comportement de Claude lui-même.

Événements disponibles

PreToolUse      — avant qu'un outil s'exécute
PostToolUse     — après qu'un outil s'exécute
UserPromptSubmit — quand l'utilisateur envoie un message
Stop            — quand Claude termine une réponse
Notification    — quand Claude envoie une notification

Syntaxe des hooks

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "npm run lint --silent"
          }
        ]
      }
    ]
  }
}

matcher est une regex qui filtre sur le nom de l'outil. Edit|Write = se déclenche après tout Edit ou Write.

Hook : linting automatique après chaque édition

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "npx eslint --fix \"${TOOL_INPUT_FILE_PATH}\" --quiet 2>/dev/null || true"
          }
        ]
      }
    ]
  }
}

Chaque fichier édité est automatiquement linté et auto-fixé. Claude voit les résultats du hook.

Hook : notification quand Claude termine

{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "notify-send 'Claude Code' 'Tâche terminée' 2>/dev/null || true"
          }
        ]
      }
    ]
  }
}

Sur macOS :

{
  "command": "osascript -e 'display notification \"Tâche terminée\" with title \"Claude Code\"'"
}

Hook : bloquer les commits sur main

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "if echo \"${TOOL_INPUT_COMMAND}\" | grep -q 'git commit' && [ \"$(git branch --show-current)\" = 'main' ]; then echo 'ERREUR: commit direct sur main interdit' >&2; exit 1; fi"
          }
        ]
      }
    ]
  }
}

Un hook qui retourne un code de sortie non-zéro bloque l'outil et retourne le message d'erreur à Claude.

Hook : logger toutes les commandes Bash

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "echo \"[$(date)] BASH: ${TOOL_INPUT_COMMAND}\" >> ~/.claude/bash-audit.log"
          }
        ]
      }
    ]
  }
}

Utile en équipe ou pour auditer ce que Claude exécute.

Hook : UserPromptSubmit — contexte additionnel

Se déclenche quand l'utilisateur envoie un message. Peut injecter du contexte supplémentaire.

{
  "hooks": {
    "UserPromptSubmit": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "echo \"Date: $(date '+%Y-%m-%d'). Branch: $(git branch --show-current 2>/dev/null). Uncommitted: $(git status --short 2>/dev/null | wc -l | tr -d ' ') files.\""
          }
        ]
      }
    ]
  }
}

La sortie de ce hook est ajoutée au contexte du message — Claude sait automatiquement la date, la branche et l'état git sans que vous le précisiez.

Variables d'environnement dans les hooks

Les hooks reçoivent des variables qui décrivent le contexte :

TOOL_NAME               — nom de l'outil (Bash, Edit, Write...)
TOOL_INPUT_COMMAND      — commande Bash (pour PreToolUse Bash)
TOOL_INPUT_FILE_PATH    — chemin du fichier (pour Edit/Write)
TOOL_OUTPUT             — sortie de l'outil (pour PostToolUse)
CLAUDE_SESSION_ID       — identifiant de session

Modèle et paramètres

{
  "model": "claude-sonnet-4-6",
  "smallModel": "claude-haiku-4-5-20251001"
}

smallModel est utilisé pour les tâches légères (résumés, classifications) — moins coûteux, plus rapide.

Configuration complète recommandée

// ~/.claude/settings.json
{
  "model": "claude-sonnet-4-6",
  "theme": "dark",
 
  "permissions": {
    "allow": [
      "Read", "Glob", "Grep",
      "Bash(git status)",
      "Bash(git diff *)",
      "Bash(git log *)",
      "Bash(git add *)",
      "Bash(git branch *)",
      "Bash(npm run *)",
      "Bash(npx *)",
      "Bash(ls *)",
      "Bash(cat *)",
      "Bash(pwd)"
    ],
    "deny": [
      "Bash(git push --force *)",
      "Bash(rm -rf *)",
      "Bash(* --no-verify)"
    ]
  },
 
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "osascript -e 'display notification \"Terminé\" with title \"Claude Code\"' 2>/dev/null || true"
          }
        ]
      }
    ]
  }
}
// .claude/settings.json (projet, commité)
{
  "permissions": {
    "allow": [
      "Bash(npm run dev)",
      "Bash(npm run build)",
      "Bash(npm test *)",
      "Bash(npx prisma *)"
    ]
  },
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "npx tsc --noEmit --quiet 2>/dev/null | head -20 || true"
          }
        ]
      }
    ]
  }
}

Après chaque édition, TypeScript vérifie silencieusement. Claude voit les erreurs de type immédiatement, sans que vous les lui signaliez.

/config — modifier les paramètres depuis Claude

Pour ne pas éditer settings.json à la main :

> /config

Ouvre une interface interactive pour changer le modèle, le thème, les raccourcis clavier.

> active le mode auto-approve pour cette session

Claude configure la session sans modifier les fichiers de settings permanents.


Vous maîtrisez maintenant l'intégralité de la configuration Claude Code. CLAUDE.md pour les règles projet, mémoire pour le contexte persistant, skills pour les workflows réutilisables, agents pour la parallélisation, MCP pour les outils externes, hooks pour l'automatisation. Chaque couche rend la suivante plus puissante.

Précédent
MCP — connecter Claude à des outils externes

Développeur fullstack passionné. J'apprends en construisant et je documente tout — front, back, outils. Le code s'apprend mieux en public.

Naviguer

IndexTous les articlesFormationsProfilOutilsBibliothech

Ailleurs

GitHub RSS

Newsletter

Les articles, libs et découvertes. Une fois par semaine, pas plus.

© 2026 William LoreeConçu & codé à la main