Lección 04 · Planificación

Delega el problema grande a un agent nuevo

«Process isolation gives context isolation for free.» El subagent hace el trabajo sucio; el padre recibe solo el resumen limpio.

⏱ ~10 min · 📝 3 widgets interactivos · 🧑‍💻 Basado en shareAI-lab · s04_subagent.py

El dilema del agent padre

Imagina que le pides a Claude Code que «entienda cómo gestiona la concurrencia este repositorio Rust de 100 000 líneas». La forma directa: buscar con ls, cat y grep dentro del contexto principal.

El problema: esta exploración mete 30 tool_results en messages[], cada uno con varios miles de tokens. Para cuando el modelo empieza a escribir la respuesta, el contexto ya está desbordado de exploración previa — unas pocas vueltas más y toca el límite, con una respuesta desordenada.

La solución de s04: delegar la exploración a un agent nuevo. El nuevo agent arranca con messages=[], explora por su cuenta y al final solo devuelve el summary al agent padre. En el contexto del padre solo queda un «llamé a la herramienta task y el resultado fue XXX» — limpio.

def run_subagent(prompt: str) -> str:
    sub_messages = [{"role":"user", "content": prompt}]  # contexto completamente nuevo
    for _ in range(30):  # límite de seguridad para evitar desbocarse
        response = client.messages.create(..., messages=sub_messages, tools=CHILD_TOOLS, ...)
        ...
    # solo devuelve el texto final; el razonamiento intermedio se descarta
    return "".join(b.text for b in response.content if hasattr(b, "text"))

Comparativa de contextos padre e hijo

Este widget simula una tarea real: «lista todos los usos de la API deprecated en este repositorio». Puedes ejecutarla con dos estrategias: (A) el agent padre lo hace todo; (B) lanza un subagent. Compara el tamaño final de cada contexto.

CHILD_TOOLS: qué herramientas tiene el hijo

Hay un detalle en s04 que es fácil pasar por alto: el agent hijo no tiene la herramienta task.

# El hijo solo tiene herramientas básicas; no puede lanzar nietos
CHILD_TOOLS = [bash, read_file, write_file, edit_file]

# El padre tiene además la herramienta task
PARENT_TOOLS = CHILD_TOOLS + [task]

¿Por qué? Para evitar que el dispatch recursivo explote en árbol. Un subagent que lanza 4 sub-subagents, que a su vez lanzan más... en pocas rondas son decenas de llamadas concurrentes que ningún rate limit de API resiste. La convención de s04: la jerarquía es plana, padre → hijo y nada más. El código real de Claude Code funciona igual — la herramienta Task prohíbe llamar a otra Task.

Visible e invisible

Clasifica estas afirmaciones: ¿cuáles son True y cuáles False?

Interactivo

Widget 1 · Parent vs Child · comparativa de tamaño de contexto

La misma tarea, dos estrategias. Pulsa Run y compara la longitud final de messages[] y la estimación de tokens.

🧠 El agent padre lo hace todo
messages: 0 · ~0 tokens
🎯 lanza subagent
messages: 0 · ~0 tokens
Interactivo

Widget 2 · True or False · responsabilidades del agent padre e hijo

6 preguntas V/F para poner a prueba tu comprensión del límite de aislamiento.

Correctas 0 / 6
Interactivo

Widget 3 · When to spawn · ¿qué tareas conviene delegar a un subagent?

6 descripciones de tareas. Decide si (A) el padre lo hace directamente o (B) lanza un subagent. No hay respuesta absolutamente correcta, pero sí opciones claramente mejores.

Correctas 0 / 6