Aperçu
Vous pouvez créer des sous-agents de trois façons :- Par programmation : utilisez le paramètre
agentsdans vos optionsquery(). 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-purposeintégré à tout moment via l’outil Agent sans que vous ayez besoin de définir quoi que ce soit
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-assistantpeut 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-scannerettest-coveragesimultané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-migrationpeut 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-reviewerpourrait 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éfinition programmatique (recommandée)
Définissez les sous-agents directement dans votre code en utilisant le paramètreagents. 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’outilSendMessage 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:ouAssistant: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.
[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.Invoquer des sous-agents
Invocation automatique
Claude décide automatiquement quand invoquer des sous-agents en fonction de la tâche et de ladescription 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 :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 blocstool_use où name 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.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 limitemaxTurns, 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 :
- Capturer l’ID de session : extraire
session_iddes messages lors de la première requête - Extraire l’ID de l’agent : analyser
agentIdà partir du texte du résultat de l’outil Agent - Reprendre la session : passer
resume: sessionIddans les options de la deuxième requête, et inclure l’ID de l’agent dans votre prompt. Chaque appelquery()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.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.
cleanupPeriodDays.
Restrictions d’outils
Utilisez le champtools 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"]
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.
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 $ :
- Sous la limite de dépenses : vous voyez
successet le coût estimé. - À la limite de dépenses : vous voyez
error_max_budget_usdavec 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_resultdans le flux de messages portantConcurrent 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.
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’outilWorkflow, 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
nameen doublon : vérifiez le YAML du fichier et si un agent existant utilise déjà lename. --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’optionadd_dirs(Python) ouadditionalDirectories(TypeScript), ou la CLI--add-dirou/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
agentspassés àquery()remplacent un agent du système de fichiers avec le même nom.
Documentation connexe
- 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