VPS-এ Claude Code-এর মেমরি যোগ করতে Recall সেটআপ
Recall 0.4.0 একটি fully local plugin, যা প্রতিটি Claude Code session-এর log ও resumable summary রাখে। VPS-এ সেটআপ, Python প্রয়োজনীয়তা এবং token সাশ্রয় মাপুন।
Claude Code memory-এর জন্য Recall কী করে
Recall হলো Claude Code-এর একটি plugin, যা প্রতিটি project-এর জন্য session-গুলোর মধ্যে একটি memory সংরক্ষণ করে। এটি আপনার project-এর ভেতরের .recall/ folder-এ দুটি markdown file লেখে: কী ঘটেছে তার একটি append-only log এবং আপনি কোথায় কাজ থামিয়েছেন তার একটি সংক্ষিপ্ত summary। দুটিই আপনি যে machine-এ কাজ করছেন সেখানে একটি local Python summarizer তৈরি করে। তাই এই memory সংরক্ষণে কোনো API token খরচ হয় না।
এটি একটি ছোট কিন্তু নিয়মিত সমস্যার সমাধান করে। আপনি মঙ্গলবার আপনার VPS-এ একটি session বন্ধ করলেন। বুধবার নতুন session স্বয়ংক্রিয়ভাবে মঙ্গলবারের conversation load করে না, যদিও Claude Code-এর built-in auto memory session-গুলোর মধ্যে note সংরক্ষণ করতে পারে। সেই note-এ আপনি কোথায় কাজ থামিয়েছিলেন তা না থাকলে project-এর বিষয়টি হাতে করে আবার ব্যাখ্যা করতে হয়। অথবা model-কে আবার repository-এর অর্ধেক পড়ে বিষয়টি বুঝতে দিতে হয়। দুটিরই জন্য token খরচ হয়। দ্বিতীয় পদ্ধতিতে token খরচ অনেক বেশি।
18 July 2026-এ released Recall version 0.4.0 October 2026 পর্যন্ত এখনও latest release, এবং project-টি MIT licensed। এটি একটি plugin। এর কোনো অংশই network call করে না।
VPS-এ যা প্রয়োজন
Recall-এর capture hook-গুলো হলো plugin-এর সঙ্গে প্রকাশিত Python script। কোনো third-party dependency নেই, তাই প্রকৃত প্রয়োজন শুধু একটি interpreter।
python3 -VUbuntu 24.04-এ Python 3.12.3 ফল দেখায়। Recall Python 3.9 এবং পরবর্তী সংস্করণ সমর্থন করে। Minimal container image-এ কখনও কখনও কোনো interpreter একেবারেই থাকে না। তখন shell python3: command not found উত্তর দেয়। এগিয়ে যাওয়ার আগে একটি interpreter ইনস্টল করুন।
sudo apt update && sudo apt install -y python3Summarizer-এর একটি ধাপের জন্য NumPy একটি ঐচ্ছিক accelerator। এটি আপনার প্রয়োজন নেই।
python3 -c "import numpy"এখানে ModuleNotFoundError: No module named 'numpy' একটি গ্রহণযোগ্য উত্তর। Summarizer-এর pure-Python path রয়েছে, এবং project-এর test suite যাচাই করে যে উভয় path একই sentence নির্বাচন করে।
Laptop-এর তুলনায় server-এ session memory বেশি গুরুত্বপূর্ণ, কারণ server-এর কাজ কয়েক দিন জুড়ে ছড়িয়ে থাকা সংক্ষিপ্ত visit-এ আসে। আপনার যদি ইতিমধ্যে VPS-এ tmux-এ Claude Code চালু থাকে, তাহলে Recall গতকালের session-কে আজকের session-এ নিয়ে আসে।
plugin marketplace থেকে Recall ইনস্টল করুন
Claude Code session-এর ভিতরে 2টি command টাইপ করুন:
/plugin marketplace add raiyanyahya/recall
/plugin install recall@recallদ্বিতীয় command-টি plugin@marketplace পড়ে। এখানে উভয় নামই recall, যা copy-paste-এর ভুল বলে মনে হতে পারে, কিন্তু তা নয়।
Plugin-এর নিজস্ব একটি command চালিয়ে ইনস্টলেশন পরীক্ষা করুন:
/recall:show/recall:show বর্তমান summary দেখায়। একেবারে নতুন project-এ দেখানোর মতো কিছু থাকে না। তাই এখানে আসল পরীক্ষা হলো command-টি আদৌ আছে কি না। Claude Code যদি /recall:show চিনতে না পারে, তাহলে plugin load হয়নি এবং কোনো hook চলবে না।
Checkout থেকে চালাতে চাইলে repository clone করে প্রথমে সেটি validate করুন:
git clone https://github.com/raiyanyahya/recall ~/recall
cd ~/recall && claude plugin validate .claude plugin validate ., .claude-plugin/-এ থাকা manifest পড়ে plugin-এর গঠন সঠিক কি না জানায়। এরপর claude --plugin-dir ~/recall দিয়ে আপনার project directory থেকে Claude Code চালু করুন।
হুকগুলো কী লিখে এবং কখন লেখে
Recall তিনটি Claude Code hook নিবন্ধন করে। প্রতিটি hook plugin directory থেকে একটি Python script চালায়।
SessionStartstartup, resume এবং clear-এর সময় চলে। এটিcontext.mdদেখায়, যাতে session শুরু হওয়ার সময় আপনার summary সামনে দেখা যায়।StopClaude প্রতিবার response শেষ করলে চলে। এটি সেই turn log-এ যুক্ত করে।SessionEndsession বন্ধ হলে চলে এবং summary পুনরায় তৈরি করতে পারে।
এতে দুটি file তৈরি হয়, দুটিই .recall/-এর মধ্যে থাকে।
history.mdহলো append-only record: prompt, response, ব্যবহৃত file এবং চালানো command-এর রেকর্ড।context.mdহলো generated digest: লক্ষ্য, summary, পরবর্তী পদক্ষেপ, ব্যবহৃত file, চালানো command এবং git context।
একটি বাস্তব session-এর পরে directory-টি দেখুন।
ls -la .recall/capture সক্রিয় থাকলে, pause marker না থাকলে এবং transcript উপলভ্য থাকলে history.md-এ content দেখতে পাবেন। context.md একেবারেই নাও থাকতে পারে। এটিই default behaviour, কোনো fault নয়। আপনি সেটি নির্ধারণ না করলে auto_save_context হলো off। তাই summary কেবল আপনি চাইলে লেখা হয়:
/recall:saveএই command history.md-এর ওপর local summarizer চালিয়ে context.md নতুন করে লেখে। Algorithm-টি TF-IDF (term frequency, inverse document frequency) scoring-এর ফলকে TextRank sentence ranking-এ ব্যবহার করে। এটি deterministic এবং extractive। অর্থাৎ এটি আপনার log-এ আগে থেকেই থাকা sentence নির্বাচন করে। কোনো model call করা হয় না। তাই এই ধাপের জন্য খরচ নেই এবং machine offline থাকলেও এটি কাজ করে।
একটি প্রকল্পের জন্য Recall কনফিগার করুন
কনফিগারেশন প্রকল্পের root-এ থাকা একটি recall.config.json ফাইলে সংরক্ষিত থাকে। সরবরাহ করা ডিফল্ট মানগুলো হলো:
{
"output_dir": ".recall",
"capture_history": true,
"summary_sentences": 8,
"redact": true,
"include_git": true,
"max_input_chars": 200000
}output_dirদুটি ফাইল কোথায় থাকবে তা নির্ধারণ করে। এগুলো প্রকল্পের ভেতরেই রাখুন।capture_historyhistory.mdlog চালু বা বন্ধ করে।auto_save_context-এoffঅথবাon_endগ্রহণ করা যায়; ডিফল্ট মান হলোoff।summary_sentencesনির্ধারণ করে কতগুলো sentencecontext.md-এ রাখা হবে। এই মান বাড়ালে summary দীর্ঘ হয় এবং session শুরুর সময় load সামান্য বাড়ে।redactকোনো কিছু disk-এ লেখার আগে সাধারণ secret pattern সরিয়ে দেয়।include_gitsummary-তে বর্তমান diff statistics এবং সাম্প্রতিক commit যোগ করে।max_input_charsএকবারে summarizer কতটাhistory.mdপড়বে, তার সর্বোচ্চ সীমা নির্ধারণ করে।
VPS-এ চলা কোনো প্রকল্পের জন্য automatic saving চালু করাই সাধারণত সবচেয়ে কার্যকর পরিবর্তন। কারণ server-এ terminal বন্ধ হয়ে গেলে session প্রায়ই আপনার ইচ্ছায় নয়, বরং terminal সংযোগ বিচ্ছিন্ন হওয়ার কারণে শেষ হয়।
{
"auto_save_context": "on_end",
"summary_sentences": 12
}কনফিগারেশন পরিবর্তন না করে কিছু সময়ের জন্য capture বন্ধ করতে pause marker তৈরি করুন। আবার capture শুরু করতে marker-টি মুছে দিন।
touch .recall/.capture-pausedProduction credential নিয়ে কাজ করার আগে এটি করুন। কারণ redaction একটি filter, নিশ্চয়তা নয়। একই কারণে সাধারণভাবে AI agent-এর কাছ থেকে secret দূরে রাখা গুরুত্বপূর্ণ: নিরাপদ secret হলো সেটি, যা agent কখনো দেখে না।
Recall token কতটা সাশ্রয় করে?
এটি নির্ভর করে বিকল্পটি কী ছিল তার ওপর। Session শুরুতে একটি summary load করা সাশ্রয়ী। এটি যে কাজটি প্রতিস্থাপন করে, সেটি ব্যয়বহুল হতে পারে, কারণ project সম্পর্কে কোনো memory না থাকা model ফাইল পড়ে সেটি আবার আবিষ্কার করে।
এই চার্টের পেছনের ডেটা
[
{
"label": "Recall context.md",
"char_count": "4,800",
"est_tokens": "1,200"
},
{
"label": "Hand-written CLAUDE.md",
"char_count": "3,200",
"est_tokens": "800"
},
{
"label": "Re-reading the repo",
"char_count": "120,000",
"est_tokens": "30,000"
},
{
"label": "Full transcript replay",
"char_count": "340,000",
"est_tokens": "85,000"
}
]এগুলো একটি mid-size project-এর সাধারণ হিসাব, আপনার project-এর পরিমাপ নয়। একটি Recall summary আনুমানিক 1,200 token-এ load হয়। এটি resume-এর জন্য project-এর প্রকাশিত এক থেকে দুই হাজার token-এর হিসাবের সঙ্গে সামঞ্জস্যপূর্ণ। আগের সম্পূর্ণ transcript replay করলে পুরো conversation আবার load হয়, যা 85,000 token-এর কাছাকাছি। ফাইল পড়ে model-কে project আবার আবিষ্কার করতে দিলে খরচটি এই দুইটির মধ্যে থাকে, প্রায় 30,000 token। Repository বড় হলে এই সংখ্যা বাড়ে। CLAUDE.md row-টি তুলনার জন্য রাখা হয়েছে। এটি ছোট এবং অপরিবর্তনীয় হওয়ায় সাশ্রয়ী। এটি গত রাতের ঘটনাগুলোর পরিবর্তে model-কে আপনার স্থায়ী নিয়ম জানায়।
নিজের সংখ্যাগুলো মাপুন। English prose-এ 1 token প্রায় 4টি character-এর সমান, আর code-এর ক্ষেত্রে সাধারণত কিছুটা কম। একই VPS-এ কোনো local model-কে summary-ও দিলে, resume-এর ওপর নির্ভর করার আগে সেটি কোন context window-এ load হচ্ছে তা পরীক্ষা করুন, কারণ Ollama-এর default context length উপলভ্য VRAM-এর ওপর নির্ভর করে।
wc -c .recall/context.md .recall/history.md
echo $(( $(wc -c < .recall/context.md) / 4 ))একটি session-এর মধ্যে, /context বর্তমানে context window-এ কী load আছে তা দেখায়, এবং /cost session-এর মোট হিসাব দেখায়। প্রথম session-টি কোনো summary ছাড়া শুরু করুন। পরের session-টি summary রেখে শুরু করুন। তারপর তুলনা করুন। Session-এর token আসলে কোথায় ব্যয় হয় তার সম্পূর্ণ বিবরণের জন্য Claude Code কীভাবে token ব্যয় করে অংশে breakdown দেওয়া আছে।
একটি সীমাবদ্ধতা মনে রাখলে এই দাবিটি সঠিক থাকে। প্রতিটি session শুরুর সময় summary load হয়। তাই যে summary অনুযায়ী আপনি কোনো কাজ করেন না, সেটি সাশ্রয়ের পরিবর্তে সামান্য অতিরিক্ত খরচ তৈরি করে। আপনার session দীর্ঘ না হলে summary_sentences-কে default-এর কাছাকাছি রাখুন। Session শান্ত থাকলে হিসাবের অন্য দিকেও সুবিধা হয়, কারণ যে agent-কে কাজের উপযোগী সবচেয়ে ছোট পরিবর্তনের দিকে পরিচালিত করা হয় সে summarizer-এর জন্য ছোট log রেখে যায়।
সেশন ছাড়া সারসংক্ষেপ পুনর্নির্মাণ করুন
আপনি repository clone করে থাকলে summarizer-এর নিজস্ব command line entry point আছে। VPS-এ terminal-সহ কোনো session বন্ধ হয়ে গেলে এবং তবু digest প্রয়োজন হলে এটি কাজে লাগে।
python3 ~/recall/scripts/make_context.py --helpসহায়তা আউটপুটে গ্রহণযোগ্য flag-গুলো তালিকাভুক্ত থাকে: project root-এর জন্য --cwd, নির্দিষ্ট transcript file-এর জন্য --transcript, output দমন করতে --quiet এবং claude ও opencode-এর মধ্যে বেছে নিতে --harness। এটিকে একটি project-এ নির্দেশ করুন:
python3 ~/recall/scripts/make_context.py --cwd /srv/projects/apiএটি session transcript পড়ে history.md, তারপর আপনার দেওয়া directory-এর অধীনে context.md লেখে। marketplace-এর মাধ্যমে install করলে plugin-টি Claude Code পরিচালিত একটি directory-তে থাকে, এবং একই কাজ করার জন্য /recall:save হলো সমর্থিত পদ্ধতি।
কিছু লেখা হচ্ছে না কেন
সম্পূর্ণ session-এর পরে কোনো .recall/ directory নেই। Capture disabled কি না, output directory অন্য কোথাও configured কি না, অথবা কোনো transcript পাওয়া গেছে কি না—তা পরীক্ষা করুন। hooks কখনো চালু হয়নি এমন সিদ্ধান্তে যাওয়ার আগে এগুলো যাচাই করুন। Plugin loaded কি না নিশ্চিত করতে /recall:show টাইপ করুন, তারপর python3 -V চালান। Hook command প্রথমে python3 এবং পরে python চেষ্টা করে। তাই কোনো box-এ কোনোটিই না থাকলে stderr এবং exit status 127 সহ ব্যর্থ হয়। Claude Code stderr-এর প্রথম line-সহ non-blocking hook error notice দেখায়।
history.md বাড়ে, কিন্তু context.md কখনো পরিবর্তিত হয় না। auto_save_context default হিসেবে off। /recall:save চালান, অথবা key-টি on_end সেট করুন এবং SessionEnd hook-কে কাজটি করতে দিন।
Files ভুল project-এর অধীনে দেখা যাচ্ছে। Claude Code যে directory থেকে শুরু করা হয়, তার relative path-এ writes করে। তাই home directory থেকে session শুরু করলে memory সেখানেই যায়। Project root থেকে শুরু করুন এবং files আসলে কোথায় লেখা হয়েছে তা খুঁজতে ls -la .recall/ ব্যবহার করুন।
Capture বন্ধ হয়ে গেছে, কিন্তু কোনো warning দেখায়নি। ls -a .recall/ দিয়ে pause marker আছে কি না পরীক্ষা করুন। গত সপ্তাহে তৈরি করা .capture-paused file-টি এখনও কাজ করছে।
দীর্ঘ session-এর পরে summary খুব সংক্ষিপ্ত। max_input_chars summarizer input 200000 characters-এ সীমাবদ্ধ রাখে। তাই খুব দীর্ঘ log কেটে যায়। Log rotate করুন।
mv .recall/history.md .recall/history-2026-07-30.mdএরপর একটি সংক্ষিপ্ত session চালান এবং আবার ls -la .recall/ পরীক্ষা করুন, যাতে নতুন history.md তৈরি হয়েছে কি না নিশ্চিত হওয়া যায়।
Recall যেখানে থামে
Recall একটি log এবং summarizer। তাই এটি কী করতে পারে না, তা স্পষ্টভাবে বোঝা জরুরি।
summarizer extractive। TextRank history.md-এ আগে থেকেই থাকা sentence বেছে নেয়। তাই কোনো সিদ্ধান্ত সঠিক ছিল কি না, এটি বিচার করে না। মঙ্গলবারের log-এ লেখা ভুল সিদ্ধান্ত বুধবারের সঠিক সিদ্ধান্তের মতোই দেখায়। ঝুঁকি বাস্তব হলে context.md পড়ে হাতে সংশোধন করুন। এটি একটি markdown file, তাই সম্পাদনা করার কোনো বাধা নেই।
এতে search নেই। প্রতিটি project-এর জন্য আপনি একটি বর্তমান summary এবং একটি ক্রমবর্ধমান log পান। Projects জুড়ে query করা যায় এমন memory পান না। তিন সপ্তাহ আগে database সম্পর্কে কী সিদ্ধান্ত নিয়েছিলেন, তা জানতে হলে history.md-এ grep করতে হবে। এটি live coordination-ও দেয় না। একই project-এর দুটি session একই log file ব্যবহার করলেও Recall নতুন log entry অন্য session-এর context-এ পাঠায় না। তাই একটি session-কে অন্যটি কী করছে তা জানতে হলে চলমান অবস্থায় sessions সরাসরি নিজেদের মধ্যে text পাঠাতে পারে।
একটি session-এর ভেতরে এটি সহায়তা করে না। session চলাকালে context window পূর্ণ হয়ে যাওয়া আলাদা সমস্যা। এর সমাধানও আলাদা। একটি session-এর ভেতরে context window পরিচালনা করা এই guide-এর সহায়ক লেখা।
নকশাগতভাবে summary-কে untrusted input হিসেবে বিবেচনা করা হয়। context.md fenced এবং label-সহ inject করা হয়। Claude এটি ব্যবহার করার আগে জিজ্ঞাসা করে। এই নকশার কারণ হলো, committed .recall/ directory-তে commit access থাকা যে কেউ এমন text লিখতে পারে যা আপনার agent পড়বে। agent তার পড়া বিষয় নিয়ে কতবার থেমে প্রশ্ন করবে, তা session যে permission mode-এ শুরু হয় সেটি নির্ধারণ করে। Claude Code v2.1.283 বা পরবর্তী সংস্করণে, সব plan এবং provider-এ interactive terminal ও VS Code session-এর জন্য auto mode ইতিমধ্যে built-in starting mode। তাই অধিকাংশ action আপনার বদলে একটি classifier review করে। HIPAA configuration ব্যবহার করা organization-গুলো এখনও Manual mode-এ শুরু হয়। .recall/ personal নাকি shared, তা একবার ঠিক করুন। Personal memory-এর জন্য এটি .gitignore-এ যোগ করুন। অথবা এটি commit করে অন্য যেকোনো contribution-এর মতো review করুন। agent unattended অবস্থায় চললে, VPS-এ Claude Code নিরাপদে চালানো বৃহত্তর boundary ব্যাখ্যা করে।
Redaction best effort। এটি API key, token, PEM block এবং .env assignment-এর মতো সাধারণ pattern শনাক্ত করার চেষ্টা করে। commit করার আগে .recall/ পড়ুন।
Version number-টি software-এর maturity সম্পর্কে সঠিক ধারণা দেয়। October 2026-এ এটিই এখনও latest release হলেও version 0.4.0-এ config key এবং file layout release-গুলোর মধ্যে এখনও পরিবর্তিত হতে পারে। তাই যে setup-এর ওপর আপনি নির্ভর করেন, সেটি upgrade করার আগে changelog পড়ুন।
FAQ
Recall কি আমার code বা transcript কোথাও পাঠায়?
না। Capture hook এবং summarizer আপনার নিজের machine-এ চলা Python script। Plugin-এ কোনো API key থাকে না এবং এটি কোনো network call করে না। Summarising-এর জন্য model-এর পরিবর্তে TF-IDF ও TextRank ব্যবহার করা হয়। তাই এই ধাপে কোনো খরচ হয় না এবং machine offline থাকলেও এটি কাজ করে। এর সীমাবদ্ধতা হলো, summary extractive: এটি নতুন বাক্য লেখার বদলে আপনার log থেকে বাক্য নির্বাচন করে।
আমার .recall/context.md অনুপস্থিত বা পুরোনো কেন?
auto_save_context-এর default মান off। তাই আপনি /recall:save চালালেই summary পুনরায় তৈরি হয়। প্রতিটি session শেষ হলে এটি পুনরায় লেখার জন্য recall.config.json-এ "auto_save_context": "on_end" সেট করুন। history.md-ও অনুপস্থিত হলে capture_history, .capture-paused marker এবং session transcript উপলভ্য কি না পরীক্ষা করুন। এসব ক্ষেত্রে চলমান hook history লেখা এড়িয়ে যায়। /recall:show দিয়ে plugin loaded আছে কি না নিশ্চিত করুন। এরপর ওই box-এ python3 -V সঠিক উত্তর দিচ্ছে কি না নিশ্চিত করুন, কারণ hook-গুলো Python script।
Recall প্রতি session-এ কতটা সাশ্রয় করে?
একটি summary load করতে প্রায় 1,200 token লাগে। বিপরীতে, একটি model-কে repository আবার পড়ে বর্তমান অবস্থান নির্ধারণ করতে হলে সাধারণত 30,000 token লাগে। এগুলো সাধারণ পরিসংখ্যান। একটি session-এর মধ্যে wc -c .recall/context.md এবং /context command ব্যবহার করে আপনার নিজের পরিমাপ নিন। একটি cold start-এর ফল summary থেকে resume করা session-এর সঙ্গে তুলনা করুন।
আমার কি এখনও একটি CLAUDE.md file প্রয়োজন?
হ্যাঁ। তবে দুটির কাজ আলাদা। CLAUDE.md হলো আপনি ইচ্ছাকৃতভাবে যা লেখেন: স্থায়ী নিয়ম এবং build command। context.md তৈরি হয় আগের session-এ বাস্তবে যা ঘটেছে তা থেকে। তাই এতে অসমাপ্ত migration-এর তথ্য থাকে, যা আপনি নিজে লিখে রাখার কথা হয়তো ভাবতেন না। দুটিই রাখুন।
একটি VPS কি একাধিক project-এর memory রাখতে পারে?
হ্যাঁ। Recall প্রতিটি project directory-এর ভেতরে .recall/-এ memory রাখে। তাই একই server-এ থাকা দুটি project আলাদা log এবং আলাদা summary সংরক্ষণ করে। প্রতিবার project root থেকে Claude Code শুরু করুন। কারণ file-গুলো user account অনুসরণ করে না; এগুলো working directory অনুসরণ করে।