A continuación, te presento la traducción al español del texto original, respetando todas las reglas de formato, enlaces, etiquetas y bloques de código.
A medida que los agentes asumen tareas más ambiciosas, se enfrentan a dificultades para:
- Completar trabajo de manera confiable a gran escala
- Gestionar su propio contexto
Hemos estado experimentando con cómo abordar estos desafíos mediante lo que llamamos subagentes dinámicos: en lugar de emitir tareas de subagentes mediante llamadas genéricas a herramientas, el agente escribe un breve script que impulsa la ejecución de los subagentes. Esto permite que los modelos se apoyen en patrones de código en los que son buenos (como bucles, bifurcaciones o concurrencia) para escribir lógica de orquestación adaptada a la tarea.
¿Por qué subagentes dinámicos?
Deep Agents ya admite subagentes. Estos aíslan el contexto, permiten que el agente principal delegue unidades discretas de trabajo y mantienen los resultados intermedios fuera de la ventana de contexto principal. Entonces, ¿por qué necesitamos subagentes dinámicos?
Con los subagentes normales, se invocan uno a la vez, mediante el modelo principal llamándolos directamente. Eso funciona a pequeña escala. Pero se rompe cuando necesitas generar cientos de subagentes, o cuando la lógica de orquestación es condicional o multifase.
Los subagentes dinámicos resuelven esto mediante orquestación programática. En lugar de hacer llamadas a herramientas paso a paso, el agente escribe un breve script que orquesta y llama a los subagentes, y lo ejecuta en un intérprete ligero.
El ejemplo canónico: un subagente por página de un documento de 300 páginas. En lugar de llamar a la herramienta de subagente 300 veces, el agente escribe un bucle:
1const results = await Promise.all(pages.map(page =>2 task({ description: `Summarize page ${page.number}`, subagentType: "summarizer" })3));
Esto permite dos cosas que la orquestación basada en llamadas a herramientas no puede ofrecer de manera confiable:
Cobertura determinista a gran escala. Sin estructura, los agentes toman decisiones subjetivas sobre el alcance, revisando 75 de 500 elementos y dando el trabajo por terminado. Un bucle de despacho no lo hace. La cobertura se convierte en una garantía estructural, no en un problema de ingeniería de prompts.
Orquestación compleja confiable. Escribir la orquestación como código es más confiable que hacer que el modelo la reproduzca como una secuencia de llamadas a herramientas, especialmente para patrones como abanico de entrada y síntesis, tuberías multifase o bifurcaciones condicionales.
Esta es la misma idea detrás de los flujos de trabajo en Claude Code y los Modelos de Lenguaje Recursivos (RLMs): un modelo escribe código, y ese código despacha más agentes.
Inicio rápido
Los subagentes dinámicos requieren dos cosas: subagentes para delegar trabajo, y un intérprete de código: un entorno de ejecución seguro y ligero donde el modelo escribe y ejecuta código de orquestación. Deep Agents incluye un intérprete de código opcional basado en QuickJS. Para usarlo, instala el paquete middleware QuickJS y luego pasa CodeInterpreterMiddleware mediante el argumento middleware en create_deep_agent.
1pip install -U "deepagents[quickjs]"
1from deepagents import create_deep_agent2from langchain_quickjs import CodeInterpreterMiddleware34agent = create_deep_agent(5 model="openai:gpt-5.5",6 middleware=[CodeInterpreterMiddleware()],7)
Deep Agents incluye un subagente de propósito general integrado, por lo que ya hay un perfil de subagente general que se puede usar en los flujos de trabajo. Para flujos de trabajo especializados, configura subagentes personalizados con sus propios nombres, descripciones y prompts de sistema: los nombres y las descripciones son la forma en que el agente sabe qué rol debe usar.
Para activar los subagentes dinámicos, indica a tu agente la palabra "workflow", de la siguiente manera:
1result = await agent.ainvoke({2 "messages": [{"role": "user", "content": "Run a workflow that reviews every file in src/routes/ and summarizes the top risks."}]3})
Uso con un agente de codificación
La forma más rápida de probar los subagentes dinámicos es con dcode, nuestro agente de codificación para terminal construido con un Deep Agent. Viene con el intérprete de código habilitado, así que no hay nada que configurar: los subagentes dinámicos funcionan de inmediato.
Instalación
1curl -LsSf https://langch.in/dcode | bash
Ejecución
1dcode
Para activar los subagentes dinámicos, solo tienes que pedir un "workflow". En lugar de realizar el trabajo directamente o intentar gestionar el abanico de subagentes con su herramienta de tarea nativa, el agente escribe un script de orquestación que llama a la función global task() integrada y la ejecuta en el intérprete de código. Por ejemplo: "ejecuta un workflow para revisar cada archivo en src/ en busca de inyección SQL".
A medida que se generan los subagentes, dcode los muestra en vivo en el panel de subagentes dinámicos, agrupados en fases por despacho.

Puedes probar esto más rápido con dcode, pero también puedes usarlo en tu herramienta favorita a través de ACP (como Zed).
Cómo funciona
Al agente se le proporciona una herramienta eval. Escribe JavaScript que se ejecuta de forma segura dentro del intérprete. Cuando se configuran subagentes, el intérprete expone una función global task() integrada que los despacha desde el código. Según la tarea en cuestión, el modelo escribe diferentes códigos (un bucle, una bifurcación, un Promise.all) y el intérprete lo ejecuta de manera determinista.

task() recibe una descripción, un subagentType y un responseSchema opcional; cuando se proporciona, el resultado ya es un objeto tipificado, listo para filtrar o pasar al siguiente paso.
1const result = await task({2 description: "Review src/auth/login.ts for security issues.",3 subagentType: "reviewer",4 responseSchema: {5 type: "object",6 properties: {7 severity: { type: "string", enum: ["high", "medium", "low"] },8 issues: { type: "array", items: { type: "string" } },9 },10 },11});1213const critical = result.severity === "high" ? result.issues : [];14critical; // model sees the last line
Para más información, consulta Subagentes programáticos e Intérpretes en la documentación.
Patrones de orquestación comunes
Los flujos de trabajo dinámicos de Anthropic popularizaron un conjunto de patrones de orquestación para el trabajo paralelo de agentes. No son funciones que se activan. Son formas que surgen naturalmente del trabajo, y el agente se adapta a una diferente a medida que la tarea cambia. La siguiente tabla asigna cada forma al tipo de trabajo que mejor se adapta.

A continuación, profundizaremos en cómo funciona cada uno en Deep Agents, con trazas en vivo. También hemos preparado un video que explica estos seis patrones, que puedes ver aquí.
Clasificar y actuar
Primero se clasifican los elementos, luego cada elemento es manejado por un subagente especializado según su clasificación. Esto permite procesar entradas mixtas donde diferentes elementos necesitan diferentes conocimientos especializados.

Casos de uso: Clasificación de tickets de soporte, registros de errores, comentarios de usuarios, o cualquier lote de elementos que necesiten un manejo diferente según su tipo.
Ejemplo: clasificar un backlog de tickets de soporte. El agente lee los tickets y clasifica cada uno como error, solicitud de función o pregunta. Los erroces van a un investigador de errores, las solicitudes de función a un analista de funciones y las preguntas a un respondedor de soporte. El resultado es un resumen agrupado por categoría.
Ver la traza aquí.
Abanico de entrada y síntesis
El agente despacha el mismo tipo de trabajo en muchos elementos en paralelo y luego combina los resultados.

Casos de uso: Revisión de código en un directorio, análisis de un lote de documentos, procesamiento de archivos de registro, ejecución de la misma verificación en múltiples servicios.
Ejemplo: una revisión de seguridad por archivo en un árbol de código fuente. El agente descubre cada archivo TypeScript en src/ y despacha un revisor de seguridad por archivo en paralelo. Luego fusiona los resultados en un único informe priorizado con calificaciones de gravedad y las líneas que deben cambiarse.
Ver la traza aquí.
Verificación adversarial
Un patrón de dos pasos. El primer paso produce hallazgos. El segundo paso envía cada hallazgo a verificadores independientes, y solo se conservan los hallazgos que sobreviven al acuerdo. Esto reduce los falsos positivos cuando la confianza es más importante que la velocidad.

Casos de uso: Auditorías de seguridad donde los falsos positivos son costosos, verificaciones de cumplimiento, cualquier revisión donde se necesite alta confianza en los hallazgos.
Ejemplo: una auditoría de seguridad donde los falsos positivos son inaceptables. Un auditor lanza una red amplia en busca de vulnerabilidades potenciales, luego cada hallazgo se entrega a un verificador independiente que lee el código desde cero y devuelve un veredicto de CONFIRMADO o REFUTADO. Solo los hallazgos confirmados sobreviven al informe final.
Ver la traza aquí.
Generar y filtrar
Varios subagentes generan soluciones independientes al mismo problema. El agente compara, puntúa y filtra los resultados en código, conservando solo los mejores.

Casos de uso: Propuestas de arquitectura, estrategias de refactorización, variaciones de contenido, cualquier tarea donde explorar múltiples opciones antes de comprometerse produce un mejor resultado.
Ejemplo: rediseños competidores de un limitador de tasa, clasificados. El agente tiene un arquitecto que produce varios rediseños independientes de rate-limiter.ts, cada uno escrito en su propio archivo para que no se sobrescriban entre sí. Luego los puntúa en corrección bajo ráfaga, soporte multi-instancia y complejidad. El más fuerte gana, con una justificación de por qué.
Ver la traza aquí.
Torneo
Las variaciones se comparan cara a cara mediante un subagente juez, y los ganadores avanzan a través de rondas eliminatorias.

Casos de uso: Optimización bajo criterios subjetivos, selección de estilo, elección entre implementaciones competidoras.
Ejemplo: un bracket por pares sobre reescrituras de un controlador createOrder desordenado. Varios escritores producen cada uno una reescritura candidata con diferentes prioridades, luego un juez las compara cara a cara, avanzando a los ganadores ronda por ronda hasta que un campeón se destaca. Regresa con el razonamiento del juez.
Ver la traza aquí.
Bucle hasta terminar
El agente ejecuta un bucle de descubrimiento, deduplicando lo que ya ha encontrado, hasta que no aparecen nuevos resultados. Útil cuando el alcance del trabajo no se conoce de antemano.

Casos de uso: Búsqueda exhaustiva, detección de código muerto, auditorías de dependencias, cualquier barrido donde se desee completitud en lugar de un número fijo de resultados.
Ejemplo: un barrido de seguridad por pasadas. El agente ejecuta una pasada de escaneo, inspecciona lo que encontró en el código y solo inicia otra pasada si la anterior reveló nuevos problemas. Se detiene cuando una pasada no descubre nada nuevo. Reporta los hallazgos consolidados y cuántas pasadas fueron necesarias.
Ver la traza aquí.
Conclusión
Los subagentes dinámicos son la forma de dar a los agentes más autonomía y mayor fiabilidad. El código maneja la cobertura y el contexto intermedio, y el modelo sigue haciendo el trabajo pesado de juicio. Los patrones anteriores son un punto de partida. En la práctica, los agentes los componen y mezclan según lo que demande la tarea.
Esta es la idea del Modelo de Lenguaje Recursivo en su forma más simple. Un agente que escribe código, y ese código despacha más agentes. Es un agente que se llama a sí mismo recursivamente y no está limitado por una ventana de contexto ni encerrado en un flujo de trabajo fijo. Un agente puede descomponer el problema tanto como sea necesario y reensamblar las piezas en la forma que mejor se ajuste. Los patrones de orquestación destacados anteriormente son primeros vistazos de lo que es posible, pero el techo solo seguirá elevándose a medida que los modelos mejoren en la escritura de código.
Los subagentes dinámicos son la forma en que Deep Agents pone esto en tus manos hoy. Comienza agregando un intérprete de código a tu agente, o usa dcode donde los subagentes dinámicos funcionan de inmediato.
Agradecimientos
Coescrito por @colifran_ y @huntlovell. Agradecimientos a @hwchase17, @masondrxy y @chester_curme por su cuidadosa revisión.





