- Dilaporkan fenomena bahwa perubahan proyek di lingkungan macOS terhapus otomatis setiap 10 menit
- Hasil investigasi menunjukkan bahwa penyebabnya bukan Claude Code, melainkan alat otomatisasi lokal terpisah buatan pengguna yang secara berkala menjalankan
git reset --hard origin/main melalui GitPython
- Karena berbagi direktori kerja yang sama, Claude Code sempat terlihat sebagai penyebab, tetapi sebenarnya skrip eksternal yang melakukan reset
- Tim Claude Code menegaskan bahwa tidak ada logika untuk menjalankan perintah tersebut di kode internal, dan menjelaskan bahwa perilaku serupa hanya mungkin terjadi saat memakai opsi
--dangerously-skip-permissions
- Pada akhirnya, isu ini disimpulkan sebagai masalah pada alat pengguna, bukan bug Claude Code, lalu judulnya diperbaiki dan isu ditutup
Gejala masalah dan lingkungan
- Teramati bahwa Claude Code melakukan
git fetch origin dan git reset --hard origin/main di repositori proyek pengguna setiap 10 menit
- Perilaku ini menghapus semua perubahan pada file terlacak yang belum di-commit, sementara file yang tidak terlacak tetap dipertahankan
- Di lingkungan Git worktree, reset semacam ini tidak terjadi
- Informasi lingkungan
- Versi Claude Code: 2.1.87 (Homebrew cask, biner Bun)
- OS: macOS 15.4 (Darwin 25.3.0, arm64)
- Shell: zsh
Proses investigasi
- Di Git reflog, log
reset: moving to origin/main tercatat lebih dari 95 kali dengan interval 10 menit
- Offset antar sesi berbeda, tetapi di dalam tiap sesi pengulangannya selalu tepat setiap 600 detik
- Dalam uji reproduksi real-time, file terlacak (
api.ts) dipulihkan ke keadaan semula saat reset terjadi, sedangkan file tak terlacak (.canary-test.txt) tetap ada
- Hasil pemantauan direktori
.git/ dengan fswatch menangkap pola modifikasi pada file .git/refs dan .git/logs/HEAD saat reset terjadi
- Hasil lsof menunjukkan bahwa satu-satunya proses yang memakai CWD repositori tersebut hanyalah Claude Code CLI
- Karena proses git eksternal tidak terdeteksi, sempat diduga operasi dilakukan secara internal lewat libgit2 atau sejenisnya
- Di lingkungan worktree, sama sekali tidak ada catatan reset di reflog
Penyebab yang disingkirkan
- Git hooks, hook pengguna Claude Code, pembaruan plugin, sinkronisasi cloud macOS, Cron/LaunchAgents, IDE, Time Machine, alat pemantau file, dan lain-lain semuanya dipastikan tidak terkait
- Tiap item disingkirkan melalui pemeriksaan file konfigurasi dan proses yang benar-benar dijalankan
Analisis biner (sebagian)
- Sebagian fungsi di dalam biner Claude Code memuat potongan kode yang menjalankan perintah
["fetch","origin"]
- Ada fungsi pembungkus
git pull dan logika manajemen status fileHistory, tetapi timer 10 menit tidak berhasil diidentifikasi
Dampak
- Perubahan yang belum di-commit terhapus otomatis setiap 10 menit, sehingga perubahan hilang lebih dari tiga kali selama sesi 2 jam
- Saat semua perubahan sudah di-commit, reset menjadi tidak berdampak, sehingga masalah ini kadang terlihat sporadis
Respons tim Claude Code
- Jarred-Sumner menyatakan dengan tegas, “Claude Code sendiri tidak memiliki kode untuk menjalankan
git reset --hard origin/main”
- Ia menjelaskan bahwa saat memakai opsi
--dangerously-skip-permissions, Claude dapat menjalankan perintah shell tanpa prompt, dan jika perintah /loop 10m <prompt> secara berkala meminta untuk “sinkron dengan remote”, maka git fetch && git reset --hard origin/main bisa dijalankan
- Cara pengecekan yang disarankan:
grep -r "reset --hard" ~/.claude/projects/ untuk mencari log sesi
- Jalankan
claude --debug-file /tmp/debug.txt --dangerously-skip-permissions, tunggu 10 menit, lalu cari grep -i bash /tmp/debug.txt | grep reset
- Fitur
fileHistory di Claude Code tidak terkait dengan git dan secara internal tidak memanggil git reset
Kesimpulan akhir
- Dalam pembaruan 30 Maret 2026, dipastikan bahwa akar masalahnya bukan Claude Code, melainkan alat lokal terpisah milik pengguna
- Alat tersebut memakai GitPython untuk melakukan hard reset setiap 10 menit, dan memantau direktori yang sama dengan Claude Code
- Isu ditutup dengan status “not planned”, dan judul diubah dari “Claude Code menjalankan reset” menjadi “Alat otomatisasi saya menjalankan reset”
Solusi sementara
- Saat memakai git worktree, tidak ada dampak dari reset
- Perubahan dapat dilindungi dengan lebih sering melakukan commit
Isu terkait
#8072 — masalah perubahan kode yang berulang kali dibatalkan
#7232 — kehilangan data akibat menjalankan git reset --hard tanpa persetujuan
#32793 — masalah perintah claude install yang salah mengubah URL git remote (kasus serupa tetapi terpisah)
1 komentar
Komentar Hacker News
Ini adalah pembaruan yang diposting langsung oleh penulis
Menurut tautan isu, akar masalahnya bukan Claude Code, melainkan bug pada alat yang dibuat penulis sendiri untuk pengujian lokal
Alat tersebut menjalankan hard reset di setiap siklus saat mencoba menyinkronkan direktori kerja lokal dengan remote, sehingga menghapus semua perubahan yang belum di-commit
Kalau judulnya diubah menjadi sesuatu seperti “Pengembang membuat skrip yang mereset repo git tiap 10 menit lalu lupa, dan malah menyalahkan Claude Code”, saya akan mencabut flag-nya
Masalah sebenarnya adalah tanda hubung ganda di judul otomatis diubah menjadi en dash oleh HN
Saya juga menyelidiki masalah ini secara langsung, dan tidak ada kode di Claude Code sendiri yang menjalankan
git reset --hard origin/mainKemungkinan besar pengembang menjalankan perintah seperti
/loop 10m, atau membuat cron job yang mereset git setiap 10 menitSulit dipercaya kalau proses dipantau tiap 0,1 detik tapi tidak ada proses git yang terlihat
Perintah git terlalu cepat untuk tertangkap pada interval seperti itu
Sebagai gantinya, lebih baik membungkus git di
$PATHagar semua eksekusi dicatat ke logBahkan mungkin dikirim secara “agentic” tanpa input pengguna sama sekali (murni spekulasi)
Tautan isu
Tulisan ini bisa membuat orang salah paham seolah masalah individu tertentu adalah masalah seluruh sistem
Mungkin ada sedikit kerusakan konteks
Claude pernah merusak keadaan lewat urutan
stash→ penggantiansed→ konflik →reset --hardKarena itu saya menaruh peringatan berikut di bagian paling atas
CLAUDE.md“Dilarang melakukan penggantian massal dengan
sed,git push --force,git reset --hard, dan perintah git destruktif lainnya”Setelah itu hasilnya jauh lebih baik
Jika Anda memasang hook yang memblokir perintah git tertentu, sistem akan tetap aman terlepas dari ketidakpastian prediksi model
Hal seperti ini membuat saya merasa banyak orang sudah melupakan prinsip dasar rekayasa lama — proses yang deterministik dan dapat diulang
Saya juga pernah mengalami masalah yang mirip
Biasanya saya menjalankan claude-code di dalam sandbox (bwrap, srt), tetapi saat dijalankan di luar sandbox, ia memanggil
ghsetiap kali saya menghapus/commandatau menutup menuKarena saya memakai KeepassXC sebagai pengelola rahasia, popup persetujuan selalu muncul sehingga langsung terlihat
Saat saya tanya ke Claude, penyebabnya adalah fitur git context.
KeepassXC tidak mendukung izin per sesi, jadi akhirnya selalu meminta autentikasi setiap kali
Rasanya hal seperti ini seharusnya bisa dicegah jika ada pengaturan izin
Tetapi karena pengguna menjalankannya dengan opsi
--dangerously-skip-permissions, mereka memang harus menerima perilaku yang tak terdugaBahkan bisa ditafsirkan bahwa prompt injection dapat melewatinya
Aturan yang tidak bisa mencegah hard reset hanyalah formalitas belaka
Seperti yang dijelaskan langsung oleh penulis, penyebabnya bukan Claude Code melainkan bug pada alat pengujian lokal yang ia buat sendiri
Tautan isu
Tidak mengejutkan kalau memakai alat pengembangan binary blob berbasis SaaS bisa memunculkan masalah seperti ini yang sulit di-debug
Pada akhirnya pengguna sendiri yang menemukan akar masalahnya, dan alat buatannya sendirilah penyebabnya
Hal seperti ini sudah pernah terjadi dulu, dan masih terjadi sampai sekarang.
Saya juga berkali-kali cukup merusak semuanya dengan tangan saya sendiri tanpa bantuan LLM
Karena itu saya selalu mengembangkan dengan Time Machine milik Mac.
Saat Claude menghapus file dan saya klik “pulihkan?”, rasanya bahkan Claude ikut lega
Backup benar-benar adalah penyelamat hidup