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.
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.
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": {}
}Les permissions contrôlent quels outils Claude peut utiliser sans demander confirmation.
{
"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": {
"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.
{
"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é.
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-..."
}
}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.
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{
"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.
{
"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.
{
"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\"'"
}{
"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.
{
"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.
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.
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{
"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.
// ~/.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.
Pour ne pas éditer settings.json à la main :
> /configOuvre une interface interactive pour changer le modèle, le thème, les raccourcis clavier.
> active le mode auto-approve pour cette sessionClaude 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.