Los subagentes funcionan dentro de una única sesión. Para ejecutar muchas sesiones independientes en paralelo y supervisarlas desde un único lugar, consulte agentes en segundo plano. Para sesiones que se comunican entre sí, consulte equipos de agentes.
- Preservar contexto manteniendo la exploración e implementación fuera de su conversación principal
- Aplicar restricciones limitando qué herramientas puede usar un subagente
- Reutilizar configuraciones en proyectos con subagentes a nivel de usuario
- Especializar comportamiento con mensajes del sistema enfocados para dominios específicos
- Controlar costos enrutando tareas a modelos más rápidos y económicos como Haiku
Subagentes integrados
Claude Code incluye subagentes integrados que Claude utiliza automáticamente cuando es apropiado. Cada uno hereda los permisos de la conversación principal con restricciones de herramientas adicionales. Explore y Plan omiten sus archivos CLAUDE.md y el estado de git de la sesión principal para mantener la investigación rápida y económica. Todos los demás subagentes integrados y subagentes personalizados cargan ambos. Para el desglose completo de lo que llega a un subagente, consulte qué se carga al iniciar.- Explore
- Plan
- General-purpose
- Other
Un agente rápido y de solo lectura optimizado para buscar y analizar bases de código.
- Modelo: hereda de la conversación principal, limitado a Opus en la API de Claude, por lo que Explore nunca se ejecuta en un modelo más costoso que el que ya eligió para la sesión
- Herramientas: herramientas de solo lectura; Write y Edit están denegados
- Propósito: descubrimiento de archivos, búsqueda de código, exploración de base de código
Explore anula el integrado y mantiene su propio campo model, así que defina uno con model: haiku para mantener la exploración en un modelo de menor costo.Claude delega en Explore cuando necesita buscar o entender una base de código sin hacer cambios. Esto mantiene los resultados de exploración fuera del contexto de su conversación principal.Al invocar Explore, Claude especifica un nivel de minuciosidad: quick para búsquedas dirigidas, medium para exploración equilibrada, o very thorough para análisis exhaustivo.- Para bloquear un tipo integrado específico, agréguelo a
permissions.denycomo se muestra en Deshabilitar subagentes específicos. - Para evitar que Claude delegue a cualquier subagente, deniegue la herramienta
Agenten sí conpermissions.deny. - Para eliminar solo los subagentes integrados
ExploreyPlan, establezcaCLAUDE_CODE_DISABLE_EXPLORE_PLAN_AGENTS=1. Claude lee y explora archivos directamente en lugar de delegarlos. Requiere Claude Code v2.1.198 o posterior. - En modo no interactivo y el Agent SDK, establezca
CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS=1para eliminar todos los tipos integrados y proporcionar solo los suyos.
Inicio rápido: crear su primer subagente
Los subagentes son archivos Markdown con frontmatter YAML. Para crear uno, pida a Claude que lo escriba por usted, o escriba el archivo usted mismo. A partir de v2.1.198, el comando/agents ya no abre el asistente de creación interactivo; ejecutarlo imprime un recordatorio para pedir a Claude o editar .claude/agents/ directamente. Los archivos de subagentes, los campos de frontmatter y las ubicaciones .claude/agents/ y ~/.claude/agents/ no cambian; solo se elimina el asistente de terminal.
Este tutorial crea un subagente a nivel de usuario que revisa código y sugiere mejoras.
1
Pida a Claude que cree el subagente
En Claude Code, describa el subagente que desea y dónde guardarlo:Claude escribe el archivo con un
name, una description, una lista de tools, un model y un mensaje del sistema.2
Revise el archivo
Abra Debido a que el archivo se encuentra en
~/.claude/agents/code-improver.md y confirme que el frontmatter coincida con lo que pidió. El resultado se ve así:~/.claude/agents/, el subagente está disponible en cada proyecto en su máquina. Para limitarlo a un proyecto, muévalo al directorio .claude/agents/ de ese proyecto. Elija el alcance del subagente compara los dos.3
Pruébelo
Pida a Claude que delegue en el nuevo subagente:Claude delega en su nuevo subagente, que escanea la base de código y devuelve sugerencias de mejora.Si Claude no puede encontrar el nuevo subagente, reinicie Claude Code e intente de nuevo. Esto sucede solo cuando
~/.claude/agents/ no existía antes de que la sesión comenzara, porque una sesión en ejecución no detecta un directorio agents recién creado.En Claude Code v2.1.197 y anteriores,
/agents abre un asistente interactivo con una pestaña Running que enumera los subagentes activos y una pestaña Library para crearlos, editarlos y eliminarlos. Configurar subagentes
La ubicación del archivo de un subagente determina quién tiene acceso a él, y su frontmatter determina qué puede hacer. Esta sección cubre dónde viven los archivos de subagentes y cada campo que soportan.Elegir el alcance del subagente
Almacene archivos de subagentes en diferentes ubicaciones según el alcance. Cuando múltiples subagentes comparten el mismo nombre, Claude Code usa el de la ubicación de mayor prioridad.
Los subagentes de proyecto (
.claude/agents/) son ideales para subagentes específicos de una base de código. Verifíquelos en control de versiones para que su equipo pueda usarlos y mejorarlos colaborativamente.
Los subagentes de proyecto se descubren caminando hacia arriba desde el directorio de trabajo actual, por lo que cada .claude/agents/ entre allí y la raíz del repositorio se escanea. A partir de v2.1.178, cuando más de uno de estos directorios anidados define el mismo name, Claude Code usa la definición más cercana al directorio de trabajo.
Los directorios agregados con --add-dir también se escanean: una carpeta .claude/agents/ dentro de un directorio agregado se carga junto con subagentes de proyecto. Consulte Directorios adicionales para ver qué otros tipos de configuración se cargan desde --add-dir. Para compartir subagentes entre proyectos sin --add-dir, use ~/.claude/agents/ o un plugin.
Los subagentes de usuario (~/.claude/agents/) son subagentes personales disponibles en todos sus proyectos.
Claude Code escanea .claude/agents/ y ~/.claude/agents/ recursivamente, por lo que puede organizar definiciones en subcarpetas como agents/review/ o agents/research/. La ruta del subdirectorio no afecta cómo se identifica o invoca un subagente, porque la identidad proviene solo del campo name del frontmatter.
Mantenga los valores de name únicos en todo el árbol: si dos archivos bajo el mismo directorio .claude/agents/, incluyendo sus subcarpetas, declaran el mismo nombre, Claude Code carga solo uno de ellos, elegido por orden de lectura del sistema de archivos en lugar de una precedencia documentada. En directorios de proyecto anidados, la definición más cercana al directorio de trabajo gana, como se describe arriba. El chequeo de configuración /doctor reporta archivos en el mismo directorio que comparten un nombre y propone renombrar o eliminar todos excepto uno. Antes de v2.1.205, /doctor abría una pantalla de diagnósticos que listaba duplicados y mostraba qué definición estaba activa.
Los directorios agents/ de plugins también se escanean recursivamente. A diferencia de los alcances de proyecto y usuario, una subcarpeta dentro del directorio agents/ de un plugin se convierte en parte del identificador con alcance: un archivo en agents/review/security.md en el plugin my-plugin se registra como my-plugin:review:security.
Los subagentes definidos por CLI se pasan como JSON al lanzar Claude Code. Existen solo para esa sesión y no se guardan en disco, lo que los hace útiles para pruebas rápidas o scripts de automatización. Puede definir múltiples subagentes en una única llamada --agents:
- macOS, Linux, WSL
- Windows PowerShell
--agents acepta JSON con los mismos campos de frontmatter que los subagentes basados en archivos: description, prompt, tools, disallowedTools, model, permissionMode, mcpServers, hooks, maxTurns, skills, initialPrompt, memory, effort, background, isolation y color. Use prompt para el mensaje del sistema, equivalente al cuerpo markdown en subagentes basados en archivos.
Los subagentes administrados son implementados por administradores de la organización. Coloque archivos markdown en .claude/agents/ dentro del directorio de configuración administrada, usando el mismo formato de frontmatter que los subagentes de proyecto y usuario. Las definiciones administradas tienen precedencia sobre los subagentes de proyecto y usuario con el mismo nombre.
Los subagentes de plugin provienen de plugins que ha instalado. Se cargan junto a sus subagentes personalizados y aparecen en la lista de @-mention bajo su nombre con alcance. Consulte la referencia de componentes de plugin para obtener detalles sobre la creación de subagentes de plugin.
Por razones de seguridad, los subagentes de plugin no soportan los campos de frontmatter
hooks, mcpServers, o permissionMode. Estos campos se ignoran al cargar agentes desde un plugin. Si los necesita, copie el archivo del agente en .claude/agents/ o ~/.claude/agents/. También puede agregar reglas a permissions.allow en settings.json o settings.local.json, pero estas reglas se aplican a toda la sesión, no solo al subagente del plugin.tools y model, con el cuerpo de la definición anexado al mensaje del sistema del compañero como instrucciones adicionales. Consulte equipos de agentes para ver qué campos de frontmatter se aplican en esa ruta.
Escribir archivos de subagentes
Los archivos de subagentes usan frontmatter YAML para configuración, seguido del mensaje del sistema en Markdown:Claude Code observa
~/.claude/agents/ y .claude/agents/. Cuando agrega o edita un archivo de subagente en disco, o pide a Claude que escriba uno para usted, Claude Code detecta el cambio dentro de unos pocos segundos y la siguiente delegación usa la definición actualizada, sin necesidad de reinicio.Dos casos aún necesitan un reinicio:- El observador cubre solo directorios que existían cuando comenzó la sesión, por lo que después de crear el primer archivo de agente de un alcance en un nuevo directorio
agents, reinicie para cargarlo. - Las sesiones iniciadas con
--disable-slash-commandsno observan estos directorios en absoluto.
--append-subagent-system-prompt añade el texto que proporciona al final del mensaje del sistema de cada subagente, incluyendo subagentes anidados. Requiere Claude Code v2.1.205 o posterior.
Un subagente comienza en el directorio de trabajo actual de la conversación principal. Dentro de un subagente, los comandos cd no persisten entre llamadas de herramientas Bash o PowerShell y no afectan el directorio de trabajo de la conversación principal. Para dar al subagente una copia aislada del repositorio en su lugar, establezca isolation: worktree.
Un subagente con isolation: worktree ejecuta sus comandos Bash y PowerShell dentro de su worktree. Un comando cuyo directorio de trabajo se resuelve a su checkout principal en su lugar, por ejemplo porque el directorio worktree fue eliminado mientras el subagente estaba ejecutándose, falla con un error. Antes de v2.1.203, tal comando podría ejecutarse en el checkout principal.
Campos de frontmatter soportados
Los siguientes campos se pueden usar en el frontmatter YAML. Soloname y description son requeridos.
Elegir un modelo
El campomodel controla qué modelo de IA usa el subagente:
- Alias de modelo: Use uno de los alias disponibles:
sonnet,opus,haiku, ofable - ID de modelo completo: Use un ID de modelo completo como
claude-opus-4-8oclaude-sonnet-5. Acepta los mismos valores que la bandera--model - inherit: Use el mismo modelo que la conversación principal
- Omitido: Si no se especifica, por defecto es
inherit(usa el mismo modelo que la conversación principal)
model para esa invocación específica. Claude Code resuelve el modelo del subagente en este orden:
- La variable de entorno
CLAUDE_CODE_SUBAGENT_MODEL, cuando está establecida en un alias de modelo o ID de modelo - El parámetro
modelpor invocación - El frontmatter
modelde la definición del subagente - El modelo de la conversación principal
CLAUDE_CODE_SUBAGENT_MODEL en inherit es lo mismo que dejarlo sin establecer: la resolución continúa con el parámetro model por invocación, luego el frontmatter. En versiones anteriores, inherit forzaba subagentes al modelo de la conversación principal e ignoraba ambas fuentes.
Claude Code verifica la variable de entorno, el parámetro por invocación y los valores de frontmatter contra la lista de permitidos availableModels de su organización. Un valor que se resuelve a un modelo excluido no se usa y el subagente se ejecuta en el modelo heredado en su lugar.
A partir de v2.1.198, los subagentes también heredan la configuración de pensamiento extendido de la conversación principal: si el pensamiento está activado en su sesión, está activado para el subagente, y si está desactivado, permanece desactivado. No hay una configuración de pensamiento por subagente. Antes de v2.1.198, los subagentes se ejecutaban con pensamiento extendido deshabilitado independientemente de la configuración de la conversación principal.
Controlar capacidades de subagentes
Puede controlar qué pueden hacer los subagentes a través del acceso a herramientas, modos de permisos y reglas condicionales.Herramientas disponibles
Los subagentes heredan las herramientas internas y herramientas MCP disponibles en la conversación principal por defecto. Las siguientes herramientas dependen de la interfaz de usuario o estado de sesión de la conversación principal y no están disponibles para subagentes, incluso cuando se enumeran en el campotools:
AskUserQuestionEnterPlanModeExitPlanMode, a menos que elpermissionModedel subagente seaplanScheduleWakeupWaitForMcpServers
tools (lista blanca) o el campo disallowedTools (lista negra). Este ejemplo usa tools para permitir exclusivamente Read, Grep, Glob y Bash. El subagente no puede editar archivos, escribir archivos, o usar ninguna herramienta MCP:
disallowedTools para heredar todas las herramientas de la conversación principal excepto Write y Edit. El subagente mantiene Bash, herramientas MCP y todo lo demás:
disallowedTools se aplica primero, luego tools se resuelve contra el grupo restante. Una herramienta listada en ambos se elimina.
Cuando nada en la lista tools se resuelve a una herramienta, por ejemplo porque cada entrada está mal escrita o nombra una herramienta que no está disponible para subagentes, Claude Code se niega a lanzar el subagente y la herramienta Agent devuelve un error nombrando las entradas no resueltas. Antes de v2.1.208, ese subagente se lanzaba sin herramientas y podría devolver un resultado vacío o confuso.
Ambos campos aceptan patrones a nivel de servidor MCP además de nombres de herramientas exactos: mcp__<server> o mcp__<server>__* otorga o elimina todas las herramientas del servidor nombrado. En disallowedTools, mcp__* también elimina todas las herramientas MCP de cualquier servidor. Este ejemplo elimina todas las herramientas del servidor MCP github mientras mantiene herramientas de otros servidores y todas las herramientas integradas:
Restringir qué subagentes pueden ser generados
Cuando un agente se ejecuta como el hilo principal conclaude --agent, puede generar subagentes usando la herramienta Agent. Para restringir qué tipos de subagentes puede generar, use la sintaxis Agent(agent_type) en el campo tools.
En la versión 2.1.63, la herramienta Task fue renombrada a Agent. Las referencias existentes a
Task(...) en configuraciones y definiciones de agentes aún funcionan como alias.worker y researcher pueden ser generados. Si el agente intenta generar cualquier otro tipo, la solicitud falla y el agente solo ve los tipos permitidos en su mensaje. Para bloquear agentes específicos mientras se permiten todos los demás, use permissions.deny en su lugar.
Para permitir generar cualquier subagente sin restricciones, use Agent sin paréntesis:
Agent se omite completamente de la lista tools, el agente no puede generar ningún subagente.
La sintaxis de lista blanca Agent(agent_type) se aplica solo a un agente que se ejecuta como el hilo principal con claude --agent. En una definición de subagente, listar Agent en tools permite que ese subagente genere subagentes anidados, pero cualquier lista de tipos dentro de los paréntesis se ignora.
Alcance de servidores MCP a un subagente
Use el campomcpServers para dar a un subagente acceso a servidores MCP que no están disponibles en la conversación principal. Los servidores en línea definidos aquí se conectan cuando el subagente comienza y se desconectan cuando termina. Las referencias de cadena comparten la conexión de la sesión principal.
El campo
mcpServers se aplica en ambos contextos donde un archivo de agente puede ejecutarse:- Como un subagente, generado a través de la herramienta Agent o una @-mención
- Como la sesión principal, lanzada con
--agento la configuraciónagent
.mcp.json y archivos de configuración..mcp.json, con clave del nombre del servidor, y soportan los tipos stdio, http, sse y ws.
Para mantener un servidor MCP fuera de la conversación principal por completo y evitar que sus descripciones de herramientas consuman contexto allí, defínalo en línea aquí en lugar de en .mcp.json. El subagente obtiene las herramientas; la conversación principal no.
A partir de v2.1.153, las restricciones de MCP que se aplican a la sesión principal también cubren servidores declarados en frontmatter de subagentes:
--strict-mcp-configy--bare- Configuración de MCP administrada empresarial
- Políticas
allowedMcpServersydeniedMcpServers
--strict-mcp-config no filtra servidores que pase en línea a través de --agents o la opción agents del SDK, ya que esa es entrada explícita del llamador.
Modos de permiso
El campopermissionMode controla cómo el subagente maneja solicitudes de permiso. Los subagentes heredan el contexto de permiso de la conversación principal y pueden anular el modo, excepto cuando el modo principal tiene precedencia como se describe a continuación.
Si el principal usa
bypassPermissions o acceptEdits, esto tiene precedencia y no puede ser anulado. Si el principal usa modo auto, el subagente hereda modo auto y cualquier permissionMode en su frontmatter se ignora: el clasificador evalúa las llamadas de herramientas del subagente con las mismas reglas de bloqueo y permiso que la sesión principal.
Precargar skills en subagentes
Use el camposkills para inyectar contenido de skill en el contexto de un subagente al inicio. Esto da al subagente conocimiento de dominio sin requerir que descubra y cargue skills durante la ejecución.
Skill de la lista tools o agréguelo a disallowedTools.
No puede precargar skills que establezcan disable-model-invocation: true, ya que la precarga se extrae del mismo conjunto de skills que Claude puede invocar. Si una skill listada falta o está deshabilitada, Claude Code la omite y registra una advertencia en el registro de depuración.
Esto es lo inverso de ejecutar una skill en un subagente. Con
skills en un subagente, el subagente controla el mensaje del sistema y carga contenido de skill. Con context: fork en una skill, el contenido de la skill se inyecta en el agente que especifique. Ambos usan el mismo sistema subyacente.Habilitar memoria persistente
El campomemory da al subagente un directorio persistente que sobrevive entre conversaciones. El subagente usa este directorio para acumular conocimiento con el tiempo, como patrones de base de código, insights de depuración y decisiones arquitectónicas.
Cuando la memoria está habilitada:
- El mensaje del sistema del subagente incluye instrucciones para leer y escribir en el directorio de memoria.
- El mensaje del sistema del subagente también incluye las primeras 200 líneas o 25KB de
MEMORY.mden el directorio de memoria, lo que sea menor, con instrucciones para curarMEMORY.mdsi excede ese límite. - Las herramientas Read, Write y Edit se habilitan automáticamente para que el subagente pueda administrar sus archivos de memoria.
-
projectes el alcance predeterminado recomendado. Hace que el conocimiento del subagente sea compartible a través de control de versiones. - Pida al subagente que consulte su memoria antes de comenzar el trabajo: “Review this PR, and check your memory for patterns you’ve seen before.”
- Pida al subagente que actualice su memoria después de completar una tarea: “Now that you’re done, save what you learned to your memory.” Con el tiempo, esto construye una base de conocimiento que hace que el subagente sea más efectivo.
-
Incluya instrucciones de memoria directamente en el archivo markdown del subagente para que mantenga proactivamente su propia base de conocimiento:
Reglas condicionales con hooks
Para un control más dinámico sobre el uso de herramientas, use hooksPreToolUse para validar operaciones antes de que se ejecuten. Esto es útil cuando necesita permitir algunas operaciones de una herramienta mientras bloquea otras.
Este ejemplo crea un subagente que solo permite consultas de base de datos de solo lectura. El hook PreToolUse ejecuta el script especificado en command antes de que se ejecute cada comando Bash:
shell: powershell a la entrada del hook como se muestra en ejecutar hooks en PowerShell.
Deshabilitar subagentes específicos
Puede evitar que Claude use subagentes específicos agregándolos a la matrizdeny en su configuración. Use el formato Agent(subagent-name) donde subagent-name coincida con el campo name del subagente.
--disallowedTools:
Definir hooks para subagentes
Los subagentes pueden definir hooks que se ejecutan durante el ciclo de vida del subagente. Hay dos formas de configurar hooks:- En el frontmatter del subagente: defina hooks que se ejecuten solo mientras ese subagente está activo
- En
settings.json: defina hooks que se ejecuten en la sesión principal cuando los subagentes comienzan o se detienen
Hooks en frontmatter de subagentes
Defina hooks directamente en el archivo markdown del subagente. Estos hooks solo se ejecutan mientras ese subagente específico está activo y se limpian cuando termina.Los hooks de frontmatter se disparan cuando el agente se genera como un subagente a través de la herramienta Agent o una @-mención, y cuando el agente se ejecuta como la sesión principal a través de
--agent o la configuración agent. En el caso de sesión principal, se ejecutan junto con cualquier hook definido en settings.json.
Este ejemplo valida comandos Bash con el hook
PreToolUse y ejecuta un linter después de ediciones de archivo con PostToolUse:
Stop en frontmatter se convierten automáticamente a eventos SubagentStop.
Hooks a nivel de proyecto para eventos de subagentes
Configure hooks ensettings.json que respondan a eventos de ciclo de vida de subagentes en la sesión principal.
Ambos eventos soportan matchers para dirigirse a tipos de agentes específicos por nombre. El valor del matcher es el
name del frontmatter del agente para subagentes a nivel de proyecto y usuario, o el identificador con alcance de plugin como my-plugin:db-agent para subagentes de plugin. Un nombre con alcance contiene dos puntos, por lo que se evalúa como una expresión regular sin anclar; anclarlo con ^ y $, como en ^my-plugin:db-agent$, para coincidir solo con ese agente.
Este ejemplo ejecuta un script de configuración solo cuando el subagente db-agent comienza, y un script de limpieza cuando cualquier subagente se detiene:
db-agent coincide exactamente en Claude Code v2.1.195 o posterior. En versiones anteriores se evalúa como una expresión regular sin anclar y también se dispara para cualquier tipo de agente que lo contenga, como prod-db-agent; anclarlo como ^db-agent$ en esas versiones.
Consulte Hooks para el formato de configuración de hook completo.
Trabajar con subagentes
Entender delegación automática
Claude delega automáticamente tareas basadas en la descripción de la tarea en su solicitud, el campodescription en configuraciones de subagentes y el contexto actual. Para alentar delegación proactiva, incluya frases como “use proactively” en el campo description de su subagente.
Invocar subagentes explícitamente
Cuando la delegación automática no es suficiente, puede solicitar un subagente usted mismo. Tres patrones escalan desde una sugerencia única a un valor predeterminado de sesión completa:- Lenguaje natural: nombre el subagente en su solicitud; Claude decide si delegar
- @-mention: garantiza que el subagente se ejecute para una tarea
- Sesión completa: toda la sesión usa el mensaje del sistema del subagente, restricciones de herramientas y modelo a través de la bandera
--agento la configuraciónagent
@ y elija el subagente del typeahead, de la misma manera que @-menciona archivos. Esto asegura que ese subagente específico se ejecute en lugar de dejar la opción a Claude:
my-plugin:code-reviewer o my-plugin:review:security cuando el plugin organiza agentes en subcarpetas. Los subagentes de fondo nombrados actualmente en ejecución en la sesión también aparecen en el typeahead, mostrando su estado junto al nombre.
Puede también escribir la mención manualmente sin usar el selector: @agent-<name> para subagentes locales, o @agent- seguido del nombre con alcance para subagentes de plugin, por ejemplo @agent-my-plugin:code-reviewer.
Ejecute toda la sesión como un subagente. Pase --agent <name> para iniciar una sesión donde el hilo principal en sí toma el mensaje del sistema del subagente, restricciones de herramientas y modelo:
--system-prompt lo hace. Los archivos CLAUDE.md y la memoria del proyecto aún se cargan a través del flujo de mensajes normal. El nombre del agente aparece como @<name> en el encabezado de inicio para que pueda confirmar que está activo.
Esto funciona con subagentes integrados y personalizados, y la opción persiste cuando reanuda la sesión.
Para un subagente proporcionado por plugin, puede pasar solo el nombre del agente y Claude Code lo encontrará:
agents/, incluya la subcarpeta en el nombre con alcance, por ejemplo claude --agent my-plugin:review:security.
Para hacerlo el predeterminado para cada sesión en un proyecto, establezca agent en .claude/settings.json:
Ejecutar subagentes en primer plano o fondo
Los subagentes pueden ejecutarse en primer plano o en fondo:- Subagentes en primer plano bloquean la conversación principal hasta completarse. Las solicitudes de permiso se le pasan a usted a medida que surgen.
- Subagentes en fondo se ejecutan concurrentemente mientras continúa trabajando. A partir de v2.1.186, cuando un subagente en fondo alcanza una llamada de herramienta que necesita permiso, la solicitud aparece en su sesión principal y nombra el subagente que está preguntando. Apruebe para permitir que el subagente continúe, o presione Esc para denegar esa llamada de herramienta sin detener el subagente. Antes de v2.1.186, los subagentes en fondo denegaban automáticamente cualquier llamada de herramienta que habría solicitado.
- Pida a Claude que ejecute una tarea en el fondo o en primer plano
- Presione Ctrl+B para poner en fondo una tarea en ejecución
/tasks, marcado como hecho y ordenado debajo del trabajo en ejecución, hasta que la sesión limpie su lista de tareas. Su vista de detalle permanece abierta cuando el subagente termina. Los subagentes que fallan o que usted detiene dejan la lista. Antes de v2.1.208, un subagente completado dejaba la lista en el momento en que terminaba y su vista de detalle se cerraba.
Para deshabilitar toda la funcionalidad de tareas en fondo, establezca la variable de entorno CLAUDE_CODE_DISABLE_BACKGROUND_TASKS en 1. Consulte Variables de entorno.
Cuando CLAUDE_CODE_FORK_SUBAGENT está establecido en 1, cada generación de subagente se ejecuta en el fondo y el campo frontmatter background no tiene efecto, porque el modo fork elimina el parámetro run_in_background de la herramienta Agent. CLAUDE_CODE_DISABLE_BACKGROUND_TASKS tiene precedencia sobre el modo fork y mantiene las generaciones de subagentes en primer plano.
Errores de API en subagentes
A partir de v2.1.199, un subagente cuya ejecución termina en un error de API, como un límite de uso o un error de servidor repetido, reporta esa falla de vuelta a Claude en lugar de devolver el texto de error como si fueran los hallazgos del subagente. Lo que Claude recibe depende de dónde se ejecutó el subagente:- Primer plano: si un límite de velocidad, sobrecarga o error de servidor corta un subagente que ya produjo salida, la herramienta Agent devuelve esa salida parcial con una nota de que el subagente fue cortado y no completó su tarea. Un subagente que no produjo nada, o cuya única salida fueron llamadas de herramientas, falla con
Agent terminated early due to an API error, seguido del detalle del error. En v2.1.199, un límite de velocidad, sobrecarga o error de servidor que cortó la forma de solo llamadas de herramientas devolvió un resultado parcial vacío que contenía solo la nota de corte en su lugar. - Fondo: el subagente se marca como fallido, y el mensaje que Claude recibe cuando termina nombra el error de API e incluye la última salida del subagente, por lo que el trabajo parcial no se pierde.
Patrones comunes
Aislar operaciones de alto volumen
Uno de los usos más efectivos para subagentes es aislar operaciones que producen grandes cantidades de salida. Ejecutar pruebas, obtener documentación o procesar archivos de registro puede consumir contexto significativo. Al delegar estos a un subagente, la salida detallada permanece en el contexto del subagente mientras solo el resumen relevante regresa a su conversación principal.Ejecutar investigación en paralelo
Para investigaciones independientes, genere múltiples subagentes para trabajar simultáneamente:Encadenar subagentes
Para flujos de trabajo de múltiples pasos, pida a Claude que use subagentes en secuencia. Cada subagente completa su tarea y devuelve resultados a Claude, que luego pasa contexto relevante al siguiente subagente.Elegir entre subagentes y conversación principal
Use la conversación principal cuando:- La tarea necesita ida y vuelta frecuente o refinamiento iterativo
- Múltiples fases comparten contexto significativo, como planificación, implementación y prueba
- Está haciendo un cambio rápido y dirigido
- La latencia importa. Los subagentes comienzan frescos y pueden necesitar tiempo para recopilar contexto
- La tarea produce salida detallada que no necesita en su contexto principal
- Desea aplicar restricciones de herramientas específicas o permisos
- El trabajo es autónomo y puede devolver un resumen
/btw en lugar de un subagente. Ve su contexto completo pero no tiene acceso a herramientas, y la respuesta se descarta en lugar de agregarse al historial.
Generar subagentes anidados
A partir de Claude Code v2.1.172, un subagente puede generar sus propios subagentes. Use esto cuando una tarea delegada se divide en subtareas paralelas, como un subagente revisor que distribuye un verificador por hallazgo, de modo que la salida intermedia nunca llegue a su conversación principal. Solo el resumen del subagente de nivel superior regresa a usted. Un subagente anidado se configura de la misma manera que uno de nivel superior y se resuelve desde los mismos alcances. El panel de subagentes debajo de la entrada de solicitud muestra el árbol completo: cada fila muestra un recuento(+N) de descendientes, y a partir de v2.1.193, abrir una fila muestra los hermanos de ese subagente e hijos directos con una ruta de regreso a main.
La profundidad se cuenta como el número de niveles de subagentes debajo de la conversación principal, independientemente de si cada nivel se ejecuta en primer plano o fondo. Un subagente a profundidad cinco no recibe la herramienta Agent y no puede generar más. El límite es fijo y no configurable.
A partir de Claude Code v2.1.187, la profundidad de un subagente en fondo se fija cuando se genera por primera vez, y reanudar más tarde no cambia esa profundidad. Por ejemplo, si su conversación principal genera el subagente A, y A genera un subagente en fondo B a profundidad dos, B sigue siendo a profundidad dos cuando lo reanuda directamente desde la conversación principal. Reanudar un subagente desde un contexto más superficial no le permite generar niveles adicionales que el límite de profundidad ya impidió.
Para prevenir que un subagente específico genere otros, omita Agent de su lista tools o añádalo a disallowedTools.
Un fork aún no puede generar otro fork. Puede generar otros tipos de subagentes, y esos cuentan hacia el límite de profundidad.
Administrar contexto de subagentes
Qué se carga al inicio
Cada subagente comienza con una ventana de contexto fresca e aislada. No ve su historial de conversación, las habilidades que ya ha invocado, o los archivos que Claude ya ha leído. Claude compone un mensaje de delegación que resume la tarea, y el subagente trabaja a partir de ahí. La excepción es un fork, que hereda la conversación principal en lugar de comenzar de nuevo. El contexto inicial de un subagente que no es fork contiene:- Mensaje del sistema: el mensaje del agente propio más detalles de entorno que Claude Code añade, no el mensaje del sistema completo de Claude Code. Los subagentes personalizados definen el suyo en el cuerpo markdown o campo
prompt. Los agentes integrados tienen mensajes predefinidos. - Mensaje de tarea: el mensaje de delegación que Claude escribe cuando entrega el trabajo.
- CLAUDE.md y memoria: cada nivel de la jerarquía de memoria que la conversación principal carga, incluyendo
~/.claude/CLAUDE.md, reglas del proyecto,CLAUDE.local.mdy archivos de política administrados. Los agentes Explore y Plan integrados omiten esto. - Estado de Git: una instantánea tomada al inicio de la sesión principal. Ausente cuando el directorio de trabajo no es un repositorio de Git o cuando
includeGitInstructionsesfalse. Explore y Plan lo omiten de todas formas. - Habilidades precargadas: contenido completo de cualquier habilidad nombrada en el campo
skillsdel agente. Los agentes integrados no precargan habilidades. - Roster de hermanos: un recordatorio del sistema que enumera
mainy cada otro agente nombrado en la sesión, cada uno un valortoválido paraSendMessage. Requiere Claude Code v2.1.206 o posterior. El roster aparece solo cuando las herramientas del subagente incluyenSendMessagey al menos otro agente tiene un nombre, ya sea que Claude lo nombró cuando lo generó o se ejecuta como un compañero de equipo de agentes. Es una instantánea tomada cuando el subagente comienza, por lo que los agentes nombrados más tarde no aparecen.
vendor/”, restate la en el mensaje que da a Claude cuando delega.
Reanudar subagentes
Cada invocación de subagente crea una nueva instancia con contexto fresco. Para continuar el trabajo de un subagente existente en lugar de comenzar de nuevo, pida a Claude que lo reanude. Los subagentes reanudados retienen su historial de conversación completo, incluyendo todas las llamadas de 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. Los agentes integrados Explore y Plan son de una sola ejecución y no devuelven ID de agente, por lo que no pueden reanudarse; usegeneral-purpose o un subagente personalizado cuando necesite continuar el trabajo.
Claude usa la herramienta SendMessage con el ID del agente o nombre como campo to para reanudarlo. SendMessage no requiere que equipos de agentes estén habilitados; solo los mensajes de protocolo de equipo estructurados como shutdown_request y plan_approval_response lo hacen.
Para reanudar un subagente, pida a Claude que continúe el trabajo anterior:
SendMessage se reanuda automáticamente en el fondo sin una nueva invocación de Agent. Lo mismo aplica a un subagente que Claude detuvo con la herramienta TaskStop.
A partir de v2.1.191, un subagente que usted detuvo, con x en /tasks o una solicitud SDK stop_task, no se reanuda automáticamente. La llamada SendMessage devuelve un rechazo diciéndole a Claude que el agente fue cancelado. Escriba en la transcripción de ese subagente en el panel de subagentes para reanudarlo usted mismo, lo que borra la parada para que llamadas SendMessage posteriores puedan reanudarlo automáticamente de nuevo.
Reanudar inicia una nueva ejecución del agente bajo el mismo ID, por lo que un subagente que ya había fallado o completado se muestra como ejecutándose de nuevo en la lista de tareas y en los eventos de tareas del SDK del Agent. Antes de v2.1.205, seguía mostrando su estado anterior fallido o completado mientras la ejecución reanudada estaba funcionando.
A partir de v2.1.199, SendMessage verifica que un nombre aún se refiera al mismo agente que alcanzó anteriormente en la conversación. Si un agente más nuevo ha tomado el nombre, como un subagente en fondo re-generado que lo reutilizó, Claude Code rechaza el envío en lugar de entregarlo al agente incorrecto, y el error reporta qué agente el nombre ahora alcanza para que Claude pueda redirigirse. Para alcanzar el agente anterior mientras aún se está ejecutando, Claude lo dirige por el ID del agente del resultado de generación. La verificación se limita a la conversación actual y se reinicia en /clear.
A partir de v2.1.198, un subagente trata los mensajes del agente que lo lanzó como dirección de tarea normal, incluyendo correcciones de curso a mitad de tarea, y actúa sobre ellos dentro de su propia configuración de permisos. Dos límites aún se mantienen independientemente de quién envió el mensaje: ningún mensaje de ningún agente cuenta como su aprobación para una solicitud de permiso pendiente, y ningún mensaje de agente puede cambiar la configuración de permisos de un subagente, CLAUDE.md o configuración. Solo el sistema de permisos o sus propios mensajes pueden otorgar aprobación.
También puede pedir a Claude el ID del agente si desea referenciarlo explícitamente, o encontrar IDs en los archivos de transcripción en ~/.claude/projects/{project}/{sessionId}/subagents/. Cada transcripción se almacena como agent-{agentId}.jsonl.
Las transcripciones de subagentes persisten independientemente de la conversación principal:
- 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 basadas en la configuración
cleanupPeriodDays, que por defecto es 30 días.
Auto-compactación
Los subagentes soportan compactación automática usando la misma lógica que la conversación principal. La compactación se dispara bajo las mismas condiciones, yCLAUDE_AUTOCOMPACT_PCT_OVERRIDE se aplica a subagentes también. Consulte variables de entorno para cuándo entra en vigor el override.
Los eventos de compactación se registran en archivos de transcripción de subagentes:
preTokens muestra cuántos tokens se usaron antes de que ocurriera la compactación.
Bifurcar la conversación actual
Los subagentes bifurcados requieren Claude Code v2.1.117 o posterior. A partir de v2.1.161, el comando
/fork está habilitado de forma predeterminada; en versiones anteriores requiere establecer la variable de entorno CLAUDE_CODE_FORK_SUBAGENT en 1. Permitir que Claude mismo genere bifurcaciones es experimental y puede cambiar en futuras versiones. Esta capacidad también puede habilitarse en sesiones interactivas como parte de un lanzamiento por fases.CLAUDE_CODE_FORK_SUBAGENT en 1 para habilitarlo explícitamente o en 0 para deshabilitarlo. La variable se respeta en modo interactivo y a través del SDK o claude -p.
Habilitar el modo fork cambia Claude Code de dos maneras:
- Claude puede generar un fork solicitando explícitamente el tipo de subagente
fork. Los spawns sin un tipo de subagente aún utilizan el subagente general-purpose, y los subagentes nombrados como Explore aún se generan como antes. - Cada generación de subagente se ejecuta en el fondo, ya sea un fork o un subagente nombrado. Establezca
CLAUDE_CODE_DISABLE_BACKGROUND_TASKSen1para mantener los spawns síncronos.
/fork seguido de una directiva, con o sin la variable establecida. Claude Code nombra el fork a partir de las primeras palabras de la directiva. El siguiente ejemplo bifurca la conversación para redactar casos de prueba mientras continúa con la implementación en la sesión principal:
Observar y dirigir forks en ejecución
Los forks en ejecución aparecen en un panel debajo de la entrada de solicitud, con una fila para la sesión principal y una para cada fork. Use estas teclas para interactuar con el panel:
Con la transcripción de un fork o subagente abierta, los mensajes de seguimiento y las skills van a ese agente, pero los comandos integrados aún se ejecutan en su conversación principal. A partir de v2.1.199, escribir
/model o /fast en esa vista muestra un aviso de que cambia el modelo de la conversación principal o el modo rápido, no el del agente visto, en lugar de ejecutarlo silenciosamente.
Cómo los forks difieren de los subagentes nombrados
Un fork hereda todo lo que la sesión principal tiene en el momento en que se genera. Un subagente nombrado comienza desde su propia definición.
Porque el mensaje del sistema del fork y las definiciones de herramientas son idénticas al principal, su primera solicitud reutiliza la caché de solicitud del principal. Esto hace que bifurcar sea más económico que generar un subagente fresco para tareas que necesitan el mismo contexto.
Cuando Claude genera un fork a través de la herramienta Agent, puede pasar
isolation: "worktree" para que las ediciones de archivo del fork se escriban en un git worktree separado en lugar de su checkout.
Limitaciones
EstablecerCLAUDE_CODE_FORK_SUBAGENT=1 habilita el modo fork en sesiones interactivas, modo no interactivo, y el Agent SDK; establecerlo en 0 deshabilita el modo fork en todas partes, incluido cualquier lanzamiento del lado del servidor. Un fork no puede generar más forks.
Subagentes de ejemplo
Estos ejemplos demuestran patrones efectivos para construir subagentes. Úselos como puntos de partida, o genere una versión personalizada con Claude.Revisor de código
Un subagente de solo lectura que revisa código sin modificarlo. Este ejemplo muestra cómo diseñar un subagente enfocado con acceso limitado a herramientas que excluye Edit y Write, y un mensaje detallado que especifica exactamente qué buscar y cómo formatear la salida.Depurador
Un subagente que puede analizar y corregir problemas. A diferencia del revisor de código, este incluye Edit porque corregir errores requiere modificar código. El mensaje proporciona un flujo de trabajo claro desde diagnóstico hasta verificación.Científico de datos
Un subagente específico de dominio para trabajo de análisis de datos. Este ejemplo muestra cómo crear subagentes para flujos de trabajo especializados fuera de tareas de codificación típicas. Establece explícitamentemodel: sonnet para análisis más capaz.
Validador de consultas de base de datos
Un subagente que permite acceso a Bash pero valida comandos para permitir solo consultas SQL de solo lectura. Este ejemplo muestra cómo usar hooksPreToolUse para validación condicional cuando necesita control más fino que el campo tools proporciona.
command en su configuración de hook:
shell: powershell a la entrada del hook. Consulte ejecutar hooks en PowerShell.
El hook recibe JSON a través de stdin con el comando Bash en tool_input.command. El código de salida 2 bloquea la operación y alimenta el mensaje de error de vuelta a Claude. Consulte Hooks para detalles sobre códigos de salida e Hook input para el esquema de entrada completo.
Próximos pasos
Ahora que entiende subagentes, explore estas características relacionadas:- Distribuir subagentes con plugins para compartir subagentes entre equipos o proyectos
- Ejecutar Claude Code programáticamente con el Agent SDK para CI/CD y automatización
- Usar servidores MCP para dar a los subagentes acceso a herramientas y datos externos