agents.
Aperçu
Vous pouvez créer des sous-agents de trois façons :- Par programmation : utilisez le paramètre
agentsdans vos optionsquery()(TypeScript, Python) - Basé sur le système de fichiers : définissez les agents comme des fichiers markdown dans les répertoires
.claude/agents/(voir définir les sous-agents comme 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 rien définir
description de chaque sous-agent. Écrivez des descriptions claires qui expliquent quand le sous-agent doit être utilisé, et Claude délèguera automatiquement les tâches appropriées. Vous pouvez également demander explicitement un sous-agent par son nom dans votre invite (par exemple, « Utilisez l’agent code-reviewer pour… »).
Avantages de l’utilisation des sous-agents
Isolation du contexte
Chaque sous-agent s’exécute dans sa propre conversation nouvelle. Les appels d’outils intermédiaires et les résultats restent à l’intérieur du sous-agent ; seul son message final revient au parent. Voir Ce que les sous-agents héritent pour savoir exactement ce qui se trouve dans le contexte du sous-agent. Exemple : un sous-agentresearch-assistant peut explorer des dizaines de fichiers sans que le contenu de ces fichiers s’accumule dans la conversation principale. Le parent reçoit un résumé concis, pas chaque fichier que le sous-agent a lu.
Parallélisation
Plusieurs sous-agents peuvent s’exécuter simultanément, accélérant considérablement les flux de travail complexes. Exemple : lors d’une révision de code, vous pouvez exécuter les sous-agentsstyle-checker, security-scanner et test-coverage simultanément, réduisant le temps de révision de minutes à secondes.
Instructions et connaissances spécialisées
Chaque sous-agent peut avoir des invites système adaptées avec une expertise spécifique, des meilleures pratiques et des contraintes. Exemple : un sous-agentdatabase-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 du principal agent.
Restrictions d’outils
Les sous-agents peuvent être limités à des outils spécifiques, réduisant le risque d’actions involontaires. Exemple : un sous-agentdoc-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éation de sous-agents
Définition programmatique (recommandée)
Définissez les sous-agents directement dans votre code en utilisant le paramètreagents. 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. Claude invoque les sous-agents via l’outil Agent, donc incluez Agent dans allowedTools pour approuver automatiquement les invocations de sous-agents sans invite de permission.
Configuration AgentDefinition
| Champ | Type | Requis | Description |
|---|---|---|---|
description | string | Oui | Description en langage naturel de quand utiliser cet agent |
prompt | string | Oui | L’invite système de l’agent définissant son rôle et son comportement |
tools | string[] | Non | Tableau des noms d’outils autorisés. S’il est omis, hérite de tous les outils |
disallowedTools | string[] | Non | Tableau des noms d’outils à supprimer de l’ensemble d’outils de l’agent |
model | string | Non | Remplacement du modèle pour cet agent. Accepte un alias tel que 'sonnet', 'opus', 'haiku', 'inherit', ou un ID de modèle complet. Par défaut le modèle principal s’il est omis |
skills | string[] | Non | Liste des noms de compétences à précharger dans le contexte de l’agent au démarrage. Les compétences non listées restent invocables via l’outil Skill |
memory | 'user' | 'project' | 'local' | Non | Source de mémoire pour cet agent |
mcpServers | (string | object)[] | Non | Serveurs MCP disponibles pour cet agent, par nom ou configuration en ligne |
maxTurns | number | Non | Nombre maximum de tours d’agent avant que l’agent s’arrête |
background | boolean | Non | Exécuter cet agent comme une tâche de fond non bloquante lorsqu’il est invoqué |
effort | 'low' | 'medium' | 'high' | 'xhigh' | 'max' | number | Non | Niveau d’effort de raisonnement pour cet agent |
permissionMode | PermissionMode | Non | Mode de permission pour l’exécution des outils au sein de cet agent |
AgentDefinition pour plus de détails.
Les sous-agents ne peuvent pas créer leurs propres sous-agents. N’incluez pas
Agent dans le tableau tools d’un sous-agent.Définition basée sur le système de fichiers (alternative)
Vous pouvez également définir les sous-agents comme des fichiers markdown dans les répertoires.claude/agents/. Voir 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.
Même sans définir de sous-agents personnalisés, Claude peut créer le sous-agent
general-purpose intégré. Ceci est utile pour déléguer des tâches de recherche ou d’exploration sans créer d’agents spécialisés. Incluez Agent dans allowedTools afin que ces invocations s’approuvent automatiquement sans invite de permission.Ce que les sous-agents héritent
La fenêtre de contexte d’un sous-agent commence fraîche (pas de conversation parent) mais n’est pas vide. Le seul canal du parent au sous-agent est la chaîne d’invite de l’outil Agent, donc incluez tous les chemins de fichiers, messages d’erreur ou décisions dont le sous-agent a besoin directement dans cette invite.| Le sous-agent reçoit | Le sous-agent ne reçoit pas |
|---|---|
Sa propre invite système (AgentDefinition.prompt) et l’invite de l’outil Agent | L’historique de conversation du parent ou les résultats des outils |
Le CLAUDE.md du projet (chargé via settingSources) | Le contenu des compétences préchargées, sauf s’il est listé dans AgentDefinition.skills |
Les définitions d’outils (héritées du parent, ou le sous-ensemble dans tools) | L’invite système du parent |
Le parent reçoit le message final du sous-agent tel quel 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 tel quel dans la réponse visible par l’utilisateur, incluez une instruction pour le faire dans l’invite ou l’option
systemPrompt que vous transmettez à l’appel query() principal.Invocation des sous-agents
Invocation automatique
Claude décide automatiquement quand invoquer les 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 lorsque votre invite 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 invite :Configuration d’agent dynamique
Vous pouvez créer des définitions d’agent dynamiquement 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 puissant pour les révisions strictes.Détection de l’invocation de sous-agents
Les sous-agents sont invoqués via l’outil Agent. Pour détecter quand un sous-agent est invoqué, vérifiez les blocstool_use où name est "Agent". Les messages provenant du contexte d’un sous-agent incluent un champ parent_tool_use_id.
Le nom de l’outil a été renommé de
"Task" à "Agent" dans Claude Code v2.1.63. Les versions actuelles du SDK émettent "Agent" dans les blocs tool_use mais utilisent toujours "Task" dans la liste des outils system:init et dans result.permission_denials[].tool_name. Vérifier les deux valeurs dans block.name assure la compatibilité entre les versions du SDK.La structure du message diffère entre les SDK. En Python, les blocs de contenu sont accessibles directement via
message.content. En TypeScript, SDKAssistantMessage enveloppe le message de l’API Claude, donc le contenu est accessible via message.message.content.Reprise des sous-agents
Les sous-agents peuvent être repris pour continuer là où ils se sont arrêtés. Les sous-agents repris conservent leur historique de conversation complet, y compris tous les appels d’outils précédents, les résultats et le raisonnement. Le sous-agent reprend exactement là où il s’est arrêté plutôt que de recommencer à zéro. Lorsqu’un sous-agent se termine, Claude reçoit son ID d’agent dans le résultat de l’outil Agent. Pour reprendre un sous-agent par programmation :- Capturez l’ID de session : Extrayez
session_iddes messages lors de la première requête - Extrayez l’ID d’agent : Analysez
agentIddu contenu du message - Reprenez la session : Passez
resume: sessionIddans les options de la deuxième requête, et incluez l’ID d’agent dans votre invite
Vous devez reprendre la même session pour accéder à la transcription du sous-agent. Chaque appel
query() démarre une nouvelle session par défaut, donc passez resume: sessionId pour continuer dans la même session.Si vous utilisez un agent personnalisé (pas un agent intégré), vous devez également transmettre la même définition d’agent dans le paramètre agents pour les deux requêtes.- Compaction de la conversation principale : Lorsque la conversation principale se compacte, les transcriptions des sous-agents ne sont pas affectées. Elles sont stockées dans des fichiers séparés.
- Persistance de la session : Les transcriptions des sous-agents persistent au sein de leur session. Vous pouvez reprendre un sous-agent après avoir redémarré Claude Code en reprenant la même session.
- Nettoyage automatique : Les transcriptions sont nettoyées en fonction du paramètre
cleanupPeriodDays(par défaut : 30 jours).
Restrictions d’outils
Les sous-agents peuvent avoir un accès aux outils restreint via le champtools :
- Omettez le champ : l’agent hérite de tous les outils disponibles (par défaut)
- Spécifiez les outils : l’agent ne peut utiliser que les outils listés
Combinaisons d’outils courantes
| Cas d’usage | Outils | Description |
|---|---|---|
| Analyse en lecture seule | Read, Grep, Glob | Peut examiner le code mais pas modifier ou exécuter |
| Exécution de tests | Bash, Read, Grep | Peut exécuter des commandes et analyser la sortie |
| Modification de code | Read, Edit, Write, Grep, Glob | Accès complet en lecture/écriture sans exécution de commandes |
| Accès complet | Tous les outils | Hérite de tous les outils du parent (omettez le champ tools) |
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 :- Vérifiez que les invocations d’Agent sont approuvées : incluez
AgentdansallowedToolspour approuver automatiquement les appels de sous-agent. Sans cela, les invocations d’Agent passent par votre callbackcanUseToolou, en modedontAsk, sont refusées - 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 le sous-agent doit être utilisé 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
Les agents définis dans.claude/agents/ sont chargés au démarrage uniquement. Si vous créez un nouveau fichier d’agent pendant que Claude Code s’exécute, redémarrez la session pour le charger.
Windows : échecs d’invite longue
Sur Windows, les sous-agents avec des invites très longues peuvent échouer en raison des limites de longueur de ligne de commande (8191 caractères). Gardez les invites concises ou utilisez des agents basés sur le système de fichiers pour les instructions complexes.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