- Agents
- Background Agents
Le problème des agents en parallèle
Quand plusieurs agents travaillent en même temps sur le même dépôt, ils se marchent dessus : conflits de fichiers, résultats incohérents, branches mélangées. Les Background Agents résolvent ce problème en donnant à chaque agent sa propre copie isolée du code via Git Worktree.
Comment fonctionnent les Background Agents
Dépôt principal (main)
├── Worktree 1 → branch: feat/refactor-auth → Agent A
├── Worktree 2 → branch: feat/add-tests → Agent B
└── Worktree 3 → branch: fix/memory-leak → Agent C
Chaque agent opère sur sa propre branche dans son propre répertoire de travail. Les modifications d'un agent ne sont visibles par les autres qu'après un merge explicite. Vous coordonnez les résultats une fois les agents terminés.
Lancer un Background Agent
Méthode 1 : Via le SDK Agent
import { query } from "@anthropic-ai/claude-code-sdk";// Lancer un agent en arrière-planconst agent = await query({prompt: "Refactorise le module auth pour TypeScript strict",options: {worktree: true, // Crée un worktree Git isolébranch: "feat/ts-strict-auth",maxTurns: 20,}});console.log(`Agent lancé sur la branche: ${agent.branch}`);console.log(`Worktree: ${agent.worktreePath}`);
Méthode 2 : Via la commande claude agents
# Lister tous les agents configurés et en coursclaude agents# Exemple de sortie# ID STATUS BRANCH SINCE# agent-a3f2 running feat/refactor-auth 5m ago# agent-b8c1 running feat/add-tests 2m ago# agent-d9e4 completed fix/memory-leak 12m ago
Cas d'usage concrets
Revue de code parallèle
Lancez un agent de revue de code sur chaque PR ouverte sans qu'ils s'interfèrent :
const openPRs = await github.listPullRequests({ state: "open" });const reviews = await Promise.all(openPRs.map(pr =>query({prompt: `Revue de la PR #${pr.number}: ${pr.title}.Analyse la qualité du code, les problèmes de performance,les failles de sécurité et les cas non couverts par les tests.`,options: {worktree: true,branch: `review/pr-${pr.number}`,allowedTools: ["Read", "Bash"], // Lecture seulemaxTurns: 10,}})));
Génération de tests en parallèle
Un agent par module, tous en parallèle :
const modules = ["auth", "billing", "notifications", "search"];const testJobs = modules.map(module =>query({prompt: `Génère des tests unitaires complets pour le module ${module}.Cible 80% de couverture. Utilise Jest et Testing Library.Crée les fichiers dans src/${module}/__tests__/`,options: {worktree: true,branch: `feat/tests-${module}`,maxTurns: 15,}}));// Lancer tous les agents en parallèleconst results = await Promise.allSettled(testJobs);
Migration progressive de codebase
Migrez un grand projet module par module, chaque agent travaillant indépendamment :
const migrationTasks = [{ module: "api", task: "Migrer Express vers Fastify" },{ module: "db", task: "Migrer Mongoose vers Prisma" },{ module: "auth", task: "Migrer JWT manuel vers Auth.js" },];for (const { module, task } of migrationTasks) {await query({prompt: `${task} dans le dossier src/${module}/.Maintiens la compatibilité des interfaces publiques.Ajoute des tests de régression.Documente les changements dans CHANGELOG.md`,options: {worktree: true,branch: `migrate/${module}`,}});}
Cycle de vie d'un Background Agent
Création du worktree
Claude Code crée automatiquement un nouveau Git worktree dans un dossier temporaire. Une nouvelle branche est créée ou utilisée à partir de la branche courante.
# Ce que Claude Code fait en internegit worktree add /tmp/claude-agent-a3f2 -b feat/refactor-auth
Exécution de l'agent
L'agent travaille dans son worktree isolé. Il peut lire et modifier tous les fichiers, lancer des commandes, créer des commits. Les autres agents ne voient pas ses modifications.
Commit des résultats
Quand l'agent termine, ses modifications sont committées sur sa branche. Le worktree reste disponible pour inspection.
Nettoyage ou merge
Vous inspectez les résultats avec git diff ou une PR, puis mergez ce qui vous convient. Les worktrees peuvent être supprimés manuellement ou sont nettoyés automatiquement si l'agent n'a fait aucun changement.
# Inspecter les changements d'un agentgit diff main feat/refactor-auth# Merger si satisfaitgit merge feat/refactor-auth# Supprimer le worktreegit worktree remove /tmp/claude-agent-a3f2
Coordination entre agents
Les Background Agents sont indépendants par design. Si des agents ont besoin de partager des résultats, coordonnez-les dans votre code, pas au niveau Git.
Pattern : pipeline d'agents
// Agent 1 : analyse le codeconst analysis = await query({prompt: "Analyse ce module et identifie les problèmes de performance",options: { worktree: true, branch: "analysis/perf" }});// Agent 2 : corrige en se basant sur l'analyseconst fix = await query({prompt: `Sur la base de cette analyse: ${analysis.result}Implémente les corrections de performance.`,options: { worktree: true, branch: "fix/perf" }});// Agent 3 : génère les tests pour les correctionsconst tests = await query({prompt: `Génère des tests de régression pour ces corrections: ${fix.result}`,options: { worktree: true, branch: "test/perf-regression" }});
Pattern : fan-out / fan-in
// Fan-out : plusieurs agents en parallèleconst [authFix, billingFix, searchFix] = await Promise.all([query({ prompt: "Corrige les bugs dans auth", options: { worktree: true } }),query({ prompt: "Corrige les bugs dans billing", options: { worktree: true } }),query({ prompt: "Corrige les bugs dans search", options: { worktree: true } }),]);// Fan-in : un agent intégrateurconst integration = await query({prompt: `Intègre ces corrections et résous les conflits potentiels:Auth: ${authFix.branch}Billing: ${billingFix.branch}Search: ${searchFix.branch}`,options: { worktree: true, branch: "integrate/all-fixes" }});
Limites et précautions
| Limite | Valeur recommandée |
|---|---|
| Agents simultanés | 3-5 (selon la complexité) |
maxTurns par agent | 10-25 (évite les boucles infinies) |
| Taille du worktree | Dépend du projet (prévoir ~100MB par worktree) |
Conflits de merge
Les Background Agents travaillent sur des branches distinctes. Les conflits de merge peuvent apparaître lors de l'intégration, surtout si plusieurs agents modifient les mêmes fichiers. Strategies pour les réduire :
- Découpez les tâches par domaine fonctionnel, pas par fichier
- Donnez des périmètres clairs à chaque agent (
src/auth/,src/billing/, etc.) - Utilisez un agent intégrateur en dernier pour résoudre les conflits
Prochaines étapes
- Orchestration multi-agents avancée : Coordonnez des pipelines d'agents complexes
- Agent Teams : Structurer des équipes d'agents spécialisés
- Claude Agent SDK : Construire des workflows programmatiques
- Mode Headless et CI/CD : Intégrer les agents dans vos pipelines