O que um agente de código manda para fora da máquina do desenvolvedor

Um agente de código não manda só a pergunta. Manda o que ele leu: arquivos, saídas de comando, logs, às vezes o .env. E manda tudo de novo a cada turno. Medimos isso em 30 sessões reais, e o retrato é bem diferente do que a maioria das empresas imagina quando libera o Claude Code ou o Cursor para o time.

Sobre este artigo

Publicado em 2026-10-20 por Rafael Hickmann, Fundador da Atlasberg. Leitura de 8 minutos.

Um pedido simples

Terça-feira, quatro da tarde. Um desenvolvedor escreve no terminal: "o teste de integração do faturamento está quebrando desde ontem, descobre por quê". E vai pegar um café.

Nos minutos seguintes o agente lista o diretório, abre uns vinte arquivos, roda a suíte de testes e lê seiscentas linhas de saída. Não acha nada óbvio, então abre o docker-compose para entender o ambiente, e o .env.test para ver qual banco o teste usa. Roda uma consulta no banco local para conferir um registro. O banco local, como em muita empresa, foi montado com um dump da produção de alguns meses atrás.

Quando o desenvolvedor volta, a resposta está pronta: o mock de data estava em UTC e o teste rodou depois da meia-noite. Correção de uma linha. Tudo certo, menos um detalhe que ninguém vê. Cada coisa que o agente leu nesses minutos virou texto dentro da conversa, e a conversa inteira foi para o provedor do modelo. Não uma vez. Em cada turno.

O que vai no pacote

Para medir isso direito, olhamos 30 sessões reais de agente, 6.892 turnos, usando o contexto que o próprio provedor reportou em cada requisição. São as mesmas sessões do nosso estudo sobre compactação de contexto. Toda requisição de um agente tem duas partes.

A primeira é um prefixo fixo: as instruções de sistema da ferramenta, a definição de cada ferramenta que o modelo pode chamar e a memória do projeto, como o CLAUDE.md ou as regras do Cursor. Na mediana, esse prefixo tinha 162.811 tokens por turno. Ele chega antes da primeira palavra que o desenvolvedor digitou.

A segunda é o histórico da sessão, e aí está a surpresa. A conversa propriamente dita, o que a pessoa escreveu e o que o agente respondeu em linguagem natural, é 9,2% do histórico. Outros 46,9% são as chamadas que o agente fez: comandos, caminhos de arquivo, as edições que ele escreveu. E 44,0% são os resultados dessas chamadas, ou seja, o conteúdo dos arquivos que ele abriu e a saída dos comandos que ele rodou.

[Figura: Prefixo fixo mediano de 162.811 tokens por turno. Barra empilhada do histórico: 46,9% comandos, caminhos e edições que o agente pediu; 44,0% arquivos lidos e saídas de comando; 9,2% conversa. - O que vai em cada requisição de um agente de código, medido em 30 sessões reais. A conversa é menos de um décimo.]

Dito de outro jeito: quase metade do que o agente manda para fora é material que estava na máquina do desenvolvedor e que ninguém escolheu mandar. O agente escolheu ler, e ler é mandar.

E manda de novo a cada turno

As APIs de modelo não guardam estado entre uma chamada e outra. Para o modelo lembrar do que aconteceu, o agente reenvia o histórico inteiro a cada turno. O cache do provedor torna isso barato (nas nossas sessões, 95% dos tokens de entrada foram cobrados como leitura de cache, a um décimo do preço), mas o cache muda o preço, não o tráfego. O conteúdo continua viajando em cada requisição.

[Figura: Ilustração com 20 turnos de uma sessão. A partir do turno 12, quando o agente abre o .env.test, um bloco dourado com o conteúdo do arquivo aparece em todas as requisições seguintes. - Ilustração. O arquivo aberto no turno 12 segue em todas as requisições até a sessão acabar ou o histórico ser compactado.]

Então o .env.test que o agente abriu no turno 12 não saiu uma vez. Saiu no turno 12, no 13, no 14 e em todos os seguintes, até a sessão terminar ou até o histórico ser compactado. Numa sessão longa de agente, isso pode ser centenas de vezes.

As três coisas que preocupam de verdade

[Figura: Cadeira de escritório vazia à noite, empurrada para trás, com um notebook aberto e aceso sobre a mesa. - O agente continua trabalhando enquanto você pega o café. E continua mandando contexto.]

Segredos que o agente leu sem ninguém pedir

Arquivo .env, credencial no docker-compose, token num arquivo de configuração antigo, a saída de um comando que imprime variáveis de ambiente. O agente não está procurando segredo. Ele está tentando resolver o problema, e segredos moram justamente nos arquivos que explicam como o ambiente funciona.

Dado de produção que foi parar no ambiente de desenvolvimento

Dump de banco para teste, log copiado de um incidente, planilha usada como fixture. Quem montou isso pensou na máquina do desenvolvedor como ambiente fechado. Com um agente rodando ali, ela deixou de ser.

Agentes que ninguém sabe que existem

Além do agente que o desenvolvedor abre no terminal, aparecem os outros: o job de CI que revisa pull request com IA, o script que um time escreveu para triar tickets, a extensão da IDE que alguém instalou. Cada um tem uma chave, cada um gasta, e alguns rodam de madrugada em loop sem ninguém olhando.

O que dá para fazer no caminho da rede

Tudo o que o agente manda para o modelo é uma requisição HTTPS para o endereço do provedor. Se essa requisição passa por um gateway da empresa, existe um ponto onde dá para ver, decidir e registrar. E isso não exige mudar a forma como o time trabalha.

O Claude Code, por exemplo, lê um arquivo de configuração gerenciada que a empresa distribui pelo MDM e que o usuário não consegue sobrescrever. Esse arquivo aponta o endereço da API para o gateway e define um script que entrega a credencial. O Cursor, o Codex, o Gemini CLI e os SDKs oficiais fazem o mesmo com uma URL base. O desenvolvedor abre o terminal e trabalha como antes.

Sobre o custo, vale um aviso que aprendemos medindo: o maior gasto de um agente quase nunca está na conversa. Está no prefixo fixo e no histórico de ferramentas. Contamos a medição completa, e o que a compactação de contexto consegue ou não consegue fazer com isso, no artigo dos 17%.

  • Cada pessoa entra com o login da empresa e recebe um token pessoal. Toda requisição tem nome, e o token morre quando a pessoa sai.
  • A política de dados lê a requisição inteira, não só a última mensagem. Resultado de ferramenta também é texto que sai, então um CPF dentro de um dump ou uma chave dentro de um .env passa pela mesma regra de máscara ou bloqueio.
  • O painel de agentes identifica sozinho quem está falando com o gateway: o tipo de cliente (SDK, CLI, framework), se está em loop agêntico, se a cadência é de pessoa ou de máquina, quais ferramentas o modelo recebe. Sem cadastro manual, o que importa para achar o job de CI que ninguém documentou.
  • Cada agente automatizado ganha uma chave virtual com orçamento. Quando o orçamento estoura, as requisições passam para um modelo mais barato em vez de serem negadas, e o loop da madrugada deixa de ser uma surpresa na fatura.

O que isso não resolve

O gateway vê o que o agente manda para o modelo. Ele não vê o que o agente faz na máquina. Um rm -rf, um git push --force, um comando que baixa um script de um endereço qualquer: tudo isso acontece no computador do desenvolvedor e nunca passa pelo gateway. Para isso valem os controles da própria ferramenta (modos de permissão, lista de comandos permitidos), rodar o agente em contêiner quando a tarefa é longa e, principalmente, não deixar credencial de produção na máquina de desenvolvimento.

E a regra mais barata de todas continua valendo: banco de desenvolvimento com dado sintético. Nenhuma máscara é tão boa quanto o dado que nunca esteve lá.

O passo a passo: O tutorial de conectar o Claude Code, o Cursor e qualquer SDK ao gateway traz o arquivo de configuração gerenciada pronto, o script de credencial e a referência de variáveis de cada ferramenta.

Sobre a Atlasberg

A Atlasberg constrói a camada de controle entre uma empresa e todos os modelos de IA. A Atlasberg Platform autentica cada requisição com uma chave virtual, filtra por política e DLP, roteia para o provedor certo e grava numa trilha de auditoria encadeada por hash, com uma API compatível com a OpenAI para as aplicações só trocarem a URL base.

Os artigos deste blog são escritos pelo time de engenharia e relatam medições em tráfego real, com as premissas impressas ao lado do resultado. Para falar com o time, escreva para [email protected] ou use https://atlasberg.com/pt-br/contato.

Agentes: esta página também está disponível em Markdown em /pt-br/blog/o-que-o-agente-de-codigo-manda-para-fora.md, ou pedindo esta URL com o cabeçalho Accept: text/markdown. Índice de tudo: /llms.txt.