Compartment এজেন্ট মেমোরি এনক্রিপশন কীভাবে কাজ করে
Compartment টুলটি কীভাবে আপনার লোকাল মেশিনে এজেন্ট মেমোরি এনক্রিপ্ট করে রাখে তা জানুন। এর থ্রেট মডেল, অফলাইন সুরক্ষা এবং পাসফ্রেজ হারিয়ে গেলে কী ঘটবে তার বিস্তারিত এখানে দেখুন।
Compartment যা ভিন্নভাবে করে
Compartment হলো একটি এজেন্ট মেমোরি স্টোর, যা প্রতিটি রেকর্ডকে সেই মেশিনে এনক্রিপ্ট করে রাখে যেখানে এটি তৈরি হয়েছে এবং এটি কখনোই কোনো নেটওয়ার্ক সার্ভারের সাথে যোগাযোগ করে না। দুটি বৈশিষ্ট্য একে এজেন্ট মেমোরি ফিল্ডের অন্যান্য টুল থেকে আলাদা করে। এর ভল্ট হলো একটি সিল করা ফাইল যা শুধুমাত্র আপনার পাসফ্রেজ দিয়ে খোলা যায়, এবং এমবেডিং ধাপটি লোকালি সম্পন্ন হয়, তাই কোনো মেমোরির টেক্সট ভেক্টরে রূপান্তরের জন্য কোথাও পাঠানো হয় না। 10 আগস্ট 2026 তারিখে ভার্সন 4.6.0 রিলিজ করা হয়েছে, এর লাইসেন্স হলো Apache-2.0, এবং এটি PyPI থেকে ইনস্টল করা যায়।
এটি একটি থ্রেট মডেল দাবি, তাই এই নির্দেশিকা এটিকে সেই হিসেবেই বিবেচনা করে। এনক্রিপশন অ্যাট রেস্ট এবং অফলাইন ডিজাইন নির্দিষ্ট কিছু বিষয়কে সুরক্ষা দেয়। তবে এগুলো অন্যান্য বিষয়কে উন্মুক্ত রাখে, আর সেই ফাঁকগুলো থেকেই মূলত ডে-টু (day two) সমস্যাগুলো তৈরি হয়।
এই নির্দেশিকাটি 11 আগস্ট 2026 তারিখে পড়া প্রজেক্টের নিজস্ব ডকুমেন্টেশন এবং রিলিজ নোট অনুসরণ করে। Compartment একটি ডেস্কটপ অ্যাপ্লিকেশন সরবরাহ করে, যার মধ্যে macOS-এ মেনু বার আইটেম এবং Windows-এ নোটিফিকেশন এরিয়া আইকন থাকে, পাশাপাশি এর কমান্ড লাইন টুলও রয়েছে। একটি অটোমেটেড কন্টেইনার থেকে পাসফ্রেজ প্রম্পট নিয়ন্ত্রণ করা সম্ভব নয়। নিচে যা বর্ণিত হয়েছে তা ডকুমেন্ট করা আচরণ হিসেবে গণ্য করুন, এখানে পরিমাপ করা আচরণ হিসেবে নয়। কোনো গুরুত্বপূর্ণ কাজে ব্যবহারের আগে এটি একটি অতিরিক্ত মেশিনে চালিয়ে পরীক্ষা করে নিন।
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 প্রতিটি অনুমানকে ব্যয়বহুল করে তোলে। কিন্তু এটি এমন পাসওয়ার্ডকে রক্ষা করতে পারে না যা কোনো ওয়ার্ড লিস্টে বা শব্দতালিকায় রয়েছে।
একটি নির্দিষ্ট রিলিজ থেকে Compartment ইনস্টল করা
Compartment-এর জন্য Python 3.11 বা তার পরবর্তী সংস্করণ প্রয়োজন। প্রকল্পটি দ্রুত পরিবর্তিত হয়, 10 আগস্ট 2026 পর্যন্ত PyPI-তে এর ত্রিশটি সংস্করণ প্রকাশিত হয়েছে। তাই ইনস্টল করার দিন যে সংস্করণটি বর্তমান রয়েছে তা গ্রহণ না করে একটি নির্দিষ্ট সংস্করণ পিন (pin) করে নিন।
python3 --version
pip install "compartment==4.6.0"
compartment --version
compartment initcompartment --version কমান্ডটি আপনার পিন করা সংস্করণটি প্রদর্শন করবে। যদি শেল compartment: command not found উত্তর দেয়, তবে বুঝতে হবে ইনস্টলেশন ডিরেক্টরি আপনার PATH-এ নেই। বেশিরভাগ সিস্টেমে এই ডিরেক্টরিটি হলো ~/.local/bin। pipx install compartment==4.6.0 এবং uv tool install compartment==4.6.0 নিজস্ব পাথ ম্যানেজ করার মাধ্যমে এই সমস্যাটি এড়িয়ে চলে।
compartment init কমান্ডটি দুইবার পাসফ্রেজ চাইবে এবং কোনো কিছু প্রদর্শন করবে না। সেই পাসফ্রেজটিই একমাত্র চাবিকাঠি। প্রকল্পটি কোনো পাসওয়ার্ড বা রিকভারি ফ্রেজ তৈরি করে না, যা ইচ্ছাকৃতভাবেই করা হয়েছে: সফটওয়্যারটির কাছে এমন কোনো ক্রেডেনশিয়াল নেই যা আপনার কাছে নেই।
কোনো কিছু এর সাথে যুক্ত করার আগে ফলাফলটি যাচাই করে নিন।
compartment statusএকটি সচল ভল্ট (vault) আনলক অবস্থায় থাকার কথা জানায়। যদি এটি লকড দেখায়, তবে compartment unlock চালান এবং পাসফ্রেজটি দিন। রিস্টার্ট করলে এটি আবার লক হয়ে যায়, কারণ এটি খোলা রাখার ক্রেডেনশিয়ালটি প্রতি বুট-এর গোপন তথ্যের ওপর নির্ভর করে। macOS-এ, compartment unlock --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 তার মেমরি ফাইলে কী রাখে তা পড়ুন, কারণ এক বছরের নোট একটি নতুন ভল্টে ইমপোর্ট করলে মেমরি স্টোর অপ্রয়োজনীয় তথ্যে পূর্ণ হয়ে যেতে পারে।
একটি লোকাল ভল্ট কতটা দ্রুত
প্রকল্পটি ব্যক্তিগত আকারের ভল্টের জন্য এই পরিসংখ্যানগুলো প্রকাশ করে। এগুলো তাদের ডকুমেন্টেশন থেকে নেওয়া, এখানে চালানো কোনো পরীক্ষা থেকে নয়।
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
}
]একটি মেমোরি সংরক্ষণ করতে 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 বা একটি মেমোরি সার্ভার
Compartment মূলত একটি একক মেশিনের জন্য ডিজাইন করা হয়েছে। ফাইল শেয়ার করার অর্থ হলো লক করা ফাইলটি কপি করা অথবা এক্সপোর্ট ও ইমপোর্ট করা। এখানে একই সাথে একাধিক রাইটার কাজ করতে পারে না, তাই একটি ল্যাপটপ এবং একটি ওয়ার্কস্টেশন যদি একই ফাইলের দিকে নির্দেশ করা থাকে, তবে তারা একে অপরের কাজ ওভাররাইট করে ফেলবে।
যখন একাধিক মেশিনের একই সময়ে একই মেমোরি প্রয়োজন হয়, তখন সেটি একটি সার্ভার সংক্রান্ত সমস্যা। একটি VPS-এ self-hosted Mem0 মেমোরি সার্ভার এর সমাধান দেয়: একটি এন্ডপয়েন্ট, অনেক ক্লায়েন্ট এবং এমন মেমোরি যা ল্যাপটপের চেয়েও দীর্ঘস্থায়ী। এর খরচ স্পষ্টভাবে উল্লেখ করা প্রয়োজন। সেই সার্ভারটি এমন একটি প্রসেস চালায় যা তার সংরক্ষিত ডেটা পড়তে পারে, তাই আপনার থ্রেট মডেলে এখন VPS এবং এর API-তে প্রবেশাধিকার থাকা যে কেউ অন্তর্ভুক্ত।
আপনি আসলে যে ক্ষতির ভয় পান, তার ওপর ভিত্তি করে নির্বাচন করুন। যদি সেটি চুরি হওয়া ল্যাপটপ বা আপনার নোট পড়ে ফেলা কোনো ভেন্ডর হয়, তবে এনক্রিপ্ট করা লোকাল ভল্টই শক্তিশালী সমাধান। আর যদি সমস্যাটি এমন হয় যে আপনি মেশিন পরিবর্তন করলেই সবকিছু ভুলে যাচ্ছেন, তবে সার্ভারই সঠিক সমাধান।
FAQ
Compartment-এর এনক্রিপশন আসলে কী সুরক্ষা দেয়?
এটি ফাইলটিকে সুরক্ষিত রাখে। ভল্টটি XChaCha20-Poly1305 দিয়ে সিল করা থাকে, এর কি-স্লটগুলো (keyslots) Argon2id দিয়ে র্যাপ করা থাকে এবং এমবেডিং ভেক্টরগুলোও এনক্রিপ্ট করা থাকে। ফলে চুরি হওয়া ডিস্ক বা পুরনো ব্যাকআপ থেকে কোনো কিছুই পড়া সম্ভব নয়। এটি চলমান মেশিনে আনলক করা ভল্টকে সুরক্ষা দেয় না, কারণ ভল্ট খোলা থাকা অবস্থায় মাস্টার কি (master key) র্যামে (RAM) থাকে। এছাড়া, রিকল (recall) করার পর এজেন্ট প্লেইনটেক্সট হিসেবে মেমোরি পাওয়ার পর কী করবে, তা এটি নিয়ন্ত্রণ করে না।
Compartment অফলাইনে থাকলে আমার মেমোরিগুলো কি আমার মডেল প্রোভাইডারের কাছ থেকে গোপন থাকে?
শুধুমাত্র রিকল করার আগ পর্যন্ত। মেমোরি সংরক্ষণ এবং অনুসন্ধান নেটওয়ার্ক ছাড়াই ঘটে এবং এমবেডিং মডেলটি লোকালি চলে, তাই লেখার সময় কোনো তথ্য মেশিন থেকে বাইরে যায় না। পড়ার সময় এজেন্ট প্লেইনটেক্সট পায়। যদি সেই এজেন্টটি একটি হোস্ট করা মডেল হয়, তবে মেমোরিটি প্রম্পটে প্রবেশ করে এবং কনটেক্সট উইন্ডোর বাকি অংশের মতোই প্রোভাইডারের কাছে চলে যায়। কোনো ক্রেডেনশিয়াল (credential) কখনোই মেমোরি হিসেবে সংরক্ষণ করবেন না।
আমার Compartment পাসফ্রেজ হারিয়ে ফেললে কী হবে?
ভল্টটি পুনরুদ্ধার করা অসম্ভব, এটি ইচ্ছাকৃতভাবেই করা হয়েছে। Compartment কোনো সিড (seed) বা রিকভারি ফ্রেজ তৈরি করে না এবং আপনার কাছে নেই এমন কোনো ক্রেডেনশিয়াল এটি ধারণ করে না, তাই রিসেট করার কোনো উপায় নেই। পাসফ্রেজটি একটি পাসওয়ার্ড ম্যানেজারে রাখুন, 2এফএ (2FA) কি-ফাইলটি ভল্ট রাখা মেশিন থেকে আলাদা রাখুন এবং ভল্টে গুরুত্বপূর্ণ কিছু রাখার আগে নিশ্চিত হয়ে নিন যে আপনি একটি কপি আনলক করতে পারছেন।
দুটি মেশিন কি একটি Compartment ভল্ট শেয়ার করতে পারে?
একই সময়ে নয়। একটি লক করা ভল্ট একটি একক পোর্টেবল ফাইল। এর নিয়ম হলো ভল্টটি লক করা, কপি করা এবং তারপর অন্য মেশিনে --vault দিয়ে আনলক করা। এতে কোনো কনকারেন্ট অ্যাক্সেস (concurrent access) নেই, তাই দুটি মেশিন একই ফাইলে লিখতে গেলে মেমোরি হারিয়ে যাবে। যখন আপনার এমন প্রয়োজন হবে, তখন একটি মেমোরি সার্ভার চালান।