Lição 5: Subagentes e isolamento de contexto
Objetivos de aprendizado:
- Explicar por que um subagente conta como um movimento de gestão de contexto: uma janela limpa mais um resumo devolvido, mantendo o “processo” fora da janela principal
- Usar a razão entre tokens de processo e tokens de conclusão, mais dados reais de custo, para julgar se vale a pena entregar uma tarefa a um subagente
- Ligar o despacho de subagentes ao loop de harness que você escreveu no curso 7 desta série, de modo que cada despacho devolva exatamente um resumo à janela principal
Pré-requisitos: Você concluiu a Lição 4 sobre compactação e notas, e consegue rodar o loop de harness que escreveu no curso 7 desta série, “Fundamentos do Harness de Agente: Laços e Controle” | Anterior: Lição 4 << | Próxima: Lição 6 >>
Uma virada de perspectiva: não é divisão de trabalho, é só isolamento
Você já encontrou subagentes no curso 6 desta série, “Colaboração Multiagente”: como dividir uma tarefa, como reportar resultados, como vários agentes se coordenam. Aquele curso respondeu à pergunta de como múltiplos agentes trabalham juntos. Esta lição responde a outra: o que faz de um subagente, antes de mais nada, uma técnica de gestão de contexto?
Dito de outro jeito: mesmo que você tenha um único agente líder e não precise de coordenação de equipe nenhuma, ainda assim vai querer lançar mão de um subagente — não pela divisão de trabalho, mas pelo isolamento.
Volte à visão de orçamento da Lição 1. Quando um modelo analisa contexto, ele lança mão de um orçamento de atenção, e cada novo token que entra no contexto esgota um pouco desse orçamento1. Empilhe mais tokens e a capacidade do modelo de recuperar informação com precisão desse contexto declina1. Um agente é exatamente o cenário mais propenso a empilhar tokens: cada volta do loop produz dados novos que podem ser relevantes para o próximo turno de inferência — difíceis de jogar fora, difíceis de manter1.
Tarefas de exploração são a versão mais aguda disso. Digamos que o agente principal tenha de rastrear todos os pontos de chamada de alguma API obsoleta em um repositório de algumas centenas de milhares de linhas: uma dúzia de greps, vinte arquivos abertos, alguns milhares de linhas lidas. Esse conteúdo intermediário chega a dezenas de milhares de tokens, enquanto a conclusão que vale manter talvez tenha cinco linhas: “os pontos de chamada se concentram nestes três módulos, e aqui está a ordem de migração sugerida”. Se tudo isso acontece na janela principal, o orçamento de atenção é devorado pelo processo, sobrando pouco para a conclusão e para o trabalho que vem depois.
O subagente é a faca apontada exatamente para esse problema.
O mecanismo: janela limpa na entrada, resumo comprimido na saída
O mecanismo cabe em uma frase: um subagente especializado cuida de uma tarefa focada em uma janela de contexto limpa1; o grande volume de conteúdo intermediário que a exploração gera — resultados de busca, conteúdo bruto de arquivos, becos sem saída — fica todo dentro do subagente1; e o que volta ao agente principal é apenas um resumo condensado e destilado do trabalho dele, muitas vezes de 1.000 a 2.000 tokens1.
A janela do agente principal, portanto, carrega só a conclusão, nunca o processo. É um projeto assimétrico: o subagente pode queimar dezenas de milhares de tokens explorando, mas só um trecho curto de texto chega a sair dele.
Em código, isso é apenas uma nova abertura para o harness que você escreveu no curso 7. Para manter as coisas compactas, duas ações que se repetiam ao longo do loop daquele curso aparecem aqui embrulhadas como auxiliares: textOf extrai o bloco de texto de uma resposta, e appendToolResults roda as ferramentas deste turno e anexa os blocos tool_result ao array de mensagens (internamente ele faz exatamente o que você escreveu à mão naquele curso — rodar cada tool_use, coletar os resultados, devolvê-los).
Repare em três detalhes. Primeiro, messages parte de uma única e solitária descrição de tarefa, sem carregar uma palavra do histórico do agente principal — esse é o significado inteiro de “janela limpa”. Segundo, a função retorna textOf(response), uma string simples; as dezenas de idas e vindas de ferramenta que se empilharam dentro do loop desaparecem junto com a variável local messages. Terceiro, o system prompt do subagente exige explicitamente “não repita o texto bruto” — a qualidade de compressão do resumo é definida bem aqui.
Do lado do agente principal, a ação de despacho é apenas uma ferramenta comum que se encaixa no loop de stop_reason que você já tem:
Olhe a descrição do campo task: “Uma descrição de tarefa autocontida; o subagente não enxerga o histórico desta conversa”. Essa linha foi escrita para o agente principal — ele tem de enunciar a tarefa por inteiro, porque do outro lado está uma janela nova e amnésica. Explicitar propósito e fronteiras com essa precisão na descrição de uma ferramenta é exatamente a ideia de “ferramentas como contexto” da Lição 2: as ferramentas devem ser autocontidas, robustas a erro e extremamente claras a respeito do uso a que se destinam1.
Dados de primeira mão: subagentes como filtros inteligentes
O mecanismo está assentado; agora as medições. A Anthropic escreveu publicamente sobre seu sistema multiagente de pesquisa — a arquitetura por trás do recurso Research do Claude — que é um raro material de engenharia de primeira mão2.
Três de seus achados falam diretamente a esta lição:
- Os subagentes viabilizam a compressão ao operarem em paralelo com suas próprias janelas de contexto2. Cada subagente explora em uma janela só dele, sem apertar as demais.
- Eles chamam os subagentes de "intelligent filters" (filtros inteligentes): condensando os tokens mais importantes para o agente de pesquisa líder2. A palavra “filtro” é certeira — entra corpus, saem os pontos essenciais.
- Uma frase que vale mastigar: "The essence of search is compression: distilling insights from a vast corpus."2 (a essência da busca é a compressão: destilar insights de um corpus vasto.) Lida no contexto desta lição: toda exploração que um subagente roda existe para produzir aquele destilado de mil tokens.
Como observação lateral, o paralelismo também compra velocidade — várias linhas de pesquisa avançando ao mesmo tempo. Mas isso é assunto de orquestração, já coberto no curso 6 desta série; esta lição mantém o olho apenas no lado da compressão.
O outro lado do balanço: isolamento não é economia de custo
Com a vantagem exposta, a conta também precisa ser exposta. O mesmo texto traz os números medidos — note que são medições do sistema de pesquisa da Anthropic, não leis universais:
- Os agentes normalmente usam cerca de 4× mais tokens do que interações de chat2;
- Os sistemas multiagente usam cerca de 15× mais tokens do que os chats2;
- Quando analisaram de onde vinha o desempenho, o uso de tokens sozinho explicou 80% da variância, com o número de chamadas de ferramenta e a escolha do modelo respondendo pela maior parte do resto2.
A conclusão deles é franca: "Multi-agent systems work mainly because they help spend enough tokens to solve the problem."2 (os sistemas multiagente funcionam principalmente porque ajudam a gastar tokens suficientes para resolver o problema.)
Então vamos ser diretos: um subagente não é uma economia de custo. O total de tokens só sobe — a tarefa tem de ser reenunciada, o pano de fundo reassentado, várias janelas queimando ao mesmo tempo. O que ele compra é outra coisa: cada janela permanece em uma faixa que não se degradou, então a densidade de atenção se mantém alta o tempo todo. É uma troca de atenção — gaste mais tokens no total, ganhe uma janela limpa para cada um.
Quando essa troca vale a pena? De volta à visão de orçamento da Lição 1: o contexto é um recurso finito com retornos marginais decrescentes1. Duas perguntas para julgar:
- Razão entre processo e conclusão. Quão grande é o conteúdo intermediário desta tarefa, e quão pequena é sua conclusão final? Quanto mais desequilibrada a razão, maior o retorno do isolamento. Na direção contrária, uma tarefa cujo processo já é curto vira puro custo de repasse se você a despachar.
- Se a complexidade melhora comprovadamente o resultado. A orientação da Anthropic é considerar adicionar complexidade apenas quando isso melhorar comprovadamente os resultados — a palavra no original é "consider" (considerar), uma questão de proporção, não uma regra de ferro3. Se os tokens extras não compram uma saída melhor, volte para uma janela só.
A combinação para tarefas longas: notas como base, repasses para o fôlego
Por mais limpa que seja a janela de um subagente, ela ainda é finita. Para tarefas genuinamente de horizonte longo, o texto descreve uma combinação: os agentes resumem fases de trabalho concluídas e guardam informação essencial em memória externa2; depois geram subagentes novos com contextos limpos para seguir adiante, mantendo continuidade por meio de repasses cuidadosos2.
Isso costura a Lição 4 e esta em uma única sequência de movimentos:
- As notas estruturadas da Lição 4 cuidam de “colocar o estado-chave fora da janela” — um NOTES.md, uma lista de tarefas — elas vivem no sistema de arquivos e não ocupam a atenção de janela nenhuma;
- O isolamento desta lição cuida de “manter cada trecho de trabalho dentro de uma janela limpa” — a primeira coisa que um subagente novo faz é ler as notas; ele não precisa herdar o histórico completo de seu antecessor, apenas os pontos essenciais destilados dele.
O que entra em um documento de repasse? Reutilize o mesmo padrão de trade-off da compactação da Lição 4: manter decisões arquiteturais, bugs não resolvidos e detalhes de implementação, e descartar saídas de ferramenta redundantes1. Escrever um repasse e escrever um resumo de compactação são o mesmo ofício; só muda o leitor, de “você mesmo no futuro” para “o próximo subagente”.
Como isso aparece no Claude Code
Por fim, confronte tudo isso com uma implementação que você usa todo dia. As boas práticas oficiais do Claude Code colocam a coisa sem rodeios: a janela de contexto enche rápido, e o desempenho se degrada conforme ela enche; "The context window is the most important resource to manage."4 (a janela de contexto é o recurso mais importante a gerenciar.) Como o contexto é a restrição fundamental, os subagentes estão entre as ferramentas mais poderosas disponíveis4.
A implementação dele corresponde ao mecanismo que esta lição descreve: os subagentes rodam em janelas de contexto separadas e reportam de volta resumos4. Peça ao Claude Code para “encontrar a causa-raiz deste bug” e o subagente que ele despacha vai fazer grep, ler arquivos e seguir a cadeia de chamadas — toda essa exploração acontecendo na janela do próprio subagente, com a conversa principal recebendo apenas um resumo da investigação no final. Delimite investigações de forma estreita ou entregue-as a subagentes, e a exploração não consome seu contexto principal4.
Quando você vê uma subtarefa rodando em segundo plano na interface e a conversa principal ganha apenas um relatório curto quando ela termina, isso é a “janela limpa na entrada, resumo comprimido na saída” que esta lição vem descrevendo desde o começo.
A esta altura você já viu as três peças do kit de tarefas longas: compactação (Lição 4), notas estruturadas (Lição 4) e arquiteturas multiagente (esta lição). O objetivo comum delas é permitir que um agente mantenha coerência, contexto e comportamento orientado a objetivos ao longo de sequências de ações1. Na Lição 6 nós ligamos as três ao seu próprio harness.
Recapitulação
- Um subagente é uma técnica de gestão de contexto: a tarefa focada roda em uma janela de contexto limpa, o conteúdo intermediário da exploração fica isolado dentro do subagente, e o que volta é muitas vezes apenas um resumo destilado de 1.000 a 2.000 tokens — a janela principal carrega a conclusão, não o processo1.
- No sistema multiagente de pesquisa da Anthropic, os subagentes rodam em janelas de contexto separadas em paralelo e alcançam compressão por meio disso, atuando como "intelligent filters" (filtros inteligentes) que condensam os tokens mais importantes para o agente líder; "The essence of search is compression"2.
- Números medidos do mesmo sistema: os agentes usam cerca de 4× mais tokens do que os chats, os sistemas multiagente cerca de 15×, e o uso de tokens sozinho explica 80% da variância de desempenho — o isolamento é uma troca de atenção, “gaste mais tokens no total por uma janela que não se degrada”, não uma economia de custo2.
- Se o isolamento vale a pena depende da razão entre processo e conclusão, e de se a complexidade acrescentada melhora comprovadamente o resultado — a palavra da Anthropic é "consider" (considerar), uma questão de proporção e não uma regra de ferro3.
- A combinação para tarefas longas: resuma assim que uma fase se completa, guarde o essencial em memória externa, depois gere um subagente novo com contexto limpo e mantenha a continuidade por meio de repasses cuidadosos — as notas da Lição 4 e o isolamento desta lição formam um par casado2.
- No Claude Code, a janela de contexto é o recurso mais importante a gerenciar, o que faz dos subagentes uma das ferramentas mais poderosas disponíveis: eles rodam em janelas de contexto separadas e reportam de volta apenas resumos4.
>> Lição 6: Prática: ligando a gestão de contexto ao harness