Apa itu Compartment untuk memori ejen luar talian?
Compartment menyimpan memori ejen secara disulitkan pada mesin anda tanpa sambungan internet. Ketahui model ancaman, risiko kehilangan kunci, dan fungsi versi 4.6.0.
Perbezaan Compartment
Compartment ialah stor memori ejen yang menyimpan setiap rekod dalam keadaan disulitkan pada mesin yang menciptanya dan tidak pernah berhubung dengan perkhidmatan rangkaian. Dua pilihan membezakannya daripada bidang memori ejen yang lain. Vault tersebut merupakan satu fail tertutup yang hanya boleh dibuka dengan frasa laluan anda, dan langkah embedding dijalankan secara setempat, jadi teks memori tidak pernah dihantar ke mana-mana untuk ditukar menjadi vektor. Versi 4.6.0 telah diterbitkan pada 10 Ogos 2026, lesennya ialah Apache-2.0, dan ia dipasang melalui PyPI.
Ini adalah tuntutan model ancaman, jadi panduan ini menganggapnya sebagai satu tuntutan. Penyulitan semasa rehat (encryption at rest) serta reka bentuk luar talian melindungi senarai perkara yang khusus. Ia membiarkan perkara lain terdedah, dan jurang itulah tempat masalah hari kedua (day two problems) wujud.
Panduan ini mengikuti dokumentasi dan nota keluaran projek itu sendiri, yang dibaca pada 11 Ogos 2026. Compartment membekalkan aplikasi desktop, item bar menu pada macOS dan ikon kawasan pemberitahuan pada Windows, di samping alat baris perintahnya, dan gesaan frasa laluan tidak boleh dipacu daripada kontena automatik. Anggap perkara berikut sebagai tingkah laku yang didokumenkan, bukan sebagai tingkah laku yang diukur di sini. Jalankan ia pada mesin simpanan sebelum anda mempercayainya dengan sebarang data sebenar.
Perlindungan sebenar penyulitan pada storan (encryption at rest)
Vault ini dimeterai dengan XChaCha20-Poly1305, iaitu sifir AEAD (authenticated encryption with associated data), dan keyslot yang memegang kunci induk dibalut dengan Argon2id, iaitu fungsi hashing kata laluan yang direka untuk menjadi perlahan dan memerlukan banyak memori. Dua perkara terhasil daripada ini. Salinan fail pada cakera yang dicuri, dalam sandaran lama, atau yang dilampirkan pada tiket sokongan hanyalah bait-bait data tanpa makna. Selain itu, satu bit yang berubah akan menyebabkan pengesahan gagal apabila fail dibuka, maka kerosakan data menjadi ralat yang jelas dan bukannya jawapan yang salah.
Vektor embedding juga disulitkan, yang mana lebih penting daripada kedengarannya. Embedding bukanlah satu hash. Kajian mengenai penyongsangan embedding telah berjaya mendapatkan semula serpihan teks asal daripada vektornya sahaja, jadi indeks vektor teks biasa yang diletakkan bersebelahan dengan pangkalan data yang disulitkan adalah hampir sama dengan membiarkan pangkalan data tersebut terbuka. Compartment tidak menulis indeks teks biasa ke cakera.
Pemadaman adalah pemadaman sebenar. Setiap rekod membawa kuncinya sendiri, dan compartment forget --shred memusnahkan kunci tersebut, jadi teks sifer yang tertinggal tidak boleh dinyahsulit oleh sesiapa pun, termasuk anda sendiri. Bandingkan ini dengan baris yang dipadam daripada fail pangkalan data, yang biasanya kekal boleh dibaca dalam halaman bebas (free pages) sehingga sesuatu data lain menimpanya.
Luar talian (offline) adalah separuh lagi daripada perlindungannya. Tiada apa-apa yang dimuat naik, jadi tiada akaun vendor yang memegang memori anda dan tiada kunci API yang boleh menyebabkan kebocoran data.
Perkara yang tidak dilindungi oleh Compartment
Tuntutan keselamatan terhenti pada sempadan vault, dan sempadan itu lebih dekat daripada yang disangka.
Ejen membaca teks biasa (plaintext). Recall menyahsulit memori dan menyerahkan teks tersebut kepada ejen. Jika ejen itu merupakan model yang dihoskan, memori tersebut akan dihantar kepada penyedia model di dalam prompt seterusnya, sama seperti data lain dalam tetingkap konteks. Penyulitan semasa dalam simpanan (encryption at rest) melindungi fail tersebut. Ia tidak melindungi proses perolehan (retrieval). Oleh itu, peraturan dalam menjauhkan rahsia daripada ejen AI tidak menjadi longgar hanya kerana storan disulitkan: kata laluan yang disimpan sebagai memori adalah kata laluan yang anda telah tetapkan untuk ditampal ke dalam prompt secara automatik.
Vault yang tidak dikunci pada mesin yang sedang berjalan adalah terbuka. Nota keselamatan projek menyatakan perkara ini dengan jelas. Semasa vault tidak dikunci, kunci induk (master key) dan set kerja berada dalam RAM, Python tidak dapat menjamin bahawa penimbal (buffer) akan dipadamkan, dan swap atau imej hibernasi boleh menulis memori tersebut ke cakera. Perisian hasad yang berjalan sebagai pengguna anda tidak perlu memecahkan sifir, kerana ia boleh meminta data daripada vault yang sudah tidak dikunci.
Identiti pemanggil adalah deklaratif. Namespace boleh dihadkan mengikut pemanggil, tetapi nama pemanggil datang daripada proses hos, jadi hos yang menipu tentang namanya akan menerima kebenaran yang dituntutnya. Kebenaran namespace adalah untuk organisasi, bukan sempadan keselamatan terhadap program tempatan yang berniat jahat.
Proses pemusnahan (shredding) tidak dapat mencapai salinan. forget --shred memusnahkan kunci di dalam fail semasa. Sandaran yang dibuat sebelum proses shred masih menyimpan rekod tersebut, dan masih boleh dibuka dengan frasa laluan pada hari itu.
Frasa laluan yang lemah menamatkan perbincangan. Argon2id menjadikan setiap tekaan mahal dari segi pengiraan. Ia tidak dapat menyelamatkan frasa laluan yang muncul dalam senarai perkataan.
Memasang Compartment daripada keluaran yang dipinkan
Compartment memerlukan Python 3.11 atau lebih baharu. Projek ini berkembang pesat, dengan tiga puluh versi di PyPI menjelang 10 Ogos 2026, jadi pin versi tersebut dan jangan mengambil versi semasa pada hari anda memasang.
python3 --version
pip install "compartment==4.6.0"
compartment --version
compartment initcompartment --version sepatutnya mencetak versi yang anda pin. Jika shell menjawab compartment: command not found, direktori pemasangan tidak berada dalam PATH anda, dan pada kebanyakan sistem direktori tersebut ialah ~/.local/bin. pipx install compartment==4.6.0 dan uv tool install compartment==4.6.0 mengelakkan perkara itu dengan menguruskan laluan mereka sendiri.
compartment init meminta frasa laluan sebanyak dua kali dan tidak memaparkan sebarang aksara. Frasa laluan itu adalah satu-satunya kunci. Projek ini tidak menjana kata laluan dan tiada frasa pemulihan, yang dilakukan secara sengaja: tiada kelayakan yang dipegang oleh perisian yang tidak anda pegang sendiri.
Semak keputusan sebelum menyambungkan apa-apa kepadanya.
compartment statusVault yang sihat melaporkan bahawa ia tidak berkunci. Jika ia melaporkan terkunci, jalankan compartment unlock dan masukkan frasa laluan. But semula akan menguncinya semula, kerana kelayakan yang memastikan ia terbuka bergantung pada rahsia setiap but. Pada macOS, compartment unlock --keychain membolehkan ia bertahan selepas but semula dengan menyimpan kelayakan tersebut dalam keychain sistem.
Lokasi sebenar data
Vault lalai terletak di ~/.compartment/memory.vault. Tentukan lokasi lain dengan --vault PATH pada mana-mana arahan, atau gunakan pemboleh ubah persekitaran COMPARTMENT_VAULT.
Satu fail tersebut merupakan keseluruhan storan. Ia dibuka dengan pengepala yang mengandungi versi format dan keyslot Argon2id, diikuti dengan payload yang dimeterai, kemudian entri jurnal yang ditambah apabila memori baharu tiba. Setiap entri jurnal dibingkaikan dengan panjangnya dan CRC (cyclic redundancy check) bagi panjang tersebut, supaya penulisan yang terhenti akibat kegagalan sistem dikenal pasti sebagai entri yang terpotong dan bukannya dibaca sebagai data. Pemadatan (compaction) mensirikan vault, menulis fail sementara, melakukan fsync, kemudian menamakan semula fail tersebut ke tempat asalnya, yang bermaksud pembaca tidak akan melihat vault yang ditulis separuh jalan.
Akibat yang berguna: skrip sandaran hanya perlu menyalin satu laluan sahaja. Akibat yang menyusahkan: anda tidak boleh menggunakan grep ke atasnya, dan anda tidak boleh membaikinya menggunakan editor teks. Jika anda mahukan memori yang boleh dibaca dengan cat dan dikomit ke git, fail memori tempatan biasa Memmy adalah pertukaran yang bertentangan. Kedua-duanya adalah munasabah, bergantung kepada sama ada perkara yang anda takuti ialah komputer riba yang dicuri atau alatan yang rosak.
compartment uninstall membuang perisian tersebut dan mengekalkan vault. Gunakan --purge hanya apabila anda benar-benar pasti.
Menyambungkannya ke ejen
Satu arahan menyambungkan klien yang disokong.
compartment integrate --list
compartment integrate claudeBagi Claude Code yang menulis entri pelayan MCP (model context protocol) dan hook PostToolUse ke dalam ~/.claude/settings.json, dengan membuat sandaran fail terlebih dahulu, ia memasang kemahiran /compartmentalize di bawah ~/.claude/skills/, dan menambah blok terurus ke ~/.claude/CLAUDE.md yang memberitahu ejen bahawa Compartment menggantikan memori berasaskan fail yang digunakannya sebelum ini. Sahkan kedua-dua bahagian:
compartment hook status
compartment recentUntuk mendaftarkan pelayan secara manual pula:
claude mcp add --scope user compartment -- \
compartment --vault ~/.compartment/memory.vault --caller claude-code serveMana-mana hos lain yang berupaya menjalankan MCP boleh menggunakan pelayan yang sama dengan nama pemanggilnya sendiri.
{ "mcpServers": { "compartment": {
"command": "compartment",
"args": ["--vault", "/path/to/memory.vault",
"--caller", "your-agent-name", "serve"] } } }Berikan setiap hos nilai --caller yang berbeza. Nilai ini merupakan label yang direkodkan dalam log audit dan kunci yang digunakan untuk pemberian namespace, jadi nama yang dikongsi akan menjadikan kedua-duanya tidak berguna.
Jika Claude Code telah menulis fakta ke dalam fail memorinya sendiri, compartment import-claude --dry-run akan menunjukkan perkara yang akan dipindahkan sebelum sebarang pemindahan berlaku. Baca apa yang disimpan oleh Claude Code dalam fail memorinya terlebih dahulu, kerana mengimport nota selama setahun ke dalam vault baharu adalah punca stor memori dipenuhi dengan perkara yang tidak sepatutnya disimpan.
Seberapa pantas vault tempatan
Ini adalah angka yang diterbitkan oleh projek tersebut untuk vault bersaiz peribadi. Angka ini datang daripada dokumentasi projek, bukan daripada ujian yang dijalankan di sini.
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 memori dinyatakan pada 40 ms, dan carian vektor merentasi dua puluh ribu rekod pada 0.68 ms untuk persentil ke-95. Hujah projek untuk mengekalkan memori secara tempatan adalah berdasarkan aritmetik: satu perjalanan pergi-balik rangkaian ke API memori yang dihoskan sering kali menelan kos lebih tinggi daripada median 11.6 ms untuk carian hibrid penuh di sini.
Dua perincian reka bentuk menjelaskan angka carian tersebut. Di bawah dua puluh ribu rekod, Compartment membandingkan pertanyaan dengan setiap vektor, jadi recall adalah tepat mengikut binaan dan bukannya anggaran. Melebihi jumlah tersebut, ia bertukar kepada HNSW (hierarchical navigable small world), iaitu indeks anggaran yang mengorbankan sedikit recall demi kelajuan. Vault tersebut juga merekodkan hash SHA-256 bagi model embedding dan enggan dibuka di bawah model yang berbeza, kerana vektor daripada dua model yang berbeza boleh dibandingkan tanpa sebarang ralat muncul, dan skor yang dikembalikan tidak membawa sebarang makna.
Sandaran, dan salinan yang masih boleh dibuka pada tahun hadapan
Vault yang dikunci merupakan satu fail mudah alih, jadi memindahkannya bermakna membuat salinan.
compartment lock
scp ~/.compartment/memory.vault other-machine:
compartment --vault memory.vault unlockKunci fail tersebut terlebih dahulu. Menyalin fail semasa ejen sedang menulis boleh menyebabkan entri jurnal terpotong di tengah-tengah proses penambahan, dan walaupun pembingkaian CRC membolehkan pembaca melangkau serpihan hujung tersebut, memori di dalamnya akan hilang. compartment lock --sign memeterai fail dengan manifest Ed25519, supaya mesin penerima boleh mengesahkan salinan tersebut sampai dalam keadaan sempurna tanpa perlu memegang kata laluan.
Oleh kerana fail tersebut sudah dimeterai, storan awan biasa merupakan tempat yang boleh diterima untuk menyimpannya. Inilah titik di mana penyulitan semasa rehat (encryption at rest) memberikan pulangan secara langsung: sasaran sandaran tidak akan melihat sebarang memori.
Dua amaran. Proses shredding tidak mencapai sandaran, jadi rekod yang anda musnahkan secara kriptografi hari ini masih boleh dibaca dalam salinan minggu lepas oleh sesiapa sahaja yang mempunyai kata laluan minggu lepas. Dan compartment export --plaintext menulis keseluruhan vault tanpa penyulitan, yang merupakan alat yang betul untuk migrasi ke sistem lain tetapi fail yang salah untuk ditinggalkan di dalam ~/Downloads.
Simpan beberapa salinan sahaja dan letakkan tarikh padanya. Storan memori akan menjadi liabiliti apabila tiada sesiapa yang membersihkannya, yang merupakan hujah dalam mengapa memori ejen yang lapuk merosakkan proses perolehan secara senyap.
Pengendalian kunci, putaran, dan faktor kedua
compartment rekey
compartment 2fa enable
compartment 2fa statusrekey menukar frasa laluan dengan membungkus semula kunci induk dalam keyslot fail semasa. Salinan lama mengekalkan frasa laluan lama, kerana bait tersebut telah dimeterai sebelum perubahan dibuat dan tiada proses yang mengubahnya semula. Lakukan putaran pada salinan tersebut juga, atau terima hakikat bahawa frasa laluan yang telah dibersarakan masih boleh membuka sesuatu.
2fa enable menambah fail kunci sebagai faktor kedua, yang digabungkan dengan frasa laluan semasa derivasi kunci, supaya kedua-duanya diperlukan untuk membuka vault. Ini juga menggandakan bilangan perkara yang boleh anda hilangkan. Simpan fail kunci di luar mesin yang menyimpan vault tersebut.
Untuk skrip dan CI (integrasi berterusan), frasa laluan boleh dihantar melalui pemboleh ubah persekitaran COMPARTMENT_PASSPHRASE, dan unlock --passphrase-stdin membacanya daripada paip (pipe). Utamakan penggunaan paip. Pemboleh ubah persekitaran boleh dibaca oleh proses lain yang dimiliki oleh pengguna yang sama, dan ia cenderung untuk muncul dalam log kerja.
Sejarah audit dirantai menggunakan hash, dan compartment audit verify menyemak rantaian tersebut serta melaporkan pautan pertama yang rosak. Jalankan arahan ini selepas sebarang pemulihan (restore), kerana pada waktu itulah fail yang terpotong secara senyap akan dikesan.
Apa yang berlaku apabila anda kehilangan frasa laluan
Tiada apa-apa yang berlaku, dan itulah reka bentuknya. Tiada tetapan semula, tiada frasa pemulihan, dan tiada alamat untuk dihubungi, kerana tiada salinan kunci wujud di luar ingatan anda dan fail kunci pilihan anda. Bilik kebal (vault) tersebut kekal sebagai fail yang mengandungi bait yang kelihatan rawak.
Oleh itu, pelan pemulihan bukanlah pelan untuk bilik kebal tersebut. Ia adalah pelan untuk frasa laluan anda. Rekodkannya dalam pengurus kata laluan pada hari anda menjalankan compartment init. Kemudian ujinya: kunci bilik kebal tersebut, buka kuncinya menggunakan hanya apa yang anda tulis, dan biarkan ejen mula mengisinya selepas ia berjaya dibuka.
Kompartmen atau pelayan memori
Kompartmen direka bentuk sebagai mesin tunggal. Perkongsian bermaksud menyalin fail yang dikunci, atau mengeksport dan mengimport, dan tiada penulis serentak. Oleh itu, komputer riba dan stesen kerja yang menghala ke fail yang sama akan menimpa kerja satu sama lain.
Apabila beberapa mesin memerlukan memori yang sama pada masa yang sama, itu adalah masalah pelayan. Pelayan memori Mem0 yang dihoskan sendiri pada VPS menjawab masalah tersebut: satu titik akhir, banyak klien, dan memori yang kekal walaupun komputer riba dimatikan. Kosnya perlu dinyatakan dengan jelas. Pelayan tersebut menjalankan proses yang boleh membaca data yang disimpannya, jadi model ancaman anda kini merangkumi VPS tersebut dan sesiapa sahaja yang boleh mencapai API-nya.
Pilih berdasarkan kehilangan yang anda benar-benar takuti. Jika ia adalah komputer riba yang dicuri atau vendor yang membaca nota anda, peti simpanan tempatan yang disulitkan adalah jawapan yang lebih kukuh. Jika ia adalah ejen yang melupakan segala-galanya sebaik sahaja anda menukar mesin, maka pelayan adalah jawapannya.
FAQ
Apakah yang sebenarnya dilindungi oleh penyulitan Compartment?
Ia melindungi fail tersebut. Vault dimeterai dengan XChaCha20-Poly1305, keyslot-nya dibalut dengan Argon2id, dan vektor embedding juga disulitkan, jadi cakera yang dicuri atau sandaran lama hanya akan menghasilkan bait yang tidak boleh dibaca. Ia tidak melindungi vault yang tidak berkunci pada mesin yang sedang berjalan, kerana kunci induk berada dalam RAM semasa vault terbuka, dan ia tidak mengawal tindakan ejen terhadap memori selepas fungsi recall mengembalikannya sebagai teks biasa (plaintext).
Jika Compartment berada di luar talian, adakah memori saya kekal peribadi daripada penyedia model saya?
Hanya sehingga ia dipanggil semula (recalled). Proses penyimpanan dan carian berlaku tanpa rangkaian, dan model embedding berjalan secara setempat, jadi tiada data yang meninggalkan mesin semasa proses penulisan. Semasa proses bacaan, ejen menerima teks biasa, dan jika ejen tersebut merupakan model yang dihoskan, memori itu akan memasuki prompt dan dihantar kepada penyedia seperti bahagian lain dalam tetingkap konteks. Jangan sesekali menyimpan kelayakan (credential) sebagai memori.
Apakah yang berlaku jika saya kehilangan frasa laluan Compartment saya?
Vault tersebut tidak boleh dipulihkan, secara sengaja. Compartment tidak menjana sebarang seed atau frasa pemulihan, dan tidak menyimpan sebarang kelayakan yang anda sendiri tidak pegang, jadi tiada apa yang boleh ditetapkan semula. Simpan frasa laluan dalam pengurus kata laluan, pastikan sebarang fail kunci 2FA disimpan di luar mesin yang menyimpan vault tersebut, dan pastikan anda boleh membuka kunci salinan sebelum vault itu menyimpan sebarang data penting yang anda tidak mahu kehilangan.
Bolehkah dua mesin berkongsi satu vault Compartment?
Tidak pada masa yang sama. Vault yang berkunci merupakan satu fail mudah alih tunggal, dan laluan yang didokumenkan adalah dengan menguncinya, menyalinnya, kemudian membukanya pada mesin lain dengan --vault. Tiada akses serentak, jadi dua mesin yang menulis ke satu fail akan menyebabkan kehilangan memori. Jalankan pelayan memori (memory server) apabila anda memerlukan fungsi tersebut.