SSD Nodes Learn 8GB RAM — $66/বছর
নির্দেশিকা Matt Connorদ্বারা Matt Connor · আপডেট করা হয়েছে 2026-08-01

VPS-এ Claude Code-এর জন্য Recall মেমরি সেটআপ

Recall-এর local Python summarizer session-এর log ও summary রাখে। VPS-এ এটি সেটআপ করে API token ছাড়া memory কীভাবে token সাশ্রয় করে, তা মাপুন।

Verified Every command ran end-to-end on a fresh Ubuntu 24.04 server, July 30, 2026.

Claude Code মেমরির জন্য Recall কী করে

Recall হলো Claude Code-এর একটি plugin, যা প্রতিটি project-এর জন্য session-গুলোর মধ্যে মেমরি সংরক্ষণ করে। এটি আপনার project-এর ভেতরের একটি .recall/ folder-এ দুটি markdown file লেখে: কী ঘটেছে তার append-only log এবং আপনি কোথায় কাজ থামিয়েছেন তার সংক্ষিপ্ত summary। উভয় file-ই আপনি যে machine-এ কাজ করছেন সেখানে একটি local Python summarizer তৈরি করে। তাই এই মেমরির জন্য কোনো API token খরচ হয় না।

এটি একটি ছোট কিন্তু নিয়মিত সমস্যা সমাধান করে। আপনি মঙ্গলবার আপনার VPS-এ একটি session বন্ধ করেন। বুধবার Claude Code মঙ্গলবারের কোনো তথ্য জানে না। আপনাকে project-টি হাতে আবার ব্যাখ্যা করতে হয়, অথবা কাজটি বোঝার জন্য model-কে repository-এর অর্ধেক আবার পড়তে দিতে হয়। উভয় ক্ষেত্রেই token খরচ হয়। দ্বিতীয় পদ্ধতিতে খরচ অনেক বেশি হয়।

July 2026 অনুযায়ী Recall version 0.4.0 বর্তমান, এবং project-টি MIT licensed। এটি একটি plugin। এর কোনো অংশ network call করে না।

VPS-এ আপনার যা প্রয়োজন

Recall-এর capture hooks হলো plugin-এর সঙ্গে প্রকাশিত Python scripts। কোনো third-party dependency নেই, তাই একমাত্র প্রকৃত প্রয়োজন হলো একটি interpreter।

python3 -V

Ubuntu 24.04-এ এর উত্তর হলো Python 3.12.3। Recall Python 3.9 এবং পরবর্তী সংস্করণ সমর্থন করে। Minimal container images-এ কখনও কোনো interpreter থাকে না। তখন shell-এর উত্তর হয় python3: command not found। এগিয়ে যাওয়ার আগে একটি interpreter install করুন।

sudo apt update && sudo apt install -y python3

Summarizer-এর একটি ধাপের জন্য NumPy একটি optional accelerator। এটি আপনার প্রয়োজন নেই।

python3 -c "import numpy"

এখানে ModuleNotFoundError: No module named 'numpy' গ্রহণযোগ্য উত্তর। Summarizer-এর একটি pure-Python path আছে। Project-এর test suite পরীক্ষা করে যে উভয় path একই sentences নির্বাচন করে।

Laptop-এর তুলনায় server-এ session memory বেশি গুরুত্বপূর্ণ। কারণ server-এর কাজ কয়েক দিন ধরে ছোট ছোট visit-এ আসে। আপনি যদি ইতিমধ্যে VPS-এ tmux-এ Claude Code চালিয়ে থাকেন, তাহলে Recall-ই গতকালের session আজকের session-এ বহন করে।

প্লাগইন মার্কেটপ্লেস থেকে Recall ইনস্টল করুন

Claude Code সেশনের ভেতরে টাইপ করার জন্য দুটি কমান্ড:

/plugin marketplace add raiyanyahya/recall
/plugin install recall@recall

দ্বিতীয় কমান্ডটি plugin@marketplace পড়ে। এখানে দুটি নামই recall, যা দেখে কপি-পেস্টের ভুল মনে হতে পারে, কিন্তু এটি ভুল নয়।

প্লাগইনের নিজস্ব একটি কমান্ড চালিয়ে ইনস্টলেশন পরীক্ষা করুন:

/recall:show

/recall:show বর্তমান সারাংশ প্রিন্ট করে। একেবারে নতুন প্রকল্পে প্রিন্ট করার মতো কিছু থাকে না। তাই আপনি আসলে পরীক্ষা করছেন, কমান্ডটি আদৌ আছে কি না। Claude Code যদি /recall:show চিনতে না পারে, তাহলে প্লাগইন লোড হয়নি এবং কোনো hook কার্যকর হবে না।

checkout থেকে চালাতে চাইলে, আগে repository clone করে সেটি যাচাই করুন:

git clone https://github.com/raiyanyahya/recall ~/recall
cd ~/recall && claude plugin validate .

claude plugin validate ., .claude-plugin/-এর manifest পড়ে প্লাগইনটির গঠন সঠিক কি না তা জানায়। এরপর claude --plugin-dir ~/recall দিয়ে আপনার project directory থেকে Claude Code চালু করুন।

hooks কী লিখবে এবং কখন

Recall তিনটি Claude Code hooks নিবন্ধন করে। প্রতিটি hook plugin directory থেকে একটি Python script চালায়।

  • SessionStart startup, resume এবং clear-এর সময় চালু হয়। এটি context.md প্রদর্শন করে, যাতে session শুরু হওয়ার সময় আপনার summary দৃশ্যমান থাকে।
  • Stop Claude-এর প্রতিটি response শেষ হওয়ার সময় চালু হয়। এটি সেই turn-টি log-এ যুক্ত করে।
  • SessionEnd session বন্ধ হওয়ার সময় চালু হয় এবং summary পুনরায় তৈরি করতে পারে।

এতে দুটি file তৈরি হয়। দুটিই .recall/-এর ভেতরে থাকে।

  • history.md হলো append-only record: prompts, responses, ব্যবহৃত files এবং চালানো commands।
  • context.md হলো তৈরি করা digest: goal, summary, next steps, ব্যবহৃত files, চালানো commands এবং git context।

একটি বাস্তব session-এর পরে directory-টি দেখুন।

ls -la .recall/

history.md-এর মধ্যে content থাকা উচিত। context.md একেবারেই নাও থাকতে পারে। এটিই default behaviour, কোনো ত্রুটি নয়। auto_save_context হলো off, যদি না আপনি এটি set করেন। তাই 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-এ আগে থেকেই থাকা sentences নির্বাচন করে। কোনো 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_history history.md লগ চালু বা বন্ধ করে।
  • auto_save_context off অথবা on_end গ্রহণ করে এবং ডিফল্ট হিসেবে off ব্যবহার করে।
  • summary_sentences নির্ধারণ করে কতটি বাক্য context.md-এ রাখা হবে। এই মান বাড়ালে সারাংশ দীর্ঘ হয় এবং সেশন শুরুর সময় লোড সামান্য বাড়ে।
  • ডিস্কে লেখার আগে redact সাধারণ secret pattern সরিয়ে দেয়।
  • include_git সারাংশে বর্তমান diff এবং সাম্প্রতিক commit যোগ করে।
  • max_input_chars একবারে summarizer কতটা history.md পড়বে, তার সর্বোচ্চ সীমা নির্ধারণ করে।

VPS-এ চলা প্রকল্পের জন্য স্বয়ংক্রিয় সংরক্ষণ চালু করাই কার্যকর পরিবর্তন। কারণ server-এ terminal বন্ধ হয়ে গেলে সেশন প্রায়ই আপনার ইচ্ছায় নয়, বরং terminal বিচ্ছিন্ন হওয়ার কারণে শেষ হয়।

{
  "auto_save_context": "on_end",
  "summary_sentences": 12
}

কনফিগারেশন পরিবর্তন না করে কিছু সময়ের জন্য capture বন্ধ করতে pause marker তৈরি করুন। আবার capture শুরু করতে marker-টি মুছে দিন।

touch .recall/.capture-paused

Production credential নিয়ে কাজ করার আগে এটি করুন। কারণ redaction একটি filter, নিশ্চয়তা নয়। একই কারণে সাধারণভাবে AI agent-এর নাগালের বাইরে secret রাখা জরুরি: নিরাপদ secret হলো সেটিই, যা agent কখনো দেখতে পায় না।

Recall কত টোকেন সাশ্রয় করে?

বিকল্পটি কী ছিল, তার ওপর এটি নির্ভর করে। সেশন শুরুর সময় একটি সারাংশ লোড করা কম খরচের। এটি যে কাজটি প্রতিস্থাপন করে, সেটির খরচ বেশি হতে পারে, কারণ প্রকল্প সম্পর্কে কোনো স্মৃতি না থাকা মডেল ফাইল পড়ে প্রকল্পটি আবার বুঝে নেয়।

ChartTypical cost of resuming work, per session
The data behind this chart
[
  {
    "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"
  }
]

এগুলো মাঝারি আকারের একটি প্রকল্পের সাধারণ হিসাব; আপনার প্রকল্পের পরিমাপ নয়। একটি Recall সারাংশ প্রায় 1,200 টোকেনে লোড হয়। এটি প্রকল্পে প্রকাশিত resume-এর জন্য এক থেকে দুই হাজার টোকেনের দাবির সঙ্গে সামঞ্জস্যপূর্ণ। আগের সম্পূর্ণ transcript পুনরায় চালালে পুরো কথোপকরণটি আবার লোড হয়, যার পরিমাণ প্রায় 85,000 টোকেন। ফাইল পড়ে মডেলকে প্রকল্পটি আবার বুঝতে দিলে খরচটি এই দুইটির মাঝামাঝি থাকে, প্রায় 30,000 টোকেন। Repository বড় হলে এই সংখ্যা বাড়ে। CLAUDE.md সারিটি তুলনার জন্য রাখা হয়েছে। এটি সংক্ষিপ্ত ও অপরিবর্তনীয় হওয়ায় কম খরচের, এবং গত রাতে কী ঘটেছে তার পরিবর্তে আপনার স্থায়ী নিয়মগুলো মডেলকে জানায়।

নিজের সংখ্যা পরিমাপ করুন। English গদ্যে একটি টোকেন প্রায় চারটি অক্ষরের সমান, আর কোডের ক্ষেত্রে সাধারণত এর চেয়ে কিছুটা কম।

wc -c .recall/context.md .recall/history.md
echo $(( $(wc -c < .recall/context.md) / 4 ))

একটি সেশনের মধ্যে, /context বর্তমানে context window-তে লোড থাকা বিষয়বস্তু দেখায়, আর /cost সেশনের মোট হিসাব জানায়। একটি সেশন কোনো পূর্বতথ্য ছাড়া শুরু করুন। পরের সেশনটি একটি সারাংশ প্রস্তুত রেখে শুরু করুন। তারপর তুলনা করুন। একটি সেশনের টোকেনগুলো আসলে কোথায় ব্যবহৃত হয় তার পূর্ণ বিবরণের জন্য Claude Code কীভাবে টোকেন ব্যবহার করে অংশে breakdown রয়েছে।

একটি সতর্কতা এই দাবিটিকে বাস্তবসম্মত রাখে। প্রতিটি সেশন শুরুর সময় সারাংশ লোড হয়। তাই যে সারাংশের ওপর আপনি কখনও কাজ করেন না, সেটি সাশ্রয়ের বদলে সামান্য অতিরিক্ত খরচ। আপনার সেশন দীর্ঘ না হলে summary_sentences-কে ডিফল্ট মানের কাছাকাছি রাখুন।

সেশন ছাড়া সারাংশ পুনর্নির্মাণ

আপনি যদি repository ক্লোন করে থাকেন, তাহলে summarizer-এর নিজস্ব command-line entry point আছে। টার্মিনালের সঙ্গে কোনো session বন্ধ হয়ে গেলে এবং তবুও digest প্রয়োজন হলে VPS-এ এটি কার্যকর।

python3 ~/recall/scripts/make_context.py --help

সহায়তা আউটপুটে এটি গ্রহণ করা flags তালিকাভুক্ত থাকে: project root-এর জন্য --cwd, নির্দিষ্ট transcript file-এর জন্য --transcript, output বন্ধ করার জন্য --quiet, এবং claudeopencode-এর মধ্যে বেছে নেওয়ার জন্য --harness। এটি কোনো project-এ নির্দেশ করুন:

python3 ~/recall/scripts/make_context.py --cwd /srv/projects/api

এটি session transcript পড়ে এবং history.md, তারপর আপনার দেওয়া directory-র অধীনে context.md লিখে। আপনি যদি marketplace-এর মাধ্যমে install করে থাকেন, তাহলে plugin এমন একটি directory-তে থাকে যা Claude Code পরিচালনা করে, এবং একই কাজ করার জন্য /recall:save-ই সমর্থিত পদ্ধতি।

কেন কিছুই লেখা হচ্ছে না

সম্পূর্ণ সেশনের পর কোনো .recall/ directory নেই। Hooks কখনো চালু হয়নি। Plugin লোড হয়েছে কি না নিশ্চিত করতে /recall:show টাইপ করুন, তারপর python3 -V চালান। Hook command প্রথমে python3 এবং পরে python চেষ্টা করে। তাই এমন কোনো box-এ, যেখানে দুটির কোনোটিই নেই, কিছু লেখা হয় না এবং এ বিষয়ে কোনো সতর্কতাও দেখানো হয় না।

history.md-এর আকার বাড়ে, কিন্তু context.md কখনো পরিবর্তিত হয় না। ডিফল্টভাবে auto_save_context হলো off/recall:save চালান, অথবা key-টির মান on_end নির্ধারণ করুন এবং SessionEnd hook-কে কাজটি করতে দিন।

Files ভুল project-এর অধীনে দেখা যায়। Claude Code যে directory থেকে শুরু করা হয়, তার আপেক্ষিক অবস্থানে Recall লেখে। তাই home directory থেকে session শুরু করলে memory সেখানেই লেখা হয়। Project root থেকে শুরু করুন এবং files আসলে কোথায় লেখা হয়েছে তা খুঁজতে ls -la .recall/ ব্যবহার করুন।

Capture বন্ধ হয়ে গেছে, কিন্তু কোনো সতর্কতা দেখানো হয়নি। ls -a .recall/ দিয়ে pause marker আছে কি না পরীক্ষা করুন। গত সপ্তাহে তৈরি করা .capture-paused file এখনও কাজ করছে।

দীর্ঘ session-এর পর summary-তে খুব কম তথ্য থাকে। max_input_chars summarizer input 200000 characters-এ সীমাবদ্ধ রাখে। তাই অত্যন্ত দীর্ঘ log কেটে যায়। এটি rotate করুন।

mv .recall/history.md .recall/history-2026-07-30.md

এরপর একটি সংক্ষিপ্ত session চালান এবং নতুন history.md তৈরি হয়েছে কি না নিশ্চিত করতে আবার ls -la .recall/ পরীক্ষা করুন।

Recall যেখানে থামে

Recall একটি লগ এবং সারাংশ-প্রস্তুতকারী টুল। এটি কী কী অন্তর্ভুক্ত করে না, তা স্পষ্টভাবে জানা জরুরি।

সারাংশ-প্রস্তুতকারীটি extractive পদ্ধতিতে কাজ করে। TextRank ইতিমধ্যে history.md-এ থাকা বাক্য বেছে নেয়। তাই কোনো সিদ্ধান্ত সঠিক ছিল কি না, এটি তা বিচার করে না। মঙ্গলবারের লগে থাকা ভুল সিদ্ধান্ত বুধবারের ভালো সিদ্ধান্তের মতোই দেখায়। বিষয়টি গুরুত্বপূর্ণ হলে context.md পড়ুন এবং হাতে সংশোধন করুন। এটি একটি markdown ফাইল। আপনি এটি সম্পাদনা করতে পারবেন।

কোনো search নেই। প্রতিটি project-এর জন্য আপনি একটি বর্তমান সারাংশ এবং ক্রমবর্ধমান একটি লগ পান। project-গুলোর মধ্যে query করা যায় এমন কোনো memory পান না। তিন সপ্তাহ আগে database সম্পর্কে কী সিদ্ধান্ত নিয়েছিলেন, তা জানতে হলে history.md-এ grep করতে হবে।

একটি session-এর মধ্যে এটি সাহায্য করে না। session চলাকালে context window পূর্ণ হয়ে যাওয়া একটি ভিন্ন সমস্যা। এর সমাধানও ভিন্ন। একটি session-এর মধ্যে context window পরিচালনা করা এই guide-এর সহায়ক লেখা।

নিরাপত্তার নকশা অনুযায়ী সারাংশকে অবিশ্বস্ত input হিসেবে বিবেচনা করা হয়। context.md fenced এবং label-সহ inject করা হয়। Claude এটি ব্যবহারের আগে অনুমতি চায়। এই নকশার কারণ হলো, commit করা .recall/ directory-তে commit access থাকা যেকোনো ব্যক্তি এমন text লিখতে পারে, যা আপনার agent পড়বে। .recall/ personal না shared, তা একবার নির্ধারণ করুন: personal memory-এর জন্য এটি .gitignore-এ যোগ করুন, অথবা commit করে অন্য যেকোনো contribution-এর মতো review করুন। agent unattended অবস্থায় চললে, VPS-এ Claude Code নিরাপদে চালানো বৃহত্তর boundary সম্পর্কে নির্দেশনা দেয়।

Redaction সর্বোচ্চ সম্ভাব্য প্রচেষ্টা হিসেবে করা হয়। এটি API keys, tokens, PEM blocks এবং .env assignments-এর মতো সাধারণ pattern লক্ষ্য করে। commit করার আগে .recall/ পড়ুন।

Version number-টি বর্তমান পরিপক্বতা সঠিকভাবে প্রকাশ করে। July 2026-এ 0.4.0 version-এ config keys এবং file layout এখনও release-গুলোর মধ্যে পরিবর্তিত হতে পারে। তাই নির্ভরশীল setup upgrade করার আগে changelog পড়ুন।

FAQ

Recall কি আমার কোড বা ট্রান্সক্রিপ্ট কোথাও পাঠায়?

না। ক্যাপচার হুক এবং সামারাইজার আপনার নিজের মেশিনে চলা Python স্ক্রিপ্ট। প্লাগইনে কোনো API key নেই এবং এটি কোনো network call করে না। সামারাইজ করার সময় কোনো মডেলের পরিবর্তে TF-IDF এবং TextRank ব্যবহার করা হয়। তাই এই ধাপে কোনো খরচ নেই এবং মেশিন offline থাকলেও এটি কাজ করে। এর বিনিময়ে summary extractive হয়: এটি আপনার log থেকে বাক্য বেছে নেয়, নতুন বাক্য লেখে না।

আমার .recall/context.md অনুপস্থিত বা পুরোনো কেন?

auto_save_context-এর ডিফল্ট মান off। তাই আপনি /recall:save চালালেই কেবল summary পুনরায় তৈরি হয়। প্রতিটি session শেষ হলে এটি পুনর্লিখতে recall.config.json-এ "auto_save_context": "on_end" সেট করুন। history.md-ও অনুপস্থিত হলে hooks একেবারেই চলছে না। /recall:show দিয়ে plugin লোড হয়েছে কি না নিশ্চিত করুন। এরপর ওই box-এ python3 -V উত্তর দেয় কি না নিশ্চিত করুন, কারণ hooks হলো Python স্ক্রিপ্ট।

Recall প্রতি session-এ কতটা সাশ্রয় করে?

একটি summary লোড করতে প্রায় 1,200 tokens লাগে। এর বিপরীতে, কোনো model-কে কাজের বর্তমান অবস্থান নির্ধারণ করতে repository আবার পড়তে হলে সাধারণত 30,000 tokens লাগে। এগুলো সাধারণ হিসাব। একটি session-এর মধ্যে wc -c .recall/context.md এবং /context command ব্যবহার করে আপনার নিজের পরিমাপ করুন। এ সময় cold start-এর সঙ্গে summary থেকে resume করা start-এর তুলনা করুন।

আমার কি এখনও একটি 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 শুরু করুন। কারণ files working directory অনুসরণ করে, user account নয়।