agents.
Descripción general
Puede crear subagentes de tres formas:- Programáticamente: use el parámetro
agentsen sus opcionesquery(). Consulte las referencias de TypeScript y Python - Basado en sistema de archivos: defina agentes como archivos markdown en directorios
.claude/agents/. Consulte definición de subagentes como archivos - Propósito general integrado: Claude puede invocar el subagente integrado
general-purposeen cualquier momento a través de la herramienta Agent sin que usted defina nada
description de cada subagente. Escriba descripciones claras que expliquen cuándo se debe usar el subagente, y Claude delegará automáticamente las tareas apropiadas. También puede solicitar explícitamente un subagente por nombre en su prompt, por ejemplo “Usa el agente code-reviewer para…”.
Beneficios de usar subagentes
Aislamiento de contexto
Cada subagente se ejecuta en su propia conversación nueva. Las llamadas a herramientas intermedias y los resultados permanecen dentro del subagente; solo su mensaje final regresa al padre. Consulte Qué heredan los subagentes para ver exactamente qué hay en el contexto del subagente. Ejemplo: un subagenteresearch-assistant puede explorar docenas de archivos sin que ninguno de ese contenido se acumule en la conversación principal. El padre recibe un resumen conciso, no cada archivo que leyó el subagente.
Paralelización
Múltiples subagentes pueden ejecutarse simultáneamente, por lo que las subtareas independientes se completan en el tiempo del más lento en lugar de la suma de todos ellos. Ejemplo: durante una revisión de código, puede ejecutar los subagentesstyle-checker, security-scanner y test-coverage simultáneamente en lugar de secuencialmente.
Instrucciones y conocimiento especializados
Cada subagente puede tener prompts de sistema personalizados con experiencia específica, mejores prácticas y restricciones. Ejemplo: un subagentedatabase-migration puede tener conocimiento detallado sobre mejores prácticas de SQL, estrategias de reversión y verificaciones de integridad de datos que serían ruido innecesario en las instrucciones del agente principal.
Restricciones de herramientas
Los subagentes pueden limitarse a herramientas específicas, reduciendo el riesgo de acciones no intencionadas. Ejemplo: un subagentedoc-reviewer podría tener acceso solo a las herramientas Read y Grep, asegurando que pueda analizar pero nunca modifique accidentalmente sus archivos de documentación.
Creación de subagentes
Definición programática (recomendada)
Defina subagentes directamente en su código utilizando el parámetroagents. Claude invoca subagentes a través de la herramienta Agent, por lo que incluya Agent en allowedTools para aprobar automáticamente las invocaciones de subagentes sin un aviso de permiso.
La mayoría de los ejemplos en esta página imprimen solo el resultado final. Para confirmar que Claude delegó a un subagente en lugar de responder directamente, consulte Detección de invocación de subagentes.
Este ejemplo crea dos subagentes: un revisor de código con acceso de solo lectura y un ejecutor de pruebas que puede ejecutar comandos.
Configuración de AgentDefinition
En el SDK de Python, los nombres de campo de varias palabras como
disallowedTools y mcpServers mantienen su ortografía camelCase para coincidir con el formato de cable en lugar de seguir la convención snake_case de Python. Consulte la referencia AgentDefinition para obtener detalles.
Dos comportamientos de subagentes cambiaron en Claude Code v2.1.198:
- Los subagentes se ejecutan en segundo plano de forma predeterminada. Una llamada a la herramienta Agent que omite la entrada
run_in_backgroundinicia un subagente en segundo plano, y Claude establecerun_in_background: falsecuando necesita el resultado antes de continuar. Antes de v2.1.198, omitirrun_in_backgroundejecutaba el subagente de forma síncrona. Establezca el campobackgroundentruepara forzar la ejecución en segundo plano para un agente específico independientemente de lo que Claude solicite. - Un subagente hereda la configuración de pensamiento extendido de la sesión principal. En versiones anteriores, el pensamiento extendido está deshabilitado dentro de los subagentes independientemente de la configuración de la sesión principal.
A partir de Claude Code v2.1.172, los subagentes pueden generar sus propios subagentes. Un subagente cinco niveles por debajo del agente principal no puede generar más subagentes, independientemente de si se ejecuta en primer plano o en segundo plano. Para evitar que un subagente genere otros, omita
Agent de su matriz tools o agréguelo a disallowedTools. Consulte subagentes anidados para conocer las reglas de profundidad completas.Definición basada en sistema de archivos (alternativa)
También puede definir subagentes como archivos markdown en directorios.claude/agents/. Consulte la documentación de subagentes de Claude Code para obtener detalles sobre este enfoque. Los agentes definidos programáticamente tienen prioridad sobre los agentes basados en sistema de archivos con el mismo nombre.
Incluso sin definir subagentes personalizados, Claude puede generar el subagente integrado
general-purpose. Esto es útil para delegar tareas de investigación o exploración sin crear agentes especializados. Incluya Agent en allowedTools para que estas invocaciones se aprueben automáticamente sin un aviso de permiso.Qué heredan los subagentes
La ventana de contexto de un subagente comienza nueva, sin conversación padre, pero no está vacía. El único contenido que pasa del padre al subagente es la cadena de prompt de la herramienta Agent, así que incluya cualquier ruta de archivo, mensaje de error o decisión que el subagente necesite directamente en ese prompt. Un subagente que tiene la herramientaSendMessage comienza con una lista de los otros agentes nombrados ejecutándose en la sesión, así sabe qué nombres puede usar para enviar mensajes. Claude Code añade la lista al primer turno del subagente automáticamente. Un fork no obtiene la lista porque hereda la conversación padre en su lugar. La lista requiere Claude Code v2.1.206 o posterior.
El padre recibe el mensaje final del subagente textualmente como el resultado de la herramienta Agent, pero puede resumirlo en su propia respuesta. Para preservar la salida del subagente textualmente en la respuesta visible para el usuario, incluya una instrucción para hacerlo en el prompt u opción
systemPrompt que pase a la llamada query() principal.Agent terminated early due to an API error, seguido del detalle del error. Consulte API errors in subagents para el comportamiento en primer plano y en segundo plano.
Este manejo de salida parcial requiere Claude Code v2.1.199 o posterior. En v2.1.199, un límite de velocidad, sobrecarga o error del servidor dejó la forma de solo llamadas de herramientas con un resultado parcial vacío que contiene solo la nota de corte.
Invocación de subagentes
Invocación automática
Claude decide automáticamente cuándo invocar subagentes en función de la tarea y ladescription de cada subagente. Por ejemplo, si define un subagente performance-optimizer con la descripción “Especialista en optimización de rendimiento para ajuste de consultas”, Claude lo invocará cuando su prompt mencione optimizar consultas.
Escriba descripciones claras y específicas para que Claude pueda hacer coincidir tareas con el subagente correcto.
Invocación explícita
Para garantizar que Claude use un subagente específico, mencione su nombre en su prompt:Configuración dinámica de agentes
Puede crear definiciones de agentes dinámicamente en función de condiciones en tiempo de ejecución. Este ejemplo crea un revisor de seguridad con diferentes niveles de rigor, utilizando un modelo más potente para revisiones estrictas.Detección de invocación de subagentes
Claude invoca subagentes a través de la herramienta Agent. Para detectar cuándo se invoca un subagente, busque bloquestool_use donde name sea "Agent". Los mensajes desde dentro del contexto de un subagente incluyen un campo parent_tool_use_id.
El nombre de la herramienta se cambió de
"Task" a "Agent" en Claude Code v2.1.63. Los lanzamientos actuales del SDK emiten "Agent" en bloques tool_use pero aún usan "Task" en la lista de herramientas system:init y en result.permission_denials[].tool_name. Verificar ambos valores en block.name asegura compatibilidad entre versiones del SDK.message.content. En TypeScript, SDKAssistantMessage envuelve el mensaje de la API de Claude, por lo que el contenido se accede a través de message.message.content.
Este ejemplo itera a través de mensajes transmitidos, registrando cuándo se invoca un subagente y cuándo los mensajes posteriores se originan dentro del contexto de ejecución de ese subagente.
Reanudación de subagentes
Puede reanudar un subagente para continuar donde se detuvo en lugar de comenzar de nuevo. Un subagente reanudado retiene su historial de conversación completo, incluidas todas las llamadas a herramientas anteriores, resultados y razonamiento. Cuando un subagente se completa, el resultado de la herramienta Agent incluye un bloque de texto que contieneagentId: <id>. Los agentes integrados Explore y Plan son de una sola ejecución y no devuelven un agentId, así que use un agente personalizado o general-purpose cuando necesite reanudar. Para reanudar un subagente programáticamente:
- Capture el ID de sesión: Extraiga
session_idde los mensajes durante la primera consulta - Extraiga el ID del agente: Analice
agentIddel texto del resultado de la herramienta Agent - Reanude la sesión: Pase
resume: sessionIden las opciones de la segunda consulta e incluya el ID del agente en su prompt
Debe reanudar la misma sesión para acceder a la transcripción del subagente. Cada llamada
query() inicia una nueva sesión por defecto, así que pase resume: sessionId para continuar en la misma sesión.Cuando use un agente personalizado, pase la misma definición de agente en el parámetro agents para ambas consultas.endpoint-finder. La primera consulta lo ejecuta y captura el ID de sesión e ID de agente del resultado de la herramienta Agent, luego la segunda consulta reanuda la sesión para hacer una pregunta de seguimiento que requiere contexto del primer análisis.
- Compactación de conversación principal: Cuando la conversación principal se compacta, las transcripciones de subagentes no se ven afectadas. Se almacenan en archivos separados.
- Persistencia de sesión: Las transcripciones de subagentes persisten dentro de su sesión. Puede reanudar un subagente después de reiniciar Claude Code reanudando la misma sesión.
- Limpieza automática: Las transcripciones se limpian en función de la configuración
cleanupPeriodDays, que tiene un valor predeterminado de 30 días.
Restricciones de herramientas
Los subagentes pueden tener acceso restringido a herramientas a través del campotools:
- Omitir el campo: el agente hereda todas las herramientas disponibles (predeterminado)
- Especificar herramientas: el agente solo puede usar las herramientas listadas
Combinaciones comunes de herramientas
Escalar con flujos de trabajo dinámicos
Los subagentes funcionan bien para algunas tareas delegadas por turno. Para ejecuciones que coordinan docenas a cientos de agentes, use la herramientaWorkflow, que mueve la orquestación a un script que el tiempo de ejecución ejecuta fuera del contexto de la conversación. Consulte flujos de trabajo dinámicos para ver cómo los flujos de trabajo difieren de la delegación de subagentes turno a turno.
La herramienta Workflow está disponible en el SDK de TypeScript Agent v0.3.149 y posterior. Incluya Workflow en allowedTools para aprobar automáticamente las ejecuciones de flujo de trabajo. Los esquemas de entrada y salida de la herramienta se enumeran en la referencia de TypeScript.
Solución de problemas
Claude no delega a subagentes
Si Claude completa tareas directamente en lugar de delegar a su subagente:- Verifique que las invocaciones de Agent estén aprobadas: incluya
AgentenallowedToolspara aprobar automáticamente las llamadas de subagentes. Sin esto, las invocaciones de Agent caen en su callbackcanUseToolo, en mododontAsk, se deniegan - Use prompting explícito: mencione el subagente por nombre en su prompt, por ejemplo “Use el agente code-reviewer para…”
- Escriba una descripción clara: explique exactamente cuándo se debe usar el subagente para que Claude pueda hacer coincidir las tareas apropiadamente
Agentes basados en sistema de archivos no se cargan
Claude Code observa~/.claude/agents/ y .claude/agents/ y detecta un archivo de agente nuevo o editado en unos pocos segundos, sin necesidad de reiniciar. Si una definición nunca aparece, trabaje a través de estas causas:
- Nuevo directorio
agents: el observador cubre solo directorios que existían cuando se inició la sesión, por lo que el primer archivo en un directorio nuevo necesita un reinicio de sesión. Esta es la causa más común. - Frontmatter inválido o un
nameduplicado: verifique el YAML del archivo y si un agente existente ya usa elname. --disable-slash-commands: las sesiones iniciadas con esta bandera no observan estos directorios y siempre necesitan un reinicio para cargar archivos nuevos.- Un agente programático con el mismo nombre: los
agentspasados aquery()anulan un agente del sistema de archivos con el mismo nombre.
Fallos de prompt largo en Windows
En Windows, los subagentes con prompts muy largos pueden fallar debido al límite de longitud de línea de comandos de 8191 caracteres. Mantenga los prompts concisos o use agentes basados en sistema de archivos para instrucciones complejas.Documentación relacionada
- Subagentes de Claude Code: documentación completa de subagentes incluyendo definiciones basadas en sistema de archivos
- Flujos de trabajo dinámicos: orqueste muchos subagentes desde un script para trabajos demasiado grandes para una conversación
- Descripción general del SDK: introducción al Claude Agent SDK