agents.
Descripción general
Puede crear subagentes de tres formas:- Programáticamente: use el parámetro
agentsen sus opcionesquery()(TypeScript, 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, acelerando dramáticamente flujos de trabajo complejos. Ejemplo: durante una revisión de código, puede ejecutar los subagentesstyle-checker, security-scanner y test-coverage simultáneamente, reduciendo el tiempo de revisión de minutos a segundos.
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. Este ejemplo crea dos subagentes: un revisor de código con acceso de solo lectura y un ejecutor de pruebas que puede ejecutar comandos. 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.
Configuración de AgentDefinition
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
description | string | Sí | Descripción en lenguaje natural de cuándo usar este agente |
prompt | string | Sí | El prompt del sistema del agente que define su rol y comportamiento |
tools | string[] | No | Matriz de nombres de herramientas permitidas. Si se omite, hereda todas las herramientas |
disallowedTools | string[] | No | Matriz de nombres de herramientas a eliminar del conjunto de herramientas del agente |
model | string | No | Anulación de modelo para este agente. Acepta un alias como 'sonnet', 'opus', 'haiku', 'inherit', o un ID de modelo completo. Por defecto es el modelo principal si se omite |
skills | string[] | No | Lista de nombres de skills a precargar en el contexto del agente al inicio. Los skills no listados permanecen invocables a través de la herramienta Skill |
memory | 'user' | 'project' | 'local' | No | Fuente de memoria para este agente |
mcpServers | (string | object)[] | No | Servidores MCP disponibles para este agente, por nombre o configuración en línea |
maxTurns | number | No | Número máximo de turnos de agente antes de que el agente se detenga |
background | boolean | No | Ejecutar este agente como una tarea de fondo no bloqueante cuando se invoca |
effort | 'low' | 'medium' | 'high' | 'xhigh' | 'max' | number | No | Nivel de esfuerzo de razonamiento para este agente |
permissionMode | PermissionMode | No | Modo de permiso para la ejecución de herramientas dentro de este agente |
AgentDefinition para obtener detalles.
Los subagentes no pueden generar sus propios subagentes. No incluya
Agent en la matriz tools de un subagente.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 canal 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.| El subagente recibe | El subagente no recibe |
|---|---|
Su propio prompt del sistema (AgentDefinition.prompt) y el prompt de la herramienta Agent | El historial de conversación del padre o resultados de herramientas |
CLAUDE.md del proyecto (cargado a través de settingSources) | Contenido de skill precargado, a menos que esté listado en AgentDefinition.skills |
Definiciones de herramientas (heredadas del padre, o el subconjunto en tools) | El prompt del sistema del padre |
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.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
Los subagentes se invocan 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.La estructura del mensaje difiere entre SDKs. En Python, los bloques de contenido se acceden directamente a través de
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.Reanudación de subagentes
Los subagentes pueden reanudarse para continuar donde se detuvieron. Los subagentes reanudados retienen su historial de conversación completo, incluidas todas las llamadas a herramientas anteriores, resultados y razonamiento. El subagente continúa exactamente donde se detuvo en lugar de comenzar de nuevo. Cuando un subagente se completa, Claude recibe su ID de agente en el resultado de la herramienta Agent. 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 contenido del mensaje - 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.Si está usando un agente personalizado (no uno integrado), también necesita pasar la misma definición de agente en el parámetro agents para ambas consultas.- 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(predeterminado: 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
| Caso de uso | Herramientas | Descripción |
|---|---|---|
| Análisis de solo lectura | Read, Grep, Glob | Puede examinar código pero no modificar ni ejecutar |
| Ejecución de pruebas | Bash, Read, Grep | Puede ejecutar comandos y analizar salida |
| Modificación de código | Read, Edit, Write, Grep, Glob | Acceso completo de lectura/escritura sin ejecución de comandos |
| Acceso completo | Todas las herramientas | Hereda todas las herramientas del padre (omita el campo tools) |
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, “Usa 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
Los agentes definidos en.claude/agents/ se cargan solo al inicio. Si crea un nuevo archivo de agente mientras Claude Code está en ejecución, reinicie la sesión para cargarlo.
Windows: fallos de prompt largo
En Windows, los subagentes con prompts muy largos pueden fallar debido a límites de longitud de línea de comandos (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