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 separadas que se pasen mensajes entre sí, consulte mensajería entre sesiones. Para un equipo coordinado de sesiones que Claude genera y supervisa, 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
description de sus subagentes y traslade los detalles al mensaje del sistema de cada subagente, que solo se carga cuando ese subagente se ejecuta.
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; la mayoría se ejecuta con un conjunto de herramientas restringido. Explore y Plan se inician sin tus archivos CLAUDE.md ni la instantánea del estado de git para mantener la investigación rápida y económica. Los demás subagentes integrados y los subagentes personalizados cargan ambos, a menos que establezcasomitClaudeMd en la definición de un subagente personalizado para iniciarlo sin los archivos CLAUDE.md del usuario, del proyecto y locales. Para obtener el desglose completo de lo que llega a un subagente, consulta 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: el modelo de la conversación principal. Cuando la conversación principal ejecuta Fable, el modelo de Explore depende de cómo te conectes:
- Con una suscripción a Claude, una cuenta de Anthropic Console o un gateway de LLM al que accedes mediante
ANTHROPIC_BASE_URL, Explore se ejecuta en el modelo Opus al que se resuelve el aliasopus. - En Amazon Bedrock, Google Cloud’s Agent Platform, Microsoft Foundry, Claude Platform on AWS o un gateway de Claude apps, Explore se mantiene en el modelo de la conversación principal.
- Con una suscripción a Claude, una cuenta de Anthropic Console o un gateway de LLM al que accedes mediante
- Herramientas: herramientas de solo lectura; Write y Edit están denegadas
- Propósito: descubrimiento de archivos, búsqueda de código, exploración de base de código
Explore sobrescribe el integrado y mantiene su propio campo model, así que define uno con model: haiku para ejecutar la exploración en un modelo de menor costo. Para forzar un mismo modelo en todos los subagentes, Explore incluido, consulta Run every subagent on one model.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 Disable specific subagents. - Para evitar que Claude delegue en ningún subagente, niegue la herramienta
Agentmisma 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 delegar en ellos. 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.
subagent_type falla con subagent_type is required cuando la sesión no tiene ningún subagente general-purpose en el que recurrir.
Más allá de estos subagentes integrados, puede crear los suyos propios con indicaciones personalizadas, restricciones de herramientas, modos de permiso, hooks y skills. Las siguientes secciones muestran cómo comenzar y personalizar subagentes.
Inicio rápido: crea tu primer subagente
Los subagentes son archivos Markdown con frontmatter YAML. Para crear uno, pide a Claude que lo escriba por ti, o escribe el archivo tú mismo. Este tutorial crea un subagente a nivel de usuario que revisa código y sugiere mejoras.1
Pide a Claude que cree el subagente
En Claude Code, describe el subagente que deseas y dónde guardarlo:Claude escribe el archivo con un
name, una description, una lista de tools, un model y un prompt del sistema.2
Revisa el archivo
Abre Debido a que el archivo se encuentra en
~/.claude/agents/code-improver.md y confirma que el frontmatter coincida con lo que pediste. El resultado se ve así:~/.claude/agents/, el subagente está disponible en cada proyecto en tu máquina. Para limitarlo a un proyecto, muévelo al directorio .claude/agents/ de ese proyecto. Elige el alcance del subagente compara los dos.3
Pruébalo
Pide a Claude que delegue en el nuevo subagente:Claude delega en tu nuevo subagente, que escanea la base de código y devuelve sugerencias de mejora. En la transcripción, la delegación aparece como una fila de llamada a herramienta que muestra el nombre del subagente seguido de una breve descripción de la tarea, como
code-improver(Suggest code improvements).Si Claude no puede encontrar el nuevo subagente, reinicia Claude Code e intenta 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.Ejecutar
/agents imprime un recordatorio para pedir a Claude o editar .claude/agents/ y ~/.claude/agents/ directamente.
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. Inclúyalos 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. 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.
Cuando agrega un directorio con --add-dir o /add-dir, Claude Code también carga su carpeta .claude/agents/, junto con sus 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.
Mantén 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.
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 también acepta la ruta a un archivo JSON que contiene el mismo objeto, para definiciones demasiado grandes para pasar en la línea de comandos. Por ejemplo, claude -p --agents ./agents.json "Review my changes" lee las definiciones de ese archivo. En una sesión interactiva, Claude Code rechaza una ruta de archivo. La forma de archivo requiere Claude Code v2.1.281 o posterior.
Cada clave de nivel superior en el JSON es el nombre de un agente, y su valor es la definición de ese agente. No comience un nombre con -. Una definición toma estos campos:
prompt: el mensaje del sistema del agente, equivalente al cuerpo markdown en subagentes basados en archivos.promptpuede estar vacío. Si selecciona un agente con unpromptvacío y sin campomemorycomo el agente de la sesión con--agent, el mensaje del sistema de la sesión se deja sin cambios. Unpromptvacío requiere Claude Code v2.1.281 o posterior.- Campos de frontmatter:
description,tools,disallowedTools,model,permissionMode,mcpServers,hooks,maxTurns,autoCompactWindow,skills,initialPrompt,memory,effort,background,omitClaudeMd, eisolation. - Campos ignorados:
coloryexperimentalno se aceptan aquí y se ignoran en lugar de rechazarse.
Invalid --agents configuration.
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 automáticamente 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 necesitas, copia el archivo del agente en .claude/agents/ o ~/.claude/agents/. También puedes 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.Si eres el autor del plugin, incluye los hooks en el archivo hooks/hooks.json del plugin y los servidores MCP en su .mcp.json en su lugar. Se aplican siempre que el plugin está habilitado, en lugar de solo dentro del subagente.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.Tres 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. - Claude Code no observa
.claude/agents/dentro de directorios agregados con--add-diro/add-dir, por lo que después de agregar o editar un subagente allí, reinicie para cargar el cambio. - Las sesiones iniciadas con
--disable-slash-commandsno observan estos directorios en absoluto.
.claude/agents/code-reviewer.md
--append-subagent-system-prompt para anexar su texto al final del mensaje del sistema de cada subagente, incluyendo subagentes anidados, aparte de un subagente bifurcado, que reutiliza el mensaje del sistema de la conversación. Requiere Claude Code v2.1.205 o posterior. Si su texto es demasiado largo para pasar en la línea de comandos, guárdelo en un archivo y pase la ruta con --append-subagent-system-prompt-file en su lugar. La bandera de archivo requiere Claude Code v2.1.261 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 tu checkout principal en su lugar, por ejemplo porque el directorio del worktree fue eliminado mientras el subagente estaba ejecutándose, falla con un error.
Esta verificación de directorio de trabajo cubre todo el repositorio que contiene el directorio desde el que lanzaste Claude Code. Cuando tu sesión se ejecuta en un worktree vinculado propio, la verificación también cubre el checkout principal desde el que ese worktree está vinculado.
Para comandos Bash, Claude Code también verifica el comando en sí de dos maneras:
- Bloquea un comando que redirige git al checkout principal.
- Se niega a un comando cuando no puede verificar desde el texto del comando que cualquier git que el comando ejecute permanece dentro del worktree, por ejemplo cuando el nombre del comando se calcula en tiempo de ejecución.
isolation: worktree; consulte Cómo Claude Code aplica el aislamiento.
Referencia de frontmatter
Configure un subagente con frontmatter YAML entre marcadores--- en la parte superior de su archivo, y escriba su mensaje del sistema como Markdown después del --- de cierre. Solo name y description son requeridos.
Los nombres de campo de varias palabras usan camelCase, como maxTurns y disallowedTools, y deben coincidir exactamente con la tabla: Claude Code ignora un campo que no reconoce sin reportar un error.
- Para encontrar un campo mal escrito en un subagente que se cargó, ejecuta
claude --debugen tu shell y buscadoes not recognize or applyen el registro de depuración en~/.claude/debug/<session-id>.txt. El registro de depuración nombra hasta cinco campos de nivel superior del archivo del subagente que Claude Code no reconoce, junto con el nombre que probablemente querías usar cuando un campo admitido es similar. Requiere Claude Code v2.1.296 o posterior. - Para averiguar por qué un archivo de subagente no se cargó, consulta Archivos de subagente que Claude Code omite.
Escriba
cacheTtl dentro del mapa experimental, no en el nivel superior del frontmatter.
Archivos de subagente que Claude Code omite
Claude Code omite un archivo en un directorioagents de proyecto, usuario o administrado, o en uno bajo un directorio que agrega con --add-dir, sin reportarlo en la sesión, cuando el frontmatter tiene alguno de estos problemas:
- Sin
name: Claude Code trata el archivo como documentación guardada junto a sus agentes. - Un
---de apertura que no es la primera línea del archivo: Claude Code lee el archivo como si no tuviera frontmatter y lo trata como documentación. - Un
nameque comienza con-, contiene:o tiene más de 256 caracteres: Claude Code omite el archivo y escribe un error en el registro de depuración. - Un
namepero sindescription: Claude Code omite el archivo y escribe la razón en el registro de depuración. - YAML que no se analiza: Claude Code no lee campos del archivo, lo omite y escribe el error de análisis en el registro de depuración.
--debug.
Un subagente de plugin cuyo frontmatter no tiene name o no se analiza aún se carga, bajo su nombre de archivo.
Verificar un directorio agents antes de una sesión
Para encontrar archivos en un directorio agents cuyo frontmatter no se analiza, ejecute claude plugin validate contra el directorio, por ejemplo .claude/agents o ~/.claude/agents. Claude Code verifica solo el directorio que nombra, y no marca un archivo cuyo frontmatter se analiza pero no tiene name. Requiere Claude Code v2.1.233 o posterior.
Elegir un modelo
El campomodel controla qué modelo 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-5-5oclaude-sonnet-5. Acepta los mismos valores que la bandera--model - inherit: use el mismo modelo que la conversación principal
model para esa invocación específica. En una llamada a la herramienta Agent, ese parámetro acepta un alias de modelo: sonnet, opus, haiku o fable. Claude no puede pasar un ID de modelo completo ni inherit en esa llamada. Claude Code resuelve el modelo del subagente en este orden:
- El parámetro
modelpor invocación - El frontmatter
modelde la definición del subagente, dondeinheritselecciona el modelo de la conversación principal - La variable de entorno
CLAUDE_CODE_SUBAGENT_MODEL, cuando la establece en un alias de modelo o ID de modelo - El modelo de la conversación principal
agent.spawn, Claude Code usa ese modelo en lugar del parámetro por invocación.
En dos casos, un alias de familia como opus en el parámetro por invocación o el frontmatter se resuelve al modelo de la conversación principal en lugar de la versión a la que apunta el alias:
- El modelo de la conversación principal pertenece a esa familia: el subagente se ejecuta en el modelo exacto de la conversación principal, incluyendo cualquier sufijo
[1m], por lo que obtiene la misma ventana de contexto extendido que la conversación principal. - Claude Code no puede determinar la familia del modelo de la conversación principal, en un proveedor distinto de la API de Anthropic: esto puede suceder con un ARN de perfil de inferencia de aplicación en Amazon Bedrock que Claude Code no ha resuelto a un modelo de respaldo. Este caso cubre solo el alias
opus, y no se aplica cuando estableceANTHROPIC_DEFAULT_OPUS_MODEL, ya queopusentonces se resuelve al modelo que establece.
CLAUDE_CODE_SUBAGENT_MODEL siempre se resuelve en la versión a la que apunta el alias, incluso cuando nombra la familia de la conversación principal. Establecer la variable en inherit es lo mismo que dejarla sin establecer.
Establecer CLAUDE_CODE_SUBAGENT_MODEL por sí solo no cambia el modelo en el que se ejecutan los subagentes integrados Explore y Plan. Para cambiarlo, consulte Ejecutar cada subagente en un modelo.
Antes de v2.1.251, CLAUDE_CODE_SUBAGENT_MODEL venía primero en este orden y anulaba tanto el parámetro por invocación como el frontmatter, incluyendo model: inherit.
Claude Code verifica el parámetro por invocación, frontmatter y valores de variable de entorno contra la lista de permitidos availableModels de su organización. Para un valor bloqueado, sustituye otro modelo:
- Cuando el valor bloqueado es un alias de familia como
opus, Claude Code ejecuta el subagente en la versión más nueva de esa familia que la lista de permitidos permite, siguiendo las mismas reglas de sustitución y alcance de proveedor que/model. Antes de v2.1.222, Claude Code ejecutaba el subagente en el modelo heredado para un alias de familia bloqueado también. - Para cualquier otro valor bloqueado, en proveedores donde esa sustitución no opera, o cuando la lista de permitidos no permite ninguna versión de la familia, Claude Code ejecuta el subagente en el modelo heredado en su lugar. Si establece
CLAUDE_CODE_SUBAGENT_MODEL, Claude Code intenta ese modelo primero, bajo estas mismas reglas.
/tasks. Claude Code muestra el modelo en la fila del subagente y agrega el nivel de esfuerzo establecido para ese subagente, si lo hay. Requiere Claude Code v2.1.242 o posterior.
Un parámetro model por invocación también se aplica cuando el subagente se reanuda o se le envía un mensaje de seguimiento, por lo que el subagente permanece en ese modelo.
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.
Ejecutar cada subagente en un modelo
CLAUDE_CODE_SUBAGENT_MODEL es un valor predeterminado, por lo que la definición de un subagente o un modelo que Claude pasa aún tiene precedencia sobre él. Para aplicar un modelo a cada subagente, compañero de equipo, y agente de flujo de trabajo, también establezca CLAUDE_CODE_SUBAGENT_MODEL_FORCE en 1. Requiere Claude Code v2.1.257 o posterior.
- Si establece ambas variables, los subagentes se ejecutan en el modelo en
CLAUDE_CODE_SUBAGENT_MODEL. - Si estableces solo
CLAUDE_CODE_SUBAGENT_MODEL_FORCE, los subagentes se ejecutan en el modelo de la conversación principal, excepto el subagente integrado Explore, que se ejecuta en el modelo indicado para él en Subagentes integrados.
env de un archivo de configuración:
/tasks mientras se ejecuta un subagente. La fila del subagente muestra el modelo en el que se ejecuta.
Mientras CLAUDE_CODE_SUBAGENT_MODEL_FORCE está activado, Claude Code ignora el campo model de las definiciones de subagentes, y Claude no puede pasar un modelo cuando inicia un subagente. Estos subagentes siguen ejecutándose en el modelo de la conversación principal:
- Una bifurcación
- Una skill que se ejecuta en un subagente con
model: inherit
Elegir un nivel de esfuerzo
Para ejecutar un subagente con su propio nivel de esfuerzo, establece el campoeffort en su definición.
Cuando le pides a Claude que ejecute un subagente que no es una bifurcación con un nivel de esfuerzo concreto, también puede pasar un parámetro effort para esa invocación. El parámetro sobrescribe el campo effort y se mantiene cuando el subagente se reanuda. La variable de entorno CLAUDE_CODE_EFFORT_LEVEL tiene precedencia sobre ambos. El parámetro por invocación requiere Claude Code v2.1.292 o posterior.
Cuando un subagente no tiene campo ni parámetro effort
En el modelo de la conversación principal, el subagente se ejecuta con el nivel que eliges en la sesión, por ejemplo con /effort, o que estableces con --effort. En otro modelo, ese nivel no se aplica. Para elegir su nivel, establece el campo effort.
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 integradas y herramientas MCP disponibles en la conversación principal, reducidas por dos filtros: el primero elimina una lista corta de herramientas de cada subagente, y el segundo reduce el conjunto de herramientas integradas para subagentes que se ejecutan en segundo plano, que es el predeterminado. En macOS, Linux y WSL, un subagente también puede recibir las herramientas Glob y Grep cuando la conversación principal no las tiene, como se describe en Comportamiento de la herramienta Glob. Las bifurcaciones omiten ambos filtros y reciben el grupo de herramientas exacto de la conversación principal. El primer filtro elimina estas herramientas, incluso cuando se enumeran en el campotools:
Agent, cuando el subagente está en el límite de profundidad; en una bifurcación la herramienta permanece listada pero devuelve un error en lugar de generarAskUserQuestionEndConversation, que solo puede terminar la conversación principal; consulte Comportamiento de la herramienta EndConversationEnterPlanModeExitPlanMode, a menos que elpermissionModedel subagente seaplanScheduleWakeupWaitForMcpServersWorkflow
Agent y ExitPlanMode, que siguen las condiciones del primer filtro dondequiera que se ejecute el subagente, un subagente en segundo plano mantiene todas las herramientas MCP pero solo estas herramientas integradas: Read, Grep, Glob, LSP, Bash, PowerShell, Edit, Write, NotebookEdit, WebFetch, WebSearch, TodoWrite, Skill, ToolSearch, EnterWorktree, ExitWorktree, Monitor, TaskStop, SendMessage, y Artifact, más SubagentHandback para un subagente que reporta a través de él. Claude Code elimina todas las otras herramientas integradas de un subagente en segundo plano, ya sean heredadas o listadas en el campo tools, por lo que la misma definición puede resolver a diferentes herramientas en primer plano y en segundo plano. La eliminación no reporta error a menos que deje la lista tools resolviendo a nada.
Antes de v2.1.280, los subagentes en segundo plano no podían usar LSP.
ListAgents sigue estos filtros como cualquier herramienta integrada: un subagente en primer plano la hereda en sesiones donde la mensajería entre sesiones está habilitada, y un subagente en segundo plano no la mantiene.
Los compañeros de equipo en equipos de agentes además mantienen las herramientas de tareas y herramientas cron: TaskCreate, TaskGet, TaskList, TaskUpdate, CronCreate, CronDelete, y CronList. En una sesión sin las herramientas Task, Claude Code tampoco proporciona las herramientas de tareas a los subagentes, incluso cuando el subagente ejecuta un modelo diferente. Un compañero en proceso sigue tu sesión de la misma manera. Para averiguar si un compañero en panel dividido tiene las herramientas de tareas, consulta Disponibilidad de la herramienta Task.
Restringir qué herramientas puede usar un subagente
Para restringir herramientas, usa el campotools como lista de permitidos o el campo disallowedTools como lista de denegados. Si ambos se establecen, disallowedTools se aplica primero y luego tools se resuelve contra el conjunto restante. Una herramienta listada en ambos se elimina.
Este ejemplo usa tools para permitir solo Read, Grep, Glob y Bash. El subagente no puede editar archivos, escribir archivos ni usar ninguna herramienta MCP:
disallowedTools para heredar el grupo de herramientas del subagente excepto Write y Edit. El subagente mantiene Bash, herramientas MCP y el resto de su grupo:
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 generalmente se niega a lanzar el subagente y la herramienta Agent devuelve un error nombrando las entradas no resueltas; consulta Agent would be spawned with zero tools para el mensaje y cómo corregir cada entrada.
Los campos tools y disallowedTools también aceptan entradas para un servidor MCP completo:
Este ejemplo elimina todas las herramientas del servidor MCP
github mientras conserva las herramientas de otros servidores y las herramientas integradas en el conjunto del subagente:
disallowedTools con un especificador, como Bash(git push *), aún elimina la herramienta completa del subagente, no solo los comandos coincidentes. Para mantener Bash y bloquear comandos específicos, agregue una regla de negación de Bash como Bash(git push *) a permissions.deny en su configuración. La regla se aplica a la conversación principal y a los subagentes.
Nombres de servidores MCP que contienen un doble guion bajo
Si un subagente no obtiene ninguna de las herramientas de un servidor MCP cuyo nombre contiene__, como reports__v2, revisa las entradas mcp__ del subagente:
- En
tools: escribemcp__seguido del nombre completo del servidor y__*, como enmcp__reports__v2__*. Sin el__*final,mcp__reports__v2no coincide con ninguna de las herramientas de ese servidor. - En
disallowedTools: buscamcp__reportsomcp__reports__*, las entradas que retienen un servidor llamadoreports. Con cualquiera de las dos entradas, el subagente también pierde todas las herramientas dereports__v2, porque esos nombres de herramientas también comienzan conmcp__reports__. Para retener solo las herramientas del servidorreports, enuméralas una por una, comomcp__reports__run_query.
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 con la herramienta Agent.
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 de su propio mientras el límite de profundidad lo permite, 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, sujetos a la regla de confianza para la carpeta del archivo del agente, 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, bajo la misma regla de confianza para la carpeta del archivo del agente. En /mcp, un servidor remoto (HTTP o SSE) que ha usado antes puede mostrar el estado cached en su lugar; Claude Code lo conecta cuando Claude primero llama a una de sus herramientas..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.
Las restricciones de MCP que se aplican a la sesión principal también cubren los servidores declarados en el frontmatter de subagentes:
--strict-mcp-configy--bare- Configuración de MCP administrada empresarial
- Políticas
allowedMcpServersydeniedMcpServers
--strict-mcp-config no filtra los servidores que pasas en línea a través de --agents o la opción agents del SDK, ya que esos son entrada explícita del llamador.
Confianza requerida para servidores MCP en línea
Claude Code carga un servidor MCP en línea desde un archivo de agente en el directorio.claude/agents/ de tu proyecto, o en el .claude/agents/ de un directorio --add-dir, solo después de que confíes en la carpeta de la que provino el archivo del agente. Antes de v2.1.238, Claude Code cargaba estos servidores sin verificar la confianza.
- Confianza que no cuenta: la confianza de una carpeta principal, y la confianza automática que una sesión
-po SDK obtiene para hooks en archivos de configuración - Hasta entonces: Claude Code omite cada servidor en línea en ese archivo de agente y escribe la clave exacta
projects["<path>"].hasTrustDialogAcceptedpara~/.claude.jsonen el registro de depuración - Directorios
--add-dir: un directorio fuera del repositorio del espacio de trabajo de confianza necesita su propia entrada de confianza, ya que sus archivos.claude/agents/no heredan la confianza del espacio de trabajo
- Un nombre que hace referencia a un servidor que ya configuró
- Un servidor en línea en un archivo de agente desde
~/.claude/agents/, en uno que pasa con--agentso la opciónagentsdel SDK, o en uno que la configuración administrada proporciona
Modos de permiso
EstablezcapermissionMode para elegir el modo de permiso en el que se ejecuta un subagente. Use los valores de configuración de los modos, por lo que el modo Manual es default. Si lo deja sin establecer, el subagente hereda el modo de permiso de la conversación principal.
El modo de permiso de la conversación principal decide si Claude Code usa el valor que establece:
-
Cuando la conversación principal está en
bypassPermissions,acceptEdits, o modo auto, el subagente se ejecuta en ese mismo modo y Claude Code ignora elpermissionModeque establece. Bajo modo auto, el clasificador evalúa las llamadas de herramientas del subagente con las reglas de bloqueo y permiso de la conversación principal. Cuando el subagente termina, el clasificador también revisa su trabajo y su informe final antes de que el informe se entregue, como Cómo el modo auto maneja subagentes describe. Si un subagente pide permiso mientras la conversación principal está enbypassPermissions, comprueba si su llamada a herramienta es una de las acciones que ningún modo aprueba automáticamente. -
Cuando la conversación principal está en modo
plan, el subagente permanece en modo plan sea cual sea elpermissionModeque establezcas, a menos que se ejecute como compañero de un equipo de agentes bajo las reglas de equipos de agentes. Si establecesdontAsk, el subagente tampoco te pide nada: una acción que el modo plan te pediría aprobar se deniega en su lugar. -
Cuando la conversación principal está en modo
defaultodontAsk, el subagente se ejecuta en el modo de permisos que estableces. En su lugar, mantiene el modo de permisos de la conversación principal en estos casos:- Estableces
bypassPermissions. La excepción debypassPermissionsrequiere Claude Code v2.1.267 o posterior. - Estableces
autoy el modo automático no está disponible para el subagente, por ejemplo cuando un archivo de configuración establecedisableAutoModeo el modelo del subagente no soporta el modo automático.
- Estableces
permissionMode acepta estos valores, y manual como alias para default:
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égalo a disallowedTools.
No puedes precargar skills que establezcan disable-model-invocation: true, ya que la precarga se toma del mismo conjunto de skills que Claude puede invocar. Esto incluye el skill integrado /verify, que Claude no puede ejecutar por sí solo.
Si una skill listada falta o está deshabilitada, por ejemplo por la política de su organización, 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. En ambos casos el subagente comienza sin su historial de conversación.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.
La memoria del subagente es parte de memoria automática: si desactiva la memoria automática, con la configuración
autoMemoryEnabled o CLAUDE_CODE_DISABLE_AUTO_MEMORY, el campo memory no tiene efecto y el subagente se lanza sin las instrucciones de memoria o el acceso a la herramienta de memoria descrito a continuación.
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.
Consejos de memoria persistente
-
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:
UPDATE: el script sale con código 2, Claude Code bloquea el comando, y el subagente ve el mensaje Blocked: Only SELECT queries are allowed.
Consulte Hook input para el esquema de entrada completo y códigos de salida para cómo los códigos de salida afectan el comportamiento. En Windows, escriba scripts de hook en PowerShell y agregue 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 a nivel de sesión que también se disparen dentro de subagentes. Los eventos de herramientas comoPreToolUseyPostToolUsese disparan para las llamadas de herramientas del subagente de la misma manera que en la conversación principal, ySubagentStartySubagentStopse disparan cuando un subagente comienza o termina
PreToolUse en settings.json también se ejecuta antes de cada herramienta que usa un subagente.
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.~/.claude/agents/ y de definiciones que pasas con --agents se ejecutan sin este paso. Si agregaste una carpeta con --add-dir desde fuera del repositorio de tu espacio de trabajo de confianza, confía en esa carpeta por separado: sus hooks de .claude/agents/ no heredan la concesión del espacio de trabajo.
Hasta que confíes en la carpeta, el subagente aún se ejecuta, pero Claude Code omite sus hooks de frontmatter y registra un error en el registro de depuración explicando cómo confiar en la carpeta. Esta es una regla más estricta que la de los hooks en archivos de configuración: confiar en una carpeta principal no es suficiente, y una sesión -p no cuenta como de confianza. Lo que se ejecuta antes de confiar en una carpeta compara las dos.
Se soportan todos los eventos de hook. Los eventos más comunes para subagentes son:
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:
Trabajar con subagentes
Entender la delegación automática
Claude delega automáticamente tareas basándose en la descripción de la tarea en tu solicitud, el campodescription en las configuraciones de subagentes, y el contexto actual. Para fomentar la delegación proactiva, incluye frases como “use proactively” en el campo de descripción de tu subagente.
Mantén las descripciones breves: Claude Code muestra una advertencia de inicio cuando las descripciones combinadas de tus subagentes superan el límite de 15,000 tokens, y aún carga cada subagente.
Si el subagente se incluye en un plugin, puedes medir con qué fiabilidad Claude lo delega en prompts realistas en lugar de verificar uno por uno: claude plugin eval ejecuta cada prompt con y sin el plugin y califica los resultados.
Invocar subagentes explícitamente
Cuando la delegación automática no es suficiente, puedes solicitar un subagente tú mismo. Tres patrones escalan desde una sugerencia única hasta un valor predeterminado de toda la sesión:- Lenguaje natural: nombra el subagente en tu prompt; Claude decide si delega
- @-mention: garantiza que el subagente se ejecute para una tarea
- Sesión completa: toda la sesión se ejecuta como ese subagente a través del flag
--agento el ajusteagent
@ y elige el subagente del autocompletado, de la misma manera que @-mencionas archivos. Esto asegura que se ejecute ese subagente específico en lugar de dejar la elección a Claude:
my-plugin:code-reviewer o my-plugin:review:security cuando el plugin organiza agentes en subcarpetas. Los subagentes en segundo plano nombrados actualmente en ejecución en la sesión también aparecen en el autocompletado, mostrando su estado junto al nombre.
También puedes 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. Mientras escribes esta forma, el autocompletado muestra coincidencias de archivos en lugar de agentes. La mención del agente aún se resuelve cuando envías.
Ejecuta toda la sesión como un subagente. Pasa --agent <name> para iniciar una sesión donde el hilo principal en sí toma las restricciones de herramientas y el modelo del subagente:
--system-prompt. Los archivos CLAUDE.md y la memoria del proyecto aún se cargan a través del flujo de mensajes normal, incluso cuando la definición del agente establece omitClaudeMd. Si ejecutas la sesión con -p como un agente personalizado que tiene su propio prompt, también se inicia sin la instantánea del estado de git.
El nombre del agente aparece como @<name> en el encabezado de inicio para que puedas confirmar que está activo.
Esto funciona con subagentes integrados y personalizados, y la elección persiste cuando reanudas la sesión: Claude Code restaura las restricciones de herramientas y el modelo del agente junto con la conversación. Si el agente ya no existe cuando reanudas, la sesión continúa con las herramientas predeterminadas y muestra una advertencia que nombra el agente. Para el prompt del sistema en cualquier caso, consulta Flags del prompt del sistema en conversaciones reanudadas.
Para un subagente proporcionado por un plugin, puedes pasar solo el nombre del agente y Claude Code lo encuentra:
agents/, incluye 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, establece agent en .claude/settings.json:
Ejecutar subagentes en primer plano o en segundo plano
Los subagentes pueden ejecutarse en primer plano o en segundo plano:- Subagentes en primer plano bloquean la conversación principal hasta completarse. Las solicitudes de permiso se te pasan a medida que surgen.
- Subagentes en segundo plano se ejecutan concurrentemente mientras continúas trabajando. Cuando un subagente en segundo plano llega a una llamada a herramienta que necesita permiso, Claude Code muestra la solicitud en tu sesión principal y nombra el subagente que está pidiendo. Aprueba para permitir que el subagente continúe, o presiona Esc para negar esa llamada a herramienta sin detener el subagente.
Qué subagentes se ejecutan en segundo plano
Sin nada configurado, un subagente que Claude genera desde tu conversación principal comienza en segundo plano.claude -py el Agent SDK: Claude puede esperar, por su propio criterio o cuando se lo pides.- Sesiones interactivas en la terminal, VS Code y la aplicación de escritorio en tu máquina: para permitir que Claude espere a un subagente, desactiva el modo fork, que está activado por defecto.
context: fork, Claude Code sigue las reglas en Ejecutar skills en un subagente en su lugar, independientemente de si el modo fork está activado o no.
Permitir que Claude espere a un subagente
-
Desactiva el modo fork estableciendo
CLAUDE_CODE_FORK_SUBAGENTen0, por ejemplo ensettings.json: -
Ejecuta
claudede nuevo desde tu shell, o abre una nueva conversación de VS Code. - Pide a Claude que espere cuando necesites un resultado primero, por ejemplo “run the reviewer subagent and wait for its report”.
CLAUDE_CODE_DISABLE_BACKGROUND_TASKS en 1 en lugar de desactivar el modo fork, Claude espera a que los subagentes terminen antes de continuar. Los comandos en segundo plano también quedan desactivados, y Ctrl+B no mueve nada a segundo plano.
Herramientas, permisos y resultados de los subagentes en segundo plano
Los subagentes en segundo plano se ejecutan con un conjunto de herramientas integradas más pequeño que los subagentes en primer plano, excepto para forks de conversación y subagentes en primer plano reanudados. Los subagentes en segundo plano muestran cada solicitud de permiso en tu sesión principal. Cuando respondes una de esas solicitudes con una opción que dura más allá de esa llamada a herramienta, como una concesión que dura el resto de la sesión, Claude Code aplica tu respuesta a toda la sesión, incluyendo tu conversación principal. Un subagente en segundo plano puede dejar un comando Bash o PowerShell en segundo plano ejecutándose más allá del final de su turno. Cuando ese comando termina, Claude Code envía al subagente una notificación. Los resultados de un subagente en segundo plano llegan a Claude como una notificación de finalización en un turno posterior. Claude espera esa notificación antes de reportar los resultados del subagente, y si preguntas sobre el progreso primero, reporta que el subagente aún se está ejecutando.Subagentes terminados en el panel y la lista de tareas
Claude Code borra la fila de un subagente en segundo plano del panel de subagentes debajo de la entrada del prompt de una de dos maneras, dependiendo de cómo terminó el subagente:- Cuando un subagente termina exitosamente, Claude Code elimina su fila inmediatamente y, excepto en modo lector de pantalla, muestra
/tasks to see subagentsen el pie de página durante 30 segundos. Durante esos 30 segundos, ejecuta/tasksy presionaEnteren el subagente para abrir su transcripción. Antes de v2.1.232, Claude Code mantenía la fila durante 30 segundos después de que el subagente terminara, igual que uno fallido, y no mostraba ninguna pista de pie de página. - Cuando un subagente falla o lo detienes, Claude Code mantiene su fila durante 30 segundos. Para borrar la fila más rápido, selecciónala y presiona
x.
/tasks, marcado como hecho y ordenado debajo del trabajo en ejecución, durante los mismos 30 segundos que la pista del pie de página. Su vista de detalle permanece abierta cuando el subagente termina. Los subagentes que fallan o que detienes 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.
Nombres de subagentes
Si inicias una sesión con equipos de agentes habilitados, Claude puede dar un nombre a un subagente pasando un parámetroname en la llamada a la herramienta Agent. Puede hacerlo por su cuenta, sin preguntarte primero. El nombre hace que el subagente sea direccionable: Claude puede enviarle un mensaje o reanudarlo por nombre después de que termine.
En una sesión interactiva con equipos de agentes habilitados, un subagente que Claude genera desde la conversación principal con un name se lanza como compañero en su lugar, a menos que la llamada sea un fork o pase isolation en la llamada misma. Un valor isolation en el frontmatter del subagente no lo previene, y el compañero entonces se ejecuta en el directorio de trabajo de la sesión principal. Consulta Cómo Claude inicia equipos de agentes.
Errores de API en subagentes
Cuando algo corta la respuesta de un subagente a mitad de flujo, y la respuesta parcial contiene texto pero sin llamadas a herramientas, Claude Code pide al subagente que continúe en lugar de terminar la ejecución. Esto sucede también en sesiones interactivas. La ejecución termina en el error solo una vez que esas continuaciones se agotan. 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. Lo que Claude recibe depende de dónde se ejecutó el subagente:- Primer plano: si un rate limit, sobrecarga o error de servidor corta un subagente que ya produjo salida de texto, 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 a herramientas, falla con
Agent terminated early due to an API error, seguido del detalle del error. - Segundo plano: 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.
Escaneo de salida de subagentes
Claude Code escanea el informe final de cada subagente antes de que Claude lo lea. Un subagente puede haber leído archivos, páginas web o salida de comandos que nunca revisaste, y el texto de esas fuentes puede llevar instrucciones dirigidas a la conversación principal. El escaneo nunca elimina ni reformula nada; hace dos tipos de cambios que puedes notar en un informe:- Inserción de barra invertida: el escaneo inserta una barra invertida en texto que imita la salida propia de Claude Code, como una etiqueta
<system-reminder>o una línea que comienza conHuman:oAssistant:, para que la imitación se lea como texto ordinario en lugar de ser confundida con parte de la conversación. - Línea de marcador: el escaneo antepone una línea que comienza con
[harness: subagent output matched instruction-shaped pattern(s):cuando el informe imita una etiqueta como<system-reminder>o menciona ajustes de permisos comobypassPermissionso--dangerously-skip-permissions. Las menciones de ajustes de permisos obtienen la línea de marcador, pero el texto en sí permanece como está escrito.
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 tu conversación principal.Ejecutar investigación en paralelo
Para investigaciones independientes, genera múltiples subagentes para trabajar simultáneamente:Encadenar subagentes
Para flujos de trabajo de múltiples pasos, pide 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
Usa 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 pruebas
- Estás haciendo un cambio rápido y dirigido
- La latencia importa. Un subagente que no es un fork comienza de nuevo y puede necesitar tiempo para reunir contexto
- La tarea produce salida detallada que no necesitas en tu contexto principal
- Quieres aplicar restricciones de herramientas o permisos específicos
- El trabajo es autónomo y puede devolver un resumen
/btw en lugar de un subagente. No tiene acceso a herramientas, y la respuesta no se añade al historial.
Dejar que los subagentes generen sus propios subagentes
Por defecto, un subagente puede generar subagentes propios, hasta tres capas debajo de la conversación principal. En el límite de profundidad, Claude Code retiene la herramientaAgent de cada subagente excepto un fork, por lo que un subagente en el límite hace su trabajo delegado él mismo y devuelve un resumen. Un fork en el límite mantiene Agent en su lista de herramientas heredada, pero la herramienta devuelve un error en lugar de generar.
Los subagentes anidados se adaptan a una tarea delegada que a su vez se divide en subtareas paralelas, como un subagente revisor que envía un verificador por hallazgo. Por defecto, el subagente que los genera espera el informe de cada subagente anidado:
- Sesión interactiva en la terminal: solo el resumen del subagente de nivel superior regresa a ti, porque un subagente que lanza subagentes en segundo plano espera sus resultados antes de terminar.
claude -py el Agent SDK: el subagente que los genera espera mientras el modo fork está activado. Si desactivas el modo fork, los subagentes anidados comienzan en segundo plano en su lugar. El subagente que los genera no espera a un subagente anidado en segundo plano, que reporta a tu conversación principal si dura más que el subagente que lo generó.
CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH al número de capas de subagentes que quieres debajo de tu conversación principal. Por ejemplo, esta entrada en settings.json limita el anidamiento a dos capas:
1 para desactivar el anidamiento.
Un subagente anidado se configura de la misma manera que uno de nivel superior y se resuelve desde los mismos alcances. Para evitar que un subagente genere otros mientras el anidamiento está activado, como un revisor que debe permanecer de solo lectura, omite Agent de su lista tools o añádelo a disallowedTools.
En la terminal, Claude Code muestra subagentes anidados como un árbol en el panel de subagentes debajo de la entrada del prompt y marca cada fila que aún tiene descendientes en el panel con un conteo (+N) de ellos. Abre una fila para ver los hermanos y descendientes directos de ese subagente con una ruta de vuelta a main.
Límite de subagentes concurrentes
Dos límites controlan el uso de subagentes, cada uno con su propia variable: este impide que Claude genere más subagentes mientras demasiados se están ejecutando, y el límite de profundidad limita cuán profundamente se anidan los subagentes. No hay límite en el número total de subagentes que Claude puede generar durante una sesión. Por defecto, cuando 20 subagentes se están ejecutando en una sesión, generar otro con la herramienta Agent falla conConcurrent subagent limit reached, y el error le dice a Claude que no reintente. La generación tiene éxito de nuevo cuando el conteo en ejecución cae por debajo del límite. Para cambiar el límite, establece CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS a cualquier número entero positivo. Las sesiones con ultracode activo están exentas: el límite no se aplica allí. Requiere Claude Code v2.1.217 o posterior.
El límite bloquea solo subagentes que Claude genera con la herramienta Agent, pero otras ejecuciones ocupan los mismos espacios:
- Un fork en sesión que inicias con
/subtasktoma un espacio mientras se ejecuta y nunca es bloqueado por el límite. - Reanudar un subagente que ya terminó toma un espacio nuevo sin verificar el límite, por lo que las reanudaciones pueden empujar el conteo en ejecución más allá de él.
Gestionar contexto de subagentes
Qué se carga al inicio
Cada subagente comienza con una ventana de contexto fresca y aislada. No ve tu historial de conversación, los skills que ya has 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 padre en lugar de comenzar de nuevo. El contexto inicial de un subagente que no es fork contiene:- Prompt del sistema: el prompt propio del agente más detalles del entorno que Claude Code añade, no el prompt del sistema de Claude Code. Los subagentes personalizados definen el suyo en el cuerpo markdown o el campo
prompt. Los agentes integrados tienen prompts predefinidos. - Mensaje de tarea: el prompt de delegación que Claude escribe cuando entrega el trabajo.
- Archivos CLAUDE.md: cada nivel de la jerarquía CLAUDE.md que la conversación principal carga, incluyendo
~/.claude/CLAUDE.md, reglas del proyecto,CLAUDE.local.md, archivos de política administrada, y cualquier archivoAGENTS.mdcargado como instrucciones del proyecto. Los agentes integrados Explore y Plan omiten esto. Un subagente cuya definición estableceomitClaudeMdcarga solo los archivos de política administrada, o ninguno en absoluto cuando la definición viene de la configuración administrada. - Estado de Git: una instantánea que Claude Code lee de tu repositorio cuando el subagente comienza. Para un subagente en su propio worktree de ese repositorio, la instantánea muestra la rama, el estado y los commits recientes del worktree. Ausente fuera de un repositorio Git o siempre que la instantánea esté desactivada; consulta
includeGitInstructions. Explore y Plan la omiten independientemente. - Skills precargados: contenido completo de cualquier skill nombrado en el campo
skillsdel agente. Los agentes integrados no precargan skills. - Roster de hermanos: un recordatorio del sistema listando
mainy cada otro agente nombrado en la sesión, cada uno un valortoválido paraSendMessage. El roster aparece solo cuando las herramientas del subagente incluyenSendMessagey al menos otro agente tiene un nombre, ya sea que Claude lo nombró al generarlo o se ejecuta como compañero de equipo de agentes. Es una instantánea tomada cuando el subagente comienza, por lo que los agentes nombrados después no aparecen.
omitClaudeMd: true en su frontmatter o --agents JSON. Para Explore, Plan y los subagentes con omitClaudeMd, el CLAUDE.md de un subdirectorio y las reglas con alcance de ruta coincidentes aún se cargan cuando el subagente trabaja con archivos allí.
La conversación principal aún tiene tu CLAUDE.md completo cuando lee los resultados de estos subagentes, por lo que la mayoría de reglas no necesitan llegar al subagente mismo. Si una regla debe llegar, como “ignora el directorio vendor/,” reafírmala en el prompt que das a Claude cuando delegas.
No puedes cambiar qué subagentes reciben estado de git. Solo Explore y Plan lo omiten.
Algún estado de conversación principal nunca llega a un subagente que no es fork:
- Estilo de salida: un subagente ejecuta su propio prompt del sistema, por lo que tu estilo de salida no forma sus respuestas, excepto en un fork.
- Memoria automática: la memoria automática de la conversación principal no se carga. Para dar a un subagente memoria persistente propia, usa el campo
memory. - Tamaño de ventana de contexto: la ventana de contexto de un subagente se dimensiona por su propio modelo, no por el del padre. Delegar a un modelo con una ventana más pequeña da a ese subagente la ventana más pequeña.
Reanudar subagentes
Cada invocación de subagente crea una nueva instancia en lugar de continuar una anterior. Para continuar el trabajo de un subagente existente en lugar de comenzar de nuevo, pide a Claude que lo reanude. Los subagentes reanudados retienen su historial de conversación completo, incluyendo todas las llamadas a herramientas anteriores, resultados y razonamiento. Si el subagente generó subagentes en segundo plano propios, ese historial incluye los resultados que entregaron mientras se ejecutaba. Antes de v2.1.304, un subagente al que Claude enviaba un mensaje o reanudaba justo después de que terminara podía olvidar su trabajo más reciente.- Cuando un subagente se completa, Claude recibe su ID de agente.
- Los agentes integrados Explore y Plan son de una sola vez y no devuelven un ID de agente, por lo que Claude no puede reanudarlos. Usa
general-purposeo un subagente personalizado cuando necesites continuar el trabajo. - Cuando un subagente se detiene en su límite
maxTurns, Claude Code marca la salida devuelta como parcial, y Claude puede reanudar el subagente para continuar su trabajo.
SendMessage con el ID o nombre del agente como campo to para reanudarlo. SendMessage no requiere que equipos de agentes estén habilitados; solo lo requieren los mensajes de protocolo de equipo estructurados como shutdown_request y plan_approval_response. Más allá de subagentes y compañeros, en sesiones donde la mensajería entre sesiones está habilitada, Claude puede usar la misma herramienta para enviar mensajes a tus otras sesiones de Claude Code, en esta máquina o más allá de ella.
Para reanudar un subagente, pide a Claude que continúe el trabajo anterior:
SendMessage, el subagente se reanuda en segundo plano sin una nueva invocación de Agent. Lo mismo se aplica a un subagente que Claude detuvo con la herramienta TaskStop, una vez que su ejecución detenida ha salido. La ejecución reanudada mantiene el conjunto de herramientas de donde el subagente se ejecutó primero y puede seguir leyendo la caché de prompts que la ejecución original calentó.
Un subagente que tiene la herramienta SendMessage puede enviar ese mensaje también. En una sesión interactiva, el agente reanudado entonces reporta de vuelta al subagente que lo reanudó, no a tu conversación principal. Ese subagente espera el resultado antes de terminar su propio trabajo. Cuando un subagente envía un mensaje a un agente al que reporta, como su propio lanzador, Claude Code reanuda ese agente sin redirigir sus resultados.
Un subagente que detuviste tú mismo, con x en /tasks o una solicitud SDK stop_task, no se reanuda automáticamente. Si Claude le envía un mensaje, el mensaje es rechazado y Claude es informado de que el agente fue cancelado.
Mientras la fila de ese subagente aún esté en el panel de subagentes, escribe en su transcripción para reanudarlo tú mismo. Después de eso, un mensaje de Claude puede 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 se completó se muestra como en ejecución de nuevo en la lista de tareas y en los eventos de tarea del Agent SDK.
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 agente en segundo plano re-generado que lo reutilizó, Claude Code rechaza el envío en lugar de entregarlo al agente incorrecto, y el error reporta qué agente alcanza ahora el nombre para que Claude pueda redirigirse. Para alcanzar el agente anterior mientras aún se está ejecutando, Claude lo dirige por el ID de agente que recibió cuando generó ese agente. La verificación está limitada a la conversación actual y se reinicia en /clear.
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 sus propios ajustes de permisos. Dos límites se mantienen independientemente de quién envió el mensaje: ningún mensaje de ningún agente cuenta como tu aprobación para una solicitud de permiso pendiente, y ningún mensaje de agente puede cambiar los ajustes de permisos, CLAUDE.md o configuración de un subagente. Solo el sistema de permisos o tus propios mensajes pueden otorgar aprobación.
También puedes pedir a Claude el ID del agente si quieres 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. Puedes reanudar un subagente después de reiniciar Claude Code reanudando la misma sesión.
- Limpieza automática: Claude Code elimina las transcripciones de subagentes después del período de retención
cleanupPeriodDays, 30 días por defecto, siguiendo las reglas de barrido de retención.
Enviar un mensaje a un subagente por nombre después de un reinicio
Para un subagente que se lanzó como compañero, consulta las limitaciones de los equipos de agentes en su lugar.
agent-{agentId}.meta.json en ~/.claude/projects/{project}/{sessionId}/subagents/.
Después de un mensaje por ID, el nombre del subagente vuelve a funcionar, a menos que un agente más nuevo haya tomado ese nombre. Antes de v2.1.299, ningún nombre sobrevivía a un reinicio, y un envío por nombre se rechazaba incluso cuando el ID de agente aún funcionaba.
Compactación automática
Los subagentes soportan compactación automática. La compactación se dispara a medida que se llena la propia ventana de contexto del subagente, yCLAUDE_AUTOCOMPACT_PCT_OVERRIDE se aplica a subagentes también. Consulta variables de entorno para saber cuándo entra en vigor la sobrescritura.
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.
Establecer la ventana de compactación automática para un subagente
Para que un subagente se compacte antes de lo que lo haría normalmente, estableceautoCompactWindow en su frontmatter a un número de tokens entre 100000 y 1000000. Si estableces CLAUDE_CODE_AUTO_COMPACT_WINDOW, el subagente usa la ventana de esa variable en su lugar y el campo no tiene efecto, a menos que Claude Code ignore el valor de la variable. Requiere Claude Code v2.1.296 o posterior.
Este frontmatter establece autoCompactWindow en 200,000 tokens para un subagente que lee archivos de registro largos:
200000, porque en el frontmatter Claude Code lee 200k como 200, que está fuera del rango permitido. El subagente aún se carga y se compacta como si el campo no existiera. Para verificar si Claude Code ignoró tu valor, ejecuta claude --debug en tu shell y busca invalid autoCompactWindow en el registro de depuración.
Si el valor está dentro del rango y aún no ves ningún cambio, verifica estas causas:
- El valor no es inferior a la ventana de compactación automática que el subagente heredaría de otro modo: para compactar antes, establece un valor inferior a esa ventana.
- Ejecutas toda la sesión como este subagente con
--agento el ajusteagent: el campo no tiene efecto allí. Para establecer la ventana de la sesión, consulta Establecer la ventana de compactación automática.
Bifurcar la conversación actual
Cuando la vista de agente está desactivada,
/subtask no está disponible y /fork inicia el subagente bifurcado en su lugar; de lo contrario, /fork copia toda la sesión en una nueva sesión en segundo plano./subtask seguido de una tarea, independientemente de si el modo fork está activado o no. Claude Code nombra el fork a partir de las primeras palabras de la tarea. El siguiente ejemplo bifurca la conversación para redactar casos de prueba mientras continúas 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. Cuando un fork termina exitosamente, Claude Code elimina su fila. Claude Code mantiene la fila de un fork que falló o que usted detuvo durante 30 segundos, lo mismo que para cualquier otro subagente de fondo. Antes de v2.1.232, Claude Code también mantenía la fila de un fork terminado durante 30 segundos. Use estas teclas para interactuar con el panel:
Con la transcripción de un fork o subagente abierta, los mensajes de seguimiento y los skills van a ese agente. En Claude Code v2.1.314 o posterior,
/btw responde a partir de la transcripción abierta. Los demás comandos integrados van a tu conversación principal, con estas salvaguardas:
/compact,/cleary/rewindactúan sobre la conversación principal, por lo que Claude Code te pide que confirmes antes de ejecutar uno de ellos desde esta vista./modely/fastestablecen el modelo y el modo rápido de la conversación principal, no los del agente visto, por lo que no se ejecutan desde esta vista. Un aviso te indica el motivo.
Ctrl+Enter o Ctrl+X Ctrl+S. Cualquier comando de shell o subagente que el agente esté esperando y que pueda pasar al segundo plano pasa allí y sigue ejecutándose. Cuando el agente está escribiendo una respuesta, o esperando trabajo que no puede pasar al segundo plano, continúa y lee tu mensaje una vez que eso termina. Requiere Claude Code v2.1.286 o posterior.
Cómo los forks difieren de otros subagentes
Un fork hereda todo lo que la sesión principal tiene en el momento en que se genera. Cualquier otro subagente comienza desde cero a partir de su definición.
Como el prompt del sistema y las definiciones de herramientas del fork son idénticos a los del principal, su primera solicitud reutiliza la caché de prompts del principal. Gracias a esa reutilización, un fork cuesta menos que un subagente nuevo 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. Un fork no puede generar más forks.
Desactivar el modo fork
El modo fork permite que Claude inicie un fork por sí mismo. Para evitar que Claude inicie forks:- Detener solo los forks: agrega
"Agent(fork)"apermissions.denyen tu configuración. - Desactivar el modo fork: establece
CLAUDE_CODE_FORK_SUBAGENTen0, siguiendo los pasos de Permitir que Claude espere a un subagente.
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.
El mensaje del sistema le dice al subagente que rechace solicitudes de escritura, por lo que el hook es una red de seguridad: si el subagente intenta una escritura de todas formas, Claude Code bloquea el comando y el subagente ve el mensaje Blocked: Write operations not allowed. Use SELECT queries only..
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