Investigadores da Microsoft Research e da universidade UC Berkeley publicaram o TokenEconomizer, um plugin de código aberto destinado a controlar os custos dos agentes de programação. Ele aprende com sessões passadas num mesmo repositório de código para reduzir o desperdício das sessões seguintes. Segundo os resultados publicados, reduz o custo médio das tarefas SWE-Bench de 18,4% a 30,9% em 5 configurações agente-modelo.
Os agentes de programação executam tarefas de desenvolvimento de forma autónoma, enviando para o modelo de linguagem um fluxo contínuo de texto, dividido em tokens (as unidades de texto faturadas). Cada turno do agente refatura o prompt do sistema, os esquemas de cada ferramenta carregada e o histórico completo. O TokenEconomizer coloca-se no exterior do agente, tratando-o como uma caixa negra: não modifica nem os pesos dos modelos nem o código dos agentes. Funciona com Claude Code, Codex, GitHub Copilot CLI e Pi, numa máquina com Python 3.10 ou mais recente, sem GPU nem chave de API própria.
Para onde vai o dinheiro
Para compreender as perdas, os investigadores analisaram 60 tarefas SWE-Bench, distribuídas por 6 repositórios, executadas com Claude Code e Opus 4.8. Identificaram três fontes recorrentes de desperdício. A primeira é a descoberta repetida: uma vez concluídas 5 tarefas anteriores, 30% das chamadas de ferramentas repetem uma ação já realizada. A segunda diz respeito às ferramentas não utilizadas: 23 esquemas de ferramentas são carregados em cada turno, dos quais 16 nunca são chamados, e 3 cobrem 98% das chamadas. A terceira prende-se com ciclos de falha: 10 execuções falhadas representavam 17% das tarefas, mas 32% da despesa total.
Os investigadores também testaram três estratégias de código aberto existentes, RTK, Serena e o RepoMap do Aider. Nenhuma foi menos dispendiosa em todos os casos: todas reduziram os custos no Django, mas aumentaram-nos no SymPy.
Três mecanismos
O TokenEconomizer mantém, para cada repositório, um estado construído a partir dos registos das tarefas concluídas, e define três políticas antes de cada tarefa. A primeira, as micro-skills, consiste em resumir observações em factos de uma linha, como o comando de teste a utilizar. Um facto só entra no prompt após 3 confirmações em tarefas que não modifiquem os mesmos ficheiros, e uma contradição conta como 5, o que permite remover rapidamente os factos errados.
A segunda política, a poda de ferramentas, mantém sempre as ferramentas de shell, de leitura, de escrita e de edição. As outras são ocultadas após 3 tarefas consecutivas sem uso, ou quando um juiz LLM as considera não pertinentes. O catálogo completo regressa a cada 5 tarefas para ser reavaliado. No Django com Claude Code, a primeira chamada da tarefa 2 passou de 43 351 para 16 295 tokens de prompt.
A terceira é a intervenção nos ciclos de falha. O controlador define um orçamento de turnos igual a 1,25 vezes o 90º percentil dos comprimentos das execuções bem-sucedidas. Regras simples sinalizam falhas repetidas, depois um juiz LLM decide se o agente está bloqueado, com uma confiança de pelo menos 0,7. Um agente bloqueado recebe um único redirecionamento, sendo depois interrompido se o ciclo se repetir.
Resultados variáveis
No SWE-Bench, o plugin reduziu o custo nas 30 células repositório-configuração testadas, enquanto o RTK e o RepoMap o aumentaram em, respetivamente, 12 e 15 casos. O melhor resultado é uma redução de 30,9% com Claude Code e Opus 4.8, que sobe para 33,2% quando combinado com RTK. A taxa Pass@1, que mede o sucesso à primeira tentativa, progrediu em 4 configurações em 5, mas recuou 1,0 ponto com Opus 4.8. As economias notam-se sobretudo ao longo do tempo: a maioria dos repositórios era mais cara inicialmente, mas todos eram mais baratos a partir da sexta tarefa.
O plugin é publicado sob licença Apache 2.0. Os dados aprendidos permanecem em local, na pasta ~/.tokeneconomizer, e instala-se no Claude Code a partir do repositório GitHub do projeto. A poda de ferramentas e a proteção contra ciclos estão ativadas por defeito, enquanto as micro-skills estão desativadas, porque o seu proponente adiciona chamadas ao modelo.





