SSD Nodes Learn Hosting plans →
নির্দেশিকা Matt Connorদ্বারা Matt Connor

VPS-এ AI এজেন্টের জন্য Memmy মেমোরি হাব সেটআপ

আপনার AI এজেন্টদের জন্য একটি শেয়ারড মেমোরি স্টোর হিসেবে Memmy ব্যবহার করুন। Ubuntu সার্ভারে সোর্স থেকে বিল্ড করুন এবং 18960 পোর্টে সার্ভিসটি চালু করে লোকাল ডেটাবেস ম্যানেজ করুন।

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

Memmy কী এবং এটি কী সংরক্ষণ করে

Memmy হলো AI agent-এর জন্য একটি local memory hub, যা আপনার নিজের VPS (virtual private server)-এ চলে। এটি আপনার agent-গুলো কী শিখেছে তার একটি SQLite database সংরক্ষণ করে। ওই সার্ভারের প্রতিটি agent একই store থেকে data পড়ে এবং তাতে data লেখে। Projectটি memmy-agent MemTensor-এর, MIT licensed, এবং 1 November 2026 অনুযায়ী version 1.2.401-এ রয়েছে; Memory-এর version আলাদাভাবে পরিচালিত হয় এবং সেটি 2.1.7।

সার্ভারে এর শুধু একটি অংশ প্রয়োজন। Memmy এমন একটি memory service সরবরাহ করে, যা http://127.0.0.1:18960-এ listening করে; একটি memmy-memory command line interface (CLI), যা ওই service-এর সঙ্গে যোগাযোগ করে; এবং একটি desktop workbench। Workbenchটি শুধু macOS ও Windows-এর জন্য packaged, তাই Linux VPS-এ আপনাকে service এবং CLI চালাতে হবে। Claude Code, Codex এবং Cursor-কে একটি shared memory দেওয়ার জন্য এটিই যথেষ্ট।

Memmy সংরক্ষিত data-কে চারটি layer-এ ভাগ করে। Capture প্রথমে একটি আলাদা Raw Turn সংরক্ষণ করে। এরপর captured প্রতিটি step-এর জন্য একটি করে L1 Trace item লেখে। এর মধ্যে request, response, tool call এবং result থাকে। L2 Policy হলো trace থেকে উদ্ভূত এমন procedure, যা কার্যকর প্রমাণিত হয়েছে। L3 World Model হলো কোনো project বা environment সম্পর্কে স্থিতিশীল knowledge। Skill হলো কোনো policy থেকে crystallise করা একটি callable procedure। Capture L1 trace তৈরি করে। Background job উচ্চতর layer-গুলোকে বিকশিত করে। Explicit write-এর মাধ্যমে একটি নির্দিষ্ট layer বেছে নেওয়া যায়। এই পার্থক্যগুলো বিমূর্ত মনে হলে, memory হলো agent তৈরি শেখার ধাপে ধাপে পথের পরবর্তী পর্যায়গুলোর একটি। আপনি নিজে একটি সাধারণ agent loop লিখে run-গুলোর মধ্যে এটি সবকিছু ভুলে যেতে দেখলে layer-গুলো সহজে বোঝা যায়।

প্রতি-টুল মেমরির তুলনায় shared memory hub কী পরিবর্তন করে

বর্তমানে প্রতিটি agent নিজস্ব memory নিয়ে আসে। Claude Code repository-তে instruction file রাখে। Cursor তার workspace database-এ rule রাখে। Codex ~/.codex-এর অধীনে session log রাখে। প্রতিটি store একটি নির্দিষ্ট tool-এর অন্তর্ভুক্ত। তাই সোমবার একটি tool-এ শেখানো কোনো তথ্য মঙ্গলবার অন্য tool-এ অজানা থাকে। এর জন্য আপনাকে দুবার খরচ দিতে হয়: একই project বারবার ব্যাখ্যা করতে token খরচ হয়, এবং অন্যত্র ইতিমধ্যে সংশোধন করা কোনো ধারণার ওপর agent কাজ করায় ভুল কাজ হয়।

একটি hub store-টিকে tool-এর বাইরে নিয়ে যায়। Memmy বিদ্যমান store-গুলোও পড়ে, তাই আপনাকে খালি database দিয়ে শুরু করতে হয় না। এর scanner দশটি built-in source চেনে: ~/.claude/projects/**/*.jsonl-এ Claude Code, ~/.codex/sessions/<YYYY>/<MM>/<DD>/rollout-*.jsonl-এ Codex, ~/.local/share/opencode/opencode.db-এ OpenCode, Cursor-এর state.vscdb file, ~/.openclaw-এর অধীনে OpenClaw-এর SQLite database, ~/.hermes-এ Hermes, ~/.dsh/sessions-এ DeepSeek Harness, ~/.workbuddy/projects-এ WorkBuddy, ~/.pi/agent/sessions-এ Pi এবং ~/.qwenworkcn/projects-এ QwenWork। Desktop workbench নাম দিয়ে আরেকটি agent যোগ করতে পারে। নিজে agent খুঁজে না পেলে তবেই এটি তার history path জানতে চায়। Server-side scanner-এ custom source নেই। তাই headless VPS-এ আপনি built-in source-গুলোই পাবেন।

Import counter-গুলো এক হবে না। এটিই প্রত্যাশিত আচরণ। Scanner source এবং conversation অনুযায়ী message group করে। এরপর প্রতিটি সম্পূর্ণ turn-এর জন্য একটি L1 memory লেখে। একটি turn সম্পূর্ণ ধরা হয় যখন এতে non-empty user content থাকে এবং এটি non-empty assistant message দিয়ে শেষ হয়। তাই কোনো turn অসম্পূর্ণ হলে পরবর্তী sync সেটি সম্পূর্ণ না করা পর্যন্ত এতে কোনো অবদান থাকে না। Conversation checkpoint এবং স্থায়ী turn ID ব্যবহার করে message deduplicate করা হয়। একই run-এ scanned count, imported message count এবং new memory count—তিনটিই আলাদা হবে।

এটি একটি session-এর ভিতরে Claude Code কীভাবে context পরিচালনা করে বিষয়টির সঙ্গে সম্পর্কিত। Context management নির্ধারণ করে একটি window-এ কী রাখা যাবে। Memory hub নির্ধারণ করে সেই window বন্ধ হওয়ার পর কী টিকে থাকবে।

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

  • Node.js 22 বা এর পরের সংস্করণ। Memmy-এর ডকুমেন্টেশনে এটি প্রয়োজনীয় বলা হয়েছে, আর Ubuntu 24.04-এ Node 18 রিলিজ করা হয়।
  • git এবং একটি build toolchain, কারণ better-sqlite3 একটি native module, যা install চলাকালে compile হতে পারে।
  • root workspace install এবং এর frontend build chain-এর জন্য পর্যাপ্ত RAM।
  • node_modules এবং database-এর জন্য পর্যাপ্ত খালি disk space।
sudo apt update
sudo apt install -y git build-essential python3 curl ca-certificates sqlite3
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs
node --version

ডকুমেন্ট করা source build-এর জন্য node --version-এর আউটপুটে v22 বা তার পরের সংস্করণ দেখা উচিত। এখানে v18 থাকলে NodeSource ধাপটি কার্যকর হয়নি। npm-এর engine-strict-এর default মান false, তাই অসামঞ্জস্যপূর্ণ engine declaration সাধারণত warning তৈরি করে; এটি স্বয়ংক্রিয়ভাবে install ব্যর্থ করে না।

Ubuntu 24.04-এ source থেকে Memmy ইনস্টল করুন

git clone https://github.com/MemTensor/memmy-agent.git
cd memmy-agent
cp .env.example .env
npm install
npm run memory:build

npm run memory:build, @memmy/memory workspace-কে Memory/dist-এ compile করে। এটি ওই workspace-এর জন্য প্রয়োজনীয় AgentSourceCore, memory viewer এবং integration asset-ও build করে। native module লোড হয়েছে কি না যাচাই করুন:

node -e "const Database = require('better-sqlite3'); const db = new Database(':memory:'); db.close(); console.log('better-sqlite3 loads')"

প্রিন্ট করার পরিবর্তে ওই লাইনটি error দিলে load অথবা database initialization ব্যর্থতার কারণ নির্ধারণ করতে error message পড়ুন। native module mismatch হলে npm rebuild better-sqlite3 চালান। কিছু চালু করার আগে প্রকল্পের নিজস্ব start script-ও ঠিক এই কাজটি করে।

README-তে bash scripts/dev-start.sh-কে একটি command দিয়ে start করার পদ্ধতি হিসেবে নথিভুক্ত করা হয়েছে। headless VPS-এ এটি চালাবেন না। এটি memory service-এর পাশে Electron desktop shell এবং port 19000-এ একটি Vite dev server চালু করে। Electron-এর জন্য display প্রয়োজন। তাই graphical session ছাড়া server-এ script-টি আটকে থাকে অথবা বন্ধ হয়ে যায়।

সাম্প্রতিক release-গুলোতে Linux x64 এবং arm64-এর জন্য memmy-agent-linux-cli.tar.gz এবং একটি install.sh-ও রয়েছে। Installer-এর জন্য 22.x-এর মধ্যে Node.js 22.23.4+, 24.x-এর মধ্যে 24.22.1+ অথবা 26.x-এর মধ্যে 26.12.1+ এবং একটি systemd user session প্রয়োজন। অন্য major version এটি প্রত্যাখ্যান করে। এটি memmy এবং memmy-memory launcher-কে ~/.local/bin-এ রাখে এবং memory service-কে 127.0.0.1:18960-এ user unit হিসেবে চালু করে। এই guide-এ source build রাখা হয়েছে, কারণ এটি এমন পদ্ধতি যেখানে চালানোর আগে প্রতিটি script পড়ে দেখা যায়।

Memory service শুরু করুন এবং এটি সাড়া দিচ্ছে কি না পরীক্ষা করুন

npm run memory:serve:dev

Source থেকে memory service চালানোর নথিভুক্ত পদ্ধতি এটি। এটি 127.0.0.1:18960-এ bind হয়, database ~/.memmy/memory-service/memory.sqlite-এ রাখে এবং configuration ~/.memmy/config.yaml থেকে পড়ে। এগুলো স্পষ্টভাবে নির্ধারণ করতে চাইলে server একই মান flag হিসেবেও গ্রহণ করে:

npm run memory:serve:dev -- \
  --host 127.0.0.1 --port 18960 \
  --db ~/.memmy/memory-service/memory.sqlite \
  --config ~/.memmy/config.yaml

দ্বিতীয় shell থেকে service-কে জিজ্ঞাসা করুন এটি সচল আছে কি না:

curl -sS http://127.0.0.1:18960/api/v1/health

Health endpoint কোনো token চায় না। তাই probe হিসেবে এটিই উপযুক্ত। curl code 7 দিয়ে শেষ হলে এবং Failed to connect to 127.0.0.1 port 18960 message দেখালে connection ব্যর্থ হয়েছে। এতে একাই listener আছে কি না নিশ্চিত হওয়া যায় না। Address, port এবং local firewall পরীক্ষা করুন। Service চালানো terminal-এ startup error দেখুন। Service চালু হলে ss -lntp | grep 18960 socket সক্রিয় আছে কি না নিশ্চিত করে।

বাকি HTTP API (application programming interface) /api/v1-এর অধীনে রয়েছে।

  • POST /api/v1/memory/add একটি memory লেখে এবং POST /api/v1/memory/search query চালায়।
  • GET /api/v1/memory/:id এবং DELETE /api/v1/memory/:id একটি entry পড়ে ও মুছে ফেলে।
  • POST /api/v1/sessions/open এবং POST /api/v1/sessions/:sessionId/close একটি agent session-এর শুরু ও শেষ নির্ধারণ করে।
  • POST /api/v1/turns/start এবং POST /api/v1/turns/:turnId/complete একটি turn record করে।
  • GET /api/v1/panel/overview, /api/v1/panel/analysis এবং /api/v1/panel/items dashboard-এ data পাঠায়।

Memmy একটি port block সংরক্ষণ করে। Headless ব্যবহারে আপনি শুধু প্রথম port ব্যবহার করেন: memory-এর জন্য 18960, gateway health-এর জন্য 18970, web UI ও admin HTTP-এর জন্য 18980, memmy serve যে OpenAI-compatible API শুরু করে তার জন্য 18990, এরপর desktop frontend-এর Vite dev server-এর জন্য 19000 এবং hot reload socket-এর জন্য 19001। Project-এর ports page-এ এখনও hot reload-এর জন্য 19010 দেওয়া আছে, কিন্তু Vite config-এ 19001 নির্ধারিত। আপনার system-এ এগুলোর কোনো port ইতিমধ্যে ব্যবহৃত হলে কোথায় খুঁজতে হবে, সেই তালিকাতেই তা উল্লেখ আছে।

memmy-memory কমান্ডটি আসলে কোথা থেকে আসে

সাধারণত প্রথমবার ইনস্টল করার সময় এখানেই ভুল হয়, তাই অনুমান না করে প্যাকেজ থেকে এটি পড়ে নিন। কমান্ডের নামের সাথে রিপোজিটরি নামের কোনো সম্পর্ক নেই। এটি ওয়ার্কস্পেসের bin ফিল্ড থেকে আসে যা এটিকে সংজ্ঞায়িত করে:

node -p "JSON.stringify(require('./Memory/package.json').bin)"

এটি {"memmy-memory":"./dist/src/cli/index.js"} প্রিন্ট করে। সুতরাং বিল্ট এন্ট্রি পয়েন্ট হলো Memory/dist/src/cli/index.js, এবং এটি শুধুমাত্র npm run memory:build-এর পরেই বিদ্যমান থাকে, কারণ বিল্ড প্রক্রিয়াই dist তৈরি করে এবং ফাইলটিকে এক্সিকিউটেবল হিসেবে চিহ্নিত করে। এটি সরাসরি চালান:

node Memory/dist/src/cli/index.js health

আপনি যদি আপনার PATH-এ ছোট নামটি রাখতে চান, তবে একই ফাইলটি লিঙ্ক করুন:

sudo ln -s "$PWD/Memory/dist/src/cli/index.js" /usr/local/bin/memmy-memory
memmy-memory health

CLI ডিফল্টভাবে http://127.0.0.1:18960 ব্যবহার করে এবং --url, --token, --config, --source ও --user-id গ্রহণ করে। এর সাবকমান্ডগুলো হলো init, health, search, add, get ও delete, এছাড়া রয়েছে session এবং turn কল যা মানুষ নয় বরং এজেন্টরা ব্যবহার করে, এবং সার্ভিসটি পরিচালনার জন্য install, upgrade, service ও stop। memmy-memory search "deploy steps" এবং memmy-memory add "staging migrates on deploy" হলো সেই দুটি কমান্ড যা একজন এজেন্ট সবচেয়ে বেশি চালায়।

Claude Code-কে Memmy-এর সঙ্গে কীভাবে সংযুক্ত করবেন?

Memmy নিজেকে Claude Code-এর মধ্যে server হিসেবে নিবন্ধন করে না। এটি Claude Code আগে থেকেই যে file পড়ে, সেগুলোর মাধ্যমে সংযুক্ত হয়। এটি কত দূর কাজ করবে, তা নির্ভর করে আপনি কোন memmy-memory চালাচ্ছেন তার ওপর। Source checkout থেকে memmy-memory init --agent claude একটি memmy-memory Skill ~/.claude/skills/-এ এবং একটি চিহ্নিত memory block ~/.claude/CLAUDE.md-এ লেখে। এরপর ওই নির্দেশনা অনুযায়ী Claude Code সাধারণ shell command হিসেবে memmy-memory চালায়। Linux installer ~/.local/bin-এ যে launcher রাখে, সেটি আরও এগিয়ে যায়। একই command ~/.claude/settings.json-এ SessionStart, UserPromptSubmit, Stop, PostCompact এবং SessionEnd-এর জন্য hook-ও নিবন্ধন করে। এগুলো প্রাসঙ্গিক memory যুক্ত করে এবং model-কে সিদ্ধান্ত নিতে না দিয়েই প্রতিটি সম্পূর্ণ turn সংরক্ষণ করে।

নির্দেশনাটি একবার হাতে লিখুন। এতে agent-কে ঠিক কী বলা হয়েছে, তা আপনি নিশ্চিতভাবে জানবেন। প্রতিটি session শুরুতে Claude Code project root থেকে CLAUDE.md পড়ে। তাই source path-এ নিচের মতো একটি section-ই সম্পূর্ণ integration:

## Memory

Before starting a task, run `memmy-memory search "<topic>"` and read what comes back.
When a task is done, run `memmy-memory add "<what you learned>"` for anything that will matter next session.

এটি আপনাকে কী সুবিধা দেয়, তা স্পষ্টভাবে বুঝুন। Hook ছাড়া এটি instruction-level integration। তাই model command চালানোর সিদ্ধান্ত নিলেই এটি কাজ করে। অন্যথায় কাজ করে না। কোনো কিছু এই call বাধ্যতামূলক করে না। কোনো session add ছাড়া শেষ হলে instruction নিজে কিছু সংরক্ষণ করেনি। তবে পরে history scan চালিয়ে সম্পূর্ণ turn import করা যায়। এটি Claude Code-এর নিজস্ব memory file ব্যবহারের মতোই একটি সমঝোতা। পার্থক্য হলো, store-টি shared। তাই একই machine-এ note Codex এবং Cursor-এও পৌঁছে যায়। Hook ব্যবহার করলে এই ঘাটতি দূর হয়। এই কারণেই durable memory, budget cap এবং permission rule-এর পাশাপাশি ইনস্টল করার মতো DeepSeek Harness plugin-গুলোর মধ্যে থাকে।

উল্টো দিকের সংযোগের জন্য কোনো setup দরকার হয় না। Memmy-এর scanner ইতিমধ্যে ~/.claude/projects/**/*.jsonl পড়ে। Claude Code তার session transcript এই স্থানেই লেখে। আপনি যে server-এ tmux session-এর মধ্যে Claude Code চালান, সেই server-এ Memmy চালান। তাহলে গতকালের কাজ কোনো configuration ছাড়াই memory হয়ে যাবে।

Memmy কি Claude Code-এর জন্য একটি MCP সার্ভার হিসেবে কাজ করে?

না, এবং এই বিষয়টি আগে থেকে জানা থাকলে আপনার মূল্যবান সময় বাঁচবে। MCP (model context protocol)-এর ক্লায়েন্ট এবং সার্ভার থাকে। Memmy হলো একটি ক্লায়েন্ট। এটি MCP সার্ভারের সাথে সংযোগ স্থাপন করে এবং এর নিজস্ব এজেন্ট রানটাইমে সেই সার্ভারের টুলগুলো প্রদান করে। এটি এমন কোনো MCP এন্ডপয়েন্ট প্রকাশ করে না যার দিকে claude mcp add নির্দেশ করতে পারে। রিপোজিটরিতে থাকা একমাত্র MCP ব্রিজটি ডেস্কটপ লোকাল API-এর ভেতরে থাকা Composio ইন্টিগ্রেশনের অন্তর্গত, এবং সেই API তার নিজস্ব x-memmy-mcp-token হেডারের পেছনে 127.0.0.1-এ একটি র‍্যান্ডম পোর্ট বাইন্ড করে।

ক্লায়েন্ট সাইডটি MEMMY_CONFIG ফাইল দ্বারা নির্দেশিত ~/.memmy/config.yaml-এ, tools.mcpServers-এর অধীনে কনফিগার করা হয়:

tools:
  mcpServers:
    example:
      type: stdio
      command: npx
      args:
        - "-y"
        - "your-mcp-server"
      toolTimeout: 30
      enabledTools:
        - "*"

type-এ stdio, sse এবং streamableHttp ব্যবহার করা যায়। একটি stdio সার্ভার Memmy-এর চাইল্ড প্রসেস হিসেবে চলে, যার অর্থ হলো এর কমান্ডটি অবশ্যই একই মেশিনে থাকতে হবে এবং একই ব্যবহারকারীর অধীনে চলতে হবে। আপনি যদি ইতিমধ্যে একটি VPS-এ MCP সার্ভার চালু রেখে থাকেন, তবে সেগুলোই এখানে তালিকাভুক্ত করতে হবে।

মেমরি স্টোর ব্যক্তিগত রাখা

Memmy-এর সবকিছু ~/.memmy-এর অধীনে থাকে: config.yaml, workspace, memory-service/memory.sqlite এবং runtime file। Scanning ও ingestion স্থানীয়ভাবে হয়, এবং memory ওই local SQLite file-এ লেখা হয়। তাই default posture প্রকৃতপক্ষে local।

Cloud connection একটি আলাদা নজরদারির পথ। MEMMY_CLOUD_SERVICE cloud origin নির্ধারণ করে। Code এতে কোনো default সেট করে না। তবে .env.example, যা installation steps .env-এ copy করে, সেটিকে https://api.memmy.cn-এ সেট করে। এটি trial token ব্যবহার করে account mode চালায়। এটি সেট করা থাকলে Memmy-এর analytics code API key mode-এও usage event পাঠায়। এতে event ও command name, version এবং একটি installation ID থাকে। CLI শুধু নির্দিষ্ট command word report করে। Search query বা memory text কখনো পাঠায় না। Value unset থাকলে analytics code কিছুই পাঠায় না। তাই শুধু API key ব্যবহার করা server-এ কোনো কিছু শুরু করার আগে .env-এর ওই line খালি করে দিন। Memory improvement program privacy settings-এর একটি আলাদা toggle।

Model call আরেকটি পথ। Hosted embedding provider configure করলে যে memory text embed করা হচ্ছে, তা vector-এ রূপান্তরের জন্য ওই provider-এর কাছে পাঠানো হয়। Local storage সেখানে সহায়তা করে না। এই পথ বন্ধ করতে built-in local embedding provider ব্যবহার করুন, অথবা নিজে host করা embedding endpoint ব্যবহার করুন। Hosted summary, evolution এবং relevance-filter model-ও এসব job চলার সময় memory content পায়। তাই ওই model setting-গুলোও পরীক্ষা করুন।

Port 18960 loopback address-এ রাখুন। এর জন্য firewall rule প্রয়োজন নেই। কারণ 127.0.0.1-এ bound কোনো service পুরো server-এর বাইরে থেকে reachable নয়। এর পরিবর্তে SSH ব্যবহার করে laptop থেকে এতে সংযোগ করুন:

ssh -N -L 18960:127.0.0.1:18960 you@your-vps

বর্তমান memory service non-loopback bind address প্রত্যাখ্যান করে। Config-এ storage.token, অথবা MEMMY_MEMORY_TOKEN কিংবা MEMORY_SERVICE_TOKEN environment variable সেট করলে bearer token দিয়ে সাধারণ memory API call সুরক্ষিত হয়। Health endpoint unauthenticated থাকে। Browser viewer local request-এর জন্য আলাদা check ব্যবহার করে। Config value-এ ${ENV_NAME} reference ব্যবহার করা যায়। তাই token এবং model API key file-এর বাইরে রাখা যায়। এটি অন্য সব জায়গায় AI agent-এর বাইরে secret রাখা-র একই অভ্যাস। ভবিষ্যতের কোনো version default bind address পরিবর্তন করলে default deny ufw policy অতিরিক্ত সুরক্ষা হিসেবে কাজ করবে।

~/.memmy-কে বিশ্বাস করার আগে এর ব্যাকআপ নিন

memory.sqlite-ই সম্পূর্ণ store। sqlite-vec extension-এর মাধ্যমে vector-গুলোও একই file-এ থাকে। তাই একটি file-ই ব্যাকআপ হিসেবে যথেষ্ট। service লেখার সময় cp দিয়ে এটি copy করলে database অসম্পূর্ণ অবস্থায় কপি হতে পারে। SQLite-এর নিজস্ব backup command ব্যবহার করুন:

mkdir -p ~/memmy-backup
sqlite3 ~/.memmy/memory-service/memory.sqlite ".backup '$HOME/memmy-backup/memory.sqlite'"

এতে service চালু থাকা অবস্থায়ও একটি সামঞ্জস্যপূর্ণ copy তৈরি হয়। নির্ধারিত সময়সূচি অনুযায়ী এটিকে server-এর বাইরে পাঠান। এ কাজের জন্য off-site storage-এ restic ব্যবহার করা যায়। config.yaml হারালে provider settings আবার লিখে দেওয়া যায়। memory.sqlite হারালে শেষ ব্যবহারযোগ্য ব্যাকআপের পর record করা memories হারিয়ে যাবে। schema migration-এর আগে service একটি local backup-ও তৈরি করে। তবে সেটি বর্তমান off-site copy নয়।

systemd-এর অধীনে memory service চালান

Shell-এ চলা npm run memory:serve:dev shell বন্ধ হলে বন্ধ হয়ে যায়। একটি unit file reboot-এর পরেও service চালু রাখে। এটি memmy user হিসেবে চলে, /opt/memmy-এ থাকা checkout থেকে শুরু হয় এবং ওই user-এর home-এ থাকা config ব্যবহার করে। Shell-এ চলা copy বন্ধ করুন। এরপর checkout ও config সরিয়ে নিয়ে memmy-memory link-টি নতুন অবস্থানে নির্দেশ করুন:

sudo useradd -m -s /bin/bash memmy
sudo mkdir -p /opt/memmy
sudo mv ~/memmy-agent /opt/memmy/memmy-agent
sudo chown -R memmy:memmy /opt/memmy
sudo ln -sfn /opt/memmy/memmy-agent/Memory/dist/src/cli/index.js /usr/local/bin/memmy-memory
sudo install -d -o memmy -g memmy -m 700 /home/memmy/.memmy
sudo install -o memmy -g memmy -m 600 ~/.memmy/config.yaml /home/memmy/.memmy/config.yaml
sudo install -d -m 755 /etc/memmy

Service-টি তার database /home/memmy/.memmy-এর অধীনে রাখে। তাই এটি খালি store নিয়ে শুরু হয়।

[Unit]
Description=Memmy memory service
After=network-online.target

[Service]
Type=simple
User=memmy
WorkingDirectory=/opt/memmy/memmy-agent
EnvironmentFile=/etc/memmy/memory.env
ExecStart=/usr/bin/npm run memory:serve:dev
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

Token-টি unit-এর বাইরে রাখুন। এটি /etc/memmy/memory.env-এ রাখুন। File-টির মালিক root হবে এবং mode হবে 600:

MEMMY_CONFIG=/home/memmy/.memmy/config.yaml
MEMMY_MEMORY_TOKEN=replace-this-with-a-long-random-string
sudo systemctl daemon-reload
sudo systemctl enable --now memmy-memory
systemctl status memmy-memory --no-pager
curl -sS http://127.0.0.1:18960/api/v1/health

Status output-এ status=203/EXEC দেখা গেলে বোঝায় systemd ExecStart একেবারেই চালাতে পারেনি। তাই which npm পরীক্ষা করুন। NodeSource install-এ এটি /usr/bin/npm হয়, আর nvm-এ এটি user-এর home-এর অধীনে থাকে। systemd সেটি খুঁজে পাবে না। কোনো unit শুরু হয়ে সঙ্গে সঙ্গে বন্ধ হলে তার exit status এবং journal পরীক্ষা করুন। code 0 হলে পরিষ্কারভাবে exit করেছে। অন্য ফলাফলের মধ্যে non-zero exit, signal এবং timeout থাকতে পারে। Service-এর output দেখতে journalctl -u memmy-memory -n 50 চালান। VPS-এ অন্য যেকোনো systemd service-এর ক্ষেত্রেও একই পদ্ধতি প্রযোজ্য।

প্রকল্পটি এখন user-level-এর জন্য দুটি বিকল্প দেয়। Source build-এর জন্য README-তে দেওয়া পদ্ধতিটি হলো memmy-memory install --service-only। এটি নির্দিষ্ট Memory runtime download করে এবং একটি user service register করে। Linux installer memmy-memory.service-কে systemd --user unit হিসেবে সেট আপ করে। কোনোটিই linger enable করে না। তাই logout-এর পরেও ওই user-এর service manager চালু রাখতে এবং boot-এর সময় এটি শুরু করতে sudo loginctl enable-linger <user> চালান।

Memmy এখনো যা করে না

  • Linux desktop build নেই। Packaging script-গুলো macOS এবং Windows কভার করে। তাই workbench এবং এর onboarding wizard সার্ভারেই উপলভ্য নয়। Memory service-এ এখন http://127.0.0.1:18960/viewer/-এ একটি browser viewer আছে, যা উপরের SSH tunnel-এর মাধ্যমে ব্যবহার করা যায়। Linux-এর জন্য এর পরিবর্তে একটি CLI tarball এবং install.sh দেওয়া হয়।
  • memory:serve:dev একটি development path হিসেবে tsx-এর মাধ্যমে TypeScript entry point চালায়। Compiled output-এর জন্য repository-তে memory:serve-ও রয়েছে। আপনার checkout-এ আসলে কোন script আছে তা দেখতে কোনো argument ছাড়াই npm run চালান।
  • Retrieval সর্বশেষ 2,000টি vector row থেকে search window তৈরি করে। এরপর ওই window-এর মধ্যে Top-K selection প্রয়োগ করে। খুব বড় store-এ পুরোনো কোনো memory এই window-এর বাইরে থাকতে পারে।
  • Capture-এর পরে embedding তৈরি হয়। এতে ব্যর্থ হলে agent-এর turn আটকে না রেখে item-টি retry queue-তে যায়। কিছুক্ষণ আগে যোগ করা memory vector search-এ তখনও পাওয়া নাও যেতে পারে।
  • নিজস্ব স্থানীয় SQLite database-সহ দ্বিতীয় সার্ভারের memory আলাদা থাকে।

1 November 2026 অনুযায়ী Version 1.2.401 এখনো এমন একটি নতুন project-এর পরিচয় দেয়, যা দ্রুত পরিবর্তিত হচ্ছে। Release বদলালে flag, path এবং script name-ও বদলাতে পারে। যেকোনো জায়গা থেকে কপি করা command, এমনকি এখানকার command-ও সরাসরি বিশ্বাস না করে নিজের checkout-এ bin field এবং npm run-এর output দেখুন।

FAQ

স্বাস্থ্য পরীক্ষা connection refused দেখাচ্ছে কেন?

Failed to connect to 127.0.0.1 port 18960 সহ curl-এর exit code 7 connection ব্যর্থ হয়েছে বলে জানায়। Memmy বন্ধ, crash করেছে, অন্য কোথাও listening করছে, নাকি অপ্রাপ্য—তা জানায় না। address ও port পরীক্ষা করুন, ss -lntp | grep 18960 চালান, এবং service যেখানে শুরু হয়েছে সেই terminal বা journal পড়ুন। log-এ native SQLite module mismatch জানালে npm rebuild better-sqlite3 চালান। Node version-ও পরীক্ষা করুন: source docs-এ Node 22 বা তার পরের version প্রয়োজন, আর Linux installer শুধু 22.x-এর মধ্যে Node.js 22.23.4+, 24.x-এর মধ্যে 24.22.1+ অথবা 26.x-এর মধ্যে 26.12.1+ গ্রহণ করে।

source থেকে build করার পরে memmy-memory command কোথা থেকে আসে?

এটি repository name থেকে নয়, @memmy/memory workspace package-এর bin field থেকে আসে। checkout-এর ভিতরে node -p "JSON.stringify(require('./Memory/package.json').bin)" চালালে এটি {"memmy-memory":"./dist/src/cli/index.js"} দেখায়। npm run memory:build চালানোর পরেই ওই file তৈরি হয়, কারণ build dist তৈরি করে এবং file-টিকে executable হিসেবে চিহ্নিত করে। এটিকে node Memory/dist/src/cli/index.js health হিসেবে চালান, অথবা সংক্ষিপ্ত নাম ব্যবহারের জন্য /usr/local/bin-এ symlink তৈরি করুন।

claude mcp add দিয়ে কি Memmy-কে Claude Code-এ যোগ করা যায়?

না। Memmy একটি MCP client, MCP server নয়। এটি ~/.memmy/config.yaml-এর tools.mcpServers-এর অধীনে তালিকাভুক্ত server-গুলোর সঙ্গে outbound connection তৈরি করে এবং তাদের tool নিজের runtime-এ সরবরাহ করে। Claude Code উল্টো পদ্ধতিতে Memmy-তে পৌঁছায়: shell command হিসেবে memmy-memory CLI চালিয়ে। memmy-memory init --agent claude একটি Skill এবং একটি CLAUDE.md block লেখে, যা Claude Code-কে কখন এটি ব্যবহার করতে হবে তা জানায়। Linux installer-এর launcher-ও Claude Code hook যোগ করে, যাতে turn-গুলো স্বয়ংক্রিয়ভাবে সংরক্ষিত হয়।

Memmy চালালে কি আমার memory কোনো cloud service-এ পাঠানো হয়?

Scanning ও ingestion স্থানীয়ভাবে চলে, এবং memory আপনার নিজের disk-এর ~/.memmy/memory-service/memory.sqlite-এ লেখা হয়। .env.example-এ https://api.memmy.cn হিসেবে নির্ধারিত MEMMY_CLOUD_SERVICE account mode ও trial token সরবরাহ করে এবং memory text ছাড়া usage analytics গ্রহণ করে। আপনি শুধু API key ব্যবহার করলে এটি খালি করে দিন। Memory improvement program-এর আলাদা privacy toggle আছে। একটি hosted embedding model যে memory text-কে vector-এ রূপান্তর করে, তা গ্রহণ করে। এই processing স্থানীয় রাখতে built-in local provider ব্যবহার করুন, অথবা নিজে চালানো কোনো endpoint ব্যবহার করুন। Hosted summary, evolution এবং relevance-filter model-ও ওই job চলার সময় memory content গ্রহণ করে।

এই লেখাটি কি কাজে লেগেছে?