Mengapa Claude Code Terasa Sangat Stabil: Pendalaman Seorang Pengembang ke dalam Desain Penyimpanan Lokalnya
Claude Code telah ada di mana-mana akhir-akhir ini. Para pengembang menggunakannya untuk mengirimkan fitur lebih cepat, mengotomatiskan alur kerja, dan membuat prototipe agen yang benar-benar bekerja dalam proyek nyata. Yang lebih mengejutkan lagi adalah berapa banyak orang yang bukan pembuat kode yang ikut serta - membangun alat, memasang kabel, dan mendapatkan hasil yang berguna dengan hampir tanpa pengaturan. Jarang sekali ada alat pengkodean AI yang menyebar dengan cepat di berbagai tingkat keahlian yang berbeda.
Namun, yang benar-benar menonjol adalah betapa stabilnya alat ini. Claude Code mengingat apa yang terjadi di seluruh sesi, bertahan dari kerusakan tanpa kehilangan kemajuan, dan berperilaku lebih seperti alat pengembangan lokal daripada antarmuka obrolan. Keandalan tersebut berasal dari bagaimana ia menangani penyimpanan lokal.
Alih-alih memperlakukan sesi pengkodean Anda sebagai obrolan sementara, Claude Code membaca dan menulis file nyata, menyimpan status proyek di disk, dan mencatat setiap langkah kerja agen. Sesi dapat dilanjutkan, diperiksa, atau diputar kembali tanpa menebak-nebak, dan setiap proyek tetap terisolasi dengan baik - menghindari masalah kontaminasi silang yang dialami oleh banyak alat agen.
Dalam artikel ini, kita akan melihat lebih dekat pada arsitektur penyimpanan di balik stabilitas tersebut, dan mengapa arsitektur ini memainkan peran besar dalam membuat Claude Code terasa praktis untuk pengembangan sehari-hari.
Tantangan yang Dihadapi Setiap Asisten Pengkodean AI Lokal
Sebelum menjelaskan bagaimana Claude Code melakukan pendekatan terhadap penyimpanan, mari kita lihat masalah umum yang sering dihadapi oleh alat pengkodean AI lokal. Hal ini muncul secara alami ketika asisten bekerja secara langsung pada sistem file Anda dan menyimpan status dari waktu ke waktu.
1. Data proyek tercampur di seluruh ruang kerja.
Sebagian besar pengembang beralih di antara beberapa repo sepanjang hari. Jika asisten membawa status dari satu proyek ke proyek lain, akan lebih sulit untuk memahami perilakunya dan lebih mudah baginya untuk membuat asumsi yang salah. Setiap proyek membutuhkan ruang yang bersih dan terisolasi untuk state dan riwayat.
2. Kerusakan dapat menyebabkan kehilangan data.
Selama sesi pengkodean, asisten menghasilkan aliran data yang berguna - pengeditan file, pemanggilan alat, langkah-langkah peralihan. Jika data ini tidak segera disimpan, crash atau restart paksa dapat menghapusnya. Sistem yang andal akan menulis status penting ke disk segera setelah dibuat, sehingga pekerjaan tidak akan hilang secara tiba-tiba.
3. Tidak selalu jelas apa yang sebenarnya dilakukan oleh agen.
Sesi yang biasa melibatkan banyak tindakan kecil. Tanpa catatan yang jelas dan teratur tentang tindakan-tindakan tersebut, sulit untuk menelusuri kembali bagaimana asisten sampai pada hasil tertentu atau menemukan langkah di mana terjadi kesalahan. Riwayat lengkap membuat debugging dan peninjauan menjadi lebih mudah dikelola.
4. Membatalkan kesalahan membutuhkan banyak usaha.
Terkadang asisten membuat perubahan yang tidak sesuai. Jika Anda tidak memiliki cara bawaan untuk mengembalikan perubahan tersebut, Anda akhirnya harus mencari pengeditan secara manual di seluruh repo. Sistem seharusnya secara otomatis melacak apa yang berubah sehingga Anda dapat membatalkannya dengan bersih tanpa kerja ekstra.
5. Proyek yang berbeda membutuhkan pengaturan yang berbeda.
Lingkungan lokal berbeda-beda. Beberapa proyek memerlukan izin, alat, atau aturan direktori tertentu; proyek lainnya memiliki skrip atau alur kerja khusus. Seorang asisten perlu menghormati perbedaan ini dan mengizinkan pengaturan per proyek sambil tetap menjaga perilaku intinya tetap konsisten.
Prinsip-prinsip Desain Penyimpanan di Balik Claude Code
Desain penyimpanan Claude Code dibangun berdasarkan empat ide sederhana. Keempat ide tersebut mungkin terlihat sederhana, tetapi bersama-sama mengatasi masalah praktis yang muncul ketika asisten AI bekerja secara langsung di mesin Anda dan di beberapa proyek.
1. Setiap proyek mendapatkan penyimpanannya sendiri.
Claude Code mengikat semua data sesi ke direktori proyek yang dimilikinya. Itu berarti percakapan, pengeditan, dan log tetap berada di proyek asalnya dan tidak bocor ke proyek lain. Menjaga penyimpanan tetap terpisah membuat perilaku asisten lebih mudah dipahami dan memudahkan untuk memeriksa atau menghapus data untuk repo tertentu.
2. Data langsung disimpan ke disk.
Alih-alih menyimpan data interaksi di memori, Claude Code menulisnya ke disk segera setelah dibuat. Setiap peristiwa-pesan, panggilan alat, atau pembaruan status-ditambahkan sebagai entri baru. Jika program macet atau ditutup secara tidak terduga, hampir semuanya masih ada di sana. Pendekatan ini membuat sesi tetap awet tanpa menambah banyak kerumitan.
3. Setiap tindakan memiliki tempat yang jelas dalam sejarah.
Claude Code menautkan setiap pesan dan tindakan alat ke pesan dan tindakan sebelumnya, membentuk urutan yang lengkap. Riwayat yang teratur ini memungkinkan untuk meninjau bagaimana sebuah sesi berlangsung dan melacak langkah-langkah yang mengarah ke hasil tertentu. Bagi pengembang, memiliki jejak semacam ini membuat debugging dan memahami perilaku agen menjadi lebih mudah.
4. Pengeditan kode mudah dikembalikan.
Sebelum asisten memperbarui file, Claude Code menyimpan cuplikan status sebelumnya. Jika perubahannya ternyata salah, Anda dapat mengembalikan versi sebelumnya tanpa menggali repo atau menebak-nebak apa yang berubah. Jaring pengaman sederhana ini membuat pengeditan yang digerakkan oleh AI jauh lebih tidak berisiko.
Tata Letak Penyimpanan Lokal Claude Code
Claude Code menyimpan semua data lokalnya di satu tempat: direktori rumah Anda. Hal ini membuat sistem dapat diprediksi dan membuatnya lebih mudah untuk diperiksa, di-debug, atau dibersihkan bila diperlukan. Tata letak penyimpanan dibangun di sekitar dua komponen utama: file konfigurasi global kecil dan direktori data yang lebih besar di mana semua status tingkat proyek berada.
Dua komponen inti:
~/.claude.jsonMenyimpan konfigurasi global dan pintasan, termasuk pemetaan proyek, pengaturan server MCP, dan prompt yang baru saja digunakan.~/.claude/Direktori data utama, tempat Claude Code menyimpan percakapan, sesi proyek, izin, plugin, keterampilan, riwayat, dan data runtime terkait.
Selanjutnya, mari kita lihat lebih dekat dua komponen inti ini.
(1) Konfigurasi global: ~/.claude.json
File ini bertindak sebagai indeks dan bukan penyimpan data. File ini mencatat proyek mana saja yang pernah Anda kerjakan, alat apa saja yang dilampirkan pada setiap proyek, dan perintah apa saja yang baru saja Anda gunakan. Data percakapan itu sendiri tidak disimpan di sini.
{
"projects": {
"/Users/xxx/my-project": {
"mcpServers": {
"jarvis-tasks": {
"type": "stdio",
"command": "python",
"args": ["/path/to/run_mcp.py"]
}
}
}
},
"recentPrompts": [
"Fix the bug in auth module",
"Add unit tests"
]
}
(2) Direktori data utama: ~/.claude/
Direktori ~/.claude/ adalah tempat sebagian besar status lokal Claude Code berada. Strukturnya mencerminkan beberapa ide desain inti: isolasi proyek, ketekunan langsung, dan pemulihan yang aman dari kesalahan.
~/.claude/
āāā settings.json # Global settings (permissions, plugins, cleanup intervals)
āāā settings.local.json # Local settings (machine-specific, not committed to Git)
āāā history.jsonl # Command history
ā
āāā projects/ # š Session data (organized by project, core directory)
ā āāā -Users-xxx-project/ # Path-encoded project directory
ā āāā {session-id}.jsonl # Primary session data (JSONL format)
ā āāā agent-{agentId}.jsonl # Sub-agent session data
ā
āāā session-env/ # Session environment variables
ā āāā {session-id}/ # Isolated by session ID
ā
āāā skills/ # š User-level skills (globally available)
ā āāā mac-mail/
ā āāā SKILL.md
ā
āāā plugins/ # š Plugin management
ā āāā config.json # Global plugin configuration
ā āāā installed_plugins.json # List of installed plugins
ā āāā known_marketplaces.json # Marketplace source configuration
ā āāā cache/ # Plugin cache
ā āāā marketplaces/
ā āāā anthropic-agent-skills/
ā āāā .claude-plugin/
ā ā āāā marketplace.json
ā āāā skills/
ā āāā pdf/
ā āāā docx/
ā āāā frontend-design/
ā
āāā todos/ # Task list storage
ā āāā {session-id}-*.json # Session-linked task files
ā
āāā file-history/ # File edit history (stored by content hash)
ā āāā {content-hash}/ # Hash-named backup directory
ā
āāā shell-snapshots/ # Shell state snapshots
āāā plans/ # Plan Mode storage
āāā local/ # Local tools / node_modules
ā āāā claude # Claude CLI executable
ā āāā node_modules/ # Local dependencies
ā
āāā statsig/ # Feature flag cache
āāā telemetry/ # Telemetry data
āāā debug/ # Debug logs
Tata letak ini sengaja dibuat sederhana: semua yang dihasilkan oleh Claude Code berada di bawah satu direktori, diorganisir berdasarkan proyek dan sesi. Tidak ada status tersembunyi yang tersebar di sekitar sistem Anda, dan mudah untuk memeriksa atau membersihkannya bila perlu.
Bagaimana Claude Code Mengelola Konfigurasi
Sistem konfigurasi Claude Code dirancang berdasarkan ide sederhana: menjaga perilaku default tetap konsisten di seluruh mesin, tetapi tetap membiarkan lingkungan dan proyek individu menyesuaikan apa yang mereka butuhkan. Untuk mewujudkan hal ini, Claude Code menggunakan model konfigurasi tiga lapis. Ketika pengaturan yang sama muncul di lebih dari satu tempat, lapisan yang lebih spesifik selalu menang.
Tiga tingkat konfigurasi
Claude Code memuat konfigurasi dengan urutan sebagai berikut, dari prioritas terendah hingga tertinggi:
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā Project-level configuration ā Highest priority
ā project/.claude/settings.json ā Project-specific, overrides other configs
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¤
ā Local configuration ā Machine-specific, not version-controlled
ā ~/.claude/settings.local.json ā Overrides global configuration
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā¤
ā Global configuration ā Lowest priority
ā ~/.claude/settings.json ā Base default configuration
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
Anda dapat menganggapnya sebagai memulai dengan default global, kemudian menerapkan penyesuaian khusus mesin, dan akhirnya menerapkan aturan khusus proyek.
Selanjutnya, kita akan membahas setiap tingkat konfigurasi secara mendetail.
(1) Konfigurasi global: ~/.claude/settings.json
Konfigurasi global mendefinisikan perilaku default untuk Claude Code di semua proyek. Di sinilah Anda mengatur izin dasar, mengaktifkan plugin, dan mengonfigurasi perilaku pembersihan.
{
"$schema": "https://json.schemastore.org/claude-code-settings.json",
"permissions": {
"allow": ["Read(**)", "Bash(npm:*)"],
"deny": ["Bash(rm -rf:*)"],
"ask": ["Edit", "Write"]
},
"enabledPlugins": {
"document-skills@anthropic-agent-skills": true
},
"cleanupPeriodDays": 30
}
(2) Konfigurasi lokal: ~/.claude/settings.local.json
Konfigurasi lokal dikhususkan untuk satu mesin. Konfigurasi ini tidak dimaksudkan untuk dibagikan atau diperiksa ke dalam kontrol versi. Ini merupakan tempat yang baik untuk kunci API, alat lokal, atau izin khusus lingkungan.
{
"permissions": {
"allow": ["Bash(git:*)", "Bash(docker:*)"]
},
"env": {
"ANTHROPIC_API_KEY": "sk-ant-xxx"
}
}
(3) Konfigurasi tingkat proyek: project/.claude/settings.json
Konfigurasi tingkat proyek hanya berlaku untuk satu proyek dan memiliki prioritas tertinggi. Di sinilah Anda mendefinisikan aturan yang harus selalu berlaku ketika bekerja di repositori tersebut.
{
"permissions": {
"allow": ["Bash(pytest:*)"]
}
}
Dengan lapisan konfigurasi yang telah ditentukan, pertanyaan selanjutnya adalah bagaimana Claude Code menyelesaikan konfigurasi dan izin pada saat runtime.
Claude Code menerapkan konfigurasi dalam tiga lapisan: dimulai dengan default global, kemudian menerapkan penggantian khusus mesin, dan akhirnya menerapkan aturan khusus proyek. Ketika pengaturan yang sama muncul di beberapa tempat, konfigurasi yang paling spesifik akan diprioritaskan.
Izin mengikuti urutan evaluasi yang tetap:
tolak - selalu memblokir
tanyakan - memerlukan konfirmasi
mengizinkan - berjalan secara otomatis
default - hanya berlaku jika tidak ada aturan yang cocok
Hal ini membuat sistem tetap aman secara default, namun tetap memberikan fleksibilitas yang dibutuhkan oleh proyek dan mesin individu.
Penyimpanan Sesi: Bagaimana Claude Code Menyimpan Data Interaksi Inti
Dalam Claude Code, sesi adalah unit inti data. Sesi menangkap seluruh interaksi antara pengguna dan AI, termasuk percakapan itu sendiri, panggilan alat, perubahan file, dan konteks terkait. Bagaimana sesi disimpan memiliki dampak langsung pada keandalan sistem, kemampuan debug, dan keamanan secara keseluruhan.
Pisahkan data sesi untuk setiap proyek
Setelah sesi didefinisikan, pertanyaan selanjutnya adalah bagaimana Claude Code menyimpannya dengan cara yang membuat data tetap terorganisir dan terpisah.
Claude Code mengisolasi data sesi berdasarkan proyek. Sesi setiap proyek disimpan di bawah direktori yang berasal dari jalur file proyek.
Jalur penyimpanan mengikuti pola ini:
~/.claude/projects/ + path-encoded project directory
Untuk membuat nama direktori yang valid, karakter khusus seperti /, spasi, dan ~ diganti dengan -.
Sebagai contoh:
/Users/bill/My Project ā -Users-bill-My-Project
Pendekatan ini memastikan bahwa data sesi dari proyek yang berbeda tidak pernah bercampur dan dapat dikelola atau dihapus per proyek.
Mengapa sesi disimpan dalam format JSONL
Claude Code menyimpan data sesi menggunakan JSONL (JSON Lines), bukan JSON standar.
Dalam file JSON tradisional, semua pesan digabungkan bersama di dalam satu struktur besar, yang berarti seluruh file harus dibaca dan ditulis ulang setiap kali ada perubahan. Sebaliknya, JSONL menyimpan setiap pesan sebagai baris tersendiri di dalam file. Satu baris sama dengan satu pesan, tanpa pembungkus luar.
| Aspek | JSON Standar | JSONL (Baris JSON) |
|---|---|---|
| Bagaimana data disimpan | Satu struktur besar | Satu pesan per baris |
| Kapan data disimpan | Biasanya di bagian akhir | Segera, per pesan |
| Dampak kerusakan | Seluruh file dapat rusak | Hanya baris terakhir yang terpengaruh |
| Menulis data baru | Menulis ulang seluruh file | Menambahkan satu baris |
| Penggunaan memori | Memuat semuanya | Membaca baris demi baris |
JSONL bekerja lebih baik dalam beberapa cara utama:
Penyimpanan segera: Setiap pesan langsung ditulis ke disk segera setelah dibuat, alih-alih menunggu sesi selesai.
Tahan terhadap kerusakan: Jika program mengalami kerusakan, hanya pesan terakhir yang belum selesai yang akan hilang. Semua yang ditulis sebelum itu akan tetap utuh.
Penambahan cepat: Pesan baru ditambahkan ke akhir file tanpa membaca atau menulis ulang data yang ada.
Penggunaan memori yang rendah: File sesi dapat dibaca satu baris dalam satu waktu, sehingga seluruh file tidak perlu dimuat ke dalam memori.
File sesi JSONL yang disederhanakan terlihat seperti ini:
{"type":"user","message":{"role":"user","content":"Hello"},"timestamp":"2026-01-05T10:00:00Z"}
{"type":"assistant","message":{"role":"assistant","content":[{"type":"text","text":"Hi!"}]}}
{"type":"user","message":{"role":"user","content":"Help me fix this bug"}}
Jenis pesan sesi
File sesi mencatat semua yang terjadi selama interaksi dengan Claude Code. Untuk melakukan hal ini dengan jelas, ia menggunakan tipe pesan yang berbeda untuk berbagai jenis peristiwa.
Pesan pengguna mewakili input baru yang masuk ke dalam sistem. Ini tidak hanya mencakup apa yang diketikkan pengguna, tetapi juga hasil yang dikembalikan oleh alat, seperti output dari perintah shell. Dari sudut pandang AI, keduanya merupakan masukan yang perlu ditanggapi.
Pesan asisten menangkap apa yang dilakukan Claude sebagai tanggapan. Pesan-pesan ini termasuk alasan AI, teks yang dihasilkannya, dan alat apa pun yang diputuskan untuk digunakan. Mereka juga mencatat detail penggunaan, seperti jumlah token, untuk memberikan gambaran lengkap tentang interaksi.
Snapshot riwayat file adalah pos pemeriksaan keamanan yang dibuat sebelum Claude memodifikasi file apa pun. Dengan menyimpan status file asli terlebih dahulu, Claude Code memungkinkan untuk membatalkan perubahan jika terjadi kesalahan.
Ringkasan memberikan gambaran ringkas tentang sesi dan terkait dengan hasil akhir. Ringkasan ini memudahkan untuk memahami tentang apa yang terjadi dalam sesi tanpa harus mengulang setiap langkah.
Bersama-sama, jenis pesan ini tidak hanya merekam percakapan, tetapi juga seluruh rangkaian tindakan dan efek yang terjadi selama sesi berlangsung.
Untuk membuatnya lebih konkret, mari kita lihat contoh spesifik pesan pengguna dan pesan asisten.
(1) Contoh pesan pengguna:
{
"type": "user",
"uuid": "7d90e1c9-e727-4291-8eb9-0e7b844c4348",
"parentUuid": null,
"sessionId": "e5d52290-e2c1-41d6-8e97-371401502fdf",
"timestamp": "2026-01-05T10:00:00.000Z",
"message": {
"role": "user",
"content": "Analyze the architecture of this project"
},
"cwd": "/Users/xxx/project",
"gitBranch": "main",
"version": "2.0.76"
}
(2) Contoh pesan asisten:
{
"type": "assistant",
"uuid": "e684816e-f476-424d-92e3-1fe404f13212",
"parentUuid": "7d90e1c9-e727-4291-8eb9-0e7b844c4348",
"message": {
"role": "assistant",
"model": "claude-opus-4-5-20251101",
"content": [
{
"type": "thinking",
"thinking": "The user wants to understand the project architecture, so I need to check the directory structure first..."
},
{
"type": "text",
"text": "Let me take a look at the project structure first."
},
{
"type": "tool_use",
"id": "toolu_01ABC",
"name": "Bash",
"input": {"command": "ls -la"}
}
],
"usage": {
"input_tokens": 1500,
"output_tokens": 200,
"cache_read_input_tokens": 50000
}
}
}
Bagaimana Pesan Sesi Dikaitkan
Claude Code tidak menyimpan pesan sesi sebagai entri yang terpisah. Sebaliknya, ia menghubungkan mereka bersama untuk membentuk rantai peristiwa yang jelas. Setiap pesan menyertakan pengenal unik (uuid) dan referensi ke pesan yang datang sebelumnya (parentUuid). Hal ini memungkinkan untuk melihat tidak hanya apa yang terjadi, tetapi juga mengapa hal itu terjadi.
Sesi dimulai dengan pesan pengguna, yang memulai rantai. Setiap balasan dari Claude menunjuk kembali ke pesan yang menyebabkannya. Pemanggilan alat dan keluarannya ditambahkan dengan cara yang sama, dengan setiap langkah yang terkait dengan langkah sebelumnya. Ketika sesi berakhir, ringkasan dilampirkan pada pesan terakhir.
Karena setiap langkah terhubung, Claude Code dapat memutar ulang seluruh urutan tindakan dan memahami bagaimana sebuah hasil dihasilkan, sehingga debugging dan analisis menjadi lebih mudah.
Membuat Perubahan Kode Mudah Dibatalkan dengan Snapshot File
Pengeditan yang dihasilkan AI tidak selalu benar, dan terkadang pengeditan tersebut mengarah ke arah yang salah. Untuk membuat perubahan ini aman untuk bereksperimen, Claude Code menggunakan sistem snapshot sederhana yang memungkinkan Anda membatalkan pengeditan tanpa harus menggali perbedaan atau membersihkan file secara manual.
Idenya sangat mudah: sebelum Claude Code memodifikasi sebuah berkas, ia menyimpan salinan konten aslinya. Jika pengeditan ternyata salah, sistem dapat mengembalikan versi sebelumnya secara instan.
Apa yang dimaksud dengan cuplikan riwayat file?
Cuplikan riwayat file adalah pos pemeriksaan yang dibuat sebelum file dimodifikasi. Snapshot ini merekam konten asli dari setiap file yang akan diedit oleh Claude. Snapshot ini berfungsi sebagai sumber data untuk operasi pembatalan dan pengembalian.
Ketika pengguna mengirim pesan yang mungkin mengubah file, Claude Code membuat snapshot kosong untuk pesan tersebut. Sebelum mengedit, sistem mencadangkan konten asli setiap file target ke dalam snapshot, lalu menerapkan hasil edit langsung ke disk. Jika pengguna memicu pembatalan, Claude Code mengembalikan konten yang tersimpan dan menimpa file yang dimodifikasi.
Dalam praktiknya, siklus hidup pengeditan yang dapat dibatalkan terlihat seperti ini:
Pengguna mengirimkan pesanClaudeCode membuat catatan
file-history-snapshotyang baru dan kosong.Claude bersiap untuk memodifikasi fileSistemmengidentifikasi file mana yang akan diedit dan mencadangkan konten aslinya ke dalam
trackedFileBackups.Claude mengeksekusioperasieditEditdan tulis dilakukan, dan konten yang dimodifikasi ditulis ke disk.
Pengguna memicupembatalanPengguna menekan Esc + Esc, menandakan bahwa perubahan harus dikembalikan.
Konten asli dikembalikanClaudeCode membaca konten yang disimpan dari
trackedFileBackupsdan menimpa file saat ini, menyelesaikan undo.
Mengapa Urungkan Bekerja: Jepretan Menyimpan Versi Lama
Undo di Claude Code berfungsi karena sistem menyimpan konten file asli sebelum pengeditan terjadi.
Alih-alih mencoba membalikkan perubahan setelah fakta, Claude Code mengambil pendekatan yang lebih sederhana: menyalin file seperti yang ada sebelum modifikasi dan menyimpan salinan itu di trackedFileBackups. Ketika pengguna memicu pembatalan, sistem akan mengembalikan versi yang tersimpan ini dan menimpa file yang diedit.
Diagram di bawah ini menunjukkan alur ini langkah demi langkah:
āāāāāāāāāāāāāāāāāāāāāāāāāāā
ā before edit, app.py ā
ā print("old") āāāāāāāāā Backed up into snapshot trackedFileBackups
āāāāāāāāāāāāāāāāāāāāāāāāāāā
ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā After Claude edits ā
ā print(ānewā) āāāāāāāāā Written to disk (overwrites the original file)
āāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā User triggers undo ā
ā Press Esc + Esc āāāāāāāāā Restore āoldā content to disk from snapshot
āāāāāāāāāāāāāāāāāāāāāāāāāāāā
Seperti Apa Snapshot Riwayat File Secara Internal
Snapshot itu sendiri disimpan sebagai catatan terstruktur. Snapshot ini menangkap metadata tentang pesan pengguna, waktu pengambilan snapshot, dan-yang paling penting-peta file ke konten aslinya.
Contoh di bawah ini menunjukkan satu catatan file-history-snapshot yang dibuat sebelum Claude mengedit file apa pun. Setiap entri di trackedFileBackups menyimpan konten pra-edit dari sebuah file, yang kemudian digunakan untuk mengembalikan file tersebut selama pembatalan.
{
"type": "file-history-snapshot",
"messageId": "7d90e1c9-e727-4291-8eb9-0e7b844c4348",
"snapshot": {
"messageId": "7d90e1c9-e727-4291-8eb9-0e7b844c4348",
"trackedFileBackups": {
"/path/to/file1.py": "Original file content\ndef hello():\n print('old')",
"/path/to/file2.js": "// Original content..."
},
"timestamp": "2026-01-05T10:00:00.000Z"
},
"isSnapshotUpdate": false
}
Di mana Snapshot Disimpan dan Berapa Lama Disimpan
Tempat penyimpanan metadata snapshot: Catatan snapshot terikat pada sesi tertentu dan disimpan sebagai file JSONL di bawah
~/.claude/projects/-path-to-project/{session-id}.jsonl.Di mana konten file asli dicadangkan: Konten pra-edit dari setiap file disimpan secara terpisah dengan hash konten di bawah
~/.claude/file-history/{content-hash}/.Berapa lama snapshot disimpan secara default: Data snapshot disimpan selama 30 hari, konsisten dengan pengaturan global
cleanupPeriodDays.Cara mengubah periode penyimpanan: Jumlah hari penyimpanan dapat disesuaikan melalui bidang
cleanupPeriodDaysdi~/.claude/settings.json.
Perintah Terkait
| Perintah / Tindakan | Deskripsi |
|---|---|
| Esc + Esc | Membatalkan pengeditan berkas yang terakhir dilakukan (paling sering digunakan) |
| /rewind | Kembali ke titik pemeriksaan yang telah ditentukan sebelumnya (snapshot) |
| /diff | Melihat perbedaan antara file saat ini dan cadangan snapshot |
Direktori Penting Lainnya
(1) plugins/ - Manajemen Pengaya
Direktori plugins/ menyimpan pengaya yang memberikan kemampuan tambahan pada Claude Code.
Direktori ini menyimpan pengaya mana yang diinstal, dari mana asalnya, dan kemampuan ekstra yang diberikan pengaya tersebut. Direktori ini juga menyimpan salinan lokal dari pengaya yang telah diunduh sehingga tidak perlu diambil lagi.
~/.claude/plugins/
āāā config.json
ā Global plugin configuration (e.g., enable/disable rules)
āāā installed_plugins.json
ā List of installed plugins (including version and status)
āāā known_marketplaces.json
ā Plugin marketplace source configuration (e.g., Anthropic official marketplace)
āāā cache/
ā Plugin download cache (avoids repeated downloads)
āāā marketplaces/
Marketplace source storage
āāā anthropic-agent-skills/
Official plugin marketplace
āāā .claude-plugin/
ā āāā marketplace.json
ā Marketplace metadata
āāā skills/
Skills provided by the marketplace
āāā pdf/
ā PDF-related skills
āāā docx/
ā Word document processing skills
āāā frontend-design/
Frontend design skills
(2) keterampilan/ - Tempat Keterampilan Disimpan dan Diterapkan
Dalam Claude Code, keterampilan adalah kemampuan kecil yang dapat digunakan kembali yang membantu Claude melakukan tugas tertentu, seperti bekerja dengan PDF, mengedit dokumen, atau mengikuti alur kerja pengkodean.
Tidak semua keterampilan tersedia di semua tempat. Beberapa berlaku secara global, sementara yang lain terbatas pada satu proyek atau disediakan oleh plugin. Claude Code menyimpan keterampilan di lokasi yang berbeda untuk mengontrol di mana setiap keterampilan dapat digunakan.
Hirarki di bawah ini menunjukkan bagaimana keterampilan berlapis berdasarkan ruang lingkup, dari keterampilan yang tersedia secara global hingga keterampilan khusus proyek dan yang disediakan oleh plugin.
| Tingkat | Lokasi Penyimpanan | Deskripsi |
|---|---|---|
| Pengguna | ~/.claude/skills/ | Tersedia secara global, dapat diakses oleh semua proyek |
| Proyek | project/.claude/skills/ | Hanya tersedia untuk proyek saat ini, kustomisasi khusus untuk proyek |
| Plugin | ~/.claude/plugins/marketplaces/*/skills/ | Diinstal dengan plugin, tergantung pada status pengaktifan plugin |
(3) todos/ - Penyimpanan Daftar Tugas
Direktori todos/ menyimpan daftar tugas yang dibuat Claude untuk melacak pekerjaan selama percakapan, seperti langkah-langkah yang harus diselesaikan, item yang sedang dikerjakan, dan tugas yang sudah selesai.
Daftar tugas disimpan sebagai file JSON di bawah~/.claude/todos/{session-id}-*.json. Setiap nama file menyertakan ID sesi, yang menghubungkan daftar tugas ke percakapan tertentu.
Isi dari file-file ini berasal dari alat TodoWrite dan mencakup informasi tugas dasar seperti deskripsi tugas, status saat ini, prioritas, dan metadata terkait.
(4) local/ - Runtime dan Alat Lokal
Direktori local/ menyimpan berkas-berkas inti yang dibutuhkan oleh Claude Code untuk dijalankan pada mesin Anda.
Ini termasuk file yang dapat dieksekusi pada baris perintah claude dan direktori node_modules/ yang berisi ketergantungan runtime. Dengan menjaga komponen-komponen ini tetap lokal, Claude Code dapat berjalan secara independen, tanpa bergantung pada layanan eksternal atau instalasi di seluruh sistem.
(5) Direktori Pendukung Tambahan
shell-snapshots/: Menyimpan snapshot status sesi shell (seperti direktori saat ini dan variabel lingkungan), yang memungkinkan rollback operasi shell.
plans/: Menyimpan rencana eksekusi yang dihasilkan oleh Mode Rencana (misalnya, rincian langkah demi langkah dari tugas pemrograman multi-langkah).
statsig/: Tembolok menampilkan konfigurasi flag (seperti apakah fitur baru diaktifkan) untuk mengurangi permintaan yang berulang-ulang.
telemetry/: Menyimpan data telemetri anonim (seperti frekuensi penggunaan fitur) untuk pengoptimalan produk.
debug/: Menyimpan log debug (termasuk tumpukan kesalahan dan jejak eksekusi) untuk membantu pemecahan masalah.
Kesimpulan
Setelah menggali bagaimana Claude Code menyimpan dan mengelola semuanya secara lokal, gambarannya menjadi cukup jelas: alat ini terasa stabil karena fondasinya kokoh. Tidak ada yang mewah - hanya rekayasa yang bijaksana. Setiap proyek memiliki ruangnya sendiri, setiap tindakan dituliskan, dan suntingan file dicadangkan sebelum ada perubahan. Ini adalah jenis desain yang diam-diam melakukan tugasnya dan memungkinkan Anda untuk fokus pada pekerjaan Anda.
Yang paling saya sukai adalah tidak ada hal mistis yang terjadi di sini. Claude Code bekerja dengan baik karena dasar-dasarnya dilakukan dengan benar. Jika Anda pernah mencoba membuat agen yang menyentuh berkas nyata, Anda tahu betapa mudahnya segala sesuatunya berantakan - status bercampur aduk, crash menghapus progres, dan membatalkannya hanya bisa ditebak. Claude Code menghindari semua itu dengan model penyimpanan yang sederhana, konsisten, dan sulit dipecahkan.
Untuk tim yang membangun agen AI lokal atau on-prem, terutama di lingkungan yang aman, pendekatan ini menunjukkan bagaimana penyimpanan yang kuat dan ketekunan membuat alat AI dapat diandalkan dan praktis untuk pengembangan sehari-hari.
Jika Anda sedang merancang agen AI lokal atau on-prem dan ingin mendiskusikan arsitektur penyimpanan, desain sesi, atau rollback yang aman secara lebih mendetail, jangan ragu untuk bergabung dengan saluran Slack kami, Anda juga dapat memesan sesi one-on-one selama 20 menit melalui Milvus Office Hours untuk mendapatkan panduan yang disesuaikan.
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word



