SuperOC: আপনার অ্যাজেন্টিক টুলের পারসিসটেন্ট মেমোরি স্ট্যাক
Quick Summary
# SuperOC: আপনার অ্যাজেন্টিক টুলের পারসিসটেন্ট মেমোরি স্ট্যাক২০২৬ সালের শুরু থেকে আমি অ্যাজেন্টিক কোডিং টুলগুলোতে প্রায় প্রত্যেকদিন সময় দেয়া শুরু করি - ওপেনকোড, ক্লড কোড, হারমিস অ্যাজেন্টসহ, বেশ ক
# SuperOC: আপনার অ্যাজেন্টিক টুলের পারসিসটেন্ট মেমোরি স্ট্যাক
২০২৬ সালের শুরু থেকে আমি অ্যাজেন্টিক কোডিং টুলগুলোতে প্রায় প্রত্যেকদিন সময় দেয়া শুরু করি -
প্রত্যেকটাই বেশ কাজের।
কিন্তু প্রথম কিছুক্ষণের জন্য। কয়েক ঘন্টা পর থেকে ধীরে ধীরে সেই অ্যাজেন্টগুলো মূল টপিক থেকে দূরে সরে যায়!
আমি বললামঃ "Remember, I prefer tabs over spaces in this project."
অ্যাজেন্টের উত্তরঃ "Got it. Using tabs."
৩০ মিনিট পরে…
আমি জিজ্ঞেস করলামঃ "Why did you just use spaces?"
অ্যাজেন্টের উত্তরঃ "I apologize for the oversight. Let me fix that."
এই ঘটনা, ২-১ বার হয় নি; প্রত্যেক সেশনেই একই জিনিস; একই সমস্যা!
তার ওপর যখন আপনি তাকে বলবেন, আপনার হাজার হাজার লাইনের কনটেক্সট মাথায় নিয়ে, অমুক-তমুক ইম্পোর্টেন্ট কাজ করতে - তখন কীভাবে বিশ্বাস করবেন, সে আপনার প্রত্যেকটা তথ্য, ইঞ্চি বাই ইঞ্চি, আসলেই মাথায় নিয়ে কাজ করেছে?
এই 'অ্যামনেসিয়া’ প্রায় প্রত্যেক অ্যাজেন্টের মধ্যেই দেখেছি। এই কারণেই, প্রত্যেকটা কনভার্সেশন আবার শূন্য থেকে শুরু করতে হয়।
আমিও সেই কারণেই ভাবছিলামঃ যদি আমি আমার নিজের অ্যাজেন্টকে বিশ্বাস করতে না পারি, কি মনে রাখা উচিত আর কি নিয়ে কাজ করা উচিত নয়; তাহলে আমি সেই অ্যাজেন্টকে কীভাবে আমার পার্সোনাল অ্যাসিসটেন্ট বলি?
আমরা বেশিরভাগই এই সমস্যার সমাধানের জন্য আরো লম্বা, আরো কঠিন, আরো নিয়মকানুন যুক্ত করে, আরো ভালো প্রম্পট করার চেষ্টা করি!
কিন্তু প্রত্যেক অ্যাজেন্টের ব্রেইন অর্থাৎ LLM -গুলো, কেবল প্রোব্যাবিলিস্টিক ম্যাশিন। প্রম্পট দিয়ে আপনি শুধু বাউন্ডারি দিতে পারবেন, জোর করতে পারবেন না! গ্যারান্টি দিয়ে বলতে পারবেন না, আসলেই সে এই নিয়ম মানবে কি না!
আর যখন আপনি একই নিয়মকানুন, হাজার প্রম্পটের সেশনে ব্যবহার করবেন - তখন তার হ্যালুসিনেশন তো হবেই, সে তো তখন তথ্যাদি ভুলে যাবেই!
তো এটা নিয়েই ভাবছিলাম আমি! সবসময় ব্রেইনে চলছে - প্রম্পট ছাড়া, আমার সাধ্যের ভেতরে, কীভাবে এটার সমাধান করা যায়!
ইউটিউবে একটা ডকুমেন্টারি দেখছিলাম, স্লাইম মোল্ড নিয়ে! স্লাইম মোল্ড, এমন এক ধরণের অর্গানিজম যাদের কোনো ব্রেইনই নেই; অথচ তারা শিকার করতে পারে, তারা চলাফেরা করতে পারে, তারা নাকি সমস্যার সমাধানও করতে পারে ইত্যাদি ইত্যাদি! ইউটিউবে সার্চ করলেই পেয়ে যাবেন! (পোস্টের ছবিটা)
স্লাইম মোল্ডের ডকুমেন্টারি দেখার সময় হুট করে মাথায় আসলো, আমি যদি অ্যাজেন্ট (ওপেনকোড) এর মেমোরি, LLM (ব্রেইন) থেকে বের করে নিয়ে আসি; অন্য আরেকটা জায়গা দিই, যেখানে শুধু মেমোরি থাকবে; তাহলে সেটা অ্যাজেন্টকেও মানতে হবে + ব্রেইনকেও মানতে হবে! আর দুজনই সেটা এক্সেস করতে পারবে কিন্তু সেটার বাইরে বেরোতে পারবে না!
তার মানে, স্ট্রাকচারটা অনেকটা এমন হবেঃ সুইচ অন্ করলাম → মেমোরি লোড হলো → অ্যাজেন্ট লোড হলো → ব্রেইন লোড হলো!
অর্থাৎ, মেমোরি এখন আর ব্রেইনের অংশ নয়!
ব্রেইনের অংশ না হলে, ভুলে যাওয়ারও সম্ভাবনা অনেক অনেক অল্প!
দ্যাটস দ্য আইডিয়া!
আর এই আইডিয়া থেকেই,
ধরুন আপনার একজন খুবই বুদ্ধিমান বন্ধু যে আপনাকে সব কাজেই সাহায্য করতে পারে!
কিন্তু সেই বন্ধুর একটা সমস্যাও রয়েছেঃ প্রত্যেকদিন সকালে সে ভুলে যায়, আগের দিন বা তার আগের সপ্তাহে বা তার আগের মাসে কি হয়েছিলো! সেজন্য আপনাকে, প্রত্যেকদিন সকালে, আবার সবকিছু শুরু থেকে বোঝানো লাগতো - আপনি কে, কি নিয়ে কাজ করছেন, কি চাইছেন আর কি চাইছেন না, কি পছন্দ করেন আর কি পছন্দ করেন না - সবকিছুই!
বর্তমানে যখন আমরা অ্যাজেন্টিক কোডিং টুলগুলো ব্যবহার করি বা ওভারঅল যেকোনো অ্যাজেন্টই ব্যবহার করি না কেন - এই একই সমস্যা ফেইস করতে হয়!
এখন ধরুন আপনি আপনার সব তথ্যাদি (কনটেক্সট) একটা কাগজে লিখে রাখলেন। প্রত্যেকদিন সকালে সেই বুদ্ধিমান বন্ধুকে সেটা পড়তে বলেন তার কাজ শুরু করার আগে। তারপর, সেই বন্ধু কথা বলা বা কাজ করা শুরু করে। আর দিন শেষে, আপনি শুধু আপডেট করেন - আজকের অতিরিক্ত কনটেক্সটটুকু!
এটাই
সেই এক টুকরো কাগজ হচ্ছে, এক্ষেত্রে একটা ফাইলঃ state.json
আর জোর করে প্রত্যেকদিন সেই ফাইল পড়ানোর কাজটা কে করবে, গ্যারান্টির সাথে?
কে আবার, অপারেটিং সিস্টেম!
পুরো প্রসেসটা হচ্ছে এমনঃ
সবার প্রথমে, এআই অ্যাজেন্ট লঞ্চ করার আগেই, একটা স্ক্রিপ্ট আপনার সম্পূর্ণ তথ্যাদি, আপনার আইডেন্টিটি, আপনার পছন্দ-অপছন্দ, এবং আপনার সম্পর্কে শেখা লার্নিংসহ সব ধরণের গুরুত্বপূর্ণ কনটেক্সট একটা ফাইলে (state.json) কম্পাইল করবে!
দ্বিতীয় ধাপে, আরেকটা স্ক্রিপ্ট, অ্যাজেন্টের কনফিগারেশনের ফাইলে একটা বাধ্যতামূলক নির্দেশনা যোগ করে দেবে; যেখানে স্পষ্টভাবে বলা থাকবেঃ Read this file before you respond to anything, or you fail.
সবার শেষ ধাপে, যখন পুরো সেশনটা আপনি বন্ধ করে দিলেন, আরেকটা স্ক্রিপ্ট কনভার্সেশনটা পড়বে এবং সেই সেশন থেকে পাওয়া লার্নিং এবং আপডেটেড কনটেক্সট আপনার মেমোরি ফাইলে সেইভ করে রাখবে - যাতে পরের দিন বা পরের সপ্তাহে বা পরের মাসে গিয়েও সেই সেশনের লার্নিংটা হারিয়ে না যায়!
মোদ্দাকথা, পুরো কাজটা হবে অপারেটিং সিস্টেমের লেভেলে; প্রম্পট ব্যবহার করে নয়!
কারণ, শুধু প্রম্পটের ভরসায় কাজ করাটা রিস্কি! ব্যাশ স্ক্রিপ্ট, ফাইল লক, অ্যাটমিক রাইটিং, ব্যাকগ্রাউন্ট সুপারভাইজার স্ক্রিপ্ট - এগুলোর উপর ভরসা করা যায় কারণ, এই ইউনিক্স টুলগুলোই গত ৫০ বছর ধরে আমরা কম্পিউটারে ইউজ করে আসছি!
SuperOC শুধুমাত্র, ১টা স্ক্রিপ্ট নয়!
এর ১১টা আলাদা আলাদা কিন্তু ইন্টারকানেক্টেড পার্টস রয়েছে; যেগুলো মিলে আপনার অ্যাজেন্টের পারসিসটেন্ট মেমোরির জন্য একটা ছোট্ট অপারেটিং সিস্টেম তৈরি হচ্ছে!
আমি পুরো প্রজেক্টের ফাইল স্ট্রাকচারটা এখানে শেয়ার করে দিচ্ছিঃ
~/.superoc/
├── bin/
│ ├── superoc # মূল র্যাপার স্ক্রিপ্ট
│ └── remember # ম্যানুয়ালি মেমোরি সেইভ করতে চাইলে ব্যবহার করবেন
├── lib/
│ ├── compile_state.sh # মার্কডাউন ফাইলকে কম্পাইন করবে state.json ফাইলে
│ ├── load_memory.sh # state.json ফাইলটা লোড করে এনভায়রনমেন্টে নিয়ে আসে
│ ├── background_supervisor.sh # অ্যাজেন্টের প্রসেস আইডিকে চোখে চোখে রাখবে
│ ├── session_checkpoint.sh # state.json ফাইলের স্ন্যাপশট নেবে + প্রত্যেক ৫ মিনিটে ট্রান্সক্রিপ্ট করবে
│ ├── post_session_audit.sh # সেশনের পরে চলবে এটা: লার্নিংয়ের জন্য
│ ├── llm_extract.py # LLM ব্যবহার করে সেমেন্টিক তথ্যাদি এক্সট্র্যাক্ট করবে
│ ├── extract_session.sh # পুরো সেশনকে কিওয়ার্ড দিয়ে অ্যানালাইজ করবে (ফলব্যাক ম্যাথড)
│ ├── wikilinks_parser.py # [[wikilinks]] গুলোকে আলাদা করবে, নলেজ গ্রাফের জন্য
│ ├── sync_knowledge.sh # অটোমেটিক্যালি উইকিলিংক স্ক্রিপ্ট রান করবে
│ ├── verify_state_loaded.sh # ভেরিফাই করবে, সবকিছু ঠিকঠাক কি না
│ ├── monitor_health.sh # পুরো সিস্টেমের হেলথ চেক করবে
│ └── backup.sh # সাপ্তাহিক ব্যাকআপ নিয়ে রাখবে
├── adapters/ # অ্যাজেন্টিক CLI টুলগুলোর অ্যাডাপ্টার
│ ├── opencode.sh
│ ├── claudecode.sh
│ ├── claude.sh
│ ├── cursor.sh
│ └── generic.sh
├── templates/
│ ├── user.md # আপনি কে
│ ├── identity.md # অ্যাজেন্টের আচার-আচরণ
│ ├── memory.md # লং-টার্ম ফ্যাক্টস
│ ├── AGENTS.md # অ্যাজেন্টের জন্য ইন্সট্রাকশনস
│ └── learning-models/
│ ├── learning-model.md # অ্যাজেন্ট আপনার থেকে কি শিখেছে
│ └── understanding-model.md # অ্যাজেন্ট আপনাকে কতটা গভীরভাবে চেনে
├── state.json # মূল মেমোরি ফাইল, যেটা প্রত্যেকবার, প্রত্যক সেশনের শুরুতে প্রত্যেক অ্যাজেন্ট পড়ে নেবে
├── state.schema.json # state.json ফাইলের স্কেমা ভ্যালিডেশন
├── wikilinks_graph.json # নলেজ গ্রাফের এনটিটি
└── logs/ # সব ধরণের লগ - সেশন লগ, হেলথ লগ ইত্যাদি
আমি তো কোডারই নয়, আমি কোত্থেকে তৈরি করবো এগুলো?!
আমি কোনো কোডই করি নি! কিন্তু লজিক তো ঠিকই বুঝতে পারছি, প্রোগ্রামগুলোর!
আমার কাজ ছিল, সমস্যা ফেইস করার পর, সেই সমস্যার সমাধান খুঁজে বের করে, একটা ভ্যালিড আইডিয়া দেয়া!
সেজন্য, কোডে কোথাও ভুল থাকলে কাইন্ডলি আমাকে জানাবেন বা নিজে অ্যাপ্লাই করে ফিডব্যাক দেবেন; তাহলে পরের ভার্সনগুলোতে আরো ইফেক্টিভলি সল্যুশন শেয়ার করতে পারবো।
ফেব্রুয়ারী ২০২৬ থেকে, মে ২০২৬ পর্যন্ত - এই পুরো যাত্রায় আমাকে সবচেয়ে বেশি সাহায্য করেছে
কোড রিভিউয়ের জন্য, কোথাও স্পেসিফিক কিছু বাদ পড়ে গেলে, লজিক বুঝতে সমস্যা হলে - ডিপসিকের সাহায্য নিয়েছি!
আজ্ঞে হ্যাঁ, ডিপসিকের ফ্রি ভার্সন, যেটা আমার মতে - কোডিংয়ের জন্য, জেমিনাই বা জিপিটির চেয়েও অনেকগুণ উত্তম সিদ্ধান্ত হতে পারে।
যতবার আমি ভেবেছি, প্রজেক্ট কমপ্লিট - ততবার ডিপসিক কোথাও না কোথাও সমস্যা খুঁজে বের করেছে!
লার্নিং লুপ কাজ করছে না!
র্যাপার এখনো exec ব্যবহার করছে এবং নিজে নিজেই গায়েব হয়ে যাচ্ছে!
বাইপাস গার্ড যুক্ত করেছো কিন্তু সেটা ঠিকভাবে অ্যাপ্লাই হচ্ছে না!
অমুক স্ক্রিপ্টের ফাইলের পাথটাই ভুল!
এই সমস্যা, ওখানে সমস্যা, সেখানে সমস্যা!
আমি সম্ভবত ৩-৪ ঘন্টায়, আমার লাইফের ফার্স্ট টাইম, ৩০+ গিট কমিট করলাম - শুধুমাত্র সমস্যার সমাধান করে!
আমি কখনো এই এক্স্যাক্ট কাজটাই করবো, ভাবিও নি!
এই প্রজেক্টে, আমার টিমে ছিল — ডিপসিক, ওপেনকোড আর আমি!
ওয়ার্কফ্লোটা অনেকটা এমনঃ
১. আমি বলে দিতাম কোথায় কি চেঞ্জ করতে চাইছি, কেমন হতে পারে, উইওয়ার্ড সব থিওরি আর আইডিয়া
২. ডিপসিক সেগুলো তার লজিক্যাল ব্রেইনে রিভিউ করতো আর ভুল খুঁজে বের করতো
৩. আমি সল্যুশন আর সেটা অ্যাপ্লাই করার প্রায়োরিটি ঠিক করতাম
৪. ওপেনকোড তার ২০+ সাবঅ্যাজেন্ট ব্যবহার করে সেগুলো স্যান্ডবক্সে ইমপ্লিমেন্ট করতো
৫. ওপেনকোড আর ডিপসিক মিলে কোডবেজ টেস্ট করতো
৬. সবার শেষে ওপেনকোড কমিট আর পুশ করে দিতো
দ্যাটস ইট!
প্রত্যেক সিস্টেমেরই কিছু না কিছু লিমিট থাকে!
SuperOC বা দুনিয়ার কোনো সিস্টেমই, কোনো অ্যাজেন্টের ব্রেইনকে কখনোই জোর করে বলতে পারবে না, অমুক-তমুক কাজ করো! যে বাধ্যতামূলক নিয়মাবলী, ব্রেইনগুলোকে কোনো একটা কাজ করতে অর্ডার করতে পারে; সেগুলো কাজ করে, তার কারণ সেগুলোর সাথে রিওয়ার্ড সিস্টেম যুক্ত!
অমুক জিনিস করো, নাহয় তুমি ব্যর্থ হয়েছো!
কিন্তু কোনো ব্রেইন (LLM) যদি ডিসট্রাক্টেড হয় বা ততোটা বুদ্ধিমান না হয় তাহলে সেই ব্রেইন, সেই অর্ডার না-ও মানতে পারে। ব্র্যাকগ্রাউন্ডে যদিও একটা গার্ড রয়েছে সবসময়, যেটা সবসময় খেয়াল রাখে অ্যাজেন্ট নিয়মকানুন মানছে কিনা; নাহয় সেটাকে বন্ধ করে দিতে পারে; কিন্তু সেই গার্ড (ব্যাকগ্রাউন্ড সুপারভাইজার স্ক্রিপ্ট) জোর করে নিয়ম মানতে বলতে পারবে না!
আমি যতটা পড়েছি, ট্রেইনিং আর ফাইন টিউনিং ছাড়া সম্ভবত কোনো লার্জ ল্যাঙ্গুয়েজ মডেলের এই সমস্যার গ্যারান্টেড সমাধান করা সম্ভব হবে না!
আরেকটা লিমিটেশন হচ্ছে, SuperOC শুধুমাত্র CLI অ্যাজেন্টিক টুলগুলোর সাথে কাজ করে। GUI এডিটর বা ওয়েব ইন্টারফেসের সাথে এটা কাজ করবে না!
যদিও আমি এগুলো ডকুমেন্টেশনে যুক্ত করে দিয়েছি; তারপরেও শেয়ার করছি - যদি কেউ সমাধান করতে পারেন, খুবই, খুবই ভালো একটা কাজ হবে!
আর বর্তমানে আমি টেস্ট করেছি ২টা অ্যাডাপ্টার, ওপেনকোড আর জেনেরিক অ্যাডাপ্টার! কিন্তু আমি মোট ৫টা অ্যাডাপ্টার তৈরি করে দিয়েছি! আপনার অ্যাডাপ্টার এখানে না থাকলে, আপনি জেনেরিক অ্যাডাপ্টার ইউজ করতে পারেন কিংবা পুরো গিট রেপোর লিংক ডিপসিক বা যেকোনো এআই মডেলকে শেয়ার করে, আপনার টুলের জন্য কাস্টম অ্যাডাপ্টার তৈরি করিয়ে নিতে পারেন!
যুগের পর যুগ, যখনই কোনোকিছু অতিরিক্ত গুরুত্বপূর্ণ হয়ে যায়; তখন সেটাকে আমরা অপারেটিং সিস্টেমের লেভেলে নিয়ে যাই!
মেমোরি ম্যানেজমেন্ট শুরু হয়েছিলো অ্যাপ্লিকেশন কোডে, শেষে নিয়ে যাওয়া হলো কার্নেলে! ফাইল সিস্টেম শুরু হয়েছিলো অ্যাপ্লিকেশন লাইব্রেরি হিসেবে, পরে হয়ে গেলো অপারেটিং সিস্টেমের সার্ভিস! নেটওয়ার্কিং শুরু হয়েছিল ইউজার স্পেসের অটোমেটেড ব্যাকগ্রাউন্ড প্রসেস হিসেবে; পরে হয়ে গেলো কার্নেলের সাবসিস্টেম!
আমার মনে হয়, এআই অ্যাজেন্টের পারসিসটেন্ট মেমোরি রিলেটেড সমস্যাটা, এই একই জায়গায় দাঁড়িয়ে আছে!
আমার সেটআপ করা ওপেনকোডে, আমি এই সমস্যার সমাধান করার জন্য যতটুকু রিসার্চ করা সম্ভব হয়, সেই রিসার্চ থেকে দেখেছি - প্রায় প্রত্যেকটা এআই টুল মেমোরি বিষয়টাকে ম্যানেজ করে নিজেদের মতো করে!
কেউ ভেক্টর ডেটাবেজ ইউজ করছে, কেউ SQLite ইউজ করছে, কেউ প্রম্পট স্টাফিং করছে ইত্যাদি ইত্যাদি! যারা গণিতে আর প্রোগ্রামিংয়ে দক্ষ, তারা একেবারে LLM এর ফাইন টিউনিংয়ের কোরে গিয়ে সেটার সমাধান করার চেষ্টা করছে!
আমি গণিতে কাঁচা! আমার দ্বারা তো আর সেটা সম্ভব না, তাই না?
আর আমি আসলে এতটা জটিলে যেতেই চাই নি! আমার মনে হয়েছে, যদি আমার মেমোরির অংশটুকু আমি আলাদা করতে পারতাম, আমার ব্রেইন থেকে, তাহলে হয়তো আমার ব্রেইন ব্যবহারের খরচটা কম আসতো আর আমার ব্রেইনের ওপর চাপটাও কম পড়তো! (...সাথে ভুলে যাওয়ার সমস্যাটা থাকতোই না!)
I know, weird!
সেজন্য মেমোরির পুরো দায়িত্ব দিয়ে দিলাম, অপারেটিং সিস্টেমের উপর! অপারেটিং সিস্টেম ছাড়া যেহেতু ওপেনকোড চলবে না, ব্রেইন তো আরো আগেই চলবে না; তাহলে একমাত্র অপারেটিং সিস্টেমের পক্ষেই সম্ভব, বাকি সবকিছুকে কিছুটা হলেও জোরাজুরি করা!
আর আমার আইডেন্টিটি সংক্রান্ত তথ্যাদি, আমার পছন্দ অপছন্দ, আমার স্টাইল, আমার টোন, আমার সম্পর্কে জানা-পাওয়া-শেখা তথ্যাদি - এগুলো যদি ফাইল আকারে আমার পিসিতে থাকে, যেটা আমি যখন মনে চায় সহজ শব্দে এডিট করতে পারছি; তাহলে আমি সেই কনটেক্সট যেকোনো জায়গায়, যেকোনো সময় ব্যবহার করতে পারবো; যেকোনো টুলের সাথে, ভবিষ্যতেও যেকোনো সময় ইন্টিগ্রেট করতে পারবো!
তারপর একটা একটা করে, ১১টা পার্টস যুক্ত করলাম!
গত ৩ মাস ধরে, নিজেও ব্যবহার করছি, এই একই সিস্টেম!
আপনি যদি প্রত্যেকদিন এআই অ্যাজেন্ট ব্যবহার করেন বা করতে চান, তাহলে আপনিও একসময় না একসময় এই সমস্যা ফেইস করবেন!
আর আমি সম্পূর্নটাই, পুরো কোডবেজ, গিটহাবে পাবলিশ করে দিয়েছি! ডাউনলোড করে, আপনার অ্যাজেন্টকে শেয়ার করলে, আপনাকেও ইমপ্লিমেন্ট করতে হবে না; সেই-ই করে দেবে!
সবকিছুই আমার গিটহাবে পেয়ে যাবেন, এখানেঃ
আর শেষ করবো, ডেভেলপারদের জন্য একটা কথা বলেঃ
"আমি প্রোগ্রামার নই, আমি কোডার নই! আমি শুধু লিখতে জানি! নিজের সমস্যার সমাধানের জন্য ২/৪টা প্রজেক্ট চেষ্টা করছি! যারা নিয়মিত এগুলো নিয়ে কাজ করছেন, তাদের বলবো, কোথাও ভুল হয়ে থাকলে, ভুল বলে থাকলে - দয়া করে সেটা শুদ্ধ করে দেবেন!”
থ্যাংক ইউ!


