3 poin oleh GN⁺ 21 hari lalu | 1 komentar | Bagikan ke WhatsApp
  • 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:
    1. grep -r "reset --hard" ~/.claude/projects/ untuk mencari log sesi
    2. 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

 
GN⁺ 21 hari lalu
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

    • Lucu juga karena katanya penulis sudah melakukan begitu banyak “investigasi” tapi tidak terpikir untuk mematikan Claude selama 10 menit
      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

    • Dalam LaTeX, tanda hubung ganda dipakai untuk en dash, dan tanda hubung tiga untuk em dash
    • Saya sendiri awalnya berpikir tanda hubung ganda seharusnya dibiarkan apa adanya, tetapi melihat tradisi LaTeX dan Typst, en dash memang terasa lebih tepat
    • Tips profesional: berbahaya menyalin judul HN apa adanya lalu menempelkannya ke command line
    • Bentuk aslinya harus ditulis dengan dua tanda hubung seperti “--hard”
    • Aturannya adalah dua untuk en dash, tiga untuk em dash
  • Saya juga menyelidiki masalah ini secara langsung, dan tidak ada kode di Claude Code sendiri yang menjalankan git reset --hard origin/main
    Kemungkinan besar pengembang menjalankan perintah seperti /loop 10m, atau membuat cron job yang mereset git setiap 10 menit

    • Mungkin dikira sebagai fitur yang tidak berbahaya seperti “sinkronisasi berkala dengan server”
  • Sulit 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 $PATH agar semua eksekusi dicatat ke log

    • Ini terasa seperti Claude Code sedang mengejar ekornya sendiri. Gagal melakukan debugging, lalu seolah ingin membuat bug report sendiri
      Bahkan mungkin dikirim secara “agentic” tanpa input pengguna sama sekali (murni spekulasi)
      Tautan isu
    • Dalam kasus seperti ini, eBPF berguna. Misalnya dengan skrip execsnoop dari bpftrace, Anda bisa melacak semua proses yang dijalankan di sistem
  • Tulisan ini bisa membuat orang salah paham seolah masalah individu tertentu adalah masalah seluruh sistem
    Mungkin ada sedikit kerusakan konteks

    • Saya juga pernah mengalami hal serupa beberapa kali. Bahkan pernah sampai terjadi force push ke GitHub
      Claude pernah merusak keadaan lewat urutan stash → penggantian sed → konflik → reset --hard
      Karena 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
    • Bisa jadi kamu benar. Tetapi jika konteks rusak hanya 0,1%, maka satu dari 1000 tugas tetap bisa menghapus data
    • Sebenarnya masalah seperti ini bisa dicegah sepenuhnya dengan pertahanan teknis.
      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
    • Pada akhirnya LLM memang kadang melakukan hal yang sangat bodoh. Itu saja
  • 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 gh setiap kali saya menghapus /command atau menutup menu
    Karena 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 terduga

    • Meski begitu, pretooluse hook tetap bisa mencegahnya bahkan saat opsi ini aktif
    • Jika melihat dokumentasi permissions dari Anthropic, tidak jelas bagaimana izin itu benar-benar ditegakkan.
      Bahkan bisa ditafsirkan bahwa prompt injection dapat melewatinya
    • Menjalankannya tanpa izin di repo produksi secara langsung adalah cara untuk mengundang insiden penghapusan data
      Aturan yang tidak bisa mencegah hard reset hanyalah formalitas belaka
    • Aturan dan izin saat ini bukanlah flag program, melainkan sekadar teks yang dipercaya agen harus dipatuhi
  • Seperti yang dijelaskan langsung oleh penulis, penyebabnya bukan Claude Code melainkan bug pada alat pengujian lokal yang ia buat sendiri

    • Jadi ini adalah laporan yang keliru
      Tautan isu
    • Ungkapan “alat yang saya buat” agak ambigu. Kemungkinan besar ini alat vibe-coded yang dibuat terburu-buru
    • Sebenarnya tiket ini sendiri mungkin dibuat berdasarkan hasil analisis Claude Code (yaitu halusinasi)
  • 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