- Foi relatado, em ambiente macOS, um fenômeno em que as alterações do projeto eram apagadas automaticamente a cada 10 minutos
- Após a investigação, confirmou-se que a causa não era o Claude Code, mas sim uma ferramenta local de automação separada criada pelo usuário, que executava periodicamente
git reset --hard origin/main via GitPython
- Como ambos compartilhavam o mesmo diretório de trabalho, parecia que o Claude Code era o responsável, mas na prática o reset estava sendo feito por um script externo
- A equipe do Claude Code declarou claramente que não existe lógica interna que execute esse comando, e explicou que um comportamento semelhante só seria possível ao usar a opção
--dangerously-skip-permissions
- Por fim, concluiu-se que o problema não era um bug do Claude Code, mas da ferramenta do usuário, e o título foi corrigido antes do encerramento
Sintomas do problema e ambiente
- Foi observado que o Claude Code executava
git fetch origin e git reset --hard origin/main em intervalos de 10 minutos no repositório do projeto do usuário
- Esse comportamento apagava todas as alterações não commitadas em arquivos rastreados, enquanto arquivos não rastreados eram mantidos
- Em ambiente com Git worktree, esse reset não ocorria
- Informações do ambiente
- Versão do Claude Code: 2.1.87 (Homebrew cask, binário Bun)
- OS: macOS 15.4 (Darwin 25.3.0, arm64)
- Shell: zsh
Processo de investigação
- No Git reflog, foram registrados mais de 95 logs de
reset: moving to origin/main em intervalos de 10 minutos
- O deslocamento variava entre sessões, mas dentro de cada sessão a repetição ocorria exatamente a cada 600 segundos
- Em um teste de reprodução em tempo real, o arquivo rastreado (
api.ts) voltava ao estado original no momento do reset, enquanto o arquivo não rastreado (.canary-test.txt) permanecia intacto
- Ao monitorar o diretório
.git/ com fswatch, foi detectado um padrão em que os arquivos .git/refs e .git/logs/HEAD eram modificados no momento do reset
- Segundo o lsof, o único processo usando esse repositório como CWD era o próprio CLI do Claude Code
- Como nenhum processo git externo foi detectado, levantou-se a hipótese de execução interna via libgit2 ou similar
- Em ambiente com worktree, nenhum registro de reset aparecia no reflog
Causas descartadas
- Git hooks, hooks de usuário do Claude Code, atualização de plugins, sincronização em nuvem do macOS, Cron/LaunchAgents, IDE, Time Machine e ferramentas de monitoramento de arquivos foram todos confirmados como não relacionados
- Cada item foi descartado por meio da verificação real de arquivos de configuração e processos
Análise do binário (parcial)
- Parte das funções dentro do binário do Claude Code incluía trechos de código que executavam o comando
["fetch","origin"]
- Havia uma função wrapper para
git pull e lógica de gerenciamento de estado de fileHistory, mas nenhum timer de 10 minutos foi identificado
Impacto
- Alterações não commitadas eram apagadas automaticamente a cada 10 minutos, fazendo com que modificações desaparecessem mais de três vezes durante uma sessão de 2 horas
- Quando todas as mudanças estavam commitadas, o reset não tinha efeito prático, o que fazia o problema parecer intermitente
Resposta da equipe do Claude Code
- Jarred-Sumner afirmou claramente: “o próprio Claude Code não tem código que execute
git reset --hard origin/main”
- Ele explicou que, ao usar a opção
--dangerously-skip-permissions, o Claude pode executar comandos de shell sem prompt, e que,
se o comando /loop 10m <prompt> solicitar periodicamente “sincronizar com o remoto”, poderá acabar executando git fetch && git reset --hard origin/main
- Como formas de verificação, foram sugeridos:
grep -r "reset --hard" ~/.claude/projects/ para buscar nos logs de sessão
- Executar
claude --debug-file /tmp/debug.txt --dangerously-skip-permissions, esperar 10 minutos e então buscar com grep -i bash /tmp/debug.txt | grep reset
- O recurso
fileHistory do Claude Code não tem relação com git e não chama git reset internamente
Conclusão final
- Na atualização de 30 de março de 2026, confirmou-se que a causa raiz do problema não era o Claude Code, mas uma ferramenta local separada do usuário
- Essa ferramenta usava GitPython para executar hard reset a cada 10 minutos e monitorava o mesmo diretório do Claude Code
- A issue foi encerrada com status
not planned, e o título foi alterado de “o Claude Code executa resets” para “minha ferramenta de automação executa resets”
Soluções temporárias
- Ao usar git worktree, não há impacto do reset
- É possível proteger as alterações fazendo commits frequentes
Issues relacionadas
#8072 — problema em que modificações de código são revertidas repetidamente
#7232 — perda de dados causada pela execução de git reset --hard sem aprovação
#32793 — problema em que o comando claude install altera incorretamente a URL do git remote (caso semelhante, mas distinto)
1 comentários
Comentários do Hacker News
É uma atualização postada pelo próprio autor
Segundo o link da issue, a causa raiz do problema não era o Claude Code, e sim um bug em uma ferramenta que o autor criou para testes locais
Essa ferramenta fazia um hard reset a cada ciclo ao tentar sincronizar o diretório de trabalho local com o remoto, apagando todas as alterações não commitadas
Eu removeria a flag se o título fosse algo como “Desenvolvedor cria um script que reseta o repo git a cada 10 minutos, esquece disso e culpa o Claude Code”
O verdadeiro problema é que o hífen duplo no título foi automaticamente convertido em en dash no HN
--hardEu também investiguei isso diretamente, e o próprio Claude Code não tem código que execute
git reset --hard origin/mainO mais provável é que o desenvolvedor tenha executado um comando como
/loop 10mou criado um cron job para resetar o git a cada 10 minutosÉ difícil confiar na alegação de que monitoraram processos em intervalos de 0,1 segundo e não apareceu nenhum processo git
Comandos git são rápidos demais para serem pegos nesse intervalo
Em vez disso, é melhor encapsular o
gitdo$PATHpara registrar em log todas as execuçõesTalvez até tenha enviado isso “agencialmente”, sem input do usuário (pura especulação)
Link da issue
Este post pode levar a uma interpretação equivocada de que um problema individual é um problema do sistema como um todo
Parece que houve algum tipo de corrupção de contexto
O Claude já bagunçou tudo numa sequência
stash→ substituição comsed→ conflito →reset --hardPor isso, deixei o seguinte aviso no topo do
CLAUDE.md“Proibido fazer substituições em massa com
sed;git push --force,git reset --harde outros comandos destrutivos do git são absolutamente proibidos”Depois disso, ficou bem melhor
Se você colocar um hook para bloquear certos comandos git, o sistema continua seguro independentemente da incerteza preditiva do modelo
Vendo isso, dá a impressão de que muita gente esqueceu um princípio básico da engenharia de antigamente — processos determinísticos e reproduzíveis
Eu também tive um problema parecido
Normalmente executo o claude-code dentro de um sandbox (bwrap, srt), mas quando rodo fora dele, ele chama
ghsempre que apago um/commandou fecho o menuComo uso o KeepassXC como gerenciador de segredos, aparece um pop-up de aprovação toda vez, então isso fica óbvio na hora
Quando perguntei ao Claude, ele disse que a causa era o recurso de contexto git.
Como o KeepassXC não permite autorização por sessão, no fim ele exige autenticação todas as vezes
Imagino que isso não deveria ser bloqueado pelas configurações de permissão
Mas como o usuário executou com a opção
--dangerously-skip-permissions, ele tem que aceitar comportamentos imprevisíveisDá até para interpretar que isso poderia ser burlado por prompt injection
Regras que não conseguem bloquear hard reset servem só para inglês ver
O próprio autor esclareceu que a causa não era o Claude Code, e sim um bug na ferramenta local de teste que ele criou
Link da issue
Não é surpresa que usar uma ferramenta de desenvolvimento SaaS em blob binário possa gerar problemas assim, difíceis de depurar
No fim, foi o próprio usuário que descobriu a causa, e a culpada era a ferramenta dele
Isso já aconteceu antes e continua acontecendo.
Eu mesmo já causei estragos suficientes com as próprias mãos, sem ajuda de LLM nenhuma
Por isso, eu sempre desenvolvo com o Time Machine do Mac.
Quando o Claude apaga um arquivo e aparece “restaurar?”, quase dá a sensação de que o Claude fica aliviado
Backup é realmente uma linha de vida