GUIDE TECHNIQUE EXPERT

Claude Code : Le Guide Avancé

MCP, Hooks, Skills, Scripting headless, Subagents, Worktrees, Optimisation budget et patterns avancés. Le guide de référence pour les développeurs qui veulent maîtriser Claude Code en profondeur.

Claude Code
45 min
Expert
20+ exemples
Claude Code Entreprise
1/3

Pourquoi Claude Code Change la Donne

Claude Code n'est pas un simple copilote de code. C'est un agent de développement autonome qui opère directement dans votre terminal, comprend l'intégralité de votre codebase, exécute des commandes, édite des fichiers, et orchestre des workflows complexes — le tout sans jamais quitter la ligne de commande.

Là où GitHub Copilot suggère des lignes, où Cursor propose des éditions dans un IDE, Claude Code agit. Il lit votre projet, comprend l'architecture, planifie les modifications, les exécute, lance les tests, et itère jusqu'à ce que tout fonctionne. C'est la différence fondamentale entre un assistant et un agent.

200K
Tokens de contexte — Claude Code peut ingérer des centaines de fichiers simultanément
15+
Outils natifs : Read, Write, Edit, Bash, Glob, Grep, WebSearch, WebFetch, Notebook...
Agentic
Boucle plan-execute-observe autonome avec subagents et parallélisme
MCP
Protocole ouvert pour connecter n'importe quel outil externe (DB, API, services)

Claude Code vs. la concurrence

Critère Claude Code GitHub Copilot Cursor Aider
Environnement Terminal (agnostique) VS Code / JetBrains Cursor IDE (fork VS Code) Terminal
Mode opératoire Agent autonome Autocomplétion + Chat Chat + Composer + Agent Chat terminal
Contexte max 200K tokens ~8K tokens ~128K tokens Variable (repo map)
Exécution de commandes Oui (Bash natif) Non Limité Oui (limité)
MCP Natif (4 transports) Non Oui (basique) Non
Subagents Oui (parallèles) Non Non Non
Hooks Oui (4 types) Non Non Non
Headless / CI Oui (claude -p) Non Non Oui (basique)
Modèle Claude Opus 4 / Sonnet 4 GPT-4o / Claude Multi-modèle Multi-modèle

L'analogie du chef d'orchestre

Copilot est un musicien qui joue la note suivante. Cursor est un chef de section qui gère quelques instruments. Claude Code est le chef d'orchestre : il lit la partition complète, coordonne tous les instruments (fichiers, tests, commandes, APIs), et peut même composer de nouveaux mouvements à la volée.

Installation en 30 secondes

Terminal
# Installation globale via npm
npm install -g @anthropic-ai/claude-code

# Vérifier l'installation
claude --version

# Lancer dans un projet
cd mon-projet/
claude

# Première utilisation : authentification
# Claude Code ouvrira un navigateur pour l'auth OAuth

Prérequis

Claude Code nécessite Node.js 18+ et un abonnement Claude Pro (20$/mois), Max (100$/200$), ou un accès API Anthropic. Le plan Pro inclut un usage limité ; pour un usage intensif, préférez Max ou l'API directe.

Architecture & Configuration

Claude Code stocke toute sa configuration dans un répertoire .claude/ à la racine de votre projet. Comprendre cette structure est essentiel pour tirer parti de toutes les fonctionnalités avancées.

Structure du répertoire .claude/

Arborescence
mon-projet/
├── .claude/
│   ├── settings.json          # Config locale du projet
│   ├── rules/                 # Règles modulaires (*.md)
│   │   ├── testing.md         # Règles spécifiques aux tests
│   │   ├── security.md        # Règles de sécurité
│   │   └── api-design.md      # Conventions d'API
│   └── worktrees/             # Worktrees Git isolés
├── .mcp.json                  # Serveurs MCP du projet
├── CLAUDE.md                  # Instructions globales du projet
└── src/
    └── CLAUDE.md              # Instructions spécifiques à src/

Les 4 scopes de configuration

Claude Code résout la configuration par ordre de priorité décroissante. Chaque scope peut définir des permissions, des paramètres MCP, et des préférences :

Scope Fichier Portée Versionné (git) Priorité
Enterprise (Managed) Politique système Toute l'organisation N/A 1 (max)
User ~/.claude/settings.json Tous vos projets Non 2
Project .claude/settings.json Ce projet (partagé) Oui 3
Local .claude/settings.local.json Ce projet (personnel) Non (.gitignore) 4 (min)

Logique de fusion

Les scopes sont fusionnés, pas remplacés. Si votre scope User autorise Bash(*) mais que le scope Project l'interdit via deny, c'est le deny qui gagne. Les deny sont toujours prioritaires sur les allow, quel que soit le scope. Et le scope Enterprise est irrévocable — il ne peut pas être contourné par les scopes inférieurs.

Exemple complet de settings.json

.claude/settings.json (scope Project)
{
  "permissions": {
    "allow": [
      "Read",
      "Write",
      "Edit",
      "Glob",
      "Grep",
      "Bash(npm run *)",
      "Bash(node *)",
      "Bash(git status)",
      "Bash(git diff*)",
      "Bash(git log*)",
      "Bash(git add *)",
      "Bash(git commit *)",
      "mcp__github__*",
      "mcp__postgres__query"
    ],
    "deny": [
      "Bash(rm -rf *)",
      "Bash(git push --force*)",
      "Bash(git reset --hard*)",
      "Bash(curl*|*sh)",
      "mcp__postgres__execute"
    ]
  },
  "env": {
    "CLAUDE_CODE_MAX_OUTPUT_TOKENS": "16000",
    "ENABLE_TOOL_SEARCH": "true"
  }
}

Le système de permissions en détail

Chaque outil de Claude Code est soumis à un système de permissions granulaire. Vous pouvez autoriser ou bloquer des outils spécifiques, et même utiliser des glob patterns pour un contrôle fin :

Patterns de permission
# Syntaxe des permissions
"Bash(pattern)"              # Commande bash spécifique
"Bash(npm run *)"            # Toute commande npm run
"Bash(git *)"                # Toutes les commandes git
"mcp__serveur__outil"        # Outil MCP spécifique
"mcp__serveur__*"            # Tous les outils d'un serveur MCP
"Read(*.env)"                # Lecture de fichiers .env (à deny !)
"Write(src/**)"              # Écriture dans src/ uniquement

Bonne pratique de sécurité

Commencez toujours par un scope restrictif et ajoutez des permissions au besoin. Bloquez explicitement les commandes destructrices (rm -rf, git push --force, DROP TABLE) dans le scope Project pour protéger tous les contributeurs.

CLAUDE.md : Le Cerveau du Projet

Le fichier CLAUDE.md est la pièce maîtresse de Claude Code. C'est un fichier Markdown lu automatiquement au démarrage de chaque session. Il contient les instructions, conventions, et contexte que Claude utilisera pour toutes ses interactions avec votre projet.

Emplacements et priorité de chargement

Claude Code recherche les fichiers CLAUDE.md à plusieurs endroits, chargés dans cet ordre :

Emplacement Portée Quand chargé Exemple d'usage
~/CLAUDE.md Globale (tous projets) Toujours Préférences personnelles, style de code
./CLAUDE.md (racine) Projet Toujours Architecture, conventions, commandes
./src/CLAUDE.md Sous-répertoire Quand Claude travaille dans src/ Conventions spécifiques au code source
.claude/rules/*.md Règles modulaires Selon le frontmatter Règles par domaine (test, sécurité, API)

Imports avec la syntaxe @

Pour éviter un CLAUDE.md monolithique, utilisez les imports :

CLAUDE.md
# Mon Projet

## Architecture
@docs/architecture.md

## Conventions API
@docs/api-conventions.md

## Déploiement
@docs/deployment.md

Chaque fichier référencé par @ est injecté dans le contexte comme s'il faisait partie du CLAUDE.md principal. C'est idéal pour les gros projets avec beaucoup de documentation.

Règles modulaires avec .claude/rules/

Les fichiers dans .claude/rules/ offrent un contrôle plus fin grâce au frontmatter YAML :

.claude/rules/testing.md
---
description: "Conventions de test pour le projet"
globs: ["**/*.test.ts", "**/*.spec.ts", "tests/**"]
---

# Règles de Test

- Utiliser Vitest (pas Jest)
- Chaque fichier test doit avoir un `describe` par fonction exportée
- Préférer `it.each` pour les cas paramétriques
- Mocker les appels réseau avec `msw`
- Coverage minimum : 80% sur les branches
.claude/rules/security.md
---
description: "Règles de sécurité obligatoires"
globs: ["src/api/**", "src/auth/**", "src/middleware/**"]
---

# Sécurité

- JAMAIS de secrets en dur dans le code
- Valider TOUS les inputs avec Zod
- Utiliser des requêtes paramétrées (jamais de concaténation SQL)
- Rate limiting sur tous les endpoints publics
- CORS strict : whitelist explicite des origines

Le champ globs est la clé : la règle n'est chargée que lorsque Claude travaille sur des fichiers qui matchent le pattern. Cela réduit le contexte inutile et améliore la pertinence.

Le système Auto Memory

Claude Code maintient automatiquement une mémoire persistante entre les sessions, stockée dans ~/.claude/projects/{project-hash}/memory/MEMORY.md. Cette mémoire capture :

Vous pouvez écrire directement dans la mémoire en disant "souviens-toi que..." ou en utilisant /memory.

Exemple d'un CLAUDE.md bien structuré

CLAUDE.md (moins de 200 lignes)
# Mon API SaaS

## Stack
- Runtime: Node.js 22, TypeScript 5.7
- Framework: Fastify 5 + @fastify/type-provider-typebox
- DB: PostgreSQL 16 via Drizzle ORM
- Queue: BullMQ + Redis 7
- Tests: Vitest + MSW + Testcontainers
- Deploy: Docker → Fly.io

## Commandes
- `npm run dev` — serveur local (port 3000)
- `npm run test` — tests unitaires
- `npm run test:e2e` — tests E2E (nécessite Docker)
- `npm run db:migrate` — migrations Drizzle
- `npm run db:generate` — générer les migrations
- `npm run lint` — ESLint + Prettier check

## Architecture
@docs/architecture.md

## Conventions
- Pas de classes, que des fonctions et modules
- Chaque route dans son propre fichier: src/routes/{resource}/{method}.ts
- Schémas Typebox co-localisés avec les routes
- Erreurs via throw new AppError(code, message, statusCode)
- Logs structurés JSON via pino

## Patterns obligatoires
- Tout endpoint DOIT avoir un schéma de validation input/output
- Tout accès DB DOIT passer par le repository pattern (src/repos/)
- Les jobs BullMQ DOIVENT être idempotents
- Les tests E2E utilisent des containers PostgreSQL jetables

## Ce qu'il ne faut PAS faire
- NE PAS utiliser `any` — toujours typer explicitement
- NE PAS commiter de .env ou secrets
- NE PAS utiliser de raw SQL (passer par Drizzle)
- NE PAS modifier les migrations existantes (en créer de nouvelles)

La règle des 200 lignes

Un CLAUDE.md efficace fait moins de 200 lignes. Au-delà, le ratio signal/bruit diminue et Claude consomme des tokens de contexte inutilement. Déportez les détails dans des fichiers @imports ou dans .claude/rules/ avec des globs ciblés. Privilégiez les listes à puces aux paragraphes longs. Chaque ligne doit être une instruction actionnable.

MCP : Model Context Protocol

Le Model Context Protocol (MCP) est le système d'extension de Claude Code. Il permet de connecter n'importe quel service externe — base de données, API, outil interne — comme un outil natif que Claude peut appeler directement. C'est ce qui transforme Claude Code d'un simple agent de code en une plateforme d'automatisation universelle.

Les 4 types de transport

Transport Protocole Usage Exemple
stdio stdin/stdout Serveurs locaux (le plus courant) Serveurs npm, scripts Python
http HTTP Streamable Serveurs distants modernes APIs cloud, services hébergés
sse Server-Sent Events Serveurs distants (legacy) Anciens serveurs MCP
json JSON-RPC direct Appels ponctuels Scripts one-shot

Installation d'un serveur MCP

Trois méthodes pour ajouter un serveur MCP :

Méthode 1 : CLI interactive
# Ajouter un serveur depuis le registre
claude mcp add github --scope project

# Ajouter un serveur npm personnalisé
claude mcp add postgres -- npx @mcp/postgres --connection-string "$DATABASE_URL"

# Ajouter un serveur distant (HTTP)
claude mcp add notion --url https://mcp.notion.so/v1 --scope user

# Lister les serveurs configurés
claude mcp list

# Tester un serveur
claude mcp test postgres
Méthode 2 : Fichier .mcp.json (recommandé pour les équipes)
{
  "mcpServers": {
    "github": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_TOKEN": "${GITHUB_TOKEN}"
      }
    },
    "postgres": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@mcp/postgres"],
      "env": {
        "DATABASE_URL": "${DATABASE_URL}"
      }
    },
    "filesystem": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/data"]
    },
    "custom-api": {
      "type": "http",
      "url": "https://mcp.mon-service.com/v1",
      "headers": {
        "Authorization": "Bearer ${API_KEY}"
      }
    }
  }
}

Expansion des variables d'environnement

La syntaxe ${VAR_NAME} dans .mcp.json est automatiquement remplacée par la valeur de la variable d'environnement correspondante. Cela permet de versionner le fichier .mcp.json dans git sans exposer de secrets. Chaque développeur configure ses propres tokens dans son shell ou dans un fichier .env.

Méthode 3 : Scope User (configuration personnelle)
# Les serveurs ajoutés avec --scope user sont dans ~/.claude/settings.json
# Ils sont disponibles dans TOUS vos projets

claude mcp add slack --scope user -- npx @mcp/slack --token "$SLACK_TOKEN"
claude mcp add linear --scope user --url https://mcp.linear.app/sse

Les 3 scopes MCP

User — ~/.claude/settings.json
Disponible partout. Idéal pour Slack, Linear, outils personnels.
Project — .mcp.json
Partagé via git. Idéal pour la DB du projet, APIs métier.
Local — .claude/settings.local.json
Personnel, non versionné. Idéal pour les overrides locaux.

Optimiser avec ENABLE_TOOL_SEARCH

Quand vous avez beaucoup de serveurs MCP (10+), chaque outil consomme des tokens de contexte. La variable ENABLE_TOOL_SEARCH active un mode intelligent où Claude ne charge que les outils pertinents pour la tâche en cours :

.claude/settings.json
{
  "env": {
    "ENABLE_TOOL_SEARCH": "true"
  }
}

Avec cette option, au lieu de charger les 50+ descriptions d'outils dans le contexte, Claude effectue une recherche sémantique et ne charge que les 5-10 outils les plus pertinents. Économie typique : 30-50% des tokens de contexte MCP.

Top 10 des serveurs MCP les plus utiles

Serveur Fonction Installation Usage clé
GitHub Issues, PRs, repos claude mcp add github Créer des PRs, lire les issues, reviewer
PostgreSQL Requêtes SQL npx @mcp/postgres Explorer le schéma, débugger les queries
Filesystem Accès fichiers étendu npx @mcp/filesystem Lire des fichiers hors du projet
Notion Pages, bases, docs URL MCP Notion Lire les specs, mettre à jour la doc
Slack Messages, channels npx @mcp/slack Notifications de fin de tâche
Linear Tickets, projets URL MCP Linear Lire les tickets, mettre à jour le status
Sentry Erreurs, traces npx @mcp/sentry Diagnostiquer les erreurs en production
Puppeteer Navigation web npx @mcp/puppeteer Tests E2E, scraping, captures d'écran
Memory Mémoire persistante npx @mcp/memory Stocker des faits entre sessions
Brave Search Recherche web npx @mcp/brave-search Rechercher de la documentation récente

Exemple concret : setup GitHub + PostgreSQL + Custom API

.mcp.json — Configuration complète d'équipe
{
  "mcpServers": {
    "github": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": { "GITHUB_TOKEN": "${GITHUB_TOKEN}" }
    },
    "db-production": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@mcp/postgres", "--readonly"],
      "env": { "DATABASE_URL": "${PROD_DB_READ_URL}" }
    },
    "db-staging": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@mcp/postgres"],
      "env": { "DATABASE_URL": "${STAGING_DB_URL}" }
    },
    "internal-api": {
      "type": "http",
      "url": "https://mcp-gateway.internal.company.com",
      "headers": {
        "Authorization": "Bearer ${INTERNAL_API_TOKEN}"
      }
    }
  }
}

Sécurité des bases de données

Pour la production, utilisez toujours un accès en lecture seule (--readonly ou un utilisateur DB avec SELECT uniquement). Bloquez les outils d'écriture MCP dans settings.json avec "deny": ["mcp__db-production__execute"]. Réservez l'écriture à la base staging.

Hooks : Automatisation & Garde-fous

Les hooks sont des scripts qui s'exécutent automatiquement à des moments clés du cycle de vie de Claude Code. Ils permettent d'ajouter des garde-fous, d'automatiser des tâches récurrentes, et d'intégrer Claude Code dans vos workflows existants.

Les événements de hook

Événement Déclencheur Cas d'usage
PreToolUse Avant chaque appel d'outil Bloquer des commandes, valider des inputs
PostToolUse Après chaque appel d'outil Auto-formater, lancer des tests, notifier
Notification Quand Claude attend une réponse Alertes Slack, notifications bureau
Stop Fin de la réponse de Claude Rapport de session, cleanup, commit auto
SubagentStop Fin d'exécution d'un subagent Agréger les résultats, post-traitement

Les 4 types de hooks

command
Exécute un script shell. Le plus courant. Reçoit le contexte via stdin JSON.
http
Envoie une requête HTTP. Idéal pour les webhooks (Slack, Discord, API interne).
prompt
Injecte un message système supplémentaire dans le contexte de Claude.
agent
Lance un sous-agent Claude pour traitement complexe (ex: review de code automatique).

Codes de sortie et contrôle

Pour les hooks PreToolUse, le code de sortie détermine si l'opération continue :

Exit Code Effet Message stdout
0 Autorise l'opération Optionnel — affiché comme info
2 Bloque l'opération Affiché comme raison du blocage
Autre Erreur de hook (opération continue) Log d'erreur

Format JSON avancé

Un hook peut retourner du JSON sur stdout pour un contrôle plus fin :

Sortie JSON d'un hook PreToolUse
{
  "decision": "block",
  "reason": "Ce fichier est protégé par la politique de sécurité",
  "suppressOutput": false
}

Exemples concrets

1. Auto-format après chaque édition de fichier

.claude/settings.json
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "prettier --write \"$CLAUDE_FILE_PATH\" 2>/dev/null || true"
          }
        ]
      }
    ]
  }
}

2. Bloquer la modification de fichiers protégés

scripts/guard-protected.sh
#!/bin/bash
# Hook PreToolUse : bloque l'écriture dans les fichiers critiques
INPUT=$(cat)
FILE=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')

PROTECTED_PATTERNS=(
  "*/migrations/*.sql"
  ".env*"
  "docker-compose.prod.yml"
  "*/secrets/*"
)

for pattern in "${PROTECTED_PATTERNS[@]}"; do
  if [[ "$FILE" == $pattern ]]; then
    echo "BLOQUÉ : $FILE est un fichier protégé"
    exit 2
  fi
done

exit 0
.claude/settings.json
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "bash scripts/guard-protected.sh"
          }
        ]
      }
    ]
  }
}

3. Notification Slack à la fin de chaque tâche

.claude/settings.json
{
  "hooks": {
    "Stop": [
      {
        "hooks": [
          {
            "type": "http",
            "url": "https://hooks.slack.com/services/T00/B00/xxxxx",
            "method": "POST",
            "headers": { "Content-Type": "application/json" },
            "body": {
              "text": "Claude Code a terminé une tâche dans ${PROJECT_NAME}"
            }
          }
        ]
      }
    ]
  }
}

4. Lancer les tests après chaque modification de code

.claude/settings.json
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "bash -c '[[ \"$CLAUDE_FILE_PATH\" == *.ts ]] && npx vitest run --reporter=dot 2>&1 | tail -5 || true'"
          }
        ]
      }
    ]
  }
}

5. Injecter du contexte dynamique avant chaque opération

.claude/settings.json
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "prompt",
            "prompt": "RAPPEL : Tu es en environnement de STAGING. Ne jamais exécuter de commandes destructrices. Vérifier 2x avant tout DROP, DELETE, ou rm."
          }
        ]
      }
    ]
  }
}

Matcher : le filtre intelligent

Le champ matcher est une regex appliquée sur le nom de l'outil. "Write|Edit" matche les outils Write et Edit. "Bash" matche toute commande Bash. "mcp__postgres__.*" matche tous les outils du serveur MCP PostgreSQL. Sans matcher, le hook s'applique à tous les outils.

Skills & Commandes Personnalisées

Les skills (compétences) sont des commandes personnalisées que vous pouvez invoquer avec /nom-de-la-skill. Elles encapsulent un workflow complet — instructions, outils autorisés, modèle à utiliser, et contexte — dans un fichier Markdown réutilisable.

Anatomie d'une skill

Chaque skill est un fichier SKILL.md dans un répertoire dédié :

Structure
.claude/
└── skills/
    ├── deploy/
    │   └── SKILL.md
    ├── review-pr/
    │   └── SKILL.md
    └── migrate-component/
        └── SKILL.md

Frontmatter et options

Champ Type Description
name string Nom affiché (défaut : nom du dossier)
description string Description courte pour la recherche
tools string[] Outils autorisés pour cette skill
model string Modèle à utiliser (opus, sonnet, haiku)
context string[] Fichiers de contexte à charger
agent boolean Exécuter comme sous-agent isolé
allowedTools string[] Liste blanche d'outils (plus restrictif que tools)

Contexte dynamique avec backticks

Les skills supportent l'injection de contexte dynamique via des commandes entre backticks :

SKILL.md avec contexte dynamique
---
name: review-pr
description: Review une PR GitHub en profondeur
model: opus
---

# Review PR

Contexte du projet :
`cat package.json | jq '{name, version, dependencies}'`

Derniers commits :
`git log --oneline -10`

Branche actuelle :
`git branch --show-current`

## Instructions
Analyse le diff de la PR $ARGUMENTS et fournis :
1. Un résumé des changements
2. Les problèmes potentiels (bugs, sécurité, perf)
3. Les suggestions d'amélioration
4. Un verdict : APPROVE, REQUEST_CHANGES, ou COMMENT

Substitution d'arguments

Les arguments passés après le nom de la skill sont accessibles via des variables :

Usage
# Dans Claude Code :
/review-pr 42
# → $ARGUMENTS = "42", $0 = "42"

/deploy staging v2.1.0
# → $ARGUMENTS = "staging v2.1.0", $0 = "staging", $1 = "v2.1.0"

Exemple 1 : Skill de déploiement

.claude/skills/deploy/SKILL.md
---
name: deploy
description: Déployer l'application sur un environnement
tools: ["Bash", "Read", "Grep"]
---

# Déploiement sur $0

## Pré-vérifications
1. Vérifier que la branche est `main` : `git branch --show-current`
2. Vérifier qu'il n'y a pas de changements non commités : `git status --porcelain`
3. Vérifier que les tests passent : `npm run test`

## Déploiement
- Si `$0` = "staging" → `fly deploy --config fly.staging.toml`
- Si `$0` = "production" → demander CONFIRMATION explicite puis `fly deploy --config fly.production.toml`

## Post-déploiement
1. Vérifier le health check : `curl -s https://$0.mon-app.com/health`
2. Afficher les logs récents : `fly logs -a mon-app-$0 -n 20`
3. Résumer le statut du déploiement

Exemple 2 : Skill de migration de composant

.claude/skills/migrate-component/SKILL.md
---
name: migrate-component
description: Migrer un composant React class vers un composant fonctionnel
model: sonnet
agent: true
---

# Migration Class → Functional Component

Fichier cible : $ARGUMENTS

## Étapes
1. Lire le composant class actuel
2. Identifier : state, lifecycle methods, refs, context
3. Convertir en composant fonctionnel avec hooks :
   - `this.state` → `useState`
   - `componentDidMount` → `useEffect(..., [])`
   - `componentDidUpdate` → `useEffect`
   - `componentWillUnmount` → return dans `useEffect`
   - `this.refs` → `useRef`
   - `static contextType` → `useContext`
4. Préserver TOUS les types TypeScript
5. Lancer les tests existants pour vérifier la non-régression
6. Formater avec Prettier

Exemple 3 : Skill de génération de documentation API

.claude/skills/doc-api/SKILL.md
---
name: doc-api
description: Générer la documentation OpenAPI d'une route
model: haiku
context: ["src/routes/**", "src/schemas/**"]
---

# Documentation API

Route cible : $ARGUMENTS

## Instructions
1. Lire le fichier de route et ses schémas associés
2. Générer un bloc OpenAPI 3.1 YAML avec :
   - Summary et description
   - Parameters (path, query, header)
   - Request body avec schéma JSON
   - Responses (200, 400, 401, 404, 500)
   - Exemples concrets pour chaque réponse
3. Écrire le résultat dans `docs/api/{route-name}.yaml`

Skills vs. CLAUDE.md

Le CLAUDE.md contient les instructions permanentes du projet (conventions, architecture, commandes). Les skills sont des workflows ponctuels que vous invoquez explicitement. Pensez au CLAUDE.md comme la culture d'entreprise, et aux skills comme des procédures opérationnelles spécifiques.

Scripting & Mode Headless

Le mode headless (claude -p) est ce qui fait de Claude Code un outil d'automatisation, pas seulement un outil interactif. Il permet d'intégrer Claude dans des scripts, des pipelines CI/CD, des cron jobs, et des bots.

Usage de base

Terminal
# Exécution one-shot (le plus simple)
claude -p "Explique ce que fait ce projet"

# Avec un prompt depuis un fichier
claude -p "$(cat prompts/review.md)"

# Pipe depuis stdin
echo "Ajoute des tests pour src/auth.ts" | claude -p

# Avec un format de sortie spécifique
claude -p "Liste les TODO dans le code" --output-format json

# Mode streaming (pour les longues tâches)
claude -p "Refactor le module auth" --output-format stream-json

Flags essentiels

Flag Description Exemple
-p, --print Mode headless (non-interactif) claude -p "prompt"
--output-format Format de sortie : text, json, stream-json --output-format json
--json-schema Forcer une sortie JSON structurée --json-schema '{"type":"object"}'
--allowedTools Restreindre les outils disponibles --allowedTools Read,Grep,Glob
--model Choisir le modèle --model sonnet
--max-turns Limiter les itérations --max-turns 5
--continue Reprendre la dernière session claude --continue -p "suite"
--resume Reprendre une session spécifique claude --resume abc123 -p "suite"
--permission-mode Mode de permissions --permission-mode accept-all
--verbose Logs détaillés --verbose

Sortie JSON structurée

Pour intégrer Claude dans un pipeline, utilisez --json-schema pour forcer une structure de sortie précise :

Script : analyse de code automatisée
#!/bin/bash
SCHEMA='{
  "type": "object",
  "properties": {
    "score": { "type": "number", "minimum": 0, "maximum": 100 },
    "issues": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "severity": { "type": "string", "enum": ["critical","high","medium","low"] },
          "file": { "type": "string" },
          "line": { "type": "number" },
          "message": { "type": "string" }
        },
        "required": ["severity", "file", "message"]
      }
    },
    "summary": { "type": "string" }
  },
  "required": ["score", "issues", "summary"]
}'

RESULT=$(claude -p "Analyse la qualité du code dans src/" \
  --output-format json \
  --json-schema "$SCHEMA" \
  --allowedTools Read,Grep,Glob \
  --model sonnet)

SCORE=$(echo "$RESULT" | jq -r '.result.score')
ISSUES=$(echo "$RESULT" | jq -r '.result.issues | length')

echo "Score: $SCORE/100 — $ISSUES issues trouvées"

# Échouer le CI si le score est trop bas
if [ "$SCORE" -lt 70 ]; then
  echo "::error::Code quality score below threshold: $SCORE/100"
  exit 1
fi

Streaming JSON pour les tâches longues

Terminal
# Chaque ligne est un objet JSON (NDJSON)
claude -p "Migre tous les composants class" --output-format stream-json | while read -r line; do
  TYPE=$(echo "$line" | jq -r '.type')
  case "$TYPE" in
    "assistant")
      echo "[Claude] $(echo "$line" | jq -r '.message.content[0].text')"
      ;;
    "tool_use")
      echo "[Tool] $(echo "$line" | jq -r '.name'): $(echo "$line" | jq -r '.input | tostring')"
      ;;
    "result")
      echo "[Done] $(echo "$line" | jq -r '.result')"
      ;;
  esac
done

Gestion des sessions

Sessions multi-étapes
# Étape 1 : analyse (sauvegarder le session ID)
SESSION_ID=$(claude -p "Analyse l'architecture du projet et identifie les problèmes" \
  --output-format json | jq -r '.session_id')

echo "Session: $SESSION_ID"

# Étape 2 : correction (reprendre la même session)
claude --resume "$SESSION_ID" -p "Corrige les 3 problèmes les plus critiques que tu as identifiés"

# Étape 3 : vérification
claude --resume "$SESSION_ID" -p "Lance les tests et confirme que tout passe"

Intégration CI/CD : GitHub Actions

.github/workflows/claude-review.yml
name: Claude Code Review
on:
  pull_request:
    types: [opened, synchronize]

jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - uses: actions/setup-node@v4
        with:
          node-version: '22'

      - name: Install Claude Code
        run: npm install -g @anthropic-ai/claude-code

      - name: Review PR
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          DIFF=$(git diff origin/main...HEAD)
          REVIEW=$(claude -p "Review ce diff et identifie les problèmes potentiels :

          $DIFF

          Format ta review comme un commentaire de PR GitHub." \
            --model sonnet \
            --max-turns 3 \
            --allowedTools Read,Grep,Glob \
            --permission-mode accept-all)

          # Poster le commentaire sur la PR
          gh pr comment ${{ github.event.pull_request.number }} --body "$REVIEW"
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Pipeline batch : traitement de fichiers

batch-process.sh
#!/bin/bash
# Traiter tous les fichiers Markdown en parallèle
find docs/ -name "*.md" | while read -r file; do
  echo "Traitement: $file"
  claude -p "Corrige la grammaire et améliore la clarté de ce fichier : $file. 
             Ne change pas le sens, seulement la forme." \
    --model haiku \
    --max-turns 2 \
    --allowedTools Read,Edit \
    --permission-mode accept-all &
done

wait
echo "Tous les fichiers traités"

--permission-mode accept-all

Le flag --permission-mode accept-all est nécessaire en CI/CD car il n'y a personne pour approuver les actions. Mais il signifie que Claude peut exécuter n'importe quelle commande. Combinez-le toujours avec --allowedTools pour restreindre les outils disponibles, et utilisez les deny dans settings.json comme filet de sécurité.

Subagents & Exécution Parallèle

Les subagents sont des instances Claude indépendantes lancées par l'agent principal pour exécuter des tâches en parallèle. Chaque subagent a son propre contexte, ses propres outils, et s'exécute de manière isolée — comme un développeur junior à qui vous déléguez une sous-tâche.

Types de subagents natifs

Explore
Recherche dans le codebase. Outils : Read, Grep, Glob. Ne modifie rien. Idéal pour l'analyse.
Plan
Planification architecturale. Explore + réflexion. Produit un plan d'action structuré.
General
Agent complet avec tous les outils. Peut lire, écrire, exécuter. Pour les tâches autonomes.

Configuration d'un subagent personnalisé

Paramètres de subagent
{
  "model": "sonnet",           // Modèle (opus|sonnet|haiku)
  "tools": ["Read", "Grep", "Glob", "Bash"],  // Outils autorisés
  "permissionMode": "accept-all",  // Pas d'interaction humaine
  "maxTurns": 10,              // Limite d'itérations
  "context": "...",            // Instructions spécifiques
  "worktree": true             // Isolation Git (optionnel)
}

Pattern : recherche parallèle

L'un des usages les plus puissants est la recherche simultanée dans différentes parties du codebase :

Prompt pour déclencher 3 subagents
# Ce prompt dans Claude Code va automatiquement créer 3 subagents :

"J'ai besoin de comprendre comment fonctionne l'authentification dans ce projet.
Lance 3 recherches en parallèle :
1. Agent 1 : Cherche tous les fichiers liés à l'auth (middleware, routes, schemas)
2. Agent 2 : Cherche les tests d'authentification et les cas couverts
3. Agent 3 : Cherche la configuration (env vars, secrets, providers OAuth)

Synthétise les résultats des 3 agents dans un rapport structuré."

Claude va automatiquement dispatcher ces 3 tâches à des subagents Explore qui s'exécutent simultanément, puis agréger les résultats.

Pattern : modifications isolées avec worktrees

Subagents avec isolation Git
# Chaque subagent travaille dans son propre worktree Git
# Pas de conflit entre les modifications parallèles

"Refactore ces 3 modules en parallèle :
1. Agent 1 : Refactore src/auth/ (worktree isolé)
2. Agent 2 : Refactore src/billing/ (worktree isolé)  
3. Agent 3 : Refactore src/notifications/ (worktree isolé)

Chaque agent doit :
- Créer un worktree Git isolé
- Faire ses modifications
- Lancer les tests du module
- Commiter si les tests passent

Je ferai le merge manuellement après review."

Limites et bonnes pratiques

Quand utiliser des subagents

Utilisez des subagents quand les tâches sont indépendantes (recherche, analyse de modules séparés, génération de fichiers distincts). N'utilisez PAS de subagents pour des tâches séquentielles ou interdépendantes — le coût de coordination dépasse le gain de parallélisme. Un bon indicateur : si le résultat d'un agent influence le travail d'un autre, faites-le séquentiellement.

Gestion du Contexte & Mémoire

Le contexte est la ressource la plus précieuse de Claude Code. Chaque token de contexte consommé par les instructions, les fichiers lus, et les résultats d'outils réduit l'espace disponible pour le raisonnement. Gérer efficacement le contexte est la compétence #1 d'un utilisateur avancé.

Anatomie de la fenêtre de contexte

Commandes de gestion du contexte

Commande Action Quand l'utiliser
/context Affiche l'usage actuel du contexte Pour monitorer avant une tâche complexe
/compact Compresse l'historique de conversation Quand le contexte dépasse 60%
/compact [instructions] Compresse avec des instructions de focus Pour garder seulement le pertinent
/clear Vide toute la conversation Entre deux tâches indépendantes
/rewind Revient au checkpoint précédent Annuler une direction qui ne marche pas
/resume Reprend une session passée Continuer le travail d'hier
/memory Voir/éditer la mémoire persistante Stocker une décision importante
/cost Affiche le coût de la session Suivre le budget en temps réel

Auto-compaction à 95%

Quand le contexte atteint 95% de sa capacité, Claude déclenche automatiquement une compaction. Le problème : cette compaction automatique peut perdre du contexte important car Claude choisit seul ce qu'il résume. La solution : compacter proactivement avec des instructions :

Compaction ciblée
# Mauvais : compaction automatique (perte de contrôle)
# Le contexte atteint 95% → Claude résume tout

# Bon : compaction proactive avec focus
/compact Garde uniquement : l'architecture du module auth, 
         les 3 bugs trouvés, et le plan de migration.
         Oublie les explorations de fichiers et les tentatives échouées.

Session checkpointing avec /rewind

Claude crée automatiquement des checkpoints à chaque tour de conversation. Vous pouvez revenir en arrière si une direction ne fonctionne pas :

Workflow avec rewind
# Tour 1 : "Refactore le module auth en utilisant JWT"
# Tour 2 : Claude modifie 5 fichiers...
# Tour 3 : "En fait, utilise plutôt des sessions avec Redis"

# Au lieu de perdre le contexte et recommencer :
/rewind
# → Revient au Tour 1, avant les modifications JWT

# Maintenant :
"Refactore le module auth en utilisant des sessions Redis"
# → Claude repart dans la bonne direction

Reprendre une session précédente

Terminal
# Lister les sessions récentes
claude sessions list

# Reprendre la dernière session
claude --continue

# Reprendre une session spécifique par ID
claude --resume abc123def456

# Reprendre en mode headless (scripting)
claude --continue -p "Continue le refactoring du module auth"

Le système de mémoire

La mémoire persistante est stockée dans ~/.claude/projects/{hash}/memory/MEMORY.md. Elle survit entre les sessions et est automatiquement chargée au démarrage :

Exemples d'écriture en mémoire
# Dans Claude Code (interactif) :

"Souviens-toi que ce projet utilise Drizzle ORM, pas Prisma.
 Ne propose jamais de migration Prisma."

"Retiens que le déploiement sur staging nécessite un VPN.
 La commande est : vpn-connect staging && fly deploy"

"Note : le fichier config/secrets.ts ne doit JAMAIS être modifié 
 par Claude Code. Il contient les clés de chiffrement."

7 astuces pour garder un contexte lean

  1. /clear entre les tâches — ne traînez pas le contexte d'une tâche dans la suivante
  2. /compact proactif — compactez dès 50-60% avec des instructions précises
  3. CLAUDE.md court — moins de 200 lignes, imports pour le reste
  4. Règles avec globs — les rules ne chargent que quand nécessaire
  5. ENABLE_TOOL_SEARCH — réduit les descriptions d'outils MCP inutiles
  6. Subagents pour l'exploration — l'exploration lourde dans un subagent ne pollue pas le contexte principal
  7. Fichiers ciblés — demandez "lis la fonction X dans le fichier Y" plutôt que "lis le fichier Y"

Optimisation Budget & Coûts

Claude Code consomme des tokens à chaque interaction. Sans optimisation, une journée de travail intensif peut coûter 50-200$ en tokens API. Avec les bonnes pratiques, vous pouvez réduire ce coût de 60-80% sans sacrifier la qualité.

Tarification par modèle

Modèle Input (1M tokens) Output (1M tokens) Contexte Usage recommandé
Claude Opus 4 15$ 75$ 200K Architecture, décisions complexes, code critique
Claude Sonnet 4 3$ 15$ 200K Développement quotidien, refactoring, tests
Claude Haiku 3.5 0.80$ 4$ 200K Tâches simples, formatage, traductions, doc

Où vont les tokens ?

10 stratégies concrètes pour réduire les coûts

1
/clear entre les tâches
Chaque nouveau sujet démarre avec un contexte vierge. Économie : 40-60% sur les tokens input.
2
Choisir le bon modèle
Haiku pour la doc et le formatage, Sonnet pour le dev quotidien, Opus uniquement pour l'architecture critique.
3
Réduire l'overhead MCP
Chaque serveur MCP ajoute ~500-2000 tokens de descriptions. Désactivez ceux que vous n'utilisez pas.
4
ENABLE_TOOL_SEARCH
Charge uniquement les outils pertinents au lieu de tous les décrire. Économie : 30-50% des tokens MCP.
5
Déléguer à Haiku
Utilisez des subagents Haiku pour les tâches simples : formatage, renommage, génération de boilerplate.
6
Hooks de prétraitement
Un hook qui lint/formate avant l'exécution évite que Claude ne corrige des erreurs triviales.
7
Thinking tokens
Le mode "extended thinking" consomme des tokens supplémentaires. Désactivez-le pour les tâches simples.
8
CLAUDE.md < 200 lignes
Un CLAUDE.md trop long est chargé à chaque requête. 200 lignes = ~1500 tokens = ~0.005$ par requête.
9
/compact proactif
Compactez à 50-60% au lieu d'attendre l'auto-compaction à 95%. Meilleur résumé car vous guidez le focus.
10
Batch les opérations
"Renomme les 10 fichiers suivants" est plus économique que 10 requêtes séparées.

Coût estimé par type de tâche

Tâche Modèle Tokens (~) Coût (~) Durée (~)
Question simple sur le code Sonnet 5K in + 1K out 0.03$ 5s
Écrire un test unitaire Sonnet 15K in + 3K out 0.09$ 15s
Refactorer un module (5 fichiers) Sonnet 50K in + 10K out 0.30$ 2min
Review de PR (diff 500 lignes) Opus 30K in + 5K out 0.82$ 30s
Migration architecturale Opus 150K in + 30K out 4.50$ 10min
Formatage/traduction (batch) Haiku 10K in + 5K out 0.03$ 10s
Génération d'un article complet Opus 100K in + 50K out 5.25$ 15min
Monitoring en temps réel
# Dans Claude Code (interactif) :
/cost       # Coût de la session actuelle
/stats      # Statistiques détaillées (tokens, outils, durée)

# En mode headless :
claude -p "tâche" --output-format json | jq '{
  input_tokens: .usage.input_tokens,
  output_tokens: .usage.output_tokens,
  cost_estimate: (.usage.input_tokens * 0.000003 + .usage.output_tokens * 0.000015)
}'

Règle du 80/20 pour le budget

En pratique, 80% de vos tâches peuvent être faites avec Sonnet ou Haiku. Réservez Opus pour les 20% critiques : décisions d'architecture, debug de problèmes complexes, review de code sensible. Un développeur discipliné dépense en moyenne 5-15$/jour au lieu de 50-200$.

Permissions & Sécurité

La sécurité est le point le plus critique de l'utilisation d'un agent autonome. Claude Code peut exécuter des commandes shell, modifier des fichiers, et interagir avec des services externes. Un système de permissions robuste est non négociable.

Les 3 modes de permission

default (ask)
Claude demande la permission pour chaque action non autorisée. Mode recommandé en interactif.
accept-all
Toutes les actions sont autorisées sans demande. Requis en CI/CD. Combiner avec allowedTools.
deny-all
Seuls les outils explicitement autorisés dans allow sont disponibles. Mode le plus restrictif.

Syntaxe des règles allow/deny

Exemples de règles granulaires
{
  "permissions": {
    "allow": [
      // Outils de base (lecture seule)
      "Read",
      "Glob",
      "Grep",
      
      // Écriture restreinte à certains dossiers
      "Write(src/**)",
      "Write(tests/**)",
      "Edit(src/**)",
      "Edit(tests/**)",
      
      // Commandes shell spécifiques
      "Bash(npm run *)",
      "Bash(npx vitest*)",
      "Bash(git status)",
      "Bash(git diff*)",
      "Bash(git log*)",
      "Bash(git add src/* tests/*)",
      "Bash(git commit -m *)",
      
      // MCP : lecture seule sur la DB prod
      "mcp__db-prod__query",
      
      // MCP : accès complet sur staging
      "mcp__db-staging__*",
      
      // GitHub : tout sauf delete
      "mcp__github__create_pull_request",
      "mcp__github__list_issues",
      "mcp__github__add_comment"
    ],
    "deny": [
      // Commandes destructrices
      "Bash(rm -rf *)",
      "Bash(git push --force*)",
      "Bash(git reset --hard*)",
      "Bash(git checkout -- *)",
      "Bash(DROP *)",
      "Bash(DELETE FROM *)",
      "Bash(curl * | *sh)",
      "Bash(wget * && *sh)",
      
      // Fichiers sensibles
      "Write(.env*)",
      "Write(**/secrets/**)",
      "Write(**/credentials/**)",
      "Read(.env.production)",
      
      // MCP : écriture sur prod
      "mcp__db-prod__execute",
      "mcp__db-prod__insert",
      "mcp__db-prod__update",
      "mcp__db-prod__delete"
    ]
  }
}

Sandbox : isolation système

Claude Code inclut un mécanisme de sandbox qui restreint l'accès au système de fichiers et au réseau :

Configuration sandbox
{
  "sandbox": {
    "filesystem": {
      "allowedPaths": [
        "/Users/dev/projects/mon-app",
        "/tmp/claude-*"
      ],
      "deniedPaths": [
        "/etc",
        "/var",
        "~/.ssh",
        "~/.aws"
      ]
    },
    "network": {
      "allowedHosts": [
        "github.com",
        "api.anthropic.com",
        "registry.npmjs.org",
        "*.mon-domaine.com"
      ],
      "deniedHosts": [
        "*.internal.corp.com"
      ]
    }
  }
}

Managed policies (Entreprise)

Pour les organisations, le scope managed permet d'imposer des politiques irrévocables :

Politique d'entreprise
// Politique poussée par l'admin — impossible à contourner par les devs
{
  "managedPolicy": {
    "permissions": {
      "deny": [
        "Bash(rm -rf /)",
        "Bash(curl * | bash)",
        "Write(.env.production)",
        "mcp__*__execute(DROP *)",
        "mcp__*__execute(TRUNCATE *)"
      ]
    },
    "requiredHooks": {
      "PreToolUse": [
        {
          "matcher": "Bash",
          "hooks": [{
            "type": "command",
            "command": "/opt/security/audit-command.sh"
          }]
        }
      ]
    },
    "maxCostPerSession": 50.00,
    "allowedModels": ["sonnet", "haiku"]
  }
}

Checklist de sécurité pour les équipes

  • Deny explicite sur toutes les commandes destructrices dans le scope Project
  • Accès DB production en lecture seule uniquement
  • Secrets JAMAIS dans le code — utiliser les variables d'environnement
  • Hook d'audit sur toutes les commandes Bash en CI/CD
  • Review du .mcp.json et settings.json dans les PRs
  • Rotation régulière des tokens MCP et API keys

Intégrations IDE

Bien que Claude Code soit un outil terminal-first, il s'intègre parfaitement avec les IDEs modernes. Vous pouvez l'utiliser en parallèle de votre éditeur, ou directement à l'intérieur.

VS Code — Extension officielle

L'extension Claude Code for VS Code transforme votre éditeur en environnement agent complet :

Terminal intégré
Claude Code tourne dans le terminal VS Code avec accès au workspace. Les fichiers ouverts sont automatiquement ajoutés au contexte.
Diff viewer
Quand Claude modifie un fichier, le diff s'affiche dans l'éditeur VS Code pour review avant acceptation.
Status bar
Indicateur d'état (idle, thinking, editing) et raccourci clavier pour ouvrir Claude Code (Cmd+Shift+P).
Sélection contextuelle
Sélectionnez du code → clic droit → "Ask Claude" pour poser une question sur la sélection.
Installation VS Code
# Via la ligne de commande VS Code
code --install-extension anthropic.claude-code

# Ou depuis le marketplace VS Code :
# Chercher "Claude Code" dans les extensions

# Configuration dans settings.json (VS Code) :
{
  "claudeCode.terminalProfile": "default",
  "claudeCode.autoStart": false,
  "claudeCode.showDiffOnEdit": true
}

JetBrains — Plugin officiel

Le plugin JetBrains (IntelliJ, WebStorm, PyCharm, GoLand) offre une intégration similaire :

Installation JetBrains
# Depuis l'IDE :
# Settings → Plugins → Marketplace → "Claude Code"

# Ou via la CLI JetBrains :
# jetbrains-cli install-plugin claude-code

# Raccourci : Alt+C pour ouvrir le panneau Claude Code
# Le plugin détecte automatiquement le fichier ouvert comme contexte

Terminal pur — Configuration avancée

Pour les adeptes du terminal, quelques configurations pour améliorer l'expérience :

~/.zshrc ou ~/.bashrc
# Alias utiles
alias cc="claude"
alias ccp="claude -p"
alias ccr="claude --continue"
alias ccs="claude --resume"

# Fonction pour lancer Claude dans un projet spécifique
ccproject() {
  cd "$1" && claude
}

# Auto-complétion (zsh)
eval "$(claude completion zsh)"

# Variables d'environnement
export ANTHROPIC_API_KEY="sk-ant-..."
export CLAUDE_CODE_DEFAULT_MODEL="sonnet"
export CLAUDE_CODE_MAX_TURNS="50"

Développement distant (SSH/Container)

Claude Code fonctionne dans les environnements distants :

Cas d'usage distants
# SSH vers un serveur de dev
ssh dev-server "cd /app && claude -p 'Lance les tests et corrige les échecs'"

# Dans un container Docker
docker exec -it my-app claude -p "Analyse les logs et identifie le problème"

# GitHub Codespaces
# Claude Code est pré-installé dans les devcontainers Anthropic

# VS Code Remote (SSH/WSL/Container)
# L'extension Claude Code fonctionne en mode Remote automatiquement

Terminal vs. IDE : quelle approche choisir ?

Terminal pur : meilleur pour les tâches agentic lourdes (migration, refactoring, CI/CD). Claude a le contrôle total. IDE intégré : meilleur pour le développement quotidien où vous alternez entre coder vous-même et demander à Claude. Les deux approches sont complémentaires — utilisez le terminal pour les grosses tâches et l'IDE pour les micro-interactions.

Git Worktrees & Sessions Parallèles

Les worktrees Git sont la solution de Claude Code pour l'isolation. Chaque worktree est un répertoire de travail séparé qui partage le même dépôt Git mais opère sur une branche différente. C'est essentiel pour le travail parallèle et les subagents qui modifient des fichiers.

Pourquoi les worktrees sont importants

Isolation
Chaque worktree a son propre espace de travail. Les modifications d'un subagent ne perturbent pas votre branche principale.
Parallélisme
Plusieurs agents peuvent modifier des fichiers simultanément sans conflits Git.
Réversibilité
Si une tentative échoue, vous supprimez le worktree sans impact sur votre branche de travail.

Créer un worktree

Terminal
# Dans Claude Code interactif :
# Dites simplement "Travaille dans un worktree"
# Claude crée automatiquement .claude/worktrees/{nom}/

# Via le flag CLI :
claude --worktree

# Avec un nom personnalisé :
claude --worktree --worktree-name "refactor-auth"

# Le worktree est créé dans :
# .claude/worktrees/refactor-auth/
# Branche : claude/refactor-auth-{hash}
# Base : HEAD de la branche courante

Workflow avec subagents et worktrees

Exemple : 3 refactorings parallèles
# Prompt dans Claude Code :
"Lance 3 subagents dans des worktrees séparés :

Agent 1 (worktree: refactor-auth) :
- Migre src/auth/ de Express middleware vers Fastify hooks
- Lance les tests auth

Agent 2 (worktree: refactor-db) :
- Migre src/db/ de Knex vers Drizzle ORM  
- Régénère les types

Agent 3 (worktree: refactor-api) :
- Migre les routes src/routes/ vers le nouveau format Fastify
- Met à jour les schémas de validation

Quand les 3 ont terminé, montre-moi un résumé des changements."

# Résultat :
# .claude/worktrees/refactor-auth/   → branche claude/refactor-auth-abc
# .claude/worktrees/refactor-db/     → branche claude/refactor-db-def
# .claude/worktrees/refactor-api/    → branche claude/refactor-api-ghi

# Merge manuel après review :
git merge claude/refactor-auth-abc
git merge claude/refactor-db-def
git merge claude/refactor-api-ghi

Hooks de worktree

Vous pouvez configurer des hooks WorktreeCreate et WorktreeRemove pour automatiser des actions :

.claude/settings.json
{
  "hooks": {
    "WorktreeCreate": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "npm install && npm run build"
          }
        ]
      }
    ],
    "WorktreeRemove": [
      {
        "hooks": [
          {
            "type": "command",
            "command": "echo 'Worktree supprimé : $WORKTREE_PATH'"
          }
        ]
      }
    ]
  }
}

Nettoyage des worktrees

Terminal
# À la fin de la session Claude Code, un prompt demande :
# "Voulez-vous garder ou supprimer le worktree ?"

# Nettoyage manuel :
git worktree list                    # Voir tous les worktrees
git worktree remove .claude/worktrees/refactor-auth  # Supprimer
git worktree prune                   # Nettoyer les entrées orphelines

# Supprimer tous les worktrees Claude :
rm -rf .claude/worktrees/
git worktree prune

Attention aux worktrees et au stockage

Chaque worktree crée une copie de travail complète du projet (sans le .git). Pour un projet de 500 Mo, 3 worktrees = 1.5 Go supplémentaires. Nettoyez les worktrees après usage. Claude ne les supprime pas automatiquement si vous quittez la session brutalement (Ctrl+C).

Patterns Avancés & Cas d'Usage

Cette section présente 6 patterns architecturaux pour tirer le maximum de Claude Code. Chaque pattern est un workflow complet avec des exemples de code prêts à l'emploi.

Pattern 1 : Pipeline multi-modèle (Haiku → Sonnet → Opus)

Utilisez le modèle le moins cher possible pour chaque étape, en escaladant vers Opus uniquement quand nécessaire :

pipeline-multi-model.sh
#!/bin/bash
# Étape 1 : Haiku collecte les données (pas cher)
FILES=$(claude -p "Liste tous les fichiers TypeScript qui importent 'express'" \
  --model haiku \
  --allowedTools Grep,Glob \
  --output-format json \
  --permission-mode accept-all | jq -r '.result')

echo "Fichiers trouvés : $FILES"

# Étape 2 : Sonnet analyse et planifie (rapport qualité/prix)
PLAN=$(claude -p "Voici les fichiers Express à migrer vers Fastify :
$FILES

Crée un plan de migration détaillé avec l'ordre des fichiers, 
les dépendances entre eux, et les risques." \
  --model sonnet \
  --allowedTools Read,Grep \
  --output-format json \
  --permission-mode accept-all | jq -r '.result')

echo "Plan de migration :"
echo "$PLAN"

# Étape 3 : Opus exécute la migration (complexe, besoin du meilleur)
claude -p "Exécute ce plan de migration Express → Fastify :

$PLAN

Migre chaque fichier, adapte les tests, et vérifie que tout compile." \
  --model opus \
  --max-turns 30 \
  --permission-mode accept-all

Pattern 2 : Code review automatisée en CI/CD

.github/workflows/claude-review.yml
name: Claude Code Review
on:
  pull_request:
    types: [opened, synchronize]

permissions:
  pull-requests: write
  contents: read

jobs:
  review:
    runs-on: ubuntu-latest
    timeout-minutes: 10
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - uses: actions/setup-node@v4
        with:
          node-version: '22'

      - run: npm install -g @anthropic-ai/claude-code

      - name: Generate Review
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          # Obtenir le diff
          DIFF=$(git diff origin/${{ github.base_ref }}...HEAD)
          
          # Obtenir la description de la PR
          PR_BODY=$(gh pr view ${{ github.event.pull_request.number }} --json body -q '.body')
          
          # Lancer la review
          REVIEW=$(claude -p "Tu es un senior code reviewer. Review cette PR.

          ## Description de la PR
          $PR_BODY

          ## Diff
          \`\`\`diff
          $DIFF
          \`\`\`

          Fournis :
          1. Résumé (2-3 phrases)
          2. Points positifs
          3. Problèmes (classés par sévérité)
          4. Suggestions d'amélioration
          5. Verdict : APPROVE / REQUEST_CHANGES / COMMENT
          
          Format en Markdown." \
            --model sonnet \
            --max-turns 3 \
            --allowedTools Read,Grep,Glob \
            --permission-mode accept-all)
          
          # Poster le commentaire
          gh pr comment ${{ github.event.pull_request.number }} \
            --body "## Claude Code Review

          $REVIEW
          
          ---
          *Review automatique par Claude Code (Sonnet)*"
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Pattern 3 : Automatisation planifiée avec bot Discord

Architecture d'automatisation
# Architecture :
# Discord Bot → Schedule → tmux → claude -p → git push → GitHub Pages
#
# Le bot Discord maintient un scheduler qui exécute :
# - Briefing quotidien à 7h00
# - Scanner de marché à 23h00 (Lun-Ven)
# - Rétrospective hebdomadaire le vendredi 23h00
# - Rapport weekly le dimanche 18h00

# Commande Discord :
# every day at 07:00 articles analyse daily

# Ce que le bot exécute :
cd /path/to/articles
claude -p "Génère le briefing quotidien du jour" \
  --permission-mode accept-all \
  --max-turns 50

# Claude Code va :
# 1. Lire le CLAUDE.md pour comprendre le format
# 2. Appeler les MCP servers pour les données marché
# 3. Faire des WebSearch pour les actualités
# 4. Générer le HTML complet
# 5. Indexer l'article (node tools/add_card.js)
# 6. Commiter et pusher sur GitHub
# 7. GitHub Pages déploie automatiquement

Pattern 4 : Workflow structuré Plan → Code → Test → Review

structured-workflow.sh
#!/bin/bash
TASK="$1"  # ex: "Ajouter l'authentification OAuth2 Google"

echo "=== PHASE 1 : PLANIFICATION (Opus) ==="
PLAN=$(claude -p "PHASE PLAN UNIQUEMENT. Ne code rien.

Tâche : $TASK

Produis un plan technique détaillé :
1. Fichiers à créer/modifier
2. Dépendances à installer
3. Schéma de la base de données
4. Endpoints API
5. Tests à écrire
6. Risques et edge cases" \
  --model opus \
  --max-turns 5 \
  --allowedTools Read,Grep,Glob \
  --output-format json \
  --permission-mode accept-all | jq -r '.result')

echo "$PLAN"
echo ""
echo "=== PHASE 2 : IMPLÉMENTATION (Sonnet) ==="
claude -p "Implémente ce plan EXACTEMENT comme décrit. Ne dévie pas.

$PLAN

Crée tous les fichiers, installe les dépendances, et vérifie que ça compile." \
  --model sonnet \
  --max-turns 20 \
  --permission-mode accept-all

echo ""
echo "=== PHASE 3 : TESTS (Sonnet) ==="
claude --continue -p "Écris les tests unitaires et d'intégration pour tout ce que tu viens d'implémenter.
Lance-les et corrige les échecs." \
  --model sonnet \
  --max-turns 15

echo ""
echo "=== PHASE 4 : REVIEW (Opus) ==="
claude --continue -p "Review critique de tout le code que tu as écrit :
- Bugs potentiels
- Failles de sécurité
- Problèmes de performance
- Manques dans les tests
- Conformité avec le plan initial

Corrige les problèmes trouvés." \
  --model opus \
  --max-turns 10

Pattern 5 : Knowledge base avec MCP + CLAUDE.md + Skills

Architecture de connaissance
# Structure d'un projet avec knowledge base complète :
mon-projet/
├── CLAUDE.md                    # Conventions + architecture
├── .claude/
│   ├── settings.json            # Permissions + hooks
│   ├── rules/
│   │   ├── api-design.md        # Conventions API (globs: src/routes/**)
│   │   ├── db-patterns.md       # Patterns DB (globs: src/repos/**)
│   │   ├── testing.md           # Conventions test (globs: **/*.test.*)
│   │   └── security.md          # Règles sécu (globs: src/auth/**)
│   └── skills/
│       ├── deploy/SKILL.md      # /deploy staging|production
│       ├── review-pr/SKILL.md   # /review-pr {number}
│       ├── new-route/SKILL.md   # /new-route {resource}
│       └── debug/SKILL.md       # /debug {error-message}
├── .mcp.json                    # GitHub, PostgreSQL, Sentry
├── docs/
│   ├── architecture.md          # @import dans CLAUDE.md
│   ├── api-spec.md              # Spec OpenAPI
│   └── runbook.md               # Procédures opérationnelles
└── src/
    └── CLAUDE.md                # Conventions src/ spécifiques

# Résultat : Claude comprend TOUT le projet
# - Architecture globale (CLAUDE.md + imports)
# - Conventions par domaine (rules/ avec globs)
# - Procédures opérationnelles (skills/)
# - Accès aux données (MCP servers)
# - Historique (Auto Memory)
# - Sécurité (permissions + hooks)

Pattern 6 : Déploiement sécurisé avec hooks

.claude/settings.json — Workflow de déploiement
{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "bash scripts/pre-deploy-check.sh"
          }
        ]
      }
    ],
    "PostToolUse": [
      {
        "matcher": "Bash",
        "hooks": [
          {
            "type": "command",
            "command": "bash scripts/post-deploy-notify.sh"
          }
        ]
      }
    ]
  }
}
scripts/pre-deploy-check.sh
#!/bin/bash
INPUT=$(cat)
COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command // empty')

# Bloquer les déploiements si les tests ne passent pas
if echo "$COMMAND" | grep -q "fly deploy\|docker push\|kubectl apply"; then
  echo "Déploiement détecté. Vérification des prérequis..."
  
  # Vérifier la branche
  BRANCH=$(git branch --show-current)
  if [ "$BRANCH" != "main" ]; then
    echo "BLOQUÉ : Déploiement uniquement depuis main (actuellement sur $BRANCH)"
    exit 2
  fi
  
  # Vérifier les tests
  if ! npm run test --silent 2>/dev/null; then
    echo "BLOQUÉ : Les tests ne passent pas"
    exit 2
  fi
  
  # Vérifier le linting
  if ! npm run lint --silent 2>/dev/null; then
    echo "BLOQUÉ : Erreurs de lint détectées"
    exit 2
  fi
  
  echo "Tous les checks passent. Déploiement autorisé."
fi

exit 0

Choisir le bon pattern

Pattern 1 (multi-modèle) : quand le coût est une contrainte majeure. Pattern 2 (CI review) : pour toutes les équipes qui font des PRs. Pattern 3 (automatisation) : pour les tâches récurrentes (rapports, monitoring). Pattern 4 (Plan→Code→Test→Review) : pour les features complexes. Pattern 5 (knowledge base) : pour les projets matures avec beaucoup de conventions. Pattern 6 (déploiement sécurisé) : pour tout environnement de production.

Récapitulatif & Ressources

Ce guide a couvert l'ensemble des fonctionnalités avancées de Claude Code. Voici un récapitulatif de toutes les capacités et les ressources pour aller plus loin.

Tableau récapitulatif des fonctionnalités

Fonctionnalité Difficulté Impact Section
CLAUDE.md Facile Très élevé Section 3
Settings & Permissions Facile Élevé Section 2
MCP Servers Moyen Très élevé Section 4
Hooks Moyen Élevé Section 5
Skills Moyen Moyen-élevé Section 6
Scripting headless Facile Très élevé Section 7
Subagents Avancé Élevé Section 8
Gestion contexte Moyen Très élevé Section 9
Optimisation budget Facile Élevé Section 10
Sécurité avancée Moyen Critique Section 11
IDE Integration Facile Moyen Section 12
Git Worktrees Avancé Moyen Section 13
Patterns avancés Avancé Très élevé Section 14

Parcours d'apprentissage recommandé

Semaine 1
Les fondamentaux
Installer Claude Code, créer un CLAUDE.md, configurer les permissions de base, utiliser /compact et /clear efficacement.
Semaine 2
Extensibilité
Ajouter 2-3 serveurs MCP (GitHub, DB, Slack), créer vos premières skills, configurer les règles modulaires.
Semaine 3
Automatisation
Créer un pipeline CI/CD avec claude -p, configurer les hooks de sécurité et de formatage, optimiser le budget.
Semaine 4
Maîtrise
Utiliser les subagents et worktrees, implémenter les patterns avancés, déployer un workflow complet Plan→Code→Test→Review.

Ressources essentielles

Ressource Type URL
Documentation officielle Docs docs.anthropic.com/claude-code
Claude Code GitHub Code github.com/anthropics/claude-code
MCP Specification Spec spec.modelcontextprotocol.io
MCP Servers Registry Registry github.com/mcp/servers
Anthropic Cookbook Exemples github.com/anthropics/cookbook
Claude Code Discord Communauté discord.gg/anthropic

Le conseil final

Claude Code n'est pas un outil à utiliser passivement. C'est un multiplicateur de compétences. Plus vous investissez dans la configuration (CLAUDE.md, rules, hooks, skills, MCP), plus le retour sur investissement est élevé. Un projet bien configuré avec Claude Code peut multiplier la productivité d'un développeur senior par 3 à 5x sur les tâches d'ingénierie. La clé : traitez votre configuration Claude Code comme du code — versionnez-la, itérez dessus, et partagez-la avec votre équipe.

Claude Code Entreprise1/3
Pourquoi Claude Code Architecture CLAUDE.md MCP Protocol Hooks Skills Scripting Headless Subagents Contexte & Mémoire Budget & Coûts Permissions Intégrations IDE Git Worktrees Patterns Avancés Conclusion