Compartment এজেন্ট মেমোরি এনক্রিপশন কীভাবে কাজ করে
Compartment টুলটি কীভাবে আপনার লোকাল মেশিনে এজেন্ট মেমোরি এনক্রিপ্ট করে রাখে তা জানুন। এর থ্রেট মডেল, অফলাইন সুরক্ষা এবং পাসফ্রেজ হারিয়ে গেলে কী ঘটবে তার বিস্তারিত এখানে দেখুন।
Compartment যা ভিন্নভাবে করে
Compartment একটি agent memory store। এটি প্রতিটি record যে মেশিনে তৈরি হয়, সেই মেশিনেই encrypted রাখে এবং কখনও কোনো network service-এর সঙ্গে যোগাযোগ করে না। দুটি বৈশিষ্ট্য এটিকে agent memory ক্ষেত্রের অন্যান্য সমাধান থেকে আলাদা করে। Vault-টি একটি sealed file, যা শুধু আপনার passphrase দিয়ে খোলা যায়। Embedding ধাপটি local-এ চলে, তাই কোনো memory-এর text vector-এ রূপান্তরের জন্য কোথাও পাঠানো হয় না। Version 4.6.0 প্রকাশিত হয়েছিল 10 August 2026-এ। Licence হলো Apache-2.0, এবং এটি PyPI থেকে install করা যায়। পরে আরও release এসেছে। 12 October 2026 অনুযায়ী PyPI-এর latest version হলো 4.11.0, যা 30 September 2026-এ প্রকাশিত হয়েছিল। এই guide-এ 4.6.0 version-এই স্থির থাকা হয়েছে।
এটি একটি threat model-এর দাবি। তাই এই guide-এ এটিকে সেই হিসেবেই বিবেচনা করা হয়েছে। At-rest encryption এবং offline design নির্দিষ্ট কিছু ঝুঁকি থেকে সুরক্ষা দেয়। অন্য কিছু বিষয় সুরক্ষিত থাকে না। দ্বিতীয় দিনের সমস্যাগুলো সেই ফাঁকেই দেখা দেয়।
এই guide-এ project-এর 4.6.0 version-এর নিজস্ব documentation অনুসরণ করা হয়েছে। এটি সর্বশেষ 12 October 2026-এ আবার পড়ে যাচাই করা হয়েছিল। Compartment একটি desktop application, macOS-এ menu bar item এবং Windows-এ notification area icon সরবরাহ করে। এর পাশাপাশি command line tool-ও আছে। Automated container থেকে passphrase prompt পরিচালনা করা যায় না। তাই নিচের বিষয়গুলোকে এখানে মাপা আচরণ হিসেবে নয়, documentation-এ বর্ণিত আচরণ হিসেবে বিবেচনা করুন। কোনো বাস্তব data দেওয়ার আগে spare machine-এ এটি চালিয়ে দেখুন।
Encryption at rest আসলে কী সুরক্ষা দেয়
ভল্টটি XChaCha20-Poly1305 নামক একটি AEAD (authenticated encryption with associated data) সাইফার দিয়ে সিল করা থাকে। মাস্টার কি (master key) ধারণকারী কি-স্লটগুলো Argon2id দিয়ে র্যাপ করা হয়, যা একটি পাসওয়ার্ড হ্যাশিং ফাংশন এবং এটি ধীরগতিতে কাজ করার ও প্রচুর মেমোরি ব্যবহারের জন্য তৈরি। এর ফলে দুটি বিষয় নিশ্চিত হয়। চুরি হওয়া ডিস্ক, পুরনো ব্যাকআপ বা সাপোর্ট টিকেটের সাথে সংযুক্ত ফাইলের একটি কপি কেবল অর্থহীন বাইট ছাড়া আর কিছুই নয়। এছাড়া, ফাইল খোলার সময় একটি বিটও পরিবর্তিত হলে তা অথেন্টিকেশনে ব্যর্থ হয়, ফলে ডেটা করাপশন হলে তা ভুল উত্তরের পরিবর্তে একটি স্পষ্ট ত্রুটি হিসেবে ধরা পড়ে।
এম্বেডিং ভেক্টরগুলোও এনক্রিপ্ট করা থাকে, যা শোনার চেয়েও বেশি গুরুত্বপূর্ণ। একটি এম্বেডিং কোনো হ্যাশ নয়। এম্বেডিং ইনভার্সন নিয়ে গবেষণায় দেখা গেছে যে, শুধুমাত্র ভেক্টর থেকেই মূল টেক্সটের পাঠযোগ্য অংশ পুনরুদ্ধার করা সম্ভব। তাই এনক্রিপ্ট করা ডেটাবেসের পাশে একটি প্লেইনটেক্সট ভেক্টর ইনডেক্স রাখা মানে ডেটাবেসটি খোলা রাখার মতোই ঝুঁকিপূর্ণ। Compartment ডিস্কে কোনো প্লেইনটেক্সট ইনডেক্স লেখে না।
ডিলিট করা মানেই হলো প্রকৃত ডিলিট। প্রতিটি রেকর্ডের নিজস্ব কি থাকে এবং compartment forget --shred সেই কি-টি ধ্বংস করে দেয়। ফলে অবশিষ্ট সাইফারটেক্সট অন্য কেউ, এমনকি আপনি নিজেও ডিক্রিপ্ট করতে পারবেন না। এটি ডেটাবেস ফাইল থেকে ডিলিট করা রো (row)-এর সাথে তুলনা করুন, যা সাধারণত কোনো কিছু দিয়ে ওভাররাইট না হওয়া পর্যন্ত ফ্রি পেজে পাঠযোগ্য অবস্থায় থেকে যায়।
অফলাইন থাকা হলো সুরক্ষার অন্য অর্ধেক। কোনো কিছুই আপলোড করা হয় না, তাই আপনার স্মৃতি ধারণ করার জন্য কোনো ভেন্ডর অ্যাকাউন্ট নেই এবং এমন কোনো API key-ও নেই যা ফাঁস হতে পারে।
Compartment যা সুরক্ষা দেয় না
এই দাবিটি ভল্টের সীমানা পর্যন্ত কার্যকর, এবং সেই সীমানা যতটা মনে হয় তার চেয়ে অনেক কাছে।
এজেন্ট প্লেইনটেক্সট পড়তে পারে। Recall মেমোরি ডিক্রিপ্ট করে টেক্সটটি এজেন্টের হাতে তুলে দেয়। যদি সেই এজেন্ট একটি hosted মডেল হয়, তবে মেমোরিটি পরবর্তী প্রম্পটের ভেতরে মডেল প্রোভাইডারের কাছে চলে যায়, ঠিক যেমন কনটেক্সট উইন্ডোর অন্য সবকিছু যায়। Encryption at rest ফাইলটিকে সুরক্ষা দেয়। এটি রিট্রিভাল বা তথ্য পুনরুদ্ধার প্রক্রিয়াকে সুরক্ষা দেয় না। তাই AI এজেন্টের কাছে গোপন তথ্য না রাখা-এর নিয়মগুলো শিথিল হয় না, যদিও স্টোরটি এনক্রিপ্ট করা থাকে: মেমোরি হিসেবে সেভ করা একটি পাসওয়ার্ড মানেই হলো এমন একটি পাসওয়ার্ড যা আপনি স্বয়ংক্রিয়ভাবে প্রম্পটে পেস্ট করার ব্যবস্থা করেছেন।
চলমান মেশিনে আনলক করা ভল্ট খোলা থাকে। প্রজেক্টের সিকিউরিটি নোটে এটি স্পষ্টভাবে বলা আছে। ভল্ট আনলক থাকা অবস্থায় মাস্টার কি এবং ওয়ার্কিং সেট RAM-এ থাকে। Python গ্যারান্টি দিতে পারে না যে বাফারটি মুছে ফেলা হয়েছে, এবং সোয়াপ বা হাইবারনেশন ইমেজ সেই মেমোরিকে ডিস্কে লিখে ফেলতে পারে। আপনার ইউজার হিসেবে চলমান ম্যালওয়্যারের সাইফার ভাঙার প্রয়োজন হয় না, কারণ এটি সরাসরি আনলক করা ভল্টকে তথ্য জিজ্ঞাসা করতে পারে।
কলারের পরিচয় ঘোষণামূলক। নেমস্পেসগুলো প্রতি কলার অনুযায়ী সীমাবদ্ধ করা যেতে পারে, কিন্তু কলারের নাম হোস্ট প্রসেস থেকে আসে। তাই যে হোস্ট তার নাম সম্পর্কে মিথ্যা বলে, সেটি তার দাবি করা সুবিধাগুলোই পেয়ে যায়। নেমস্পেস পারমিশন একটি সাংগঠনিক বিষয়, কোনো প্রতিকূল লোকাল প্রোগ্রামের বিরুদ্ধে এটি কোনো সিকিউরিটি বাউন্ডারি বা নিরাপত্তা সীমানা নয়।
Shredding বা ধ্বংস করার প্রক্রিয়া কপিগুলোকে মুছে ফেলতে পারে না। forget --shred বর্তমান ফাইলের ভেতরের কি-টি ধ্বংস করে। তবে shred করার আগে নেওয়া কোনো ব্যাকআপে সেই রেকর্ডটি থেকে যায় এবং সেই দিনের পাসফ্রেজ দিয়ে তা খোলা সম্ভব।
একটি দুর্বল পাসফ্রেজ সব আলোচনার ইতি ঘটায়। Argon2id প্রতিটি অনুমানকে ব্যয়বহুল করে তোলে। কিন্তু এটি এমন পাসওয়ার্ডকে রক্ষা করতে পারে না যা কোনো ওয়ার্ড লিস্টে বা শব্দতালিকায় রয়েছে।
নির্দিষ্ট release থেকে Compartment install করুন
Compartment-এর জন্য Python 3.11 বা তার পরের version প্রয়োজন। Project-টি দ্রুত পরিবর্তিত হচ্ছে। 26 July থেকে 10 August 2026-এর মধ্যে PyPI-তে 23টি release এসেছে এবং 12 October 2026-এর মধ্যে এই সংখ্যা 35 হয়েছে। তাই install করার দিনের current version নেওয়ার বদলে version pin করুন।
python3 --version
pip install "compartment==4.6.0"
compartment --version
compartment initcompartment --version-এর output-এ pin করা version দেখানো উচিত। Shell যদি compartment: command not found উত্তর দেয়, install directory আপনার PATH-এ নেই। বেশিরভাগ system-এ সেই directory হলো ~/.local/bin। pipx install compartment==4.6.0 এবং uv tool install compartment==4.6.0 নিজেদের path নিজেরাই পরিচালনা করে, তাই এই সমস্যা এড়ানো যায়।
compartment init দুবার passphrase চাইবে এবং কোনো অক্ষর দেখাবে না। এই passphrase-ই একমাত্র key। Project কোনো password বা recovery phrase তৈরি করে না। এটি ইচ্ছাকৃত। Software-এর কাছে এমন কোনো credential থাকে না, যা আপনার কাছে নেই।
এর সঙ্গে অন্য কিছু যুক্ত করার আগে ফলাফল পরীক্ষা করুন।
compartment statusসুস্থ vault জানায় যে সেটি unlocked। যদি locked দেখায়, compartment unlock চালিয়ে passphrase দিন। Restart করলে vault আবার locked হয়ে যায়, কারণ এটিকে open রাখার credential একটি per-boot secret-এর ওপর নির্ভর করে। macOS-এ compartment unlock --keychain ব্যবহার করলে reboot-এর পরেও এটি চালু থাকে। এ ক্ষেত্রে credential system keychain-এ সংরক্ষিত হয়।
ডেটা আসলে যেখানে থাকে
ডিফল্ট ভল্ট হলো ~/.compartment/memory.vault। যেকোনো কমান্ডে --vault PATH ব্যবহার করে অথবা COMPARTMENT_VAULT এনভায়রনমেন্ট ভেরিয়েবলের মাধ্যমে অন্য কোনো লোকেশন নির্দেশ করুন।
সেই একটি ফাইলই হলো সম্পূর্ণ স্টোর। এটি একটি হেডার দিয়ে খোলে যাতে ফরম্যাট ভার্সন এবং Argon2id কি-স্লট থাকে, এরপর থাকে সিল করা পেলোড, এবং সবশেষে নতুন মেমোরি আসার সাথে সাথে যুক্ত হওয়া জার্নাল এন্ট্রিগুলো। প্রতিটি জার্নাল এন্ট্রি তার দৈর্ঘ্য এবং সেই দৈর্ঘ্যের একটি CRC (cyclic redundancy check) দিয়ে ঘেরা থাকে, যাতে ক্র্যাশের কারণে লেখা অসম্পূর্ণ হলে তা ডেটা হিসেবে পড়ার বদলে ট্রাঙ্কেট বা অসম্পূর্ণ এন্ট্রি হিসেবে শনাক্ত হয়। কমপ্যাকশন ভল্টটিকে সিরিয়ালাইজ করে, একটি অস্থায়ী ফাইলে লেখে, সেটিকে fsync করে এবং তারপর রিনেম করে মূল জায়গায় প্রতিস্থাপন করে; এর মানে হলো পাঠক কখনোই অর্ধেক লেখা ভল্ট দেখতে পায় না।
এর কার্যকর ফলাফল হলো: একটি ব্যাকআপ স্ক্রিপ্ট ঠিক একটি পাথ কপি করলেই হয়। অসুবিধাজনক ফলাফল হলো: আপনি এতে grep চালাতে পারবেন না এবং টেক্সট এডিটরে এটি মেরামত করতে পারবেন না। আপনি যদি এমন মেমোরি চান যা cat দিয়ে পড়া যায় এবং git-এ কমিট করা যায়, তবে Memmy-এর প্লেইন লোকাল মেমোরি ফাইলগুলো ঠিক তার বিপরীত সুবিধা দেয়। আপনি ল্যাপটপ চুরি হওয়া নিয়ে চিন্তিত নাকি টুল ভেঙে যাওয়া নিয়ে, তার ওপর ভিত্তি করে উভয় পদ্ধতিই যৌক্তিক।
compartment uninstall সফটওয়্যারটিকে মুছে ফেলে কিন্তু ভল্টটি রেখে দেয়। --purge শুধুমাত্র তখনই ব্যবহার করুন যখন আপনি নিশ্চিতভাবে এটি করতে চান।
এজেন্টের সাথে সংযুক্ত করা
একটি কমান্ডের মাধ্যমেই সমর্থিত ক্লায়েন্টকে সংযুক্ত করা যায়।
compartment integrate --list
compartment integrate claudeClaude Code-এর ক্ষেত্রে এটি একটি MCP (model context protocol) সার্ভার এন্ট্রি এবং PostToolUse হুক ~/.claude/settings.json-এ লিখে দেয়। এটি প্রথমে ফাইলটির ব্যাকআপ নেয়, ~/.claude/skills/-এর অধীনে একটি /compartmentalize স্কিল ইনস্টল করে এবং ~/.claude/CLAUDE.md-এ একটি ম্যানেজড ব্লক যোগ করে। এটি এজেন্টকে জানায় যে Compartment এখন তার পূর্বের ফাইল-ভিত্তিক মেমরির স্থলাভিষিক্ত হয়েছে। উভয় অংশ নিশ্চিত করুন:
compartment hook status
compartment recentম্যানুয়ালি সার্ভার রেজিস্টার করতে চাইলে:
claude mcp add --scope user compartment -- \
compartment --vault ~/.compartment/memory.vault --caller claude-code serveঅন্য যেকোনো MCP সমর্থিত হোস্ট একই সার্ভার ব্যবহার করতে পারে, তবে সেক্ষেত্রে নিজস্ব কলার নাম ব্যবহার করতে হবে।
{ "mcpServers": { "compartment": {
"command": "compartment",
"args": ["--vault", "/path/to/memory.vault",
"--caller", "your-agent-name", "serve"] } } }প্রতিটি হোস্টকে আলাদা --caller মান দিন। অডিট লগে এটিই লেবেল হিসেবে রেকর্ড হয় এবং নেমস্পেস গ্র্যান্টগুলো এই কী-এর বিপরীতে লেখা হয়, তাই একই নাম ব্যবহার করলে উভয়ই অকার্যকর হয়ে পড়বে।
যদি Claude Code ইতিমধ্যে তার নিজস্ব মেমরি ফাইলে তথ্য লিখে থাকে, তবে কোনো কিছু স্থানান্তর করার আগে compartment import-claude --dry-run কমান্ডটি চালিয়ে দেখুন কী কী স্থানান্তরিত হবে। প্রথমে Claude Code তার মেমরি ফাইলে কী রাখে তা পড়ুন, কারণ এক বছরের নোট একটি নতুন ভল্টে ইমপোর্ট করলে মেমরি স্টোর অপ্রয়োজনীয় তথ্যে পূর্ণ হয়ে যেতে পারে।
একটি লোকাল ভল্ট কতটা দ্রুত
প্রকল্পটি ব্যক্তিগত আকারের ভল্টের জন্য এই পরিসংখ্যানগুলো প্রকাশ করে। এগুলো তাদের ডকুমেন্টেশন থেকে নেওয়া, এখানে চালানো কোনো পরীক্ষা থেকে নয়।
এই চার্টের পেছনের ডেটা
[
{
"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
}
]একটি মেমোরি সংরক্ষণ করতে 40 ms সময় লাগে এবং বিশ হাজার রেকর্ডের মধ্যে ভেক্টর সার্চের ক্ষেত্রে 95তম পার্সেন্টাইলের জন্য সময় লাগে 0.68 ms। মেমোরি লোকাল রাখার পক্ষে প্রকল্পের যুক্তিটি গাণিতিক: একটি হোস্ট করা মেমোরি API-তে একবার নেটওয়ার্ক রাউন্ড ট্রিপের খরচ প্রায়শই এখানে একটি পূর্ণাঙ্গ হাইব্রিড সার্চের 11.6 ms মিডিয়ান সময়ের চেয়ে বেশি হয়।
দুটি ডিজাইন ডিটেইল এই সার্চের সংখ্যাগুলো ব্যাখ্যা করে। বিশ হাজার রেকর্ডের নিচে, Compartment প্রতিটি ভেক্টরের সাথে কুয়েরি তুলনা করে, তাই রিকল (recall) আনুমানিক হওয়ার পরিবর্তে গঠনগতভাবে নিখুঁত থাকে। এর উপরে এটি HNSW (hierarchical navigable small world)-এ সুইচ করে, যা একটি আনুমানিক ইনডেক্স এবং এটি গতির বিনিময়ে সামান্য রিকল কমিয়ে দেয়। ভল্টটি এমবেডিং মডেলের SHA-256 হ্যাশও রেকর্ড করে রাখে এবং ভিন্ন কোনো মডেলের অধীনে এটি খুলতে অস্বীকার করে। কারণ দুটি ভিন্ন মডেলের ভেক্টর কোনো ত্রুটি ছাড়াই তুলনা করা সম্ভব, কিন্তু সেক্ষেত্রে প্রাপ্ত স্কোরগুলোর কোনো অর্থ থাকে না।
ব্যাকআপ এবং এমন কপি যা আপনি আগামী বছরও খুলতে পারবেন
একটি লক করা vault হলো একটি পোর্টেবল ফাইল, তাই এটিকে স্থানান্তর করা মানেই একটি কপি তৈরি করা।
compartment lock
scp ~/.compartment/memory.vault other-machine:
compartment --vault memory.vault unlockপ্রথমে এটিকে লক করুন। এজেন্ট যখন লিখছে সেই সময়ে কপি করলে তা জার্নাল এন্ট্রির মাঝপথে আটকে যেতে পারে। যদিও CRC ফ্রেমিং রিডারকে সেই অসম্পূর্ণ অংশটি এড়িয়ে যেতে সাহায্য করে, তবুও সেই মেমোরিটি হারিয়ে যায়। compartment lock --sign ফাইলটিকে একটি Ed25519 ম্যানিফেস্ট দিয়ে সিল করে দেয়, যাতে রিসিভিং মেশিন পাসফ্রেজ ছাড়াই যাচাই করতে পারে যে কপিটি অক্ষত অবস্থায় পৌঁছেছে।
যেহেতু ফাইলটি আগেই সিল করা থাকে, তাই সাধারণ ক্লাউড স্টোরেজ এর জন্য গ্রহণযোগ্য জায়গা। এখানেই encryption at rest সরাসরি সুবিধা দেয়: ব্যাকআপ টার্গেট কখনোই কোনো মেমোরি দেখতে পায় না।
দুটি সতর্কতা। Shredding ব্যাকআপ পর্যন্ত পৌঁছায় না, তাই আপনি আজ যে রেকর্ডটি ক্রিপ্টো-শ্রেড করেছেন, তা গত সপ্তাহের কপিতে যে কারো কাছে গত সপ্তাহের পাসফ্রেজ থাকলে পড়া সম্ভব। এবং compartment export --plaintext পুরো vault-কে আনএনক্রিপ্টেড অবস্থায় লেখে, যা অন্য কোনো সিস্টেমে মাইগ্রেট করার জন্য সঠিক টুল হলেও ~/Downloads-এ ফেলে রাখার জন্য ভুল ফাইল।
অল্প সংখ্যক কপি রাখুন এবং সেগুলোতে তারিখ দিন। একটি মেমোরি স্টোর যখন কেউ পরিষ্কার করে না, তখন তা দায়বদ্ধতায় পরিণত হয়। এটিই কেন পুরনো এজেন্টের মেমোরি নীরবে রিট্রিভাল নষ্ট করে-এর মূল যুক্তি।
কী হ্যান্ডলিং, রোটেশন এবং সেকেন্ড ফ্যাক্টর
compartment rekey
compartment 2fa enable
compartment 2fa statusrekey বর্তমান ফাইলের কি-স্লটে মাস্টার কী-কে পুনরায় র্যাপ (rewrap) করার মাধ্যমে পাসফ্রেজ পরিবর্তন করে। পুরনো কপিগুলোতে আগের পাসফ্রেজই থেকে যায়, কারণ সেই বাইটগুলো পরিবর্তনের আগেই সিল করা হয়েছিল এবং সেগুলোকে নতুন করে এডিট করার কোনো সুযোগ নেই। তাই কপিগুলোকেও রোটেশন করুন, অথবা মেনে নিন যে একটি বাতিল করা পাসফ্রেজ দিয়েও কোনো কিছু খোলা সম্ভব।
2fa enable সেকেন্ড ফ্যাক্টর হিসেবে একটি কি-ফাইল (keyfile) যুক্ত করে, যা কি ডেরিভেশনের সময় পাসফ্রেজের সাথে মিলিত হয়। ফলে ভল্ট খোলার জন্য উভয়ই প্রয়োজন। এটি আপনার হারিয়ে ফেলার মতো জিনিসের সংখ্যা দ্বিগুণ করে দেয়। ভল্ট যে মেশিনে আছে, সেখানে কি-ফাইলটি রাখবেন না।
স্ক্রিপ্ট এবং CI (continuous integration)-এর ক্ষেত্রে, পাসফ্রেজ COMPARTMENT_PASSPHRASE এনভায়রনমেন্ট ভেরিয়েবলের মাধ্যমে পাঠানো যেতে পারে, অথবা unlock --passphrase-stdin ব্যবহার করে পাইপ (pipe) থেকে পড়া যেতে পারে। পাইপ ব্যবহার করাই শ্রেয়। এনভায়রনমেন্ট ভেরিয়েবল একই ইউজারের মালিকানাধীন অন্যান্য প্রসেস দ্বারা পড়া সম্ভব এবং এটি প্রায়শই জব লগে থেকে যায়।
অডিট হিস্ট্রি হ্যাশ চেইন করা থাকে এবং compartment audit verify তা যাচাই করে প্রথম ভেঙে যাওয়া লিঙ্কটি রিপোর্ট করে। যেকোনো রিস্টোরের পর এটি চালান, কারণ তখনই নীরবে ট্রাঙ্কেট (truncate) হয়ে যাওয়া ফাইলগুলো ধরা পড়ে।
পাসফ্রেজ হারিয়ে ফেললে কী হয়
কিছুই হয় না, এবং এটিই এর মূল নকশা। এর কোনো রিসেট বা রিকভারি ফ্রেজ নেই, এবং যোগাযোগ করার কোনো ঠিকানাও নেই, কারণ আপনার স্মৃতি এবং ঐচ্ছিক keyfile ছাড়া এই কী-এর কোনো কপি কোথাও থাকে না। ভল্টটি কেবল এলোমেলো বাইটের একটি ফাইল হিসেবেই থেকে যায়।
তাই রিকভারি পরিকল্পনাটি ভল্টের জন্য নয়, বরং পাসফ্রেজটির জন্য। compartment init চালানোর দিনই এটি একটি পাসওয়ার্ড ম্যানেজারে লিখে রাখুন। এরপর এটি পরীক্ষা করুন: ভল্টটি লক করুন, শুধুমাত্র যা লিখে রেখেছেন তা ব্যবহার করে আনলক করুন, এবং এটি কাজ করার পর একটি এজেন্টকে এটি পূরণ করতে দিন।
Compartment নাকি memory server
Compartment নকশাগতভাবে single machine-এর জন্য তৈরি। একাধিক মেশিনে share করতে হলে locked file copy করতে হবে, অথবা export এবং import করতে হবে। একই মেশিনে একাধিক agent একসঙ্গে একটি vault ব্যবহার করতে পারে, কারণ একটি advisory file lock তাদের write operation ধারাবাহিকভাবে সম্পন্ন করায়। দুটি মেশিনের এক file-এ write করার বিষয়ে documentation-এ কিছু বলা নেই। তাই laptop এবং workstation-কে network share বা sync folder-এ থাকা একই vault-এর দিকে point করবেন না।
একই সময়ে একাধিক মেশিনের একই memory প্রয়োজন হলে সেটি server-এর সমস্যা। VPS-এ self-hosted Mem0 memory server এই সমস্যার সমাধান করে: একটি endpoint, অনেক client, এবং এমন memory যা laptop পরিবর্তন করলেও থাকে। এর খরচটি স্পষ্টভাবে বোঝা দরকার। Server এমন একটি process চালায়, যা নিজের সংরক্ষিত data পড়তে পারে। তাই আপনার threat model-এ এখন VPS এবং তার API-তে পৌঁছাতে পারে এমন প্রত্যেক ব্যক্তি অন্তর্ভুক্ত হয়।
আপনি আসলে কোন ক্ষতিকে বেশি ভয় পান, তার ভিত্তিতে পছন্দ করুন। যদি ভয়টি হয় stolen laptop বা vendor আপনার notes পড়ে ফেলবে, তাহলে encrypted local vault বেশি শক্তিশালী সমাধান। আর যদি ভয়টি হয় machine পরিবর্তন করলেই agent সবকিছু ভুলে যাবে, তাহলে server ব্যবহার করুন।
FAQ
Compartment-এর encryption আসলে কী সুরক্ষিত রাখে?
এটি file-টিকে সুরক্ষিত রাখে। Vault-টি XChaCha20-Poly1305 দিয়ে sealed থাকে, এর keyslot-গুলো Argon2id দিয়ে wrapped থাকে, এবং embedding vector-গুলোও encrypted থাকে। তাই stolen disk বা পুরোনো backup পেলেও সেগুলোতে পাঠযোগ্য data থাকে না। Running machine-এ unlocked vault-কে এটি সুরক্ষিত রাখে না, কারণ vault open থাকা অবস্থায় master key RAM-এ থাকে। Recall-এর পরে কোনো memory plaintext হিসেবে agent-এর কাছে ফিরে এলে agent সেটি কীভাবে ব্যবহার করবে, সেটিও এটি নিয়ন্ত্রণ করে না।
Compartment offline হলে কি আমার memory model provider-এর কাছ থেকে private থাকে?
শুধু recall হওয়ার আগ পর্যন্ত। Store এবং search কোনো network ছাড়াই সম্পন্ন হয় এবং embedding model local-এ চলে। তাই write করার সময় কিছুই machine-এর বাইরে যায় না। Read করার সময় agent plaintext পায়। সেই agent যদি hosted model হয়, তাহলে memory prompt-এ ঢুকে context window-এর বাকি অংশের মতো provider-এর কাছে পাঠানো হয়। কোনো credential কখনও memory হিসেবে store করবেন না।
Compartment-এর passphrase হারালে কী হবে?
Vault recover করা যাবে না। এটি ইচ্ছাকৃত। Compartment কোনো seed বা recovery phrase তৈরি করে না এবং আপনার কাছে নেই এমন কোনো credential নিজের কাছে রাখে না। তাই reset করার মতো কিছু নেই। Passphrase password manager-এ রাখুন। Vault সংরক্ষণকারী machine-এর বাইরে যেকোনো 2FA keyfile রাখুন। Vault-এ গুরুত্বপূর্ণ কিছু রাখার আগে একটি copy unlock করতে পারছেন কি না নিশ্চিত করুন।
দুটি machine কি একটি Compartment vault share করতে পারে?
একই সময়ে নয়। Locked vault একটি portable file। Documentation-এ বর্ণিত পদ্ধতি হলো vault lock করা, সেটি copy করা, তারপর --vault ব্যবহার করে অন্য machine-এ unlock করা। Documentation-এ advisory file lock-এর কথা বলা হয়েছে, যা শুধু একই machine-এ থাকা agent-গুলোর write operation ধারাবাহিকভাবে সম্পন্ন করে। দুটি machine-এর এক file-এ write করার বিষয়টি সেখানে আচ্ছাদিত নয়। তাই এই setup-কে memory হারানোর সম্ভাব্য উপায় হিসেবে বিবেচনা করুন। এ ধরনের প্রয়োজন হলে memory server চালান।