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.
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?