Aula 04 · Planejamento

Delegue problemas grandes para um novo agent

"Process isolation gives context isolation for free." O subagent faz o trabalho sujo; o agent pai recebe apenas o resumo limpo.

⏱ ~10 min · 📝 3 componentes interativos · 🧑‍💻 Baseado em shareAI-lab · s04_subagent.py

O dilema do agent pai

Imagine que você pede ao Claude Code para "entender como esse repositório de 100 mil linhas em Rust gerencia concorrência". A abordagem intuitiva: ele mesmo faz ls, cat, grep e varre tudo no contexto principal.

O problema: essa exploração vai acumulando 30 tool_results no messages[], cada um com alguns milhares de tokens. Quando ele realmente começa a escrever a resposta, o contexto já está cheio de resultados de exploração — mais alguns passos e atinge o limite, e a resposta fica bagunçada.

A solução do s04: delegar a tarefa de exploração para um novo agent. O novo agent começa com messages=[], explora por conta própria e, no final, devolve apenas o summary ao agent pai. O contexto do pai ganha apenas uma entrada: "chamei a ferramenta task, e o resultado foi XXX". Limpo.

def run_subagent(prompt: str) -> str:
    sub_messages = [{"role":"user", "content": prompt}]  # contexto totalmente novo
    for _ in range(30):  # limite de segurança para evitar loop descontrolado
        response = client.messages.create(..., messages=sub_messages, tools=CHILD_TOOLS, ...)
        ...
    # devolve apenas o texto final; todo o raciocínio intermediário é descartado
    return "".join(b.text for b in response.content if hasattr(b, "text"))

Comparação dos contextos pai e filho

Este widget simula uma tarefa real: "Liste todos os usos de APIs deprecated neste repositório". Você pode rodar com duas estratégias: (A) o agent pai faz tudo sozinho; (B) faz spawn de um subagent. Compare o tamanho final dos dois contextos.

CHILD_TOOLS: quais ferramentas o subagent recebe

Há um detalhe no s04 fácil de deixar passar: o subagent não tem acesso à ferramenta task.

# subagent tem apenas as ferramentas básicas, não pode fazer spawn de neto
CHILD_TOOLS = [bash, read_file, write_file, edit_file]

# agent pai tem a ferramenta task adicional
PARENT_TOOLS = CHILD_TOOLS + [task]

Por quê? Para evitar que o dispatch recursivo vire uma explosão em árvore. Um subagent que faz spawn de 4 sub-subagents, que fazem spawn de mais 4... em poucas rodadas há dezenas de chamadas concorrentes, e tanto o consumo de tokens quanto os limites de rate da API não aguentam. A convenção do s04: o spawn é plano — pai→filho, uma camada só. A implementação real do Claude Code segue o mesmo princípio — a Task tool proíbe chamar outra Task tool recursivamente.

O que é e o que não é visível

Revisando as responsabilidades: para cada afirmação abaixo, você acha que é Verdadeiro ou Falso?

Interativo

Widget 1 · Pai vs Filho · comparação do tamanho do contexto

A mesma tarefa, duas estratégias. Clique em Run e compare o comprimento final do messages[] e a estimativa total de tokens.

🧠 Agent pai faz sozinho
messages: 0 · ~0 tokens
🎯 spawn subagent
messages: 0 · ~0 tokens
Interativo

Widget 2 · Verdadeiro ou Falso · responsabilidades do agent pai e filho

6 afirmativas V/F para testar seu entendimento sobre os limites de isolamento.

Acertos: 0 / 6
Interativo

Widget 3 · Quando fazer spawn · quais tarefas valem um subagent?

Seis descrições de tarefas. Decida se (A) o agent pai faz sozinho ou (B) vale o spawn de um subagent. Não há resposta absolutamente certa, mas há diferenças claras de eficiência.

Acertos: 0 / 6