Claude Code Gasta ~16% dos Seus Tokens em uma Linha de Status: Como Medir agent_summary e Desativá-la ✅ yoDEV Testado

Claude Code envia em segundo plano uma solicitação chamada agent_summary que, segundo a telemetria de um desenvolvedor independente, consumiu 16,4 por cento de todo o gasto em tokens e quase 1 a cada 5 solicitações à API, apenas para atualizar uma linha de status de três a cinco palavras para cada agente em segundo plano. A cada ~30 segundos, para cada agente ativo, Claude Code reenvia a transcrição completa desse agente para seu próprio modelo (normalmente Opus) e pede que descreva sua última ação. Você pode medir isso em sua própria máquina com OpenTelemetry, e um script de pré-carregamento para Bun licenciado sob MIT, no-agent-summary.js, o desativa.

Fonte: README e script de no-agent-summary.js no GitHub Gist

:white_check_mark: yoDEV Testado · 29 de outubro de 2026
Testamos no-agent-summary.js com Claude Code 2.1.312 em macOS 27.0.1 (Apple Silicon), uma plataforma que seu autor não testou, revisamos os binários Linux x64 de 2.1.312 e 2.1.308 em um sandbox e reproduzimos duas falhas de instalação em Bun 1.4.4. Os resultados que relatamos como nossos saem desse teste.

O que é Claude Code e o que são agentes em segundo plano?

Claude Code é o agente de programação da Anthropic que funciona a partir do terminal: lê seu repositório, executa comandos e edita arquivos. Pode delegar trabalho em subagentes e deixar alguns rodando em segundo plano (background agents) enquanto você continua com outra coisa. O painel de agentes mostra, ao lado de cada um, uma linha curta que resume o que está fazendo. Essa linha é a que custa.

O que é agent_summary em Claude Code?

agent_summary é a query_source que Claude Code atribui à solicitação que escreve esse texto de status ao lado de cada agente em segundo plano. A resposta nunca chega ao modelo nem à sua conversa: apenas atualiza essa etiqueta.

Segundo o autor do script, Flamerix AI:

  • Está ativado por padrão para agentes em segundo plano em modo interativo desde a 2.1.232 (agosto de 2026).
  • O intervalo vem de uma flag do servidor, limitado entre 30 e 240 segundos, e o valor padrão já é o mínimo de 30.
  • Não há nenhum ajuste para desativá-lo. A opção do SDK agentProgressSummaries pode ativá-lo, mas não desativá-lo, e a variável não documentada CLAUDE_CODE_AGENT_PROGRESS_SUMMARIES também só serve para ativá-lo.
  • Na 2.1.310 chegou um modo “short” mais barato, cerca de 2.000 tokens de notas em lugar da transcrição inteira, mas vem desativado e apenas as flags do servidor podem mudá-lo.

Tudo isso é a leitura que o autor faz do código empacotado, não documentação da Anthropic.

Quanto agent_summary adiciona ao preço de Claude Code?

Em uma semana de uso do autor, agent_summary custou mais que a conversa principal. As cifras são autorrelatadas, saem de sua própria exportação de OpenTelemetry e ele não publicou os dados brutos:

query_source = agent_summary Semana antes do hook 2 dias depois
Parte do gasto de Claude Code 16,4% (conversa principal: 15,7%) 0%
Parte das solicitações à API 19,7% 0%
Desse gasto, em Opus 96% —
Tokens de entrada por token de saída ≈ 9.000 : 1 —

“Gasto” aqui é a estimativa que o próprio Claude Code faz por solicitação (cost_usd), não uma fatura. Se você usar um plano de assinatura, o que perde é margem frente aos limites de uso.

O autor não é o único. O issue #86879 é uma solicitação aberta para ter uma forma oficial de desativar o temporizador, e reúne medições entre 18 e 26 por cento em sessões distintas, incluindo uma onde agent_summary foi 22,7 por cento das solicitações. O custo cresce com quantos agentes em segundo plano você tem e durante quanto tempo, não com o trabalho útil, porque cada ciclo reenvia o contexto atual do agente. Um comentarista na 2.1.276 calculou que um agente com ~380.000 tokens de contexto paga cerca de 45 milhões de tokens lidos do cache por hora apenas por sua linha de status.

O cache de prompts suaviza isso, mas não o elimina: segundo o autor, quase todas essas chamadas acertam no cache, e a pequena fração que falha carrega com mais de um terço do custo.

No momento de publicar esta nota, 29 de outubro de 2026, nenhum dos dois issues tinha resposta da Anthropic, e a Anthropic não havia confirmado publicamente esse comportamento.

Por que Claude Code consome tokens em segundo plano sem que você veja?

Porque essas solicitações não se escrevem nas transcrições de sessão que se guardam em disco. O issue #104358 documenta que as solicitações de fundo (agent_summary, compact, as chamadas do classificador de auto_mode e outras) são cobradas mas não deixam nenhuma linha nesses arquivos, então qualquer ferramenta que some transcrições fica aquém. Quem o relatou encontrou totais entre 1,35 e 2,13 vezes abaixo do estado de custos do próprio Claude Code, em 14 sessões com muitos subagentes.

A exportação de OpenTelemetry é o único lugar onde aparecem.

Como ver o consumo de tokens em Claude Code por tipo de solicitação?

Ative a exportação de logs de OpenTelemetry de Claude Code e agrupe os eventos claude_code.api_request por query_source. Segundo a documentação oficial de Monitoramento, o valor detalhado de query_source (como repl_main_thread, compact ou o nome de um subagente) vive no evento api_request. As métricas claude_code.cost.usage e claude_code.token.usage só levam uma categoria ampla (main, subagent ou auxiliary), então com métricas sozinhas você não consegue isolar agent_summary.

A configuração mínima, segundo a documentação:

export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_LOGS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
claude

Aponte o endpoint para o coletor OTLP que você já usa e some cost_usd (ou os atributos de tokens) por query_source. Se nada chegar, a documentação recomenda iniciar Claude Code com claude --debug-file <caminho> e procurar por erros [3P telemetry] nesse log.

Uma verificação rápida sem coletor: o método do próprio autor conta as linhas [AgentSummary] Forking de um log de --debug-file enquanto roda um subagente em segundo plano. Se essa linha aparece a cada ~30 segundos por agente, você está pagando por ela.

Se também usa Codex, temos o guia equivalente: Como ver o consumo de tokens em Codex CLI.

Como desativar agent_summary em Claude Code?

Com no-agent-summary.js, um pré-carregamento para Bun de cerca de 80 linhas. O binário nativo de Claude Code é um programa Bun compilado, e Bun lê opções extras da variável de ambiente BUN_OPTIONS, então o script se carrega antes de Claude Code sem modificar o binário.

O script envolve setTimeout e setInterval. Quando o código do callback de um temporizador contém uma de suas duas âncoras, a linha de log [AgentSummary] Timer fired ou o id agent_summary, devolve um temporizador inerte em lugar de armá-lo. Todos os outros temporizadores passam sem mudanças.

:warning: Duas regras que o README não diz. Escreva --preload=/caminho, não --preload /caminho: com um espaço, colocar BUN_OPTIONS de forma global quebra todos os subcomandos de bun. E guarde o hook em um caminho sem espaços, porque BUN_OPTIONS não pode levá-los, como quer que você os cite. Reproduzimos os dois falhos (ver “O que quebra ao instalá-lo?”, mais abaixo). Todos os comandos aqui usam a forma com = e a localização que o README propõe, ~/.local/share/.

Para uma única sessão (adaptado do resumo do README):

curl -fsSL https://gist.githubusercontent.com/flamerix-ai/c3905705cc4205e5de3011fa2e74efce/raw/no-agent-summary.js -o ~/.local/share/no-agent-summary.js
claude daemon stop --any
BUN_OPTIONS="${BUN_OPTIONS:+$BUN_OPTIONS }--preload=$HOME/.local/share/no-agent-summary.js" claude

De forma permanente, adicione isso a ~/.profile, ~/.bashrc ou ~/.zshrc, com o caminho absoluto:

export BUN_OPTIONS="${BUN_OPTIONS:+$BUN_OPTIONS }--preload=/caminho/absoluto/no-agent-summary.js"

Depois reinicie o daemon para que os processos em segundo plano o peguem:

claude daemon stop --any

Esse reinício importa. O daemon, o pty host e as sessões bg-spare pré-aquecidas herdam o ambiente do que iniciou o daemon, então um daemon iniciado antes de definir BUN_OPTIONS continua criando sessões sem o hook. As execuções sem interface (claude -p, cron, CI, integrações com editores) também precisam da variável.

O que muda: a linha de status de cada agente no painel para de atualizar. Os subagentes, os agentes em segundo plano, os skills bifurcados e as sessões em segundo plano continuam funcionando normalmente.

É possível sem patch?

Em parte. O README indica que CLAUDE_CODE_FORK_SUBAGENT=0 e CLAUDE_CODE_DISABLE_BACKGROUND_TASKS=1 também param os resumos, mas apenas porque desligam por completo os subagentes bifurcados ou os agentes em segundo plano. A variável que costuma ser sugerida, DISABLE_NON_ESSENTIAL_MODEL_CALLS, nem sequer existe no binário: procuramos nela nas duas versões que testamos e não aparece uma vez.

O que quebra ao instalá-lo?

Há três maneiras distintas de dar errado. As duas primeiras reproduzimos nós mesmos.

1. Um BUN_OPTIONS global com espaço quebra Bun

Um comentário no gist relatou que BUN_OPTIONS="--preload /caminho" faz falhar bun install, add, test, build e x com Script not found "install" (e similares) em Bun 1.4.3. A causa é o analisador de argumentos de Bun: qualquer flag com valor colocado antes do subcomando o provoca; bun --define x:1 install falha igual.

Reproduzimos em Bun 1.4.4:

BUN_OPTIONS bun install bun test bun build bun x
--preload /caminho :cross_mark: Script not found "install" :cross_mark: :cross_mark: :cross_mark:
--preload=/caminho :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark:
sem definir :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark:

Com --preload=/caminho, o hook continua carregando em Claude Code 2.1.312 e 2.1.308. O ajuste não custa nada do lado de Claude Code. Em macOS vimos o mesmo com o Bun independente 1.3.13.

O mesmo comentarista também restringiu a comprobação de instalação do script para que apenas atue dentro do binário de Claude Code, e assim outros binários Bun compilados na máquina não vejam seus temporizadores envolvidos. Tal como está publicado, o script apenas verifica que roda dentro de algum binário Bun compilado. Essa modificação não testamos.

2. Um espaço no caminho do hook impede que Claude Code inicie

Bun separa BUN_OPTIONS por espaços, então um caminho como ~/minhas provas/no-agent-summary.js se parte em dois. Nos aconteceu na nossa primeira prova em macOS, a partir de uma pasta cujo nome tinha um espaço. Bun leu a segunda metade como uma flag solta (error: Invalid Argument '-s'), e todos os comandos que definiam BUN_OPTIONS, claude incluído, imprimiram a ajuda de Bun e terminaram.

Citar não serve. No sandbox testamos o caminho tal qual, entre aspas duplas, entre aspas simples e com os espaços escapados com barra invertida. Os quatro falharam com preload not found, com o caminho cortado no primeiro espaço. O arquivo do hook tem que estar em um caminho sem espaços.

Pelo menos esse falho é visível: Claude Code se recusa a iniciar, em lugar de rodar sem o hook.

3. Qualquer atualização de Claude Code pode desativá-lo silenciosamente

O hook reconhece o temporizador do resumo por texto dentro de seu callback. Se uma atualização renomear a linha de log ou o id, tire esses textos de fora do callback, passe o callback por .bind() ou mova o temporizador para uma API que o script não envolve, o hook não detecta nada e os resumos voltam sem avisar. O autor o chama de “fail-open”.

Por isso convém verificar de novo após cada atualização de Claude Code:

BUN_OPTIONS="--preload=$HOME/.local/share/no-agent-summary.js" CC_AGENT_SUMMARY_LOG=/tmp/nas.log claude --version && cat /tmp/nas.log

Você deveria ver preload active mode=off …. Depois, com as mesmas variáveis, deixe rodar um subagente em segundo plano um minuto ou dois: o log deveria mostrar summary timer #1 suppressed. Se exportar OpenTelemetry, que query_source = agent_summary se mantenha em zero é a única comprobação que detecta todos os modos de falha.

Para um teste A/B, CC_AGENT_SUMMARY_MODE=pass carrega o hook, mas deixa armados todos os temporizadores. Os resumos voltam, o que demonstra que é o modo off que os elimina.

Tenha em mente também:

  • Plataforma: o autor apenas o testou em Linux. Nossa prova, mais abaixo, mostra que funciona em macOS (Apple Silicon) com a 2.1.312. Em Windows, segundo o autor, o mais provável é que o hook nunca se instale.
  • Termos de serviço: o README avisa que mudar o comportamento de um cliente em execução pode entrar em conflito com os termos do serviço com o qual o usa, e deixa essa comprobação em suas mãos.

O que testamos em yoDEV?

Fizemos duas provas em 29 de outubro de 2026.

Em macOS: o hook realmente para agent_summary?

Ambiente: Claude Code 2.1.312, o binário nativo arm64 com Bun 1.4.4 integrado, em macOS 27.0.1 sobre Apple Silicon. O hook foi baixado da URL do próprio README; seu sha256 é dc6699da…59f7.

Seguimos o método do autor: três sessões sem interface (claude -p --model haiku, com os resumos forçados mediante CLAUDE_CODE_AGENT_PROGRESS_SUMMARIES=1). Em cada uma, um subagente executou oito passos de 20 segundos, e contamos as linhas [AgentSummary] Forking no log de --debug-file.

Execução Disparos do temporizador Bifurcações de resumo Duração Tarefa completada
Sem hook 5 5 181 s :white_check_mark:
Hook em modo pass (controle) 5 5 220 s :white_check_mark:
Hook em modo off 0 0 212 s :white_check_mark:

O resultado coincide com o do autor em Linux para a 2.1.312: a bifurcação ocorre, carregar o hook por si só não muda nada, e o modo off a elimina. O subagente completou os oito passos em todas as execuções.

O log do hook em modo off mostra o mecanismo: um temporizador suprimido, cerca de 26 segundos depois de começar. Um temporizador suprimido nunca se dispara, então nunca se arma de novo, e o log de depuração não mostra nenhuma linha Timer fired nem Forking.

O log sem hook também mostra o que se paga em cada uma dessas chamadas. Cada bifurcação reenviou o contexto completo do subagente (23 mensagens no primeiro ciclo) para produzir um resumo como “Running sleep 20, call 1 of 8”.

Em um sandbox Linux x64: cabe com as versões atuais?

Com o pacote npm @anthropic-ai/claude-code-linux-x64:

Comprobação 2.1.312 (latest) 2.1.308 (stable)
O prefixo sha256 coincide com a tabela do README :white_check_mark: 4f4178ce41d8 :white_check_mark: 356733f185fa
Âncoras do hook presentes no binário :white_check_mark: :white_check_mark:
O pré-carregamento carrega e envolve os temporizadores :white_check_mark: :white_check_mark:
Existe claude daemon stop --any :white_check_mark: :white_check_mark:
DISABLE_NON_ESSENTIAL_MODEL_CALLS no binário 0 aparições 0 aparições

O que não medimos: a parte do gasto. Nossas execuções demonstram que a chamada desaparece, mas não verificam a cifra de 16,4 por cento do autor, que depende de quantos agentes em segundo plano você usa e durante quanto tempo. Por isso a seção de medição vai primeiro.

Vale a pena instalá-lo?

Se deixa agentes em segundo plano rodando durante muito tempo, sobre tudo sem supervisão ou em CI, onde ninguém mira a linha de status, meça primeiro. Se agent_summary aparece como uma parte grande de seus eventos api_request, o hook é um script pequeno e legível, com um interruptor de controle (modo pass) e uma forma clara de verificá-lo. Instale-o com --preload= em um caminho sem espaços, reinicie o daemon e verifique de novo após cada atualização de Claude Code.

Se trabalha sobretudo em uma única sessão em primeiro plano, sem agentes em segundo plano, pode que não esteja pagando nada disso, e isso é justamente o que a medição vai lhe dizer.

Se quer entender melhor o que está pagando em cada solicitação, comece por o que são tokens em IA e por que cobram por eles.


E você? Qual parte do seu consumo de tokens em Claude Code o surpreendeu mais quando mediu?

Você usa agentes em segundo plano em Claude Code?
  • Sim, todos os dias
  • De vez em quando
  • Não, trabalho em uma única sessão
  • Prefiro outra opção (conte-nos qual)
0 votantes

Comente abaixo ou, se este artigo lhe chegou por email, responda diretamente ao email: sua resposta se publica aqui.

Relacionado: TokenEconomizer: o Plugin de Microsoft para Claude Code, Codex e Copilot CLI que Cortou 31 por cento do Contexto :white_check_mark: yoDEV Testado