# Claude Code menghapus riwayat setelah 30 hari: cara menyimpannya

> Tempat sesi Claude Code disimpan, cara mengonfigurasi cleanupPeriodDays, dan cara mengatur arsip eksternal menggunakan rsync, launchd, atau cron.

Source: https://ailoot.ai/blog/id/claude-code-history-30-days/
Canonical: https://ailoot.ai/blog/id/claude-code-history-30-days/
Language: id
Publisher: Ailoot (https://ailoot.ai/)
Translation: guide-056
Revision: sha256-67c67258424e4370a8fedbebad77a1e5e7b8f37d424e5048fdef99faf8eae559


Untuk bantuan menggunakan layanan ini, lihat [dokumentasi Ailoot](https://ailoot.ai/docs/).



## Apakah Claude Code benar-benar menghapus riwayat sesi Anda?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Poin utama">

Poin utama

Ya. Setiap kali Claude Code dimulai, aplikasi ini menghapus file sesi yang berusia lebih dari 30 hari. Pengaturan `cleanupPeriodDays` di `~/.claude/settings.json` bertanggung jawab atas hal ini; nilai bawaannya adalah `30`. Penghapusan terjadi tanpa peringatan, tanpa meminta persetujuan, dan tanpa cara untuk memulihkan file.

</div>

Anda membuka Claude Code untuk kembali ke sesi dari dua bulan lalu—tetapi sesi itu sudah hilang. Filenya telah dihapus sepenuhnya dari disk. Ini bukan gangguan atau bug langka: begitulah mekanisme pembersihan bawaan bekerja.

Satu pengaturan mengendalikan pembersihan: `cleanupPeriodDays`. Nilai bawaannya adalah `30`. Setiap kali Claude Code dimulai, aplikasi ini memindai folder riwayat dan menghapus semua yang lebih lama dari periode tersebut. Pengaturan ini sama sekali tidak ada di `~/.claude/settings.json` saya, yang berarti nilai bawaan berlaku dan beberapa sesi lama saya sudah telanjur hilang.

Beberapa laporan bug tentang hal ini masih terbuka di repositori Anthropic, dan belum ada yang diperbaiki.

## Di mana Claude Code menyimpan riwayat sesi?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Poin utama">

Poin utama

Riwayat setiap sesi disimpan di `~/.claude/projects/<project-path>/<session-id>.jsonl`. Nama foldernya adalah jalur absolut direktori kerja tempat Anda menjalankan Claude Code, dengan garis miring diganti tanda hubung. File `.jsonl` berisi seluruh percakapan, satu baris pada satu waktu: prompt Anda, respons model, pemanggilan alat, dan penyuntingan file. Inilah memori yang dihapus oleh pembersihan.

</div>

Menemukan riwayat Anda mudah. Buka terminal dan lihat isi folder:

```bash
ls ~/.claude/projects/
```

Setiap subfolder adalah proyek terpisah. Namanya mengodekan jalurnya: misalnya, proyek di `/Users/alex/dev/shop` menjadi folder `-Users-alex-dev-shop`. Di dalamnya terdapat file sesi:

```bash
ls -lt ~/.claude/projects/-Users-alex-dev-shop/
# 3f8a1c2e-....jsonl   ← satu sesi = satu file
# a91b7d40-....jsonl
```

Setiap file `.jsonl` adalah log baris demi baris: satu baris sama dengan satu peristiwa sesi. Isinya lebih dari sekadar teks percakapan. File itu menyimpan logika di balik keputusan Anda: alasan Anda memilih struktur basis data tertentu, opsi yang Anda tolak, kesalahan yang dibuat Claude, dan cara Anda memperbaikinya.

Pada dasarnya, ini adalah jurnal pengembangan proyek. Itulah sebabnya kehilangannya terasa berat: yang hilang bukan sekadar “obrolan,” melainkan konteks yang telah Anda bangun selama berminggu-minggu. Saya membahas struktur konteks ini dalam panduan [“Claude Memory vs. CLAUDE.md”](https://ailoot.ai/blog/id/claude-memory-claude-md-auto-memory/).

## Mengapa Anthropic menghapus transkrip setelah 30 hari?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Poin utama">

Poin utama

Alasan Anthropic adalah privasi dan keamanan. File sesi disimpan di disk sebagai teks biasa dan mungkin berisi kode sumber, kata sandi, serta kunci API. Menyimpannya selamanya berisiko: jika laptop dicuri atau seseorang mendapatkan akses ke disk, mereka bisa memperoleh semua data sensitif itu. Periode 30 hari merupakan titik tengah antara “melanjutkan pekerjaan terbaru” dan “tidak menyimpan rahasia di disk lebih lama dari yang diperlukan.”

</div>

Ada alasan untuk penghapusan ini, dan alasan tersebut patut dipahami sebelum Anda mematikannya sepenuhnya. Transkrip berupa teks biasa. Jika Claude membaca file `.env` selama sesi, memasukkan kunci ke dalam perintah, atau Anda menempelkan kata sandi ke prompt, semuanya tersimpan di `.jsonl` sebagai teks biasa. Semakin lama file semacam itu berada di disk, semakin besar kemungkinan suatu hari data tersebut bocor.

Anthropic mengatakannya dengan jelas: transkrip mungkin berisi kode sumber, kredensial, dan materi sensitif lainnya, dan menyimpannya di disk lebih lama dari yang diperlukan menimbulkan risiko privasi nyata. Periode 30 hari dipilih sebagai kompromi.

Keberatan komunitas berkenaan dengan tiga hal: penghapusan berlangsung diam-diam (tidak ada peringatan saat penyiapan atau saat mulai), tidak ada persetujuan (Anda tidak ditanya), dan tidak ada pemulihan (Trash tidak digunakan dan tidak ada rollback). Dalam issue \#59248, para pengembang meminta satu hal: jadikan pembersihan lebih adil—berikan peringatan, masa pemulihan, dan periode bawaan yang tidak terlalu agresif.

## Mengapa skrip pencadangan itu sendiri dapat memicu penghapusan?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Poin utama">

Poin utama

Pembersihan menentukan file yang akan dihapus berdasarkan waktu modifikasi file (mtime). Pembersihan tidak memeriksa aktivitas terakhir yang sebenarnya dalam suatu sesi. Proses apa pun yang menyentuh file `.jsonl`—sinkronisasi cloud, rsync, editor, skrip—dapat menggeser mtime-nya sehingga sesi baru tampak usang. Saat Claude Code dimulai berikutnya, sesi itu akan dianggap lama dan dihapus. Paradoksnya: upaya naif untuk mencadangkan riwayat di dalam folder yang dikelola justru mempercepat kehilangannya.

</div>

Inilah bagian tersulit, dan bagian ini menjebak orang-orang yang mencoba melindungi data mereka sendiri. Pembersihan melihat mtime, yaitu stempel waktu terakhir file diubah. Pembersihan menganggap mtime mencerminkan kapan Anda terakhir bekerja dalam sesi tersebut. Dalam praktiknya, apa pun dapat mengubah mtime: klien sinkronisasi Dropbox atau iCloud, `rsync`, perangkat lunak antivirus, pengindeks, atau skrip pencadangan Anda sendiri.

Inilah jebakannya. Anda memutuskan untuk menyimpan riwayat dan menyiapkan sinkronisasi cloud untuk `~/.claude/projects/`. Pada suatu saat, layanan sinkronisasi menulis ulang sebuah file dan menetapkan mtime-nya ke tanggal yang lebih awal (ini dapat terjadi saat memulihkan dari salinan cloud). Claude Code melihat file “lama” saat dimulai dan menghapusnya. Anda bermaksud menyimpannya, tetapi malah mempercepat penghapusannya.

Kesimpulannya hanya satu: **cadangan harus berada di luar `~/.claude/projects/`**. Pembersihan hanya bekerja di dalam folder ini. Salinan yang disimpan di luarnya berada di luar jangkauan pembersihan. Saya akan menyusun solusinya berdasarkan prinsip ini.

## Bagaimana cara menghentikan penghapusan riwayat sekarang juga?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Poin utama">

Poin utama

Satu pengaturan. Buka `~/.claude/settings.json` dan tetapkan `cleanupPeriodDays` ke angka besar—misalnya, `3650` (sepuluh tahun). Dalam praktiknya, ini menonaktifkan penghapusan otomatis: tidak ada yang akan lebih lama dari batas tersebut. Penting: pengaturan ini hanya melindungi yang belum dihapus. Riwayat yang sudah dihapus oleh pembersihan tidak dapat dipulihkan. Jadi langkah pertama adalah bertindak sebelum sesi lain hilang.

</div>

Hentikan penghapusan dalam tiga langkah:

1.  Buka file pengaturan: `~/.claude/settings.json` (jika file tersebut tidak ada, buatlah).
2.  Tambahkan pengaturan `cleanupPeriodDays` dengan nilai besar:

```json
{
  "cleanupPeriodDays": 3650
}
```

3.  Simpan file. Pengaturan ini akan berlaku saat Claude Code dimulai berikutnya.

Nilai `3650` berarti sepuluh tahun: dalam praktiknya, penghapusan tidak akan berlangsung lagi. Jika Anda ingin pembersihan tetap aktif tetapi memberi lebih banyak waktu, tetapkan nilainya ke `365` (satu tahun); hanya sesi yang lebih lama dari setahun yang akan hilang. Anda dapat memeriksa apakah pengaturan sudah diterapkan dengan perintah ini:

```bash
grep cleanupPeriodDays ~/.claude/settings.json
```

Satu catatan yang mudah terlewat: memperpanjang periode TIDAK memulihkan apa yang sudah dihapus. Pembersihan berjalan saat mulai, dan apa pun yang terhapus dalam proses sebelumnya sudah hilang selamanya. Karena itu, Anda harus menetapkan ini terlebih dahulu—pengaturan ini mencegah kehilangan di kemudian hari, tetapi tidak mengembalikan apa yang sudah dihapus. Jika Anda ingin menghindari kehilangan riwayat Claude Code sekaligus proyek Anda akibat perintah yang tidak disengaja, lihat panduan [“Cara Mengonfigurasi Claude Code Agar Tidak Merusak Proyek Anda”](https://ailoot.ai/blog/id/claude-code-safe-overnight-setup/).

Riwayat sesi Anda adalah bagian dari otak kedua proyek Anda: riwayat itu berisi logika keputusan yang belum Anda catat di tempat lain. `cleanupPeriodDays` menyimpan file, tetapi tidak mengubahnya menjadi sistem yang memungkinkan Anda mengambil hal yang diperlukan enam bulan dari sekarang.



## Bagaimana mengarsipkan riwayat otomatis di luar folder pembersihan?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Poin utama">

Poin utama

Salin sesi ke dalam arsip DI LUAR `~/.claude/projects/`, tempat pembersihan tidak berlaku. `rsync -a` sederhana ke direktori terpisah sekali sehari sudah cukup: file baru ditambahkan, dan file lama tetap ada. Karena arsip berada di luar, baik `cleanupPeriodDays` maupun bug mtime tidak memengaruhinya. Otomatiskan proses ini dengan launchd (macOS) atau cron (Linux), dan riwayat Anda akan terus bertambah dengan sendirinya.

</div>

Idenya sederhana: biarkan Claude Code melakukan apa pun yang dikehendakinya dengan foldernya, sementara Anda menyimpan arsip terpisah di luar folder itu. Arsip dilindungi dari mekanisme pembersihan tersebut, tetapi masih dapat hilang akibat kerusakan disk, penghapusan tidak sengaja, atau penyalinan gagal. Siapkan seperti ini:

1.  Buat folder arsip di luar direktori yang dikelola:

```bash
mkdir -p ~/claude-history-archive
```

2.  Salin riwayat Anda saat ini ke sana. Tanda `-a` mempertahankan struktur dan stempel waktu; `--ignore-existing` membiarkan file yang sudah disalin tetap utuh:

```bash
rsync -a ~/.claude/projects/ ~/claude-history-archive/
```

3.  Otomatiskan proses ini sekali sehari. Di macOS, gunakan launchd. Buat file `~/Library/LaunchAgents/com.example.claudearchive.plist`:

```xml
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.example.claudearchive</string>
  <key>ProgramArguments</key>
  <array>
    <string>/usr/bin/rsync</string>
    <string>-a</string>
    <string>/Users/YOUR_NAME/.claude/projects/</string>
    <string>/Users/YOUR_NAME/claude-history-archive/</string>
  </array>
  <key>StartInterval</key>
  <integer>86400</integer>
</dict>
</plist>
```

4.  Muat agen agar berjalan di latar belakang:

```bash
launchctl load ~/Library/LaunchAgents/com.example.claudearchive.plist
```

Di Linux, hal yang sama dilakukan dengan satu baris di crontab (`crontab -e`):

```bash
0 3 * * * rsync -a ~/.claude/projects/ ~/claude-history-archive/
```

Mengapa cara ini berhasil sementara sinkronisasi di bagian sebelumnya gagal? Arsip berada DI LUAR `~/.claude/projects/`, sehingga pembersihan tidak dapat melihatnya sama sekali. Penyalinan berlangsung satu arah (dari folder aktif ke arsip), dan kita tidak menyentuh mtime file aktif—jadi bug mtime tidak terjadi. Sekalipun Claude Code menghapus sebuah sesi dari foldernya sendiri besok, salinannya akan tetap ada di arsip.

## Bagaimana cara mengubah arsip sesi menjadi otak kedua yang dapat ditelusuri?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Poin utama">

Poin utama

Taruh arsip di bawah git, dan Anda akan mendapatkan basis data berversi yang sepenuhnya dapat ditelusuri dari semua sesi Anda. Jalankan `git init` di folder arsip, lalu jalankan `git add -A && git commit` setiap hari untuk memperoleh riwayat perubahan dan perlindungan dari penimpaan yang tidak disengaja. Anda dapat mencari sesi lama dengan grep biasa dan mengekstrak konten terstruktur dengan jq, karena `.jsonl` adalah JSON yang dipisahkan baris. Dengan begitu, arsip menjadi alat yang praktis.

</div>

Sekadar mengumpulkan file tidak cukup—Anda perlu dapat mengaksesnya. Dua langkah mengubah arsip menjadi alat yang dapat digunakan.

Pertama, beri versi dengan git. Inisialisasi repositori di folder arsip:

```bash
cd ~/claude-history-archive
git init
git add -A && git commit -m "Cuplikan pertama riwayat Claude Code"
```

Tambahkan `git add -A && git commit` ke proses harian yang sama dengan rsync. Kini Anda memiliki riwayat versi: Anda dapat melihat apa yang muncul dan kapan, serta membatalkan penimpaan yang tidak disengaja dengan satu perintah.

Kedua, lakukan pencarian. File `.jsonl` adalah JSON yang dipisahkan baris, jadi Anda dapat menggunakan alat yang sudah dikenal. Temukan sesi yang membahas topik tertentu:

```bash
grep -rl "migrasi basis data" ~/claude-history-archive/
```

Ekstrak hanya teks prompt Anda dari suatu sesi (menggunakan jq, karena formatnya JSON):

```bash
jq -r 'select(.type=="user") | .message.content' session.jsonl
```

Pada titik ini, riwayat sesi Anda mulai berfungsi sebagai otak kedua proyek: sebuah basis data yang memungkinkan Anda mengambil “bagaimana kita memutuskan ini pada bulan Maret” dalam hitungan detik. Untuk penjelasan terpisah tentang ke mana konteks ditempatkan dalam sesi dan cara mengelolanya, lihat [“Ke Mana Token Pergi di Claude Code”](https://ailoot.ai/blog/id/where-claude-code-tokens-go/).

## Dapatkah Anda memulihkan sesi yang sudah dihapus?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Poin utama">

Poin utama

Tidak ada metode bawaan. Claude Code tidak memasukkan file yang dihapus ke Trash atau menyimpan rollback; file itu terhapus selamanya. Satu-satunya peluang adalah salinan eksternal yang dibuat SEBELUM penghapusan: snapshot Time Machine di macOS, riwayat versi OneDrive atau Dropbox, atau cadangan manual. Jika semua ini tidak ada, sesi tersebut hilang. Itulah sebabnya perlindungan harus disiapkan sebelumnya—sebelum ada yang hilang.

</div>

Jawaban jujurnya: mungkin tidak. Claude Code tidak memiliki fitur pemulihan, Trash, atau log pembatalan untuk transkrip yang dihapus. File itu begitu saja menghilang dari disk.

Ada satu pilihan: cadangan sistem, jika sudah diaktifkan sebelumnya:

1.  **macOS Time Machine**—jika sebuah snapshot menangkap `~/.claude/projects/` sebelum penghapusan, Anda dapat mengambil file dari cadangan untuk tanggal yang diperlukan.
2.  **Riwayat versi OneDrive / Dropbox**—jika folder disinkronkan dengan pembuatan versi aktif, cari file tersebut di riwayat versi cloud (tetapi ingat jebakan mtime: sinkronisasi mungkin juga memicu penghapusan).
3.  **Salinan manual**—setiap `rsync`/`cp` yang Anda jalankan secara manual ke lokasi di luar folder yang dikelola.

Jika semua ini tidak ada, sesi tersebut hilang. Dan ini bukan kejadian langka: seorang penulis bug di repositori Anthropic mengalami kerusakan pada 26 dari 38 catatan, yang mewakili pekerjaan selama berbulan-bulan. Satu-satunya perlindungan yang dapat diandalkan adalah perlindungan yang sudah ada SEBELUM kehilangan terjadi. Tetapkan `cleanupPeriodDays` dan pengarsipan otomatis hari ini, selagi masih ada sesuatu yang bisa diselamatkan.

## Nilai apa yang sebaiknya dipilih untuk cleanupPeriodDays?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Poin utama">

Poin utama

Bagi kebanyakan orang, gunakan `3650` (sepuluh tahun, yang secara efektif menonaktifkan penghapusan) ditambah arsip otomatis eksternal. Pertahankan nilai bawaan `30` hanya jika Anda tidak membutuhkan riwayat dan menghindari penyimpanan rahasia di disk lebih penting. Nilai `365` adalah jalan tengah yang wajar, dengan pembersihan tahunan. Pilihan lainnya adalah tidak menulis riwayat sama sekali: gunakan variabel lingkungan `CLAUDE_CODE_SKIP_PROMPT_HISTORY` atau flag `--no-session-persistence`, tetapi itu memiliki tujuan yang berlawanan.

</div>

Hanya ada satu pengaturan, tetapi maknanya bisa berbeda-beda. Bandingkan pilihan berikut dan pilih yang sesuai dengan kebutuhan Anda:

| Nilai | Fungsinya | Cocok untuk |
|----|----|----|
| `30` (bawaan) | Menghapus sesi yang berusia lebih dari 30 hari saat mulai | Anda tidak membutuhkan riwayat; menghindari penyimpanan data sensitif di disk lebih penting |
| `365` | Menyimpan riwayat selama setahun, lalu membersihkannya setahun sekali | Anda membutuhkan riwayat terbaru, tetapi tidak memerlukan arsip tanpa batas waktu |
| `3650` | Secara efektif menonaktifkan penghapusan | Anda ingin menyimpan semuanya + arsip eksternal (disarankan) |
| `CLAUDE_CODE_SKIP_PROMPT_HISTORY` | Sama sekali tidak menulis riwayat ke disk | Privasi maksimum; Anda sama sekali tidak membutuhkan riwayat |

Satu catatan keamanan penting: jika Anda menetapkan `3650` dan menyimpan semuanya, berarti Anda setuju menyimpan transkrip yang mungkin berisi kunci dan kode di disk. Ini adalah kompromi yang disengaja: kemudahan arsip versus risiko. Kurangi risikonya: simpan arsip di disk terenkripsi (FileVault di macOS), jangan letakkan di cloud publik, dan jangan masukkan ke repositori git publik. Saya telah menyusun panduan terpisah tentang data yang mungkin bocor melalui Claude Code: [“Keamanan Data di Claude Code”](https://ailoot.ai/blog/id/claude-code-data-access-safety/).

## Yang perlu dilakukan hari ini: daftar periksa

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Poin utama">

Poin utama

Langkah-langkah ini mengurangi kehilangan riwayat: perpanjang retensi dengan `cleanupPeriodDays: 3650`, salin sesi ke luar `~/.claude/projects/`, dan kelola versi arsip. Hanya file yang berhasil disalin terlindungi dari pembersihan Claude Code. Jadwal harian meninggalkan hingga satu hari perubahan terbaru yang belum diarsipkan saat proses berhasil; proses gagal atau terlewat memperpanjang celah itu. Salinan pada disk yang sama bukan perlindungan terhadap kegagalan disk.

</div>

Siapkan perlindungan langkah demi langkah:

1.  Tetapkan `cleanupPeriodDays: 3650` di `~/.claude/settings.json`—penghapusan sudah dihentikan.
2.  Buat `~/claude-history-archive` di luar folder yang dikelola dan jalankan `rsync -a` pertama.
3.  Jadwalkan proses harian menggunakan launchd (macOS) atau cron (Linux).
4.  Inisialisasi git di arsip dan tambahkan `git add -A && git commit` ke proses yang sama.
5.  Pastikan arsip berada di disk terenkripsi dan tidak disinkronkan ke cloud publik.
6.  Periksa setiap proses terjadwal untuk memastikan penyalinan berhasil, lalu tinjau sesi arsip terbaru dan pulihkan sampel secara berkala ke folder sementara terpisah untuk memverifikasi keterbacaannya.
7.  Jika kehilangan perangkat atau disk termasuk risiko yang ditangani, simpan cadangan independen dengan kontrol akses yang sesuai dan uji pemulihannya juga. Riwayat Git pada disk yang sama bukan cadangan independen.

Riwayat sesi hanyalah satu lapisan konteks yang membuat Claude dapat diandalkan.

<div class="section" role="doc-bibliography" aria-label="Sumber">

### Sumber

- [Dokumentasi Claude Code - Pengaturan settings.json (cleanupPeriodDays)](https://code.claude.com/docs/en/settings)
- [Dokumentasi Claude Code - apa yang baru](https://code.claude.com/docs/en/whats-new)

</div>





Kenali [Ailoot](https://ailoot.ai/).

## Pertanyaan tentang Claude Code menghapus riwayat setelah 30 hari: cara menyimpannya

### Apakah arsip harian menjamin tidak ada sesi yang dapat hilang?

Tidak. Arsip melindungi file yang berhasil disalin dari pembersihan folder terkelola. Dengan proses harian yang berhasil, perubahan terbaru hingga satu hari masih mungkin belum tersalin; kegagalan memperlebar celah itu, dan salinan pada disk yang sama dapat gagal bersama aslinya.

### Bagaimana memeriksa apakah arsip dapat digunakan?

Pastikan penyalinan terjadwal berhasil, periksa sesi arsip terbaru, dan secara berkala pulihkan sampel ke folder sementara terpisah. Untuk perlindungan terhadap kehilangan perangkat atau disk, uji juga cadangan yang disimpan independen dari aslinya.


## Ailoot · Perusahaan dan portofolio proyeknya

Ailoot bertumpu pada pengalaman operasional yang teruji, basis pelanggan yang besar, layanan yang stabil, dan pemantauan KPI berkelanjutan.

Perusahaan dan portofolio proyeknya: jutaan pelanggan; penjualan miliaran setiap bulan.

Ailoot memanfaatkan pengalaman operasional ini untuk akses API ke fitur AI dalam produk pelanggan, agen, aplikasi, dan otomatisasi.
