Optimiser sa configuration Claude Code pour le développement
- Publié le
- ·8 min de lecture·Mis à jour le 15 mars 2026
Introduction : maîtriser son assistant IA (ou il vous maîtrisera)
Claude Code, c'est mon compagnon de développement depuis un an+. Mais le utiliser avec les settings par défaut? C'est comme conduire une voiture avec le tableau de bord fermé. Les bons réglages transforment tout: réponses plus rapides, économies de quota, tâches automatisées, sécurité renforcée.
Je vais vous montrer ma config ~/.claude/settings.json complète et ce que chaque truc fait. J'ai passé des heures à l'affiner.
Variables d'environnement : le cœur du système
La section env c'est comment Claude Code se comporte en profondeur. Voici mon setup:
{
"env": {
"DISABLE_NON_ESSENTIAL_MODEL_CALLS": "1",
"CLAUDE_AUTOCOMPACT_PCT_OVERRIDE": "65",
"CLAUDE_CODE_MAX_OUTPUT_TOKENS": "128000",
"BASH_DEFAULT_TIMEOUT_MS": "120000",
"BASH_MAX_TIMEOUT_MS": "600000",
"MAX_MCP_OUTPUT_TOKENS": "25000",
"CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR": "1",
"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1",
"DISABLE_TELEMETRY": "1",
"DISABLE_ERROR_REPORTING": "1",
"CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY": "1",
"CLAUDE_CODE_SUBAGENT_MODEL": "haiku"
}
}
Économiser sa quota (pas mal d'importance ici)
DISABLE_NON_ESSENTIAL_MODEL_CALLS: "1" : Claude Code lance parfois des appels API de "vérification" inutiles. Désactiver ça garde le quota pour les vrais trucs.
CLAUDE_AUTOCOMPACT_PCT_OVERRIDE: "65" : Par défaut c'est 60%. J'avais 80% avant, mais la communauté a raison : la qualité des réponses se dégrade dans les derniers 25-30% du contexte. A 65% le compact se déclenche suffisamment tôt pour garder Claude lucide, tout en conservant un bon historique de conversation.
CLAUDE_CODE_MAX_OUTPUT_TOKENS: "128000" : Opus 4.6 supporte maintenant 128k tokens en sortie (doublé par rapport aux 64k d'avant). Autorise Claude à générer des très longues réponses - refactorings massifs, articles entiers. Zéro impact sur la quota, tu paies ce que tu consommes.
Mise à jour mars 2026 : j'ai retiré MAX_THINKING_TOKENS. Sur Opus 4.6 et Sonnet 4.6, le paramètre thinking est déprécié. Anthropic l'a remplacé par l'adaptive thinking, pilotable via la commande /effort low|medium|high. Plus besoin de fixer un budget de tokens manuellement - le modèle ajuste sa réflexion selon la complexité de la tâche. En pratique c'est mieux : les réponses simples sont plus rapides, et les problèmes complexes prennent toujours le temps qu'il faut.
Gérer les timeouts bash (crucial!)
BASH_DEFAULT_TIMEOUT_MS: "120000" : 2 minutes. Temps max avant qu'une commande bash se timeout. Utile pour les builds lents ou les tests qui traînent.
BASH_MAX_TIMEOUT_MS: "600000" : 10 minutes maximum si tu veux vraiment attendre. Pour les compilations ou déploiements massifs.
CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR: "1" : CRUCIAL. Claude garde la même pwd entre les commandes bash. Sans ça, chaque commande redémarre du home, c'est un cauchemar.
Features expérimentales (carrément utiles)
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS: "1" : Équipes d'agents. Si le problème est complexe, Claude crée plusieurs sous-agents qui travaillent en parallèle. Game-changing pour les projets multi-facettes.
CLAUDE_CODE_SUBAGENT_MODEL: "haiku" : Les sous-agents utilisent Haiku (plus rapide, moins cher). Haiku c'est suffisant pour 90% des tâches de travail.
Privacy first (parce que pourquoi pas)
DISABLE_TELEMETRY: "1", DISABLE_ERROR_REPORTING: "1", CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY: "1" : Pas de télémétrie, pas de popups d'enquête. Question d'autonomie sur ses données.
Permissions de sécurité : verrouiller les trucs importants
Claude Code peut lire/écrire n'importe où et lancer des commandes shell. Puissant mais... dangereux. La section permissions dit "non, pas ça":
{
"permissions": {
"allow": [
"Bash(npm *)",
"Bash(pnpm *)",
"Bash(bun *)",
"Bash(git status *)",
"Bash(git diff *)",
"Bash(git log *)",
"Bash(git branch *)",
"Bash(git show *)"
],
"deny": [
"Edit(~/.ssh/**)",
"Edit(~/.aws/**)",
"Edit(~/.gnupg/**)",
"Edit(~/.config/gh/**)",
"Edit(~/.git-credentials)",
"Read(~/.ssh/id_*)",
"Read(~/.aws/credentials)",
"Bash(rm -rf *)",
"Bash(git push --force *)",
"Bash(git push * --force *)",
"Edit(~/.env.claude)",
"Read(~/.env.claude)"
]
}
}
Mise à jour mars 2026 : j'ai ajouté une section allow avec des wildcards bash. Depuis la v2.1.0, Claude Code supporte Bash(npm *) et compagnie - ça auto-approuve les commandes read-only type git status, git diff, et les gestionnaires de paquets. Fini les popups de permission toutes les 30 secondes. Les deny rules utilisent maintenant la syntaxe Edit() / Read() / Bash() pour être plus précises.
J'ai aussi ajouté ~/.env.claude aux deny rules - c'est mon fichier de secrets pour les serveurs MCP. J'en parle en détail dans l'article sur la sécurisation des clés API MCP.
Fichiers sensibles :
~/.ssh/**: clés SSH (PRIVATE!)~/.aws/**: AWS credentials~/.gnupg/**: GPG keys~/.config/gh/**: GitHub token~/.git-credentials: Git credentials~/.env.claude: secrets MCP
Commandes bloquées : rm -rf et git push --force via glob patterns.
Pro tip : J'ai créé des fichiers "decoy" avec des fausses données dans les chemins sensibles. Si Claude essaie d'y accéder, je le vois dans les logs immédiatement. (une fois j'ai attrapé une hallucination qui tentait d'accéder à ~/.ssh)
Hooks : automatiser les avant/après
Hooks = scripts shell exécutés à certains moments clés. Je les utilise pour tracker les sessions et les metrics:
{
"hooks": {
"UserPromptSubmit": [
{
"name": "claude-prompt-start",
"command": "echo \"[$(date +'%Y-%m-%d %H:%M:%S')] Prompt submitted\" >> ~/.claude/session.log"
},
{
"name": "autoname-session.sh",
"command": "~/.claude/autoname-session.sh"
}
],
"Stop": [
{
"name": "claude-prompt-end",
"command": "echo \"[$(date +'%Y-%m-%d %H:%M:%S')] Session ended\" >> ~/.claude/session.log"
}
]
}
}
UserPromptSubmit : Déclenché quand tu soumet un prompt. Utile pour:
- Logger les timestamps
- Auto-nommer les sessions selon le contenu du prompt (mon script
autoname-session.shextrait des keywords)
Stop : Déclenché quand Claude Code se ferme. Je log juste la fin pour mesurer la durée globale.
Mise à jour mars 2026 : j'ai ajouté un hook PostCompact qui logge chaque compaction dans ~/.claude/compact.log. Pratique pour voir à quelle fréquence le contexte sature et ajuster le seuil d'autocompact :
{
"PostCompact": [
{
"hooks": [
{
"type": "command",
"command": "echo \"[$(date +'%Y-%m-%d %H:%M:%S')] Compacted\" >> ~/.claude/compact.log"
}
]
}
]
}
Tu peux aussi créer des hooks qui envoient les logs vers un serveur, ou qui lancent des tests post-session. Depuis début 2026, il y a aussi les hooks HTTP ("type": "http") qui postent du JSON vers une URL au lieu d'exécuter un script shell - pratique pour du webhook direct sans script intermédiaire.
Configuration UI et polishing (les petites choses)
{
"showTurnDuration": true,
"cleanupPeriodDays": 90,
"enableAllProjectMcpServers": false,
"skipDangerousModePermissionPrompt": true,
"spinnerVerbs": {
"mode": "replace",
"verbs": [" ⠋", " ⠙", " ⠹", " ⠸", " ⠼", " ⠴", " ⠦", " ⠧", " ⠇", " ⠏"]
}
}
showTurnDuration: true : Affiche combien de temps Claude met à répondre. Identifie les appels lents.
cleanupPeriodDays: 90 : Auto-supprime les sessions de >90 jours. Sinon tu saturas ton disque.
enableAllProjectMcpServers: false : Par défaut, Claude Code demande avant d'activer les serveurs MCP du projet. C'est une sécurité - tu contrôles ce qui s'exécute.
skipDangerousModePermissionPrompt: true : Je suis un power user donc j'ai confiance en moi. Ça me permet de switcher en "Dangerous Mode" sans confirmation. À utiliser avec prudence!
Plugins : les super-pouvoirs
{
"plugins": [
{
"name": "context7",
"enabled": true
},
{
"name": "safety-net",
"enabled": true
},
{
"name": "ralph-loop",
"enabled": true
}
]
}
Context7 : Accès à la doc en temps réel de 100+ frameworks/libs. Au lieu de laisser Claude halluciner sur l'API Next.js v15, il la consulte directement.
Safety-Net : Analyse statique basique des commits/PRs avant de les pousher - détecte les secrets accidentels, logs sensibles, etc. Pratique.
Ralph-Loop : Si Claude détecte une erreur de build/test, il boucle automatiquement pour corriger sans intervention. Révolutionnaire.
Le fichier complet
Voilà le fichier settings.json complet que j'utilise (mis à jour mars 2026) :
{
"env": {
"DISABLE_NON_ESSENTIAL_MODEL_CALLS": "1",
"CLAUDE_AUTOCOMPACT_PCT_OVERRIDE": "65",
"CLAUDE_CODE_MAX_OUTPUT_TOKENS": "128000",
"BASH_DEFAULT_TIMEOUT_MS": "120000",
"BASH_MAX_TIMEOUT_MS": "600000",
"MAX_MCP_OUTPUT_TOKENS": "25000",
"CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR": "1",
"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1",
"DISABLE_TELEMETRY": "1",
"DISABLE_ERROR_REPORTING": "1",
"CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY": "1",
"CLAUDE_CODE_SUBAGENT_MODEL": "haiku"
},
"permissions": {
"allow": [
"Bash(npm *)",
"Bash(pnpm *)",
"Bash(bun *)",
"Bash(git status *)",
"Bash(git diff *)",
"Bash(git log *)",
"Bash(git branch *)",
"Bash(git show *)"
],
"deny": [
"Edit(~/.ssh/**)",
"Edit(~/.aws/**)",
"Edit(~/.gnupg/**)",
"Edit(~/.config/gh/**)",
"Edit(~/.git-credentials)",
"Read(~/.ssh/id_*)",
"Read(~/.aws/credentials)",
"Bash(rm -rf *)",
"Bash(git push --force *)",
"Bash(git push * --force *)",
"Edit(~/.env.claude)",
"Read(~/.env.claude)"
]
},
"hooks": {
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "~/.local/bin/claude-prompt-start"
},
{
"type": "command",
"command": "~/scripts/claude/autoname-session.sh"
}
]
}
],
"PostCompact": [
{
"hooks": [
{
"type": "command",
"command": "echo \"[$(date +'%Y-%m-%d %H:%M:%S')] Compacted\" >> ~/.claude/compact.log"
}
]
}
],
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "~/.local/bin/claude-prompt-end"
}
]
}
]
},
"showTurnDuration": true,
"cleanupPeriodDays": 90,
"enableAllProjectMcpServers": false,
"skipDangerousModePermissionPrompt": true,
"spinnerVerbs": {
"mode": "replace",
"verbs": [" "]
},
"enabledPlugins": {
"context7@claude-plugins-official": true,
"safety-net@cc-marketplace": true,
"ralph-loop@claude-plugins-official": true
}
}
Pour finir
La config Claude Code c'est pas un one-time thing. Je reviens régulièrement ajouter des deny patterns quand j'ai peur, ajuster les timeouts selon les projets actuels. L'idée c'est d'avoir un environnement qui te pousse vers les bonnes pratiques.
Copie cette config, adapte-la à ton contexte (tes chemins sensibles, tes commandes dangereuses), itère. Rapidement Claude Code devient un vrai multiplicateur de productivité.
Voir aussi : Sécuriser ses clés API MCP dans Claude Code - si vos serveurs MCP ont des clés API en dur dans mcp.json, c'est un problème.
Article précédent
← Monter un media center complet avec Jellyfin et la stack *arrArticle suivant
Gérer ses photos avec Immich en auto-hébergé→