Um comando aprovado com "não perguntar de novo" vira uma regra salva com a chave dentro, e essa regra pode parar em um repositório público. O conserto começa por trocar as credenciais, não por apagar o commit.
O que o Claude Code settings.local.json guarda
O arquivo serve para lembrar das suas decisões dentro do projeto, e é essa memória que carrega o segredo. Quando o Claude Code propõe rodar um comando no terminal, ele pede autorização. Se você responde "Sim, e não perguntar de novo", a ferramenta grava uma regra de permissão em .claude/settings.local.json, na pasta do projeto.
A regra é a string do comando, inteira. Uma chamada curl com X-N8N-API-KEY: n8n_api_... no cabeçalho é salva exatamente assim, com a chave no meio. O mesmo vale para variáveis de ambiente e para a definição de servidores MCP, que costumam trazer token no bloco env.
Nada disso é bug. É o comportamento documentado de quem guarda a permissão em vez de perguntar de novo a cada execução. O preço aparece quando o projeto sai do seu computador.
Claude Code secrets leak: o que os números do GitHub mostram
A GitGuardian varreu o GitHub público entre janeiro de 2025 e 7 de novembro de 2026 e contou o que estava exposto. O levantamento achou 31.088 segredos distintos em settings.local.json, espalhados por 23.276 repositórios. Desses, 5.343 ainda funcionavam no momento da detecção.
A checagem foi automática e somente leitura, sem reutilizar credencial. Arquivo esquecido em um canto seria caso isolado. O que 23 mil repositórios revelam é outra coisa, e bem mais incômoda: um hábito de trabalho.
O Ars Technica noticiou o caso em 9 de novembro, e a Cybernews publicou no mesmo dia tratando o assunto como um AI agent secret leak. A análise da Apiiro, divulgada em 5 de novembro, chegou a um número menor com outro método. As duas contagens não se contradizem: uma mede o que está visível hoje, a outra o que já foi enviado.
Um dado da Apiiro explica o risco melhor que a contagem. Na mediana, o arquivo vazado ficava 217 dias no branch principal antes de alguém notar. Sete meses com a credencial ao alcance de qualquer robô que varre o GitHub.
Por que o arquivo chega ao repositório
O Claude Code mantém o settings.local.json fora do git na sua máquina. O repositório não faz o mesmo. Em outra máquina, em um clone antigo ou em um arquivo que já estava rastreado, ele entra no commit junto com o resto do projeto, sem aviso e sem revisão de ninguém.
O git add -A distraído resolve o resto. Quem divide o projeto com o time, ou clona o repositório em um notebook novo, herda as regras antigas dentro do arquivo.
Dois arquivos vizinhos repetem o padrão. O CLAUDE.md, onde ficam as instruções dadas ao agente, acumulou 6.155 segredos, 2.537 deles válidos, porque gente cola string de conexão real no texto que escreve para o modelo ler. E o .claude/.credentials.json, que guarda o login OAuth do próprio agente, apareceu em 371 repositórios públicos, sinal de que home directory inteiro acabou commitado sem ninguém revisar.
AI agent secret leak: o Docker Hub também guarda cópia
Quem apaga o arquivo do repositório e respira aliviado esquece da imagem. O COPY . . leva para o container a árvore de trabalho, não o índice do git. Um arquivo ignorado pelo .gitignore viaja do mesmo jeito, a menos que o .dockerignore liste .claude/.
A GitGuardian mediu o estrago no Docker Hub público. São 613 segredos distintos em imagens, 99 deles válidos, distribuídos por 543 repositórios de imagem e 7.625 tags. Um único token da Cloudflare aparece em 559 tags de uma mesma imagem. Apagar o arquivo do repositório não remove nada do que já foi enviado.
É por isso que o vazamento por Docker Hub é mais silencioso. Ninguém recebe alerta quando uma camada antiga é baixada por outra pessoa.
Claude Code GitHub security: a ordem certa do conserto
A primeira ação é rotacionar tudo o que o arquivo já guardou.
Histórico, forks e imagens mantêm cópias, e reescrever o histórico não alcança nenhuma delas. Token que ficou público por um dia continua comprometido.
Depois da troca, entra a parte de contenção. Adicione o caminho ao .gitignore do repositório e ao .dockerignore, apague as regras que contêm segredo, abrindo o arquivo ou rodando /permissions dentro do Claude Code, e confirme no fim que a pasta saiu do histórico.
O hábito que evita a recaída é pequeno: em vez de aprovar curl -H "Authorization: Bearer sk-...", use a variável $MINHA_CHAVE no comando. A regra salva guarda o nome, não o valor. Prefira também prefixos estreitos, como Bash(git status:*), em vez de liberar Bash(curl:*) para qualquer chamada futura.
O que muda para quem programa no Brasil
Para um time brasileiro, o primeiro efeito é jurídico. Credencial em repositório público pode expor dado pessoal, e a LGPD trata incidente assim como assunto de notificação, com prazo e registro. Vale checar com o jurídico antes de tratar o caso como só técnico.
O segundo efeito é operacional e local. String de conexão de Postgres e Supabase é rotina em projeto brasileiro, e a GitGuardian identificou 1.955 conexões Postgres válidas só nesse arquivo. Token de bot do Telegram, muito usado para alerta interno, também aparece na lista.
Imagem pública no Docker Hub enviada por pipeline é hábito comum aqui. Se o .dockerignore do projeto não cobre a pasta .claude/, cada build publica a credencial outra vez.
O que ainda não se sabe sobre o Claude Code secrets leak
A Anthropic não foi invadida, e a distinção importa. O que vazou foi configuração escrita pelo usuário, não dado tirado de servidor da empresa. Também não há confirmação de que toda chave estivesse ativa, nem de correção oficial para ignorar o arquivo por padrão.
A própria GitGuardian não sabe explicar a queda. O volume em settings.local.json passou de 12.535 ocorrências em abril de 2026 para 959 em outubro. Pode ser mudança no prompt de permissão, proteção de push do GitHub ou queda de adoção. O relatório não fecha a resposta.
Fica uma pergunta aberta para quem mantém o Claude Code. Por que guardar o comando completo por padrão? Nenhum dos outros 15 agentes comparados pela Apiiro faz o mesmo, e enquanto isso não muda a proteção segue dependendo de quem digita o comando.
Se você usa a ferramenta, reserve dez minutos hoje: procure .claude/ no histórico do repositório, troque qualquer chave que aparecer e inclua a pasta nos dois arquivos de ignore. O resto é rotina.






