Skip to main content
Les sous-agents sont des instances d’agent distinctes que votre agent principal peut générer pour gérer des sous-tâches ciblées. Utilisez-les pour isoler le contexte, exécuter plusieurs analyses en parallèle et appliquer des instructions spécialisées sans ajouter à l’invite de l’agent principal.

Aperçu

Vous pouvez créer des sous-agents de trois façons :
  • Par programmation : utilisez le paramètre agents dans vos options query(). Consultez les références TypeScript et Python
  • Basée sur le système de fichiers : définissez les agents en tant que fichiers markdown dans les répertoires .claude/agents/. Consultez définir les sous-agents en tant que fichiers
  • Général intégré : Claude peut invoquer le sous-agent general-purpose intégré à tout moment via l’outil Agent sans que vous ayez besoin de définir quoi que ce soit
Ce guide se concentre sur l’approche par programmation, qui est recommandée pour les applications SDK.

Avantages de l’utilisation de sous-agents

Parce que les sous-agents sont des instances d’agent distinctes, déléguer du travail à ces derniers vous offre quatre avantages :
  • Isolation du contexte : chaque sous-agent s’exécute dans sa propre conversation, qui démarre à zéro sauf si le sous-agent est un fork. De toute façon, les appels d’outils intermédiaires et les résultats restent à l’intérieur du sous-agent ; seul son message final revient au parent. Un sous-agent research-assistant peut explorer des dizaines de fichiers sans que tout ce contenu s’accumule dans la conversation principale. Le parent reçoit un résumé concis, pas chaque fichier que le sous-agent a lu. Consultez What subagents inherit pour savoir exactement ce qui se trouve dans le contexte du sous-agent.
  • Parallélisation : plusieurs sous-agents peuvent s’exécuter simultanément, de sorte que les sous-tâches indépendantes se terminent dans le temps du plus lent plutôt que la somme de tous. Lors d’une révision de code, vous pouvez exécuter les sous-agents style-checker, security-scanner et test-coverage simultanément au lieu de séquentiellement.
  • Instructions et connaissances spécialisées : chaque sous-agent peut avoir une invite système adaptée avec une expertise spécifique, des meilleures pratiques et des contraintes. Un sous-agent database-migration peut avoir des connaissances détaillées sur les meilleures pratiques SQL, les stratégies de restauration et les vérifications d’intégrité des données qui seraient du bruit inutile dans les instructions de l’agent principal.
  • Restrictions d’outils : les sous-agents peuvent être limités à des outils spécifiques, réduisant le risque d’actions involontaires. Un sous-agent doc-reviewer pourrait n’avoir accès qu’aux outils Read et Grep, garantissant qu’il peut analyser mais ne peut jamais modifier accidentellement vos fichiers de documentation.

Créer des sous-agents

Définissez les sous-agents directement dans votre code en utilisant le paramètre agents. Claude invoque les sous-agents via l’outil Agent. La plupart des exemples de cette page n’affichent que le résultat final. Pour confirmer que Claude a délégué à un sous-agent plutôt que de répondre directement, consultez Détecter l’invocation de sous-agent. Cet exemple crée deux sous-agents : un examinateur de code avec accès en lecture seule et un exécuteur de tests qui peut exécuter des commandes.

Configuration d’AgentDefinition

Dans le SDK Python, les noms de champs multi-mots tels que disallowedTools et mcpServers conservent leur orthographe camelCase pour correspondre au format de transmission plutôt que de suivre la convention snake_case de Python. Consultez la référence AgentDefinition pour plus de détails. Les sous-agents s’exécutent en arrière-plan par défaut. Un appel d’outil Agent qui omet l’entrée run_in_background lance un sous-agent d’arrière-plan, et Claude définit run_in_background: false lorsqu’il a besoin du résultat avant de continuer. Définissez le champ background sur true pour forcer l’exécution en arrière-plan pour un agent spécifique, quel que soit ce que Claude demande. Avant Claude Code v2.1.198, la valeur par défaut d’arrière-plan était en cours de déploiement progressif, et un appel d’outil Agent qui omettait run_in_background pouvait exécuter le sous-agent de manière synchrone. Les sous-agents peuvent également générer leurs propres sous-agents. Pour limiter la profondeur de cet imbrication, le nombre de sous-agents qui s’exécutent à la fois et le montant qu’une requête dépense, consultez Limiter la profondeur, la concurrence et les dépenses des sous-agents.

Définition basée sur le système de fichiers (alternative)

Vous pouvez également définir les sous-agents en tant que fichiers markdown dans les répertoires .claude/agents/. Consultez la documentation des sous-agents Claude Code pour plus de détails sur cette approche. Les agents définis par programmation ont la priorité sur les agents basés sur le système de fichiers portant le même nom.
Lorsque Claude appelle l’outil Agent sans subagent_type, il obtient le sous-agent intégré general-purpose, que Claude peut générer même lorsque vous ne définissez aucun agent vous-même. La définition de CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS=1 supprime cette valeur par défaut, et un tel appel échoue avec subagent_type is required.

Ce que les sous-agents héritent

À moins que le sous-agent ne soit un fork, sa fenêtre de contexte commence vierge, sans conversation parent, mais n’est pas vide. Le seul contenu que vous transmettez du parent au sous-agent est la chaîne de prompt de l’outil Agent, donc incluez directement dans ce prompt tous les chemins de fichiers, messages d’erreur ou décisions dont le sous-agent a besoin. Un sous-agent qui dispose de l’outil SendMessage commence avec une liste des autres agents nommés exécutés dans la session, il sait donc quels noms il peut utiliser pour envoyer des messages. Claude Code ajoute automatiquement la liste au premier tour du sous-agent. Un fork ne reçoit pas la liste car il hérite de la conversation parent à la place. Un sous-agent hérite également de la configuration de la réflexion étendue de la session principale. Le tableau ci-dessous énumère ce que le contexte d’un sous-agent non-fork contient et ce qu’il exclut.
Le parent reçoit le message final du sous-agent comme résultat de l’outil Agent, mais peut le résumer dans sa propre réponse. Pour préserver la sortie du sous-agent textuellement dans la réponse visible par l’utilisateur, incluez une instruction pour le faire dans le prompt ou l’option systemPrompt que vous transmettez à l’appel query() principal.Dans la v2.1.210 et versions ultérieures, Claude Code analyse le message final pour détecter des motifs ressemblant à des instructions avant que le parent ne le lise. L’analyse traite trois types de motifs différemment :
  • Imitation de balise de contrôle : Claude Code neutralise une balise que seul le harnais émet, comme un bloc <system-reminder>, sur place. Il insère une barre oblique inverse après le crochet ouvrant et ne supprime rien.
  • Mentions de configuration de permissions : Claude Code conserve les références à la configuration de permissions, comme .claude/settings.json, bypassPermissions, ou --dangerously-skip-permissions, telles qu’elles sont écrites.
  • Marqueurs de tour : une ligne qui commence par Human: ou Assistant: reçoit une barre oblique inverse avant les deux-points, de sorte que le message ne peut pas imiter une limite de tour de conversation.
Pour une correspondance de balise de contrôle ou de configuration de permissions, Claude Code ajoute une ligne de marqueur [harness: ...] nommant les motifs correspondants ; une correspondance de marqueur de tour n’ajoute pas la ligne de marqueur. Ce sont les seules modifications que l’analyse effectue : elle ne supprime jamais ou ne reformule jamais le texte du sous-agent.
Une erreur API qui termine le sous-agent prématurément, comme une limite de débit, n’est jamais livrée comme résultat. Voir Erreurs API dans les sous-agents pour le comportement au premier plan et en arrière-plan.

Invoquer des sous-agents

Invocation automatique

Claude décide automatiquement quand invoquer des sous-agents en fonction de la tâche et de la description de chaque sous-agent. Par exemple, si vous définissez un sous-agent performance-optimizer avec la description « Spécialiste de l’optimisation des performances pour l’optimisation des requêtes », Claude l’invoquera quand votre prompt mentionne l’optimisation des requêtes. Écrivez des descriptions claires et spécifiques pour que Claude puisse faire correspondre les tâches au bon sous-agent.

Invocation explicite

Pour garantir que Claude utilise un sous-agent spécifique, mentionnez-le par son nom dans votre prompt :
Cela contourne la correspondance automatique et invoque directement le sous-agent nommé.

Configuration dynamique d’agent

Vous pouvez créer des définitions d’agent de manière dynamique en fonction des conditions d’exécution. Cet exemple crée un examinateur de sécurité avec différents niveaux de rigueur, en utilisant un modèle plus capable pour les examens stricts.

Détecter l’invocation d’un sous-agent

Claude invoque les sous-agents via l’outil Agent. Pour détecter quand un sous-agent est invoqué, recherchez les blocs tool_usename est "Agent". Les messages provenant du contexte d’un sous-agent incluent un champ parent_tool_use_id.
L’outil apparaît comme "Agent" dans les blocs tool_use mais comme "Task" dans la liste des outils system:init. Avant Claude Code v2.1.63, les blocs tool_use le nommaient également "Task". Pour que la détection fonctionne sur les versions du SDK, faites correspondre les deux valeurs dans block.name.
La structure du message diffère entre les SDK. En Python, vous accédez directement aux blocs de contenu via message.content. En TypeScript, SDKAssistantMessage enveloppe le message de l’API Claude, vous accédez donc au contenu via message.message.content. Cet exemple itère à travers les messages en flux, enregistrant quand un sous-agent est invoqué et quand les messages suivants proviennent du contexte d’exécution de ce sous-agent.

Reprendre les sous-agents

Vous pouvez reprendre un sous-agent pour continuer là où il s’est arrêté plutôt que de recommencer à zéro. Un sous-agent repris conserve son historique de conversation complet, y compris tous les appels d’outils précédents, les résultats et le raisonnement. Lorsqu’un sous-agent s’arrête à sa limite maxTurns, Claude Code marque la sortie dans le résultat de l’outil Agent comme partielle, afin que Claude sache que l’exécution est inachevée. Lorsqu’un sous-agent se termine, le résultat de l’outil Agent inclut un bloc de texte contenant agentId: <id>. Les agents Explore et Plan intégrés sont ponctuels et ne retournent pas d’agentId, donc utilisez un agent personnalisé ou general-purpose lorsque vous avez besoin de reprendre. Pour reprendre un sous-agent par programmation :
  1. Capturer l’ID de session : extraire session_id des messages lors de la première requête
  2. Extraire l’ID de l’agent : analyser agentId à partir du texte du résultat de l’outil Agent
  3. Reprendre la session : passer resume: sessionId dans les options de la deuxième requête, et inclure l’ID de l’agent dans votre prompt. Chaque appel query() démarre une nouvelle session par défaut, et vous devez reprendre la même session pour accéder à la transcription du sous-agent.
Lorsque vous utilisez un agent personnalisé, passez la même définition d’agent dans le paramètre agents pour les deux requêtes.
L’exemple ci-dessous définit un agent personnalisé endpoint-finder. La première requête l’exécute et capture l’ID de session et l’ID de l’agent à partir du résultat de l’outil Agent, puis la deuxième requête reprend la session pour poser une question de suivi qui nécessite le contexte de la première analyse.
Les transcriptions des sous-agents sont stockées dans des fichiers séparés et persistent indépendamment de la conversation principale. Voir reprendre les sous-agents dans Claude Code pour le comportement de compaction et la période de nettoyage cleanupPeriodDays.

Restrictions d’outils

Utilisez le champ tools pour limiter ce qu’un sous-agent peut faire :
  • Omettre tools : le sous-agent obtient tous les outils disponibles pour les sous-agents
  • Lister les outils : le sous-agent n’obtient que ceux-ci. Par exemple, un examinateur de code qui ne devrait jamais modifier les fichiers obtient ["Read", "Grep", "Glob"]
Un outil que vous omettez n’est pas du tout dans la session du sous-agent : Claude fonctionne sans lui, sans invite de permission ni erreur. Cet exemple crée un agent d’analyse en lecture seule qui peut examiner le code mais ne peut pas modifier les fichiers ni exécuter les commandes.

Combinaisons d’outils courantes

Limiter la profondeur, la concurrence et les dépenses des sous-agents

Cette section décrit le SDK TypeScript v0.3.219 et le SDK Python v0.2.127 et versions ultérieures, les versions qui incluent Claude Code v2.1.219 ou version ultérieure. Sur les versions antérieures, certaines de ces limites sont manquantes ou ont des valeurs par défaut différentes, donc mettez à jour avant de vous fier à elles pour limiter une exécution. La référence des variables d’environnement et les tours et le budget enregistrent la version de Claude Code qui a ajouté chaque variable et l’application de la limite de dépenses aux sous-agents.
Claude décide par lui-même quand créer un sous-agent et combien en créer. Chaque sous-agent effectue ses propres requêtes API, qui comptent dans le total_cost_usd de la requête, et un sous-agent peut créer ses propres sous-agents, donc une invite peut se transformer en un arbre d’agents. Vous pouvez limiter cette croissance de trois façons : la profondeur d’imbrication des sous-agents, le nombre qui s’exécutent simultanément et le montant que la requête entière dépense. Définissez les limites de profondeur et de concurrence comme variables d’environnement via l’option env, et la limite de dépenses comme option de requête : Les deux SDK traitent l’option env différemment : le SDK TypeScript remplace l’environnement du sous-processus par celui-ci, donc propagez process.env dedans pour conserver les variables comme PATH, tandis que le SDK Python le fusionne dans l’environnement hérité. Cet exemple désactive l’imbrication, autorise au maximum cinq sous-agents à la fois, et arrête la requête une fois que les dépenses estimées atteignent 5 $ :
Ce que vous voyez dépend de la limite, le cas échéant, que la requête atteint :
  • Sous la limite de dépenses : vous voyez success et le coût estimé.
  • À la limite de dépenses : vous voyez error_max_budget_usd avec un coût égal ou supérieur à 5, puis votre gestionnaire d’erreur s’exécute.
  • À la limite de concurrence : vous voyez un bloc tool_result dans le flux de messages portant Concurrent subagent limit reached. Claude reçoit le même bloc comme résultat de l’outil Agent.

Exécuter Opus 5 avec des sous-agents

Claude Opus 5 délègue aux sous-agents plus facilement que les modèles antérieurs, donc les limites de profondeur, de concurrence et de dépenses importent le plus sur les requêtes qui exécutent Opus 5. Le guide d’invite Opus 5 contient une instruction de délégation que vous pouvez ajouter à n’importe quelle invite. Le fait que Claude Code ajoute sa propre instruction dépend du système d’invite que vous utilisez :
  • Préréglage claude_code : quand le modèle est Opus 5, Claude Code ajoute une ligne à son système d’invite indiquant à Claude de ne pas appeler l’outil Agent à moins qu’on ne le lui demande. L’outil Agent reste disponible.
  • Une invite personnalisée, ou pas de systemPrompt : Claude Code ne construit pas son système d’invite, donc cette ligne est absente. Ajoutez l’instruction de délégation du guide d’invite à votre propre invite.
Chaque instruction ne fait que guider Claude, donc définissez également les limites. Claude Code les applique peu importe comment Claude décide de déléguer.

Augmenter l’échelle avec des flux de travail dynamiques

Les sous-agents fonctionnent bien pour quelques tâches déléguées par tour. Pour les exécutions qui coordonnent des dizaines à des centaines d’agents, utilisez l’outil Workflow, qui déplace l’orchestration dans un script que le runtime exécute en dehors du contexte de conversation. Voir flux de travail dynamiques pour savoir comment les flux de travail diffèrent de la délégation de sous-agents tour par tour. L’outil Workflow est disponible dans le TypeScript Agent SDK v0.3.149 et versions ultérieures. Incluez Workflow dans allowedTools pour approuver automatiquement les exécutions de flux de travail. Les schémas d’entrée et de sortie de l’outil sont listés dans la référence TypeScript.

Dépannage

Claude ne délègue pas aux sous-agents

Si Claude complète les tâches directement au lieu de déléguer à votre sous-agent :
  • Utilisez des invites explicites : mentionnez le sous-agent par son nom dans votre invite, par exemple « Utilisez l’agent code-reviewer pour… »
  • Écrivez une description claire : expliquez exactement quand utiliser le sous-agent pour que Claude puisse faire correspondre les tâches de manière appropriée

Les agents basés sur le système de fichiers ne se chargent pas

Claude Code surveille ~/.claude/agents/ et .claude/agents/ et détecte un fichier d’agent nouveau ou modifié en quelques secondes, sans redémarrage nécessaire. Si une définition n’apparaît jamais, vérifiez ces causes :
  • Nouveau répertoire agents : le moniteur couvre uniquement les répertoires qui existaient au démarrage de la session, donc le premier fichier dans un nouveau répertoire nécessite un redémarrage de session. C’est la cause la plus courante.
  • Frontmatter invalide ou name en doublon : vérifiez le YAML du fichier et si un agent existant utilise déjà le name.
  • --disable-slash-commands : les sessions démarrées avec ce flag ne surveillent pas ces répertoires et nécessitent toujours un redémarrage pour charger les nouveaux fichiers.
  • Un fichier sous un répertoire ajouté : Claude Code charge .claude/agents/ à partir des répertoires ajoutés avec l’option add_dirs (Python) ou additionalDirectories (TypeScript), ou la CLI --add-dir ou /add-dir, mais ne les surveille pas, donc un fichier nouveau ou modifié là-bas nécessite un redémarrage de session.
  • Un agent programmatique avec le même nom : les agents passés à query() remplacent un agent du système de fichiers avec le même nom.
Pour le format de fichier, consultez comment écrire des fichiers de sous-agent.
  • Sous-agents Claude Code : documentation complète des sous-agents incluant les définitions basées sur le système de fichiers
  • Flux de travail dynamiques : orchestrez de nombreux sous-agents à partir d’un script pour les tâches trop importantes pour une seule conversation
  • Aperçu du SDK : prise en main du Claude Agent SDK