SSD Nodes Learn 🎉 VPS mulai $5.50/bln
Panduan Matt ConnorOleh Matt Connor · Diperbarui 2026-08-13

Compartment: Memori Agen Terenkripsi Offline

Compartment mengenkripsi memori agen di mesin Anda tanpa jaringan. Pahami cakupan model ancamannya, embedding lokal, serta konsekuensi jika passphrase hilang.

Perbedaan Compartment

Compartment adalah penyimpanan memori agen yang mengenkripsi setiap catatan di mesin yang membuatnya dan tidak pernah terhubung ke service jaringan. Dua pilihan membedakannya dari produk lain di bidang memori agen. Vault berupa satu file tersegel yang hanya dapat dibuka dengan passphrase Anda, dan proses embedding berjalan secara lokal. Dengan demikian, teks memori tidak pernah dikirim ke mana pun untuk diubah menjadi vektor. Version 4.6.0 dirilis pada 10 August 2026, lisensinya adalah Apache-2.0, dan paketnya dapat diinstal dari PyPI.

Ini adalah klaim tentang model ancaman, sehingga panduan ini memperlakukannya demikian. Enkripsi saat data tersimpan dan desain offline melindungi hal-hal tertentu. Keduanya tidak melindungi hal-hal lain, dan celah itulah yang menimbulkan masalah pada hari kedua.

Panduan ini mengikuti dokumentasi dan catatan rilis milik proyek tersebut, yang dibaca pada 11 August 2026. Compartment merilis aplikasi desktop, item menu bar di macOS, dan ikon notification area di Windows, selain command line tool-nya. Prompt passphrase tidak dapat dikendalikan dari container otomatis. Perlakukan uraian berikut sebagai perilaku yang didokumentasikan, bukan perilaku yang diukur di sini. Jalankan pada mesin cadangan sebelum mempercayakannya dengan data nyata.

Perlindungan nyata yang diberikan enkripsi saat data tidak aktif

Vault disegel dengan XChaCha20-Poly1305, yaitu cipher AEAD (authenticated encryption with associated data), sedangkan keyslot yang menyimpan master key dibungkus dengan Argon2id, fungsi hashing password yang dirancang agar lambat dan membutuhkan banyak memori. Ada dua konsekuensi. Salinan file pada disk yang dicuri, backup lama, atau lampiran tiket dukungan hanya berisi byte tanpa makna. Selain itu, perubahan satu bit saja akan gagal dalam autentikasi saat file dibuka, sehingga korupsi menjadi error yang jelas, bukan jawaban yang salah.

Embedding vector juga dienkripsi. Hal ini lebih penting daripada yang terlihat. Embedding bukan hash. Penelitian tentang pembalikan embedding telah memulihkan fragmen teks asli yang dapat dibaca hanya dari vector-nya. Karena itu, indeks vector plaintext yang berada di samping database terenkripsi hampir sama dengan membiarkan database tetap terbuka. Compartment tidak menulis indeks plaintext ke disk.

Penghapusan benar-benar menghapus data. Setiap record memiliki key sendiri, dan compartment forget --shred menghancurkan key tersebut. Dengan demikian, ciphertext yang tersisa tidak dapat didekripsi oleh siapa pun, termasuk Anda. Bandingkan dengan row yang dihapus dari file database. Row tersebut biasanya masih dapat dibaca pada free page sampai ditimpa oleh data lain.

Mode offline adalah bagian lainnya. Tidak ada data yang di-upload. Jadi, tidak ada akun vendor yang menyimpan memori Anda dan tidak ada API key yang dapat bocor bersama data tersebut.

Hal yang Tidak Dilindungi Compartment

Klaim tersebut hanya berlaku sampai batas vault, dan batas itu lebih dekat daripada yang terlihat.

Agent membaca teks biasa. Recall mendekripsi memori lalu menyerahkan teks tersebut kepada agent. Jika agent itu adalah model yang di-host, memori tersebut dikirim ke penyedia model di dalam prompt berikutnya, sama seperti semua hal lain di dalam context window. Enkripsi saat data tersimpan melindungi file. Enkripsi tersebut tidak melindungi proses retrieval. Karena itu, aturan dalam menjaga rahasia agar tidak masuk ke agent AI tidak menjadi lebih longgar hanya karena store dienkripsi: password yang disimpan sebagai memori adalah password yang Anda atur untuk ditempelkan secara otomatis ke dalam prompt.

Vault yang terbuka pada mesin yang sedang berjalan berarti terbuka. Catatan keamanan proyek menyatakan hal ini dengan jelas. Selama vault terbuka, master key dan working set berada di RAM, Python tidak dapat menjamin bahwa buffer telah dihapus, dan swap atau image hibernasi dapat menulis memori tersebut ke disk. Malware yang berjalan sebagai user Anda tidak perlu memecahkan cipher, karena malware tersebut dapat meminta data dari vault yang sudah terbuka.

Identitas pemanggil bersifat deklaratif. Namespace dapat dibatasi untuk setiap pemanggil, tetapi nama pemanggil berasal dari proses host. Karena itu, host yang memalsukan namanya akan menerima grant yang diklaimnya. Permission namespace adalah pengaturan organisasi, bukan batas keamanan terhadap program lokal yang berbahaya.

Shredding tidak dapat menjangkau salinan. forget --shred menghancurkan key di dalam file saat ini. Backup yang dibuat sebelum shredding masih menyimpan record tersebut dan masih dapat dibuka dengan passphrase pada hari itu.

Passphrase yang lemah mengakhiri pembahasan. Argon2id membuat setiap tebakan menjadi mahal. Namun, Argon2id tidak dapat menyelamatkan passphrase yang terdapat dalam word list.

Instal Compartment dari rilis yang dipatok

Compartment memerlukan Python 3.11 atau yang lebih baru. Proyek ini berkembang cepat, dengan tiga puluh versi di PyPI per 10 August 2026. Karena itu, tetapkan versinya, bukan menggunakan versi apa pun yang tersedia saat instalasi dilakukan.

python3 --version
pip install "compartment==4.6.0"
compartment --version
compartment init

compartment --version harus menampilkan versi yang Anda tetapkan. Jika shell menampilkan compartment: command not found, direktori instalasi belum tercantum dalam PATH Anda. Pada sebagian besar sistem, direktori tersebut adalah ~/.local/bin. pipx install compartment==4.6.0 dan uv tool install compartment==4.6.0 mengatasi hal ini dengan mengelola path masing-masing.

compartment init meminta passphrase dua kali dan tidak menampilkan apa pun saat Anda mengetik. Passphrase tersebut adalah satu-satunya key. Proyek ini tidak membuat password atau recovery phrase. Ini memang disengaja: tidak ada kredensial yang disimpan oleh perangkat lunak tanpa sepengetahuan Anda.

Periksa hasilnya sebelum menghubungkan apa pun ke vault tersebut.

compartment status

Vault yang berfungsi normal melaporkan bahwa statusnya unlocked. Jika melaporkan locked, jalankan compartment unlock dan masukkan passphrase. Restart akan menguncinya lagi karena kredensial yang membuatnya tetap terbuka bergantung pada secret per boot. Di macOS, compartment unlock --keychain mengaktifkan persistensi setelah reboot dengan menyimpan kredensial tersebut di system keychain.

Lokasi data sebenarnya

Vault default berada di ~/.compartment/memory.vault. Gunakan --vault PATH pada perintah apa pun untuk menunjuk ke lokasi lain, atau gunakan variabel lingkungan COMPARTMENT_VAULT.

Satu file tersebut merupakan seluruh penyimpanan. File dibuka dengan header yang memuat versi format dan keyslot Argon2id, diikuti payload yang disegel, lalu entri jurnal yang ditambahkan saat memory baru masuk. Setiap entri jurnal menyertakan panjangnya dan CRC (cyclic redundancy check) dari panjang tersebut, sehingga penulisan yang terhenti akibat crash dikenali sebagai entri terpotong, bukan dibaca sebagai data. Proses compaction membuat serialisasi vault, menulis file sementara, menjalankan fsync, lalu mengganti namanya ke lokasi tersebut. Dengan demikian, pembaca tidak pernah melihat vault yang ditulis sebagian.

Konsekuensi yang menguntungkan: skrip backup hanya menyalin satu path. Konsekuensi yang kurang praktis: Anda tidak dapat menggunakan grep pada file tersebut, dan tidak dapat memperbaikinya dalam editor teks. Jika Anda menginginkan memory yang dapat dibaca dengan cat dan di-commit ke git, file memory lokal biasa milik Memmy menawarkan kompromi yang berlawanan. Keduanya masuk akal, bergantung pada hal yang Anda khawatirkan: laptop yang dicuri atau tool yang rusak.

compartment uninstall menghapus software dan mempertahankan vault. Berikan --purge hanya jika memang itu yang Anda inginkan.

Menghubungkannya ke agent

Satu perintah menghubungkan klien yang didukung.

compartment integrate --list
compartment integrate claude

Untuk Claude Code, perintah ini menulis entri server MCP (model context protocol) dan hook PostToolUse ke dalam ~/.claude/settings.json setelah mencadangkan file tersebut, memasang skill /compartmentalize di bawah ~/.claude/skills/, serta menambahkan blok terkelola ke ~/.claude/CLAUDE.md yang memberi tahu agent bahwa Compartment menggantikan memori berbasis file yang sebelumnya digunakan. Konfirmasikan kedua bagian tersebut:

compartment hook status
compartment recent

Untuk mendaftarkan server secara manual:

claude mcp add --scope user compartment -- \
    compartment --vault ~/.compartment/memory.vault --caller claude-code serve

Host lain yang mendukung MCP menggunakan server yang sama dengan nama pemanggilnya sendiri.

{ "mcpServers": { "compartment": {
    "command": "compartment",
    "args": ["--vault", "/path/to/memory.vault",
             "--caller", "your-agent-name", "serve"] } } }

Berikan nilai --caller yang berbeda untuk setiap host. Nilai ini adalah label yang dicatat dalam audit log dan kunci yang menjadi dasar penulisan pemberian namespace. Nama yang sama akan membuat keduanya tidak berguna.

Jika Claude Code sudah menulis fakta ke file memorinya sendiri, compartment import-claude --dry-run menampilkan hal-hal yang akan dipindahkan sebelum pemindahan dilakukan. Baca hal yang disimpan Claude Code dalam file memorinya terlebih dahulu, karena mengimpor catatan selama setahun ke vault baru dapat memenuhi penyimpanan memori dengan hal-hal yang sebenarnya tidak ingin disimpan.

Seberapa cepat vault lokal

Berikut adalah angka yang dipublikasikan proyek untuk vault berukuran personal. Angka ini berasal dari dokumentasinya, bukan dari pengujian di sini.

ChartCompartment published local latency, milliseconds
The data behind this chart
[
  {
    "label": "Store one memory, end to end",
    "latency_ms": 40
  },
  {
    "label": "Embed one memory, bundled model",
    "latency_ms": 25
  },
  {
    "label": "Hybrid search, median",
    "latency_ms": 11.6
  },
  {
    "label": "Vector search at 20k records, p95",
    "latency_ms": 0.68
  }
]

Penyimpanan satu memory memerlukan waktu 40 ms, sedangkan vector search pada dua puluh ribu record memerlukan waktu 0.68 ms untuk persentil ke-95. Alasan proyek ini mempertahankan memory secara lokal bersifat aritmetis: satu network round trip ke memory API yang di-hosting sering kali memerlukan waktu lebih lama daripada median 11.6 ms untuk full hybrid search di sini.

Dua detail desain menjelaskan angka pencarian tersebut. Di bawah dua puluh ribu record, Compartment membandingkan query dengan setiap vector. Dengan demikian, recall bersifat eksak berdasarkan rancangan, bukan aproksimasi. Di atas jumlah tersebut, Compartment beralih ke HNSW (hierarchical navigable small world), yaitu indeks aproksimasi yang menukar sedikit recall dengan kecepatan. Vault juga mencatat hash SHA-256 dari embedding model dan menolak dibuka dengan model lain, karena vector dari dua model berbeda dapat dibandingkan tanpa menimbulkan error apa pun, sementara skor yang dihasilkan tidak memiliki arti.

Cadangan dan salinan yang masih dapat dibuka tahun depan

Vault yang terkunci adalah satu file portabel, jadi memindahkannya berarti membuat salinan.

compartment lock
scp ~/.compartment/memory.vault other-machine:
compartment --vault memory.vault unlock

Kunci vault terlebih dahulu. Menyalin saat agent sedang menulis dapat menangkap entri jurnal di tengah proses penambahan. Meskipun framing CRC memungkinkan pembaca melewati fragmen terakhir tersebut, data di dalamnya sudah hilang. compartment lock --sign menyegel file dengan manifes Ed25519. Dengan demikian, mesin penerima dapat memverifikasi bahwa salinan tiba tanpa kerusakan, tanpa memerlukan passphrase.

Karena file tersebut sudah disegel, penyimpanan cloud biasa dapat digunakan untuk menyimpannya. Pada titik ini, enkripsi saat data tidak digunakan memberikan manfaat langsung: target cadangan tidak pernah melihat memory.

Ada 2 peringatan. Shredding tidak menjangkau cadangan. Jadi, record yang Anda crypto shred hari ini tetap dapat dibaca dari salinan minggu lalu oleh siapa pun yang memiliki passphrase minggu lalu. Selain itu, compartment export --plaintext menulis seluruh vault tanpa enkripsi. Ini merupakan tool yang tepat untuk migrasi ke sistem lain, tetapi file yang salah untuk ditinggalkan di ~/Downloads.

Simpan beberapa salinan dan beri tanggal pada setiap salinan. Memory store menjadi liabilitas jika tidak pernah dipangkas. Inilah alasan mengapa memory agent yang sudah usang secara diam-diam merusak retrieval.

Penanganan kunci, rotasi, dan faktor kedua

compartment rekey
compartment 2fa enable
compartment 2fa status

rekey mengubah frasa sandi dengan membungkus ulang kunci utama dalam keyslot pada file saat ini. Salinan lama tetap menggunakan frasa sandi lama karena byte tersebut telah disegel sebelum perubahan dan tidak ada proses yang kembali untuk mengubahnya. Rotasikan salinan tersebut juga, atau terima bahwa frasa sandi yang sudah tidak digunakan masih dapat membuka sesuatu.

2fa enable menambahkan keyfile sebagai faktor kedua yang digabungkan dengan frasa sandi selama derivasi kunci. Keduanya diperlukan untuk membuka vault. Tindakan ini juga menggandakan jumlah hal yang dapat hilang. Simpan keyfile di luar mesin yang menyimpan vault.

Untuk skrip dan CI (continuous integration), frasa sandi dapat diberikan melalui variabel lingkungan COMPARTMENT_PASSPHRASE, dan unlock --passphrase-stdin membacanya dari pipe. Utamakan pipe. Variabel lingkungan dapat dibaca oleh proses lain yang dimiliki user yang sama, dan cenderung tercatat dalam log job.

Riwayat audit menggunakan rantai hash, dan compartment audit verify menelusurinya serta melaporkan tautan pertama yang rusak. Jalankan perintah tersebut setelah setiap pemulihan karena pada saat itulah file yang terpotong tanpa terdeteksi akan terlihat.

Apa yang terjadi jika Anda kehilangan passphrase

Tidak ada yang terjadi, dan memang demikian desainnya. Tidak ada reset, frasa pemulihan, atau alamat yang dapat Anda hubungi, karena tidak ada salinan key di luar ingatan Anda dan keyfile opsional yang Anda gunakan. Vault tetap berupa file berisi byte yang tampak acak.

Jadi, rencana pemulihan bukanlah rencana untuk vault. Rencana tersebut adalah rencana untuk passphrase. Simpan passphrase di password manager pada hari Anda menjalankan compartment init. Kemudian uji passphrase tersebut: kunci vault, buka kuncinya hanya menggunakan informasi yang Anda catat, lalu biarkan agent mulai mengisinya setelah proses tersebut berhasil.

Kompartemen atau server memori

Compartment pada dasarnya dirancang untuk satu mesin. Berbagi berarti menyalin file yang terkunci, atau mengekspor dan mengimpor data. Tidak ada penulis bersamaan. Karena itu, laptop dan workstation yang menunjuk ke satu file akan saling menimpa perubahan.

Jika beberapa mesin memerlukan memori yang sama secara bersamaan, masalahnya adalah server. Server Mem0 yang di-host sendiri pada VPS dapat mengatasinya: satu endpoint, banyak klien, dan memori yang tetap tersedia meskipun laptop tidak digunakan. Risikonya perlu dinyatakan dengan jelas. Server tersebut menjalankan proses yang dapat membaca data yang disimpannya. Karena itu, model ancaman Anda kini mencakup VPS dan siapa pun yang dapat mengakses API-nya.

Pilih berdasarkan kehilangan yang benar-benar Anda khawatirkan. Jika kekhawatiran Anda adalah laptop yang dicuri atau vendor yang membaca catatan Anda, vault lokal terenkripsi adalah pilihan yang lebih kuat. Jika kekhawatiran Anda adalah agen yang melupakan semuanya saat Anda berpindah mesin, gunakan server.

FAQ

Apa yang sebenarnya dilindungi oleh enkripsi Compartment?

Enkripsi tersebut melindungi file. Vault disegel dengan XChaCha20-Poly1305, keyslot-nya dibungkus dengan Argon2id, dan embedding vector juga dienkripsi. Dengan demikian, disk yang dicuri atau backup lama hanya berisi byte yang tidak dapat dibaca. Enkripsi ini tidak melindungi vault yang sudah dibuka pada mesin yang sedang berjalan, karena master key berada di RAM selama vault terbuka. Enkripsi ini juga tidak mengatur tindakan agent terhadap memory setelah hasil recall dikembalikan sebagai plaintext.

Jika Compartment offline, apakah memory saya tetap privat dari penyedia model?

Hanya sampai memory tersebut dipanggil kembali. Penyimpanan dan pencarian berlangsung tanpa jaringan, dan embedding model berjalan secara lokal. Karena itu, tidak ada data yang keluar dari mesin saat penulisan. Saat pembacaan, agent menerima plaintext. Jika agent tersebut menggunakan hosted model, memory masuk ke prompt dan dikirim ke penyedia seperti bagian lain dari context window. Jangan pernah menyimpan credential sebagai memory.

Apa yang terjadi jika saya kehilangan passphrase Compartment?

Vault tidak dapat dipulihkan, sesuai rancangan. Compartment tidak membuat seed atau recovery phrase. Compartment juga tidak menyimpan credential yang tidak Anda miliki. Karena itu, tidak ada yang dapat di-reset. Simpan passphrase di password manager. Simpan 2FA keyfile di luar mesin yang menyimpan vault. Pastikan Anda dapat membuka salinannya sebelum vault berisi data yang akan Anda perlukan.

Bisakah dua mesin menggunakan satu vault Compartment?

Tidak secara bersamaan. Vault yang terkunci adalah satu file portabel. Prosedur yang didokumentasikan adalah menguncinya, menyalinnya, lalu membukanya di mesin lain dengan --vault. Tidak ada akses bersamaan. Karena itu, dua mesin yang menulis ke satu file akan menyebabkan memory hilang. Jalankan memory server jika Anda memerlukannya.

#agent-memory#compartment#encryption#offline#privacy