আপনার কোডিং এজেন্ট সবকিছু মনে রাখে। আর বারবার ব্যাখ্যা করতে হয় না।
iii engine-এর উপর তৈরি
Claude Code, GitHub Copilot CLI, Cursor, Gemini CLI, Codex CLI, Hermes, OpenClaw, pi, OpenCode এবং যে কোনো MCP ক্লায়েন্টের জন্য স্থায়ী মেমরি।
এই গিস্টটি Karpathy-র LLM Wiki প্যাটার্নকে কনফিডেন্স স্কোরিং, লাইফসাইকেল, নলেজ গ্রাফ এবং হাইব্রিড সার্চ দিয়ে সম্প্রসারিত করে: agentmemory হলো তার বাস্তবায়ন।
---
## ইনস্টল
প্রয়োজনীয়তা:
- Node.js 20 বা তার নতুন সংস্করণ, npm এবং npx সহ (`node -v`, `npm -v`, এবং `npx -v`)।
- macOS/Linux-এ iii-engine-এর স্বয়ংক্রিয় ইনস্টলেশনের জন্য `curl`, একটি POSIX `sh`, এবং `tar`-ও প্রয়োজন। `node:20-slim`-এর মতো মিনিমাল ইমেজে এগুলো থাকতে পারে না।
- নেটিভ Windows-এ পিন করা iii-engine v0.22.1 `iii.exe` ম্যানুয়ালি ইনস্টল করতে হয়। WSL2 বা Docker Desktop অন্য সাপোর্টেড পথ।
ক্যানোনিকাল ফ্রেশ-ইনস্টল কমান্ড:
```bash
npx -y @agentmemory/agentmemory@latest
```
প্রথম রান একটি ইন্টারঅ্যাক্টিভ সেটআপ: কোন এজেন্টগুলো ওয়্যার করবেন তা বেছে নিন (Claude Code, Cursor, Codex, Gemini CLI, OpenCode, ...), একটি LLM প্রোভাইডার বাছুন বা কিলেস থাকুন, আর এটি কনফিগ সিড করে, মেমরি সার্ভার ও তার পিন করা iii engine চালু করে, এবং গ্লোবালি ইনস্টল করার প্রস্তাব দেয় যাতে পরে যেকোনো জায়গায় খালি `agentmemory` কমান্ড কাজ করে। `-y` npx-এর প্যাকেজ প্রম্পট মেনে নেয় এবং `@latest` কোনো পুরোনো ক্যাশড রিলিজ এড়িয়ে যায়। একটি প্রোভাইডার LLM ফিচারগুলো উপলব্ধ করে, কিন্তু LLM-লিখিত অবজারভেশন কম্প্রেশন শুরু হয় তখনই যখন `AGENTMEMORY_AUTO_COMPRESS=true`-ও সেট করা থাকে।
কিলেস মোডে ভেক্টর এমবেডিং বন্ধ থাকে। `memory_recall` (`mem::search` পাথ) BM25 ব্যবহার করে, আর `memory_smart_search` গ্রাফ ডেটা থাকলে স্ট্রাকচারাল গ্রাফ ম্যাচও মিশিয়ে দিতে পারে। ফ্রি অন-ডিভাইস সিম্যান্টিক রিকল পেতে, `~/.agentmemory/.env`-এ `EMBEDDING_PROVIDER=local` সেট করে রিস্টার্ট করুন। প্রথম এমবেডিং রিকোয়েস্ট `Xenova/all-MiniLM-L6-v2` ডাউনলোড করে; সেই প্রাথমিক মডেল ডাউনলোডের পর ইনফারেন্স লোকালি চলে।
লোকাল রানটাইম চারটি পোর্ট ব্যবহার করে: REST/MCP HTTP-র জন্য `3111`, iii স্ট্রিমের জন্য `3112`, ভিউয়ারের জন্য `3113`, এবং iii ওয়ার্কার WebSocket-এর জন্য `49134`। স্থায়ী iii স্টেট থাকে macOS-এ `~/Library/Application Support/agentmemory`-তে, Linux-এ `$XDG_DATA_HOME/agentmemory` বা `~/.local/share/agentmemory`-তে, এবং Windows-এ `%APPDATA%\agentmemory`-তে। এটি ওভাররাইড করতে `--data-dir ` বা `AGENTMEMORY_DATA_DIR` ব্যবহার করুন, এবং প্রতি রিস্টার্টে একই ভ্যালু পুনরায় ব্যবহার করুন। ব্যাকওয়ার্ড কম্প্যাটিবিলিটির জন্য, ইনস্ট্যান্স 0-এর জন্য প্ল্যাটফর্মের ডিফল্টের চেয়ে আগে থেকে থাকা `./data/state_store.db` বা `./data/iii-config.yaml`-কে প্রাধান্য দেওয়া হয়; একটি এক্সপ্লিসিট ফ্ল্যাগ বা এনভায়রনমেন্ট ওভাররাইড তখনও জেতে।
তারপর প্রমাণ করুন রিকল কাজ করছে এবং আপনার এজেন্টকে তার স্কিল দিন:
```bash
npx -y @agentmemory/agentmemory@latest demo # seed sample sessions + exercise recall
npx skills add rohitg00/agentmemory -y # 17 native skills so your agent knows when to reach for memory
```
ডিফল্ট কিলেস মোডে কিওয়ার্ড সার্চগুলো BM25-র মাধ্যমে হিট করার কথা। ডেমোর `database performance optimization` কোয়েরি উদ্দেশ্যমূলকভাবে সিম্যান্টিক, আর একটি এমবেডিং প্রোভাইডার কনফিগার না করা পর্যন্ত এটি শূন্য রিটার্ন করতে পারে।
একটি কোডিং এজেন্টকে পুরো কাজটা করতে দিতে চান? তাকে একটা মাত্র ইন্সট্রাকশন দিন:
> Retrieve and follow the instructions at: https://raw.githubusercontent.com/rohitg00/agentmemory/main/INSTALL_FOR_AGENTS.md
`agentmemory connect `-এর মাধ্যমে যেকোনো সময় আরও এজেন্ট ওয়্যার করুন — [Works with every agent](#works-with-every-agent)-এ ২০টি অ্যাডাপ্টার তালিকাভুক্ত আছে। সম্পূর্ণ কমান্ড রেফারেন্স [Quick Start](#quick-start)-এ।
Windows
সবচেয়ে সহজ পথ WSL2। নেটিভ Windows ইঞ্জিন সেটআপের জন্য পিন করা v0.22.1 ZIP ডাউনলোড করে `iii.exe` ম্যানুয়ালি এক্সট্র্যাক্ট করতে হয়; CLI এটি অটো-এক্সট্র্যাক্ট করে না। Docker Desktop-ও সাপোর্টেড। স্টেপ-বাই-স্টেপের জন্য [Windows notes](#windows) দেখুন।
Global install / EACCES
```bash
npm install -g @agentmemory/agentmemory@latest
```
উপরের npx কমান্ডটিই ক্যানোনিকাল ফ্রেশ-ইনস্টল পথ থেকে যায় এবং গ্লোবাল-প্রিফিক্স পারমিশন সমস্যা এড়ায়।
npx পুরোনো ভার্সন সার্ভ করছে
npx প্রতি ভার্সন অনুযায়ী ক্যাশ করে। `npx -y @agentmemory/agentmemory@latest` দিয়ে লেটেস্ট ফোর্স করুন, বা একবার ক্যাশ পরিষ্কার করুন `rm -rf ~/.npm/_npx` দিয়ে (macOS/Linux; Windows-এ `%LOCALAPPDATA%\npm-cache\_npx` ডিলিট করুন)।
নিজের iii engine ইতিমধ্যে চলছে
agentmemory iii-engine v0.22.1 পিন করে এবং অন্য ভার্সনের সাথে অ্যাটাচ করবে না (ওয়ার্কার অন্য ইঞ্জিনের প্রোটোকল বলতে পারে না)। অন্য ইঞ্জিনটি থামান, তারপর `npx -y @agentmemory/agentmemory@latest` চালান। এটি পিন করা v0.22.1 `~/.agentmemory/bin`-এ ইনস্টল ও রান করে, আপনার নিজের `iii` অক্ষতই রাখে।
---
agentmemory এমন যেকোনো এজেন্টের সাথে কাজ করে যা হুক, MCP, বা REST API সাপোর্ট করে। সব এজেন্ট একই মেমরি সার্ভার শেয়ার করে।
Claude Code নেটিভ প্লাগইন + 12 হুক + MCP
Codex CLI নেটিভ প্লাগইন + 6 হুক + MCP
GitHub Copilot CLI MCP + প্লাগইন হুক/স্কিল
Cursor নেটিভ প্লাগইন + 7 হুক + MCP
OpenCode ক্যাপচার প্লাগইন + MCP
Devin 6 হুক + স্কিল + MCP
OpenClaw নেটিভ প্লাগইন + MCP
Hermes নেটিভ প্লাগইন + MCP
pi নেটিভ প্লাগইন + MCP
OpenHuman নেটিভ Memory trait ব্যাকএন্ড
Gemini CLI MCP সার্ভার
Antigravity MCP + হুক
Claude Desktop MCP সার্ভার
Warp connect + MCP + স্কিল
Zed MCP সার্ভার
Cline MCP সার্ভার
Continue MCP সার্ভার
Droid MCP সার্ভার
Kiro MCP সার্ভার
Qwen Code MCP সার্ভার
DeepSeek Harness MCP সার্ভার
Roo Code MCP সার্ভার
Kilo Code MCP সার্ভার
Goose MCP সার্ভার
Aider REST API
MCP বা HTTP বলতে পারা যে কোনো এজেন্টের সাথে কাজ করে। একটি সার্ভার, এবং সবার মধ্যে শেয়ার করা মেমরি।
---
আপনি প্রতি সেশনে একই আর্কিটেকচার ব্যাখ্যা করেন। আপনি একই বাগ আবার খুঁজে পান। আপনি একই পছন্দগুলো পুনরায় শেখান। বিল্ট-ইন মেমরি (CLAUDE.md, .cursorrules) ২০০ লাইনে আটকে যায় এবং বাসি হয়ে যায়। agentmemory এটা ঠিক করে। এটি নিঃশব্দে আপনার এজেন্ট যা করে তা ক্যাপচার করে, সার্চযোগ্য মেমরিতে কম্প্রেস করে, এবং পরের সেশন শুরু হলে সঠিক কনটেক্সট ইনজেক্ট করে। একটি কমান্ড। সব এজেন্টে কাজ করে।
**কী বদলে যায়:** সেশন ১-এ আপনি JWT auth সেটআপ করলেন। সেশন ২-এ আপনি রেট লিমিটিং চাইলেন। এজেন্ট আগে থেকেই জানে আপনার auth `src/middleware/auth.ts`-এ jose middleware ব্যবহার করে, আপনার টেস্ট টোকেন ভ্যালিডেশন কভার করে, এবং আপনি Edge কম্প্যাটিবিলিটির জন্য jsonwebtoken-এর বদলে jose বেছে নিয়েছিলেন — আর কোনো পুনরায় ব্যাখ্যা বা কপি-পেস্ট ছাড়াই।
```bash
npx -y @agentmemory/agentmemory@latest
```
ডিফল্টভাবে, agentmemory আপনি যে রেপো থেকে এটি চালু করেছেন তার বাইরে iii-engine স্টেট জমা রাখে: macOS-এ `~/Library/Application Support/agentmemory`, Linux-এ `$XDG_DATA_HOME/agentmemory` বা `~/.local/share/agentmemory`, এবং Windows-এ `%APPDATA%\agentmemory`। একটি পুরোনো `./data/state_store.db` বা `./data/iii-config.yaml` থাকলে, প্ল্যাটফর্ম ডিফল্টের আগে ইনস্ট্যান্স 0-এর জন্য সেটিই পুনরায় ব্যবহার করা হয়। স্পষ্টভাবে একটি লোকেশন বেছে নিতে, `--data-dir ` পাস করুন বা `AGENTMEMORY_DATA_DIR` সেট করুন; এই দুটি এক্সপ্লিসিট সেটিংই লিগ্যাসি ডিসকভারির উপর প্রাধান্য পায়:
```bash
npx -y @agentmemory/agentmemory@latest --data-dir ~/.agentmemory-projects/main
AGENTMEMORY_DATA_DIR=~/.agentmemory-projects/main npx -y @agentmemory/agentmemory@latest
```
নেটিভ এবং Docker লঞ্চ একই রিজলভড হোস্ট ডিরেক্টরি ব্যবহার করে; Docker এটি `/data`-এ বাইন্ড-মাউন্ট করে। `--instance 1` রিজলভড ডিরেক্টরিতে `instance-1` যুক্ত করে এবং আলাদা ডিফল্ট পোর্ট চতুষ্টয় `3211/3212/3213/49234` বেছে নেয়।
সর্বশেষ রিলিজ নোট: [CHANGELOG.md](../CHANGELOG.md)।
---
### রিট্রিভাল অ্যাকুরেসি
**coding-agent-life-v1** (ইন-হাউস করপাস, স্যান্ডবক্সে রিপ্রোডিউসযোগ্য)
| অ্যাডাপ্টার | P@5 | R@5 | টপ-5 হিট রেট | p50 লেটেন্সি |
|---|---|---|---|---|
| **agentmemory hybrid** | **0.240** | **1.000** | **15 / 15** | 14 ms |
| grep বেসলাইন | 0.227 | 0.967 | 15 / 15 | 0 ms |
এই করপাসের জন্য **P@5-এর গাণিতিক সর্বোচ্চ সীমায় (0.240, স্কোরকার্ড দেখুন)** 100% টপ-5 হিট রেট। Hybrid প্রতিটি গোল্ড সেশন রিট্রিভ করে; multi-session temporal কোয়েরিতে grep 2টির মধ্যে 1টি গোল্ড মিস করে। উন্নতিটা **রিকল + টেম্পোরাল**-এর, অ্যাগ্রিগেট প্রিসিশনের নয়। এই বেঞ্চমার্কটি ছোট এবং গোল্ড-স্পার্স; নিচের বড় LongMemEval-S আরও ভালোভাবে পার্থক্য দেখায়। প্রতি-টাইপ সম্পূর্ণ ব্রেকডাউন + সংশোধন নোট: [`docs/benchmarks/2026-05-20-coding-agent-life-v1.md`](../docs/benchmarks/2026-05-20-coding-agent-life-v1.md)।
**LongMemEval-S** (ICLR 2025, 500 প্রশ্ন)
| সিস্টেম | R@5 | R@10 | MRR |
|---|---|---|---|
| **agentmemory** | **95.2%** | **98.6%** | **88.2%** |
| শুধু BM25 ফলব্যাক | 86.2% | 94.6% | 71.5% |
> এমবেডিং মডেল: `all-MiniLM-L6-v2` (লোকাল, ফ্রি, API কী ছাড়াই)। সম্পূর্ণ রিপোর্ট: [`benchmark/LONGMEMEVAL.md`](../benchmark/LONGMEMEVAL.md), [`benchmark/QUALITY.md`](../benchmark/QUALITY.md), [`benchmark/SCALE.md`](../benchmark/SCALE.md)। প্রতিযোগীদের সাথে তুলনা: [`benchmark/COMPARISON.md`](../benchmark/COMPARISON.md), যা agentmemory-কে mem0, Letta, Khoj, supermemory, TencentDB Agent Memory, MemPalace, Zep/Graphiti, Cognee, Hippo-র সাথে তুলনা করে।
**লোকালি রিপ্রোডিউস করুন:** [`eval/README.md`](../eval/README.md), LongMemEval `_s` (পাবলিক 500-প্রশ্ন) + `coding-agent-life-v1` (ইন-হাউস 15-সেশন করপাস)-এর জন্য একটি অ্যাডাপ্টার-পাগেবল হার্নেস। grep / vector / agentmemory অ্যাডাপ্টারগুলো পাশাপাশি স্কোর করে, NDJSON আউটপুট দেয়, প্রকাশিত স্কোরকার্ড [`docs/benchmarks/`](../docs/benchmarks/)-এ জমা হয়।
**[codegraph](https://github.com/colbymchenry/codegraph), [Understand Anything](https://github.com/Lum1104/Understand-Anything), এবং [Graphify](https://github.com/safishamsi/graphify)-এর সাথে ভালোভাবে জুটি বাঁধে।** কোড-গ্রাফ ইনডেক্সিং, মাল্টি-এজেন্ট বিল্ড পাইপলাইন, এবং docs / PDF / ছবি / ভিডিও জুড়ে বিস্তৃত নলেজ গ্রাফ। agentmemory কাজটা মনে রাখে; এই তিনটি প্রজেক্ট কনটেক্সট লেয়ারের বাকি অংশ আলোকিত করে। রেসিপি + প্রশ্ন-রাউটিং টেবিল: [`docs/recipes/pairings.md`](../docs/recipes/pairings.md)।
---
agentmemory
mem0 (63K ⭐)
Letta / MemGPT (24K ⭐)
Khoj (36K ⭐)
supermemory (29K ⭐)
TencentDB Agent Memory (22K ⭐)
MemPalace (54K ⭐)
oracleagentmemory
Hippo
বিল্ট-ইন (CLAUDE.md)
ধরন
মেমরি ইঞ্জিন + MCP সার্ভার
মেমরি লেয়ার API
সম্পূর্ণ এজেন্ট রানটাইম
পার্সোনাল AI
মেমরি API + অ্যাপ
টিম মেমরি হাব (LLM প্রক্সি)
ভেক্টর মেমরি (OSS)
মেমরি ইঞ্জিন (Oracle DB)
মেমরি সিস্টেম
স্ট্যাটিক ফাইল
রিট্রিভাল R@5
95.2%
68.5% (LoCoMo)
83.2% (LoCoMo)
N/A
স্ব-ঘোষিত
PersonaMem 76% (স্ব-ঘোষিত)
~96.6% (স্ব-ঘোষিত)
94.4% (স্ব-ঘোষিত)
N/A
N/A (grep)
অটো-ক্যাপচার
12 হুক (ম্যানুয়াল পরিশ্রম শূন্য)
ম্যানুয়াল add() কল
এজেন্ট সেলফ-এডিট
ম্যানুয়াল
API-সাইড এক্সট্রাকশন
প্রক্সি ইন্টারসেপশন (base-URL সোয়াপ)
ম্যানুয়াল
API এক্সট্রাকশন
ম্যানুয়াল
ম্যানুয়াল এডিটিং
সার্চ
BM25 + Vector + Graph (RRF ফিউশন)
Vector + Graph
Vector (আর্কাইভাল)
সিম্যান্টিক
Vector + RAG
4 ধরনের অ্যাসেট (Chat / Skill / Wiki / CodeGraph)
কেবল Vector
Vector + সিম্যান্টিক
ডিকে-ওয়েটেড
সব কনটেক্সটে লোড করে
মাল্টি-এজেন্ট
MCP + REST + lease + signal
API (কোনো কো-অর্ডিনেশন নেই)
কেবল Letta রানটাইমের মধ্যে
না
না
টিম রোল + শেয়ার্ড অ্যাসেট
না
কেবল স্কোপড
মাল্টি-এজেন্ট শেয়ার্ড
প্রতি-এজেন্ট ফাইল
ফ্রেমওয়ার্ক লক-ইন
নেই (যেকোনো MCP ক্লায়েন্ট)
নেই
বেশি (Letta-ই ব্যবহার করতে হবে)
স্ট্যান্ডঅ্যালোন
নেই
প্রক্সি প্রতিটি মডেল কলের সামনে থাকে
নেই
Oracle Database
নেই
প্রতি-এজেন্ট ফরম্যাট
এক্সটার্নাল ডিপেন্ডেন্সি
নেই (SQLite + iii-engine)
Qdrant / pgvector
Postgres + ভেক্টর DB
একাধিক
ম্যানেজড ক্লাউড
Docker স্ট্যাক (Core + Hub + Proxy)
ভেক্টর স্টোর
Oracle AI Database
নেই
নেই
মেমরি লাইফসাইকেল
4-টায়ার কনসোলিডেশন + ডিকে + অটো-ফরগেট
প্যাসিভ এক্সট্রাকশন
এজেন্ট-ম্যানেজড
ম্যানুয়াল
অটো-ফরগেট
ম্যানুয়াল রিভিউ; অটো-রাউটিং চলছে
নেই
বলা নেই
ডিকে + কনসোলিডেশন
ম্যানুয়াল প্রুনিং
টোকেন এফিশিয়েন্সি
~1,900 টোকেন/সেশন ($10/বছর)
ইন্টিগ্রেশন অনুযায়ী ভিন্ন
কোর মেমরি কনটেক্সটে থাকে
ভিন্ন হয়
ক্লাউড প্রাইসিং
বলা নেই
কোনো টোকেন বাজেট নেই
LLM-ব্যাকড (ভিন্ন হয়)
ভিন্ন হয়
240 অবজারভেশনে 22K+ টোকেন
রিয়েল-টাইম ভিউয়ার
হ্যাঁ (পোর্ট 3113)
ক্লাউড ড্যাশবোর্ড
ক্লাউড ড্যাশবোর্ড
ওয়েব UI
ক্লাউড ড্যাশবোর্ড
হাব ওয়েব UI
না
না
না
না
সেলফ-হোস্টেড
হ্যাঁ (ডিফল্ট)
অপশনাল
অপশনাল
হ্যাঁ
না (কেবল ক্লাউড)
হ্যাঁ (Docker)
হ্যাঁ
হ্যাঁ (Oracle DB)
হ্যাঁ
হ্যাঁ
বেঞ্চমার্ক নোট: শুধু agentmemory-র R@5 আমাদের নিজের মাপা ফল (LongMemEval-S, benchmark/COMPARISON.md থেকে রিপ্রোডিউসযোগ্য)। mem0 এবং Letta-র সংখ্যাগুলো তাদের প্রকাশিত LoCoMo নম্বর (একটি ভিন্ন ডেটাসেট); MemPalace, supermemory, TencentDB (PersonaMem), এবং oracleagentmemory-র সংখ্যাগুলো ভেন্ডরের স্ব-ঘোষিত দাবি যা আমরা স্বতন্ত্রভাবে রিপ্রোডিউস করিনি (oracleagentmemory-র রানটি একটি Oracle AI Database-এর বিরুদ্ধে GPT-5.5 ব্যবহার করেছিল)। পাশাপাশি দেখানো হয়েছে কেবল মোটামুটি ধারণা দেওয়ার জন্য, অভিন্ন ডেটার উপর মুখোমুখি তুলনা নয়। স্টার সংখ্যা আনুমানিক এবং সময়ের সাথে বদলায়।
**নতুন প্রতিযোগী** যাদের জানা দরকার, [`benchmark/COMPARISON.md`](../benchmark/COMPARISON.md)-এ গভীরভাবে তুলনা করা হয়েছে:
| সিস্টেম | ⭐ | অ্যাঙ্গেল |
|--------|---|-------|
| Zep / Graphiti | 30K | টেম্পোরাল নলেজ গ্রাফ; সবচেয়ে শক্তিশালী প্রকাশিত টেম্পোরাল-কোয়েরি ফল (LongMemEval 63.8%), কিন্তু গ্রাফ অ্যাসিনক্রোনাসভাবে তৈরি হয় তাই নতুন তথ্য দেরিতে আসতে পারে |
| Cognee | 30K | ডকুমেন্ট-থেকে-নলেজ-গ্রাফ ইনজেশন, কেবল Python, সেশন ক্যাপচারের বদলে স্ট্রাকচারড এনটিটি এক্সট্র্যাকশনের জন্য তৈরি |
এদের কেউই কোডিং-এজেন্ট হুক থেকে অটো-ক্যাপচার করে না, লোকাল-ফার্স্ট ভিউয়ার দেয় না, বা কিলেস চলে না — যে কম্বিনেশনের উপর agentmemory তৈরি।
---
কম্প্যাটিবিলিটি: এই রিলিজ `iii-sdk` 0.22.1 টার্গেট করে এবং iii-engine v0.22.1 পিন করে।
### 30 সেকেন্ডে ট্রাই করুন
```bash
# Terminal 1: start the server
npx -y @agentmemory/agentmemory@latest
# Terminal 2: seed sample data and see recall in action
npx -y @agentmemory/agentmemory@latest demo
```
`demo` 3টি রিয়েলিস্টিক সেশন সিড করে (JWT auth, N+1 কোয়েরি ফিক্স, রেট লিমিটিং) এবং সেগুলোর বিরুদ্ধে সার্চ চালায়। কিলেস ইনস্টলে ভেক্টর বন্ধ থাকে, তাই `mem::search` কিওয়ার্ড কোয়েরিগুলো BM25-এর মাধ্যমে হিট করার কথা, যেখানে `database performance optimization` শূন্য রিটার্ন করতে পারে। গ্রাফ ডেটা থাকলে `smart-search` এর উপরও স্ট্রাকচারাল গ্রাফ ম্যাচ রিটার্ন করতে পারে। সিম্যান্টিক কোয়েরিটিকে ভেক্টরের মাধ্যমে N+1 ফিক্স খুঁজে পাওয়াতে, `EMBEDDING_PROVIDER=local` সেট করুন, রিস্টার্ট করুন, এবং প্রথম মডেল ডাউনলোড শেষ হতে দিন।
মেমরি লাইভ তৈরি হওয়া দেখতে `http://localhost:3113` খুলুন।
### ফ্রেশ ইনস্টল এবং রিস্টার্ট পারসিস্টেন্স যাচাই করুন
সার্ভার চলা অবস্থায়, REST, health, ভিউয়ার, এবং iii-ব্যাকড রানটাইম স্ট্যাটাস যাচাই করুন:
```bash
curl -fsS http://localhost:3111/agentmemory/livez
curl -fsS http://localhost:3111/agentmemory/health
curl -fsS -o /dev/null http://localhost:3113/
npx -y @agentmemory/agentmemory@latest status
```
স্টার্টআপ রেডি প্যানেল চারটি পোর্টের হিসাব রাখে: 3111-এ REST/MCP HTTP, 3112-এ iii স্ট্রিম, 3113-এ ভিউয়ার, এবং 49134-এ iii ওয়ার্কার WebSocket। `status` agentmemory-র স্বাস্থ্য এবং অ্যাক্টিভ প্রোভাইডার/এমবেডিং মোড নিশ্চিত করে। একটি প্রোব সেভ করুন এবং নিশ্চিত করুন এটি সার্চযোগ্য:
```bash
curl -fsS -X POST http://localhost:3111/agentmemory/remember \
-H 'Content-Type: application/json' \
-d '{"content":"agentmemory restart persistence probe","concepts":["install-check"]}'
curl -fsS -X POST http://localhost:3111/agentmemory/smart-search \
-H 'Content-Type: application/json' \
-d '{"query":"restart persistence probe","limit":5}'
```
তারপর `npx -y @agentmemory/agentmemory@latest stop` চালান, Terminal 1-এ ক্যানোনিকাল কমান্ড আবার শুরু করুন, `/agentmemory/livez`-এর জন্য অপেক্ষা করুন, এবং সার্চটি আবার করুন। প্রোবটি তখনও রিটার্ন হতে হবে। কাস্টম `--data-dir` বেছে নিয়ে থাকলে, রিস্টার্টেও একই ডিরেক্টরি পাস করুন।
### দৈনন্দিন কমান্ড
ইনস্টল ও সেটআপ উপরে [Install](#install)-এ আছে (প্রথম রান আপনাকে গাইড করে)। দৈনন্দিন ব্যবহারের জন্য:
```bash
agentmemory # start the server
agentmemory stop # stop it cleanly
agentmemory connect # wire another agent
agentmemory doctor # interactive diagnostics + fix prompts
agentmemory remove # uninstall everything we created
```
### সেশন রিপ্লে
agentmemory যে সেশনই রেকর্ড করুক, তা রিপ্লেযোগ্য। ভিউয়ার খুলুন, **Replay** ট্যাবটি বেছে নিন, এবং টাইমলাইন স্ক্রাব করুন: প্রম্পট, টুল কল, টুল রেজাল্ট, এবং রেসপন্স আলাদা ইভেন্ট হিসেবে রেন্ডার হয়, play/pause, স্পিড কন্ট্রোল (0.5x থেকে 4x), এবং কিবোর্ড শর্টকাট (টগল করতে স্পেস, স্টেপ করতে অ্যারো) সহ।
পুরোনো Claude Code JSONL ট্রান্সক্রিপ্ট নিয়ে আসতে:
```bash
# Import everything under the default ~/.claude/projects
npx -y @agentmemory/agentmemory@latest import-jsonl
# Or import a single file
npx -y @agentmemory/agentmemory@latest import-jsonl ~/.claude/projects/-my-project/abc123.jsonl
```
ইমপোর্ট করা সেশনগুলো নেটিভগুলোর পাশে Replay পিকারে দেখা যায়। হুডের নিচে প্রতিটি এন্ট্রি `mem::replay::load`, `mem::replay::sessions`, এবং `mem::replay::import-jsonl` iii ফাংশনের মধ্য দিয়ে যায়, কোনো সাইড-চ্যানেল সার্ভার ছাড়াই। প্রতিটি ইমপোর্ট করা ট্রান্সক্রিপ্ট সার্চের জন্য ইনডেক্সড হয়, `import` অরিজিন চ্যানেলে স্ট্যাম্পড হয়, এবং একটি সেশন ক্রিস্টাল ও লেসনের জন্য মাইনড হয়।
> **`import-jsonl`-কে আপনার মূল ক্যাপচার পাথ হিসেবে ব্যবহার করলে এটা জেনে রাখুন:** Claude Code-এর `cleanupPeriodDays` (`~/.claude/settings.json`-এ, ডিফল্ট **30**) সেই উইন্ডোর চেয়ে পুরোনো JSONL ট্রান্সক্রিপ্ট `~/.claude/projects/` থেকে অটো-ডিলিট করে দেয়। মাস-কয়েক পুরোনো Claude Code হিস্ট্রির উপর যদি আপনি agentmemory ফ্রেশ ইনস্টল করেন, তাহলে 30 দিনের চেয়ে পুরোনো যা কিছু প্রথম ইমপোর্টের আগেই হারিয়ে গেছে। এক্ষেত্রে cron-এ `import-jsonl` চালান, `cleanupPeriodDays` বাড়িয়ে দিন, বা অটো-ক্যাপচার হুক ওয়্যার করুন (ডিফল্ট প্লাগইন ইনস্টল পাথ) যাতে সেশন লাইভ থাকা অবস্থায় প্রতিটি টার্ন agentmemory-তে পৌঁছে যায় এবং JSONL ক্লিনআপ আর গুরুত্বপূর্ণ না থাকে।
### আপগ্রেড / মেইনটেন্যান্স
আপনি ইচ্ছাকৃতভাবে আপনার লোকাল রানটাইম আপডেট করতে চাইলে মেইনটেন্যান্স কমান্ড ব্যবহার করুন:
```bash
npx -y @agentmemory/agentmemory@latest upgrade
```
সতর্কতা: এই কমান্ড বর্তমান workspace/runtime বদলে দেয়। এটি JavaScript ডিপেন্ডেন্সি আপডেট করতে পারে এবং পিন করা `iiidev/iii:0.22.1` Docker ইমেজ টানতে পারে। এটি কখনো আনপিনড বা নতুন iii engine ইনস্টল করে না।
ইমপ্লিমেন্টেশনের ডিটেইল থাকে `src/cli.ts`-এ (দেখুন `src/cli.ts:544-595` অঞ্চলের কাছে `runUpgrade`)।
### Claude Code (এক ব্লক, পেস্ট করুন)
```text
Install agentmemory: run `npx -y @agentmemory/agentmemory@latest` in a separate terminal to start the memory server and its pinned iii engine. Then run `/plugin marketplace add rohitg00/agentmemory` and `/plugin install agentmemory` — the plugin registers all 12 hooks, 17 skills, AND auto-wires the `@agentmemory/mcp` stdio server via its `.mcp.json`, so you get 54 MCP tools (memory_smart_search, memory_save, memory_sessions, memory_governance_delete, etc.) without any extra config step. Verify with `curl http://localhost:3111/agentmemory/health`. The real-time viewer is at http://localhost:3113. Keyless mode disables vectors: `memory_recall` uses BM25, and `memory_smart_search` can also use existing structural graph data. Set `EMBEDDING_PROVIDER=local` in `~/.agentmemory/.env` and restart to opt into on-device semantic recall.
```
#### প্লাগইন ইনস্টল ছাড়া Claude Code (MCP-স্ট্যান্ডঅ্যালোন পাথ)
আপনি `/plugin install` ব্যবহার না করে সরাসরি `~/.claude.json`-এর মাধ্যমে agentmemory-র MCP সার্ভার ওয়্যার করলে, Claude Code কখনো `${CLAUDE_PLUGIN_ROOT}` রিজলভ করে না এবং আপনাকে `~/.claude/settings.json`-এ হুক স্ক্রিপ্টগুলো অ্যাবসোলিউট পাথে পয়েন্ট করতে হয়। সেই পাথগুলোতে সাধারণত agentmemory-র ভার্সন এমবেড থাকে (যেমন `~/.codex/plugins/cache/agentmemory/agentmemory/0.9.22/scripts/…`), তাই পরের আপগ্রেড নিঃশব্দে প্রতিটি হুক ভেঙে দেয়।
ওয়ার্কঅ্যারাউন্ড:
```bash
agentmemory connect claude-code --with-hooks
```
এটি একই হুক কমান্ডগুলো `~/.claude/settings.json`-এ মার্জ করে, বর্তমানে ইনস্টল করা `@agentmemory/agentmemory` প্যাকেজের বান্ডলড `plugin/` ডিরেক্টরির অ্যাবসোলিউট পাথ দিয়ে। পাথ রিফ্রেশ করতে agentmemory আপগ্রেড করার পর কমান্ডটি আবার চালান। একই ফাইলের ইউজার এন্ট্রিগুলো রক্ষিত থাকে; শুধু আগের agentmemory এন্ট্রিগুলো রিপ্লেস হয়। `/plugin install` পাথটি এখনও সুপারিশকৃত পদ্ধতি।
রিমোট বা প্রোটেক্টেড ডিপ্লয়মেন্টের জন্য, `AGENTMEMORY_URL` এবং `AGENTMEMORY_SECRET` সেট করে Claude Code লঞ্চ করুন। প্লাগইন দুটি ভ্যালুই তার বান্ডলড MCP সার্ভারে পাস করে; `AGENTMEMORY_URL` খালি থাকলে, MCP শিম `http://localhost:3111` ব্যবহার করে।
### Codex CLI (Codex প্লাগইন প্ল্যাটফর্ম)
```bash
# 1. start the memory server in a separate terminal
npx -y @agentmemory/agentmemory@latest
# 2. register the agentmemory marketplace and install the plugin
codex plugin marketplace add rohitg00/agentmemory
codex plugin add agentmemory@agentmemory
```
Codex প্লাগইনটি Claude Code প্লাগইনের মতো একই `plugin/` ডিরেক্টরি থেকে আসে। এটি রেজিস্টার করে:
- চলমান daemon-এর একটি bundled stdio MCP bridge, কোনো npm download বা fallback store ছাড়াই। একটি unreleased build টেস্ট করতে [লোকাল Codex গাইড](../docs/plugins/codex-local.md) দেখুন।
- 6টি লাইফসাইকেল হুক: `SessionStart`, `UserPromptSubmit`, `PreToolUse`, `PostToolUse`, `PreCompact`, `Stop`
- 9টি ইনভোকেবল স্কিল: `/recall`, `/remember`, `/session-history`, `/forget`, `/recap`, `/handoff`, `/lesson`, `/commit-context`, `/commit-history`, এবং আরও 8টি রেফারেন্স স্কিল যা এজেন্ট প্রয়োজনমতো লোড করে (memory discipline, MCP টুল, REST API, কনফিগ, এজেন্ট, হুক, আর্কিটেকচার, এবং স্কিল-লেখার গাইড)
Codex-এর হুক ইঞ্জিন হুক সাবপ্রসেসে `CLAUDE_PLUGIN_ROOT` ইনজেক্ট করে (দেখুন [`codex-rs/hooks/src/engine/discovery.rs`](https://github.com/openai/codex/blob/main/codex-rs/hooks/src/engine/discovery.rs)), তাই একই হুক স্ক্রিপ্ট দুই হোস্টেই কোনো ডুপ্লিকেশন ছাড়া কাজ করে। Subagent / SessionEnd / Notification / TaskCompleted / PostToolUseFailure ইভেন্টগুলো কেবল Claude-Code-এর, এবং Codex-এর জন্য রেজিস্টার করা হয় না।
#### Codex হুকের বিশ্বাস ও কম্প্যাটিবিলিটি
Codex CLI 0.150.1-এর সাথে নেটিভ প্লাগইন হুক ডিসপ্যাচ ভেরিফাই করা হয়েছে। ক্যাপচার আশা করার আগে প্লাগইন হুকগুলোকে বিশ্বাস করুন। Desktop-এর আচরণ তার বান্ডলড রানটাইমের উপর নির্ভর করে; একটি workaround চালু করার আগে `/hooks` চেক করুন এবং একটি captured event নিশ্চিত করুন।
যদি আপনার হোস্টের গ্লোবাল হুক প্রয়োজন হয়, তাহলে কমান্ডগুলো `~/.codex/hooks.json`-এ মিরর করুন। MCP যখন আগে থেকেই ওয়্যারড থাকে, তখন বর্তমান কনেক্টরের হুক ইনস্টলেশন পর্যন্ত পৌঁছাতে `--force` প্রয়োজন হয়:
```bash
agentmemory connect codex --with-hooks --force
```
এটি গ্লোবাল হুক মার্জ করে এবং agentmemory MCP এন্ট্রি রিরাইট করে, অসম্পর্কিত এন্ট্রিগুলো সংরক্ষণ করে। `--force` ব্যবহারের আগে কাস্টম agentmemory এন্ডপয়েন্ট সেটিংস রিভিউ করুন। স্ক্রিপ্ট পাথ রিফ্রেশ করতে আপগ্রেড করার পর আবার চালান। ডুপ্লিকেট ক্যাপচার এড়াতে নেটিভ প্লাগইন হুক বা গ্লোবাল কপির মধ্যে একটি সক্রিয় করুন।
### GitHub Copilot CLI
VS Code এজেন্ট মোডের জন্য, [Copilot MCP এবং অটোমেটিক-ক্যাপচার গাইড](../docs/plugins/copilot.md#vs-code-copilot-local-agent-sessions) ব্যবহার করুন। CLI কনেক্টর VS Code কনফিগার করে না।
```bash
# MCP-only wiring
agentmemory connect copilot-cli
# Alternatively, full hooks/skills plugin from the GitHub subdir
copilot plugin install rohitg00/agentmemory:plugin
```
`agentmemory connect copilot-cli` `mcpServers.agentmemory`-কে `~/.copilot/mcp-config.json`-এ (বা `COPILOT_HOME` সেট থাকলে `$COPILOT_HOME/mcp-config.json`-এ) মার্জ করে এবং বিদ্যমান সার্ভারগুলো রক্ষা করে। নেটিভ Windows-এ এটিই একমাত্র অটোমেটেড `connect` অ্যাডাপ্টার; অন্য প্রতিটি নেটিভ Windows এজেন্ট ম্যানুয়ালি কনফিগার করতে হবে। WSL `connect` কেবল তখনই সাপোর্টেড যখন টার্গেট এজেন্টটিও সেই একই WSL এনভায়রনমেন্টে ইনস্টল করা থাকে। Copilot পরের লঞ্চে বা `/mcp`-এর পর MCP সার্ভারটি নিয়ে নেয়। পূর্ণ হুক/স্কিল অভিজ্ঞতা চাইলে প্লাগইনটিও ইনস্টল করুন।
OpenClaw (এই প্রম্পট পেস্ট করুন)
```text
Install agentmemory for OpenClaw. Run `npx -y @agentmemory/agentmemory@latest` in a separate terminal to start the memory server on localhost:3111. Then add this to my OpenClaw MCP config so agentmemory is available with all 54 memory tools:
{
"mcpServers": {
"agentmemory": {
"command": "npx",
"args": ["-y", "@agentmemory/mcp"],
"env": {
"AGENTMEMORY_URL": "http://localhost:3111"
}
}
}
}
Restart OpenClaw. Verify with `curl http://localhost:3111/agentmemory/health`. Open http://localhost:3113 for the real-time viewer. For deeper memory-slot integration, copy `integrations/openclaw` to `~/.openclaw/extensions/agentmemory` and enable `plugins.slots.memory = "agentmemory"` in `~/.openclaw/openclaw.json`.
```
সম্পূর্ণ গাইড: [`integrations/openclaw/`](../integrations/openclaw/)
Hermes Agent (এই প্রম্পট পেস্ট করুন)
```text
Install agentmemory for Hermes. Run `npx -y @agentmemory/agentmemory@latest` in a separate terminal to start the memory server on localhost:3111. Then add this to ~/.hermes/config.yaml so Hermes can use agentmemory as an MCP server with all 54 memory tools:
mcp_servers:
agentmemory:
command: npx
args: ["-y", "@agentmemory/mcp"]
memory:
provider: agentmemory
Verify with `curl http://localhost:3111/agentmemory/health`. Open http://localhost:3113 for the real-time viewer. For deeper 6-hook memory provider integration (pre-LLM context injection, turn capture, MEMORY.md mirroring, system prompt block), copy integrations/hermes from the agentmemory repo to ~/.hermes/plugins/agentmemory.
```
সম্পূর্ণ গাইড: [`integrations/hermes/`](../integrations/hermes/)
### অন্য এজেন্ট
মেমরি সার্ভার শুরু করুন: `npx -y @agentmemory/agentmemory@latest`
#### `npx skills add`-এর মাধ্যমে নেটিভ স্কিল (50+ এজেন্ট)
agentmemory Claude-Code-স্টাইলের `/SKILL.md` ফরম্যাটে 17টি স্কিল নিয়ে আসে: 9টি ইনভোকেবল অ্যাকশন স্কিল (`remember`, `recall`, `recap`, `handoff`, `forget`, `lesson`, `commit-context`, `commit-history`, `session-history`) এবং 8টি রেফারেন্স স্কিল যা এজেন্ট প্রয়োজনমতো লোড করে (`memory-discipline`, `agentmemory-mcp-tools`, `agentmemory-rest-api`, `agentmemory-config`, `agentmemory-agents`, `agentmemory-hooks`, `agentmemory-architecture`, `write-agentmemory-skill`)। রেফারেন্স স্কিলগুলো সোর্স থেকে জেনারেট করা ডেটা টেবিল বহন করে, তাই এগুলো কখনো ডিফ্ট করে না। vercel-labs-এর [`skills`](https://npmjs.com/package/skills) CLI 50+ এজেন্টে (Claude Code, Cursor, Cline, Continue, Droid, Warp, Codex, Antigravity, Kiro, OpenCode, Goose, Roo, Trae, Windsurf, এবং আরও) কলিং এজেন্টের নেটিভ স্কিল ডিরেক্টরিতে এগুলো অটো-ইনস্টল করে:
```bash
npx skills add rohitg00/agentmemory -y # auto-detects the calling agent
npx skills add rohitg00/agentmemory -y -a warp # explicit agent
npx skills add rohitg00/agentmemory -y -a '*' # install to every installed agent
```
এটি `agentmemory connect `-এর সাথে **পরিপূরক**:
- `agentmemory connect ` MCP সার্ভার কনফিগ লেখে যাতে টুলগুলো উপলব্ধ হয়।
- `npx skills add rohitg00/agentmemory` স্কিলগুলো ইনস্টল করে যাতে এজেন্ট জানে কখন এগুলো কল করতে হবে।
স্কিল CLI এখনও যে কয়েকটা এজেন্ট কভার করে না (Zed v1.3.x এবং তার নিচে), সেগুলোতে 17টি SKILL.md ফাইল নিজেই এজেন্টের নেটিভ স্কিল ডিরেক্টরিতে রাখুন; একই ফরম্যাট সবখানে কাজ করে।
#### স্ট্যান্ডার্ড MCP ব্লক
`mcpServers` শেপ ব্যবহার করে এমন প্রতিটি হোস্টে (Cursor, Claude Desktop, Cline, Roo Code, Gemini CLI, OpenClaw) agentmemory এন্ট্রিটি **একই MCP সার্ভার ব্লক**:
```json
"agentmemory": {
"command": "npx",
"args": ["-y", "@agentmemory/mcp"],
"env": {
"AGENTMEMORY_URL": "${AGENTMEMORY_URL}",
"AGENTMEMORY_SECRET": "${AGENTMEMORY_SECRET}"
}
}
```
**এই এন্ট্রিটি হোস্টের বিদ্যমান `mcpServers` অবজেক্টে মার্জ করুন**; ফাইলটি রিপ্লেস করবেন না। ফাইলে আগে থেকে অন্য সার্ভার থাকলে, `mcpServers`-এর ভেতর আরেকটি কি হিসেবে সেগুলোর পাশে `agentmemory` যুক্ত করুন। `mcpServers` সম্পূর্ণ অনুপস্থিত থাকলে, ব্লকটি `{ "mcpServers": { ... } }`-এর ভেতরে পেস্ট করুন। `${VAR}` প্লেসহোল্ডারগুলো MCP-সার্ভার লঞ্চের সময় শেল থেকে `AGENTMEMORY_URL` / `AGENTMEMORY_SECRET` ইনহেরিট করে; আনসেট ভ্যারিয়েবল খালি স্ট্রিং পাস করে এবং শিম `http://localhost:3111`-এ ফলব্যাক করে। একটি ওয়্যারড এন্ট্রি লোকাল ও রিমোট (k8s / রিভার্স-প্রক্সিড) দুই ডিপ্লয়মেন্টই কভার করে।
| এজেন্ট | কনফিগ ফাইল | নোট |
|---|---|---|
| **Cursor (কেবল MCP)** | `~/.cursor/mcp.json` | `mcpServers`-এ মার্জ করুন, বা `agentmemory connect cursor`। ওয়েবসাইটেও এক-ক্লিক ডিপলিংক আছে। |
| **Cursor (পূর্ণ প্লাগইন)** | `.cursor-plugin/` | Cursor Marketplace লিস্টিং (রিভিউতে আছে সাবমিশন) বা Cursor Settings → Plugins → লোকাল চেকআউট। 7টি অটো-ক্যাপচার হুক (sessionStart, beforeSubmitPrompt, preToolUse, postToolUse, postToolUseFailure, stop, sessionEnd) + 17টি স্কিল + MCP সার্ভার রেজিস্টার করে, `AGENTMEMORY_URL` / `AGENTMEMORY_SECRET` Cursor-এর প্লাগইন ড্যাশবোর্ডে ম্যানেজড। Cursor IDE এবং `cursor-agent` CLI-তে কাজ করে; CLI প্রিন্ট-মোড প্রম্পটগুলো সেশন শেষে সেশন ট্রান্সক্রিপ্ট থেকে ব্যাকফিল করা হয়। |
| **Claude Desktop** | `claude_desktop_config.json` (Application Support) | `mcpServers`-এ মার্জ করুন। এডিট করার পর Claude Desktop রিস্টার্ট করুন। |
| **Cline / Roo Code / Kilo Code** | Cline MCP সেটিংস (Settings UI → MCP Servers → Edit) | একই `mcpServers` ব্লক। |
| **Devin CLI (MCP + হুক)** | `~/.config/devin/config.json` | `agentmemory connect devin` MCP এন্ট্রি মার্জ করে; `--with-hooks` Devin-এর লোয়ারকেস টুল ম্যাচার সহ ছয়টি নেটিভ অটো-ক্যাপচার হুক (SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, Stop, SessionEnd) যুক্ত করে। `devin mcp list` এবং devin-এর ভেতরে `/hooks` দিয়ে যাচাই করুন। |
| **Devin CLI (পূর্ণ প্লাগইন)** | `plugin/.devin-plugin/` | একটি চেকআউট থেকে `devin plugins install ./plugin` 17টি স্কিলকে `/agentmemory:` স্ল্যাশ কমান্ড হিসেবে প্লাস MCP সার্ভার রেজিস্টার করে। Devin প্লাগইন হুক `SessionStart`/`SessionEnd` ফায়ার করতে পারে না, তাই পূর্ণ সেশন ক্যাপচারের জন্য এটি `connect devin --with-hooks`-এর সাথে পেয়ার করুন। |
| **Devin (ক্লাউড)** | Settings → Connections → MCP servers | একটি কাস্টম MCP (STDIO) যুক্ত করুন: কমান্ড `npx`, args `-y @agentmemory/mcp@latest`, env `AGENTMEMORY_URL` একটি নেটওয়ার্ক-রিচেবল agentmemory ডিপ্লয়মেন্টের দিকে প্লাস `AGENTMEMORY_SECRET` (ক্লাউড সেশন localhost-এ পৌঁছাতে পারে না — দেখুন [`deploy/`](../deploy/))। Devin Secrets-এ সিক্রেট জমা রাখুন, তারপর সব 54টি টুল দেখা যায় কিনা যাচাই করতে "Test listing tools" ব্যবহার করুন। |
| **Gemini CLI** | `~/.gemini/settings.json` | `gemini mcp add agentmemory npx -y @agentmemory/mcp --scope user` (অটো-মার্জ করে)। |
| **GitHub Copilot CLI (কেবল MCP)** | `~/.copilot/mcp-config.json` | `agentmemory connect copilot-cli` `mcpServers.agentmemory` মার্জ করে; Copilot পরের লঞ্চে বা `/mcp`-এ এটি নিয়ে নেয়। |
| **GitHub Copilot CLI (পূর্ণ প্লাগইন)** | Copilot প্লাগইন ইনস্টল | GitHub সাবডির থেকে প্লাগইনের জন্য `copilot plugin install rohitg00/agentmemory:plugin`। |
| **OpenClaw** | OpenClaw MCP কনফিগ | একই `mcpServers` ব্লক। আরও গভীরে: `openclaw plugins install ./integrations/openclaw` OpenClaw-র মেমরি স্লট দাবি করে (`memory-core` থেকে অটো-সুইচ করে); `plugins.entries.agentmemory.hooks.allowConversationAccess=true` সেট করুন, না হলে টার্ন ক্যাপচার নিঃশব্দে ব্লক হয়ে যায়। দেখুন [`integrations/openclaw`](../integrations/openclaw/)। |
| **Codex CLI (কেবল MCP)** | `.codex/config.toml` | TOML শেপ: `codex mcp add agentmemory -- npx -y @agentmemory/mcp`, বা ম্যানুয়ালি `[mcp_servers.agentmemory]` যুক্ত করুন। |
| **Codex CLI (পূর্ণ প্লাগইন)** | Codex প্লাগইন মার্কেটপ্লেস | `codex plugin marketplace add rohitg00/agentmemory` তারপর `codex plugin add agentmemory@agentmemory`। MCP + 6টি লাইফসাইকেল হুক + 17টি স্কিল রেজিস্টার করে। আপনার হোস্টে হুক বিশ্বাস করুন এবং ক্যাপচার যাচাই করুন; দেখুন [Codex সেটআপ ও যাচাইকরণ](../docs/plugins/codex-local.md)। |
| **OpenCode (কেবল MCP)** | `opencode.json` | ভিন্ন শেপ: টপ-লেভেল `mcp` কি, কমান্ড অ্যারে হিসেবে: `{"mcp": {"agentmemory": {"type": "local", "command": ["npx", "-y", "@agentmemory/mcp"], "enabled": true}}}`। |
| **OpenCode (পূর্ণ প্লাগইন)** | `plugin/opencode/` | সেশন লাইফসাইকেল, মেসেজ, টুল, এরর কভার করা 22টি অটো-ক্যাপচার হুক। প্রজেক্ট অ্যাট্রিবিউশন প্রতি-সেশন, তাই একাধিক রিপোজিটরি জুড়ে চলা একটি OpenCode প্রসেস প্রতিটি সেশনকে তার নিজের প্রজেক্টের অধীনে ফাইল করে। দুটি স্ল্যাশ কমান্ড (`/recall`, `/remember`)। আপনার OpenCode ওয়ার্কস্পেসে `plugin/opencode/` কপি করুন এবং `opencode.json`-এ প্লাগইন এন্ট্রি যুক্ত করুন। পূর্ণ হুক টেবিল + গ্যাপ অ্যানালিসিসের জন্য দেখুন [`plugin/opencode/README.md`](../plugin/opencode/README.md)। |
| **pi** | `~/.pi/agent/extensions/agentmemory` | `agentmemory connect pi` pi-র অটো-ডিসকভারি ডিরেক্টরিতে বান্ডলড এক্সটেনশন ইনস্টল করে (এজেন্ট শুরুতে রিকল, এজেন্ট শেষে ক্যাপচার, `memory_search` / `memory_save` / `memory_health` টুল, `/agentmemory-status`)। চলমান pi-তে `/reload` এটি নিয়ে নেয়। [`integrations/pi`](../integrations/pi/) নিজেও একটি pi প্যাকেজ (একটি চেকআউট থেকে `pi install ./integrations/pi`)। |
| **Hermes Agent** | `~/.hermes/config.yaml` | `cp -r integrations/hermes ~/.hermes/plugins/agentmemory` + `memory.provider: agentmemory` 6-হুক মেমরি প্রোভাইডার দেয় (প্রিফেচ, টার্ন ক্যাপচার, সেশন শেষ, প্রি-কম্প্রেস, MEMORY.md মিররিং, সিস্টেম প্রম্পট ব্লক)। `hermes plugins doctor` এবং `hermes memory status` দিয়ে যাচাই করুন। দেখুন [`integrations/hermes`](../integrations/hermes/)। |
| **Qwen Code** | `~/.qwen/settings.json` | `agentmemory connect qwen` স্ট্যান্ডার্ড `mcpServers` ব্লক লেখে। হুক পেলোড Claude Code-এর সাথে ফিল্ড-কম্প্যাটিবল, তাই বিদ্যমান 12-হুক স্ক্রিপ্টগুলো কোনো পরিবর্তন ছাড়াই কাজ করে; একই `settings.json`-এর `hooks` সেকশনে এগুলো ওয়্যার করুন। |
| **Antigravity IDE / 2.0** | `~/.gemini/config/mcp_config.json` | `agentmemory connect antigravity --with-hooks` শেয়ার্ড কাস্টমাইজেশন ডিরেক্টরিতে MCP এবং ক্যাপচার হুক ইনস্টল করে। দেখুন [Antigravity সেটআপ ও সীমাবদ্ধতা](../docs/plugins/antigravity.md)। |
| **Antigravity CLI** (`agy`) | `~/.gemini/config/mcp_config.json` | `agentmemory connect antigravity-cli --with-hooks` বর্তমান IDE ভার্সনের মতো একই MCP এবং হুক কনফিগারেশন ব্যবহার করে। বিদ্যমান ইনস্টলেশনগুলো `--force` দিয়ে রিফ্রেশ করা উচিত; দেখুন [আপগ্রেড নোটস](../docs/plugins/antigravity.md)। |
| **Kiro** | `~/.kiro/settings/mcp.json` | `agentmemory connect kiro` ইউজার-লেভেল কনফিগ লেখে। ওয়ার্কস্পেস ওভাররাইড আপনার কোডের পাশে `.kiro/settings/mcp.json`-এ যায়। |
| **Warp** | `~/.warp/.mcp.json` | `agentmemory connect warp` স্ট্যান্ডার্ড `mcpServers` ব্লক লেখে। Warp `.claude/skills/` থেকেও স্কিল অটো-ডিসকভার করে; Claude Code প্লাগইন ইনস্টল হলে agentmemory-র 8টি স্কিল (`remember`, `recall`, `recap`, `handoff`, `forget`, `commit-context`, `commit-history`, `session-history`) Warp-এর স্ল্যাশ-কমান্ড প্যালেটে নেটিভভাবে দেখা যায়। |
| **Cline (CLI)** | `~/.cline/mcp.json` | `agentmemory connect cline` স্ট্যান্ডার্ড `mcpServers` ব্লক লেখে। VS Code এক্সটেনশন ইউজাররা: Cline Settings → MCP Servers → Edit JSON-এর মাধ্যমে একই ব্লক পেস্ট করুন। |
| **Continue.dev** | `~/.continue/config.yaml` (পছন্দনীয়) বা `config.json` (লেগ্যাসি) | দুটোরই অস্তিত্ব না থাকলে `agentmemory connect continue` শূন্য থেকে `config.yaml` তৈরি করে, বা বিদ্যমান `config.json` পরিবর্তন করে। **আপনার আগে থেকে `config.yaml` থাকলে** অ্যাডাপ্টারটি `mcpServers:`-এর নিচে পেস্ট করার জন্য ঠিক ব্লকটি প্রিন্ট করে; এটি নিঃশব্দে আপনার yaml পুনরায় লেখে না কারণ কমেন্ট ও অ্যাঙ্কর নিরাপদে রক্ষা করতে একটি YAML পার্সার লাগে যা প্যাকেজটি বহন করে না। Continue `mcpServers`-এর জন্য (অবজেক্ট না) অ্যারে ফর্ম ব্যবহার করে। |
| **Zed** | `~/.config/zed/settings.json` | `agentmemory connect zed` `context_servers`-এর নিচে লেখে (Zed-র কি, `mcpServers` নয়)। রিমোট MCP সার্ভার এর বদলে `{"url": "..."}` দিয়েও ওয়্যার করা যায়। |
| **Droid (Factory.ai)** | `~/.factory/mcp.json` | `agentmemory connect droid` স্ট্যান্ডার্ড `mcpServers` ব্লক লেখে। প্রজেক্ট-স্কোপড ওভাররাইড যায় `/.factory/mcp.json`-এ। নেটিভ অটো-ক্যাপচারের জন্য `--with-hooks` পাস করুন। |
| **DeepSeek Harness** | `$DSH_HOME/cordis.patch.yml` | `agentmemory connect dsh` প্রতিটি Harness প্রোফাইল লোড করা হোম-লেভেল প্যাচ লেয়ারে একটি `@deepseek-ai/dsh-mcp-client` সারি যুক্ত করে; টুলগুলো `mcp__agentmemory__*` হিসেবে রেজিস্টার হয়। অটো-ক্যাপচারও ওয়্যার করতে `--with-hooks` পাস করুন: বান্ডলড Claude Code হুক স্ক্রিপ্টগুলো Harness-র ফার্স্ট-পার্টি `@deepseek-ai/dsh-hooks-claude-code` ব্রিজের (SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, Stop) মাধ্যমে চলে, `$DSH_HOME/agentmemory.hooks.json`-এ লেখা একটি ম্যানিফেস্টের মাধ্যমে। `DSH_HOME` আনসেট থাকলে ডিফল্ট `~/.dsh`। |
| **Goose** | Goose MCP সেটিংস UI | একই `mcpServers` ব্লক; `goose configure` → Add Extension → MCP ব্যবহার করুন। `~/.config/goose/config.yaml`-এ সরাসরি YAML এডিট সাপোর্টেড, কিন্তু স্কিমা `extensions:` + `cmd` ব্যবহার করে (`mcpServers:` + `command` নয়)। |
| **Aider** | n/a | সরাসরি REST API-র সাথে কথা বলুন: `curl -X POST http://localhost:3111/agentmemory/smart-search -d '{"query": "auth"}'`। |
| **যেকোনো এজেন্ট (32+)** | n/a | `npx skillkit install agentmemory` হোস্ট অটো-ডিটেক্ট করে মার্জ করে। |
**স্যান্ডবক্সড MCP ক্লায়েন্ট** (Flatpak / Snap / রেস্ট্রিক্টিভ কন্টেইনার) যা হোস্টের `localhost`-এ পৌঁছাতে পারে না: `env` ব্লকে `"AGENTMEMORY_FORCE_PROXY": "1"`-ও সেট করুন, এবং `AGENTMEMORY_URL` এমন একটি রুটে পয়েন্ট করুন যেখানে স্যান্ডবক্স সত্যিই পৌঁছাতে পারে (যেমন আপনার LAN IP)।
### প্রোগ্রামেটিক অ্যাক্সেস (Python / Rust / Node)
agentmemory তার কোর অপারেশনগুলো iii ফাংশন হিসেবে রেজিস্টার করে (`mem::remember`, `mem::observe`, `mem::context`, `mem::smart-search`, `mem::forget`)। iii SDK আছে এমন যেকোনো ভাষা `ws://localhost:49134`-এর উপর সরাসরি এগুলো কল করতে পারে, প্রতি ভাষার জন্য আলাদা REST ক্লায়েন্ট ছাড়াই।
```bash
pip install iii-sdk # Python
cargo add iii-sdk # Rust
npm install iii-sdk # Node
```
```python
from iii import register_worker
iii = register_worker("ws://localhost:49134")
iii.connect()
iii.trigger({
"function_id": "mem::smart-search",
"payload": {"project": "demo", "query": "how do tokens refresh"},
})
```
একটি কাজ করা উদাহরণ: [`examples/python/`](../examples/python/) (কুইকস্টার্ট + অবজারভেশন/রিকল ফ্লো)। কোনো iii রানটাইম নেই এমন হোস্টের জন্য `:3111`-এ REST তখনও উপলব্ধ।
### সোর্স থেকে
```bash
git clone https://github.com/rohitg00/agentmemory.git && cd agentmemory
npm install && npm run build && npm start
```
পিন করা বাইনারি আগে থেকে ইনস্টল করা থাকলে এটি একটি লোকাল `iii-engine` দিয়ে agentmemory চালু করে, বা বেছে নিলে Docker Compose ব্যবহার করে। REST, স্ট্রিম, এবং ভিউয়ার ডিফল্টভাবে `127.0.0.1`-এ বাইন্ড হয়। macOS/Linux-এ স্বয়ংক্রিয় বাইনারি পাথের জন্য `curl`, একটি POSIX `sh`, এবং `tar` প্রয়োজন।
`iii-engine` ম্যানুয়ালি ইনস্টল করুন। **agentmemory বর্তমানে `iii-engine`-কে `v0.22.1`-এ পিন করে**, তার `iii-sdk` ডিপেন্ডেন্সির মতো একই রিলিজ; ওয়ার্কারটি সেই ইঞ্জিনের ওয়্যার প্রোটোকল বলে, এবং 0.20.0 SDK সারফেস পুনর্গঠিত করেছিল, তাই agentmemory-র রিলিজগুলোতে এই দুটো একসাথে চলে। আপনি নিজের ইঞ্জিন চালান এবং জানেন এটা মেলে এমন অবস্থায় `AGENTMEMORY_III_VERSION=` দিয়ে ওভাররাইড করুন।
- **macOS arm64:** `mkdir -p ~/.local/bin && curl -fsSLo iii.tar.gz https://github.com/iii-hq/iii/releases/download/iii/v0.22.1/iii-aarch64-apple-darwin.tar.gz && echo "2b309019b909a896cae874dc947e2cdf877b4f3c51dd026b79850af858517fa4 iii.tar.gz" | shasum -a 256 -c - && tar -xzf iii.tar.gz -C ~/.local/bin && chmod +x ~/.local/bin/iii`
- **macOS x64:** `aarch64-apple-darwin`-এর বদলে `x86_64-apple-darwin` দিন
- **Linux x64:** `x86_64-unknown-linux-gnu` দিয়ে বদলান
- **Linux arm64:** `aarch64-unknown-linux-gnu` দিয়ে বদলান
- **Windows:** [iii-hq/iii releases v0.22.1](https://github.com/iii-hq/iii/releases/tag/iii%2Fv0.22.1) থেকে `iii-x86_64-pc-windows-msvc.zip` ডাউনলোড করুন এবং `iii.exe` এক্সট্র্যাক্ট করুন `%USERPROFILE%\.agentmemory\bin\iii.exe`-এ
প্রতিটি আর্কাইভের রিলিজ পেজে একটি ম্যাচিং `.sha256` ফাইল আছে; প্ল্যাটফর্ম বদলালে, উপরের চেকে সেই ফাইলের হ্যাশ ব্যবহার করুন (Windows-এ: `Get-FileHash`)। `npx @agentmemory/agentmemory`-র স্বয়ংক্রিয় ইনস্টলার এই হ্যাশগুলো পিন করে এবং না-মেলা আর্কাইভ রিজেক্ট করে।
বা Docker ব্যবহার করুন (বান্ডলড `docker-compose.yml` `iiidev/iii:0.22.1` টানে)। সম্পূর্ণ ডকুমেন্টেশন: [iii.dev/docs](https://iii.dev/docs)।
### Windows
agentmemory Windows 10/11-এ চলে, কিন্তু কেবল Node.js প্যাকেজটাই পর্যাপ্ত নয়; ব্যাকগ্রাউন্ড প্রসেস হিসেবে পিন করা iii-engine v0.22.1 রানটাইমও প্রয়োজন। CLI Windows ZIP অটো-এক্সট্র্যাক্ট করে না, তাই নেটিভ Windows ইউজারদের `iii.exe` ম্যানুয়ালি ইনস্টল করতে হবে, WSL2 ব্যবহার করতে হবে, বা Docker Desktop বেছে নিতে হবে।
নেটিভ Windows অটোমেটেড MCP ওয়্যারিং কেবল `agentmemory connect copilot-cli` সাপোর্ট করে। Claude Code, Codex, Cursor, এবং অন্য প্রতিটি নেটিভ Windows এজেন্টের জন্য, [Other agents](#other-agents)-এর ম্যানুয়াল MCP ব্লকটি সেই এজেন্টের Windows কনফিগে কপি করুন। WSL-এ `connect` চালানো তখনই যথাযথ যখন টার্গেট এজেন্টও সেই একই WSL এনভায়রনমেন্টে ইনস্টল করা আছে; এটি Windows-হোস্টেড কোনো এজেন্টের কনফিগ এডিট করে না।
**অপশন A: প্রিবিল্ট Windows বাইনারি (সুপারিশকৃত)**
```powershell
# 1. Open https://github.com/iii-hq/iii/releases/tag/iii%2Fv0.22.1 in your browser
# (agentmemory pins the engine to the same release as its iii-sdk;
# v0.22.1 is the current pair)
# 2. Download iii-x86_64-pc-windows-msvc.zip
# (or iii-aarch64-pc-windows-msvc.zip if you're on an ARM machine)
# 3. Extract iii.exe to agentmemory's private engine directory:
New-Item -ItemType Directory -Force "$HOME\.agentmemory\bin"
# Copy iii.exe to $HOME\.agentmemory\bin\iii.exe
# 4. Verify:
& "$HOME\.agentmemory\bin\iii.exe" --version
# Should print: 0.22.1
# 5. Then run agentmemory as usual:
npx -y @agentmemory/agentmemory@latest
```
**অপশন B: Docker Desktop**
```powershell
# 1. Install Docker Desktop for Windows
# 2. Start Docker Desktop and make sure the engine is running
# 3. Select Docker explicitly and run agentmemory:
$env:AGENTMEMORY_USE_DOCKER = "1"
npx -y @agentmemory/agentmemory@latest
```
**অপশন C: কেবল স্ট্যান্ডঅ্যালোন MCP (কোনো ইঞ্জিন ছাড়াই)।** আপনার এজেন্টের জন্য কেবল MCP টুল প্রয়োজন হলে এবং REST API, ভিউয়ার, বা cron job প্রয়োজন না হলে, ইঞ্জিনটি সম্পূর্ণ স্কিপ করুন:
```powershell
npx -y @agentmemory/agentmemory@latest mcp
# or via the shim package:
npx -y @agentmemory/mcp
```
**Windows-এর জন্য ডায়াগনস্টিক:** `npx -y @agentmemory/agentmemory@latest` ফেইল করলে, আসল ইঞ্জিন stderr দেখতে `--verbose` দিয়ে আবার চালান। সাধারণ ফেইলিউর মোড:
| লক্ষণ | সমাধান |
|---|---|
| `The engine process started but the REST API never responded.` | চারটি ডিরাইভড পোর্ট ফ্রি আছে কিনা নিশ্চিত করুন, পিন করা `iii.exe` সচল ছিল কিনা যাচাই করুন, তারপর `--verbose` দিয়ে আবার চালান এবং ক্যাপচার করা ইঞ্জিন stderr দেখুন |
| `Could not start iii-engine` | `iii.exe` বা Docker কোনোটাই ইনস্টল করা নেই। উপরের অপশন A বা B দেখুন |
| পোর্ট কনফ্লিক্ট | কী বাইন্ড করা আছে দেখতে `netstat -ano \| findstr :3111`, তারপর সেটা কিল করুন বা `--port ` ব্যবহার করুন |
| Docker ইনস্টল থাকলেও Docker ফলব্যাক স্কিপ হচ্ছে | Docker Desktop সত্যিই চলছে কিনা নিশ্চিত করুন (সিস্টেম ট্রে আইকন) |
> নোট: iii **ইঞ্জিন** একটি প্রিবিল্ট বাইনারি, cargo crate নয়, তাই এটি `cargo install` করার চেষ্টা করবেন না। (iii **SDK**গুলো crates.io, npm, এবং PyPI-এ প্রকাশিত, কিন্তু agentmemory-র এগুলো লাগে না।) সাপোর্টেড ইঞ্জিন ইনস্টল পদ্ধতিগুলো সবই v0.22.1-এ পিন করা: উপরের প্রিবিল্ট বাইনারি, agentmemory-র macOS/Linux অটো-ইনস্টল পাথ (`curl`, POSIX `sh`, এবং `tar` প্রয়োজন), এবং Docker ইমেজ `iiidev/iii:0.22.1`। একটি খালি আপস্ট্রিম `install.sh | sh` লেটেস্ট ইঞ্জিন ইনস্টল করে, যা agentmemory সাপোর্ট করে না। `npx -y @agentmemory/agentmemory@latest` ব্যবহার করুন; macOS/Linux-এ এটি পিন করা ইঞ্জিন `~/.agentmemory/bin`-এ নিয়ে আসে।
---
Deploy
ম্যানেজড হোস্টের জন্য ওয়ান-ক্লিক টেমপ্লেট। প্রতিটিতে একটি সেলফ-কনটেইনড Dockerfile থাকে যা npm থেকে `@agentmemory/agentmemory` টানে এবং অফিশিয়াল `iiidev/iii` Docker Hub ইমেজ থেকে iii engine বাইনারিটি কপি করে; কোনো প্রি-বিল্ট agentmemory ইমেজ লাগে না। স্থায়ী স্টোরেজ `/data`-এ মাউন্ট হয়; ফার্স্ট-বুট এন্ট্রিপয়েন্ট npm-বান্ডলড iii কনফিগ (যা `127.0.0.1`-এ বাইন্ড করে) একটি ডিপ্লয়-টিউনড কনফিগ দিয়ে ওভাররাইট করে যা `0.0.0.0`-এ বাইন্ড করে এবং অ্যাবসোলিউট `/data` পাথ ব্যবহার করে, HMAC সিক্রেট জেনারেট করে, তারপর agentmemory CLI exec করার আগে `gosu`-র মাধ্যমে `root` থেকে `node`-এ প্রিভিলেজ নামিয়ে আনে।
Render-এর ওয়ান-ক্লিক ডিপ্লয় বাটনের জন্য রিপোজিটরি রুটে `render.yaml` লাগে, যা আমরা ইচ্ছাকৃতভাবে পরিষ্কার রাখি। ম্যানুয়ালি রেপোর ভেতরের ব্লুপ্রিন্টের দিকে পয়েন্ট করতে [`deploy/render/`](.././deploy/render/README.md)-এ ডকুমেন্টেড Render Blueprint ফ্লো ব্যবহার করুন।
সম্পূর্ণ সেটআপ ডিটেইল (HMAC ক্যাপচার, ভিউয়ার SSH টানেল, রোটেশন, ব্যাকআপ, কস্ট ফ্লোর) থাকে
[`deploy/`](.././deploy/README.md)-এ:
- [`deploy/fly`](.././deploy/fly/README.md): `auto_stop_machines = "stop"`
সহ একটি মেশিন; আইডলে সবচেয়ে সস্তা।
- [`deploy/railway`](.././deploy/railway/README.md): Hobby প্ল্যানের ফ্ল্যাট
ফি, ড্যাশবোর্ডে ভলিউম।
- [`deploy/render`](.././deploy/render/README.md): Blueprint ফ্লো, পেইড
প্ল্যানে অটোমেটিক ডিস্ক স্ন্যাপশট।
- [`deploy/coolify`](.././deploy/coolify/README.md): [Coolify](https://coolify.io/self-hosted)-এর
মাধ্যমে নিজের VPS-এ সেলফ-হোস্টেড; একই Docker Compose স্ট্যাক, হোস্ট ও ডেটা আপনার নিজের।
কেবল `3111` পোর্টই পাবলিশড। কন্টেইনারের ভেতরে `3113`-এর ভিউয়ার
লুপব্যাকেই বাঁধা থাকে; প্রতিটি টেমপ্লেটের README সেটায় পৌঁছানোর
SSH-টানেল প্যাটার্ন ডকুমেন্ট করে।
---
সেশন শেষ হলে প্রতিটি কোডিং এজেন্ট সবকিছু ভুলে যায়, এবং প্রতিটি নতুন সেশন শুরু হয় আপনার স্ট্যাক আবার ব্যাখ্যা করা দিয়ে। agentmemory ব্যাকগ্রাউন্ডে চলে এবং এই স্টেপটা বাদ দিয়ে দেয়।
```text
Session 1: "Add auth to the API"
Agent writes code, runs tests, fixes bugs
agentmemory silently captures every tool use
Session ends -> observations compressed into structured memory
Session 2: "Now add rate limiting"
Agent already knows:
- Auth uses JWT middleware in src/middleware/auth.ts
- Tests in test/auth.test.ts cover token validation
- You chose jose over jsonwebtoken for Edge compatibility
Zero re-explaining. Starts working immediately.
```
### বিল্ট-ইন এজেন্ট মেমরির তুলনায়
প্রতিটি AI কোডিং এজেন্ট বিল্ট-ইন মেমরি নিয়ে আসে: Claude Code-এর আছে `MEMORY.md`, Cursor-এর আছে নোটপ্যাড, Cline-এর আছে memory bank। এগুলো স্টিকি নোটের মতো কাজ করে। agentmemory হলো সেই স্টিকি নোটগুলোর পেছনের সার্চযোগ্য ডেটাবেস।
| | বিল্ট-ইন (CLAUDE.md) | agentmemory |
|---|---|---|
| স্কেল | 200-লাইন ক্যাপ | আনলিমিটেড |
| সার্চ | সবকিছু কনটেক্সটে লোড করে | BM25 + vector + graph (কেবল top-K) |
| টোকেন খরচ | 240 অবজারভেশনে 22K+ | ~1,900 টোকেন (92% কম) |
| ক্রস-এজেন্ট | প্রতি-এজেন্ট ফাইল | MCP + REST (যেকোনো এজেন্ট) |
| কো-অর্ডিনেশন | নেই | lease, signal, action, routine |
| অবজারভেবিলিটি | ম্যানুয়ালি ফাইল পড়া | :3113-এ রিয়েল-টাইম ভিউয়ার |
---
### মেমরি পাইপলাইন
```text
PostToolUse hook fires
-> SHA-256 dedup (5min window)
-> Privacy filter (strip secrets, API keys)
-> Store raw observation
-> Synthetic compression by default
(LLM-written compression only with a provider + AGENTMEMORY_AUTO_COMPRESS=true)
-> Vector embedding when an embedding provider is active
-> Index in BM25, plus vectors when enabled
Stop / SessionEnd hook fires
-> Summarize session
-> Knowledge graph extraction (if GRAPH_EXTRACTION_ENABLED=true)
-> Slot reflection (if SLOT_REFLECT_ENABLED=true)
SessionStart hook fires
-> Load project profile (top concepts, files, patterns)
-> Hybrid search (BM25 + vector + graph)
-> Token budget (default: 2000 tokens)
-> Inject into conversation
```
### 4-স্তর মেমরি কনসোলিডেশন
মানুষের ব্রেইন কীভাবে মেমরি প্রসেস করে তার উপর মডেল করা, ঘুমের কনসোলিডেশন সহ।
| টায়ার | কী | উপমা |
|------|------|---------|
| **Working** | টুল ব্যবহারের কাঁচা অবজারভেশন | শর্ট-টার্ম মেমরি |
| **Episodic** | কম্প্রেসড সেশন সামারি | "কী ঘটেছিল" |
| **Semantic** | এক্সট্র্যাক্ট করা ফ্যাক্ট ও প্যাটার্ন | "আমি কী জানি" |
| **Procedural** | ওয়ার্কফ্লো ও সিদ্ধান্ত-প্যাটার্ন | "কীভাবে করতে হয়" |
মেমরি সময়ের সাথে ক্ষয় হয় (Ebbinghaus কার্ভ)। প্রায়ই অ্যাক্সেস করা মেমরি জোরদার হয়। বাসি মেমরি অটো-ইভিক্ট হয়। বিরোধ (contradiction) ডিটেক্ট ও সমাধান করা হয়।
### কী ক্যাপচার হয়
| হুক | যা ক্যাপচার করে |
|------|----------|
| `SessionStart` | প্রজেক্ট পাথ, সেশন ID |
| `UserPromptSubmit` | ইউজার প্রম্পট (প্রাইভেসি-ফিল্টারড) |
| `PreToolUse` | ফাইল অ্যাক্সেস প্যাটার্ন + এনরিচড কনটেক্সট |
| `PostToolUse` | টুলের নাম, ইনপুট, আউটপুট |
| `PostToolUseFailure` | এরর কনটেক্সট |
| `PreCompact` | কম্প্যাকশনের আগে মেমরি পুনরায় ইনজেক্ট করে |
| `SubagentStart/Stop` | সাব-এজেন্ট লাইফসাইকেল |
| `Stop` | সেশন-শেষের সামারি |
| `SessionEnd` | সেশন সম্পূর্ণ হওয়ার মার্কার |
### মূল সক্ষমতা
| সক্ষমতা | বর্ণনা |
|---|---|
| **অটোমেটিক ক্যাপচার** | হুকের মাধ্যমে প্রতিটি টুল ব্যবহার রেকর্ড হয়, কোনো ম্যানুয়াল পরিশ্রম ছাড়াই |
| **সিম্যান্টিক সার্চ** | RRF ফিউশন সহ BM25 + vector + নলেজ গ্রাফ |
| **মেমরি ইভোলিউশন** | ভার্সনিং, সুপারসেশন, রিলেশনশিপ গ্রাফ |
| **রিকল হাইজিন** | রিপ্লেসড মেমরি ভার্সন সার্চ ইনডেক্স থেকে বাদ পড়ে; KV-এর ভার্সন চেইন সম্পূর্ণ ইতিহাস রাখে |
| **নিয়ার-ডুপ্লিকেট হিন্ট** | নতুন কনটেন্ট বিদ্যমান কোনো মেমরির সাথে খুব মিলে গেলে সেভগুলো একটি উপদেষ্টামূলক `similarTo` ম্যাচ রিপোর্ট করে |
| **প্রতি-এজেন্ট স্কোপিং** | `agentId` REST, MCP, এবং সার্চ ইনডেক্স জুড়ে সেভ ও রিকলের মধ্য দিয়ে যায়, শেয়ারড বা আইসোলেটেড মোডে |
| **রাইট-টাইম প্রোভেন্যান্স** | প্রতিটি অবজারভেশন ও মেমরি ক্যাপচার, সেভ, এবং ইমপোর্টের সময় স্ট্যাম্প করা একটি অপরিবর্তনীয় অরিজিন চ্যানেল (user, agent, tool, import, বা shared) বহন করে |
| **অটো-ফরগেটিং** | TTL এক্সপায়ারি, কনট্রাডিকশন ডিটেকশন, ইমপোর্টেন্স ইভিকশন |
| **প্রাইভেসি ফার্স্ট** | স্টোরেজের আগে API কী, সিক্রেট, `` ট্যাগ স্ট্রিপ করা হয় |
| **সেলফ-হিলিং** | সার্কিট ব্রেকার, প্রোভাইডার ফলব্যাক চেইন, হেলথ মনিটরিং |
| **Claude ব্রিজ** | MEMORY.md-এর সাথে বাই-ডিরেকশনাল সিঙ্ক |
| **নলেজ গ্রাফ** | এনটিটি এক্সট্র্যাকশন + BFS ট্রাভার্সাল |
| **টিম মেমরি** | টিম মেম্বারদের মধ্যে নেমস্পেসড শেয়ার্ড + প্রাইভেট |
| **সাইটেশন প্রোভেন্যান্স** | কোনো মেমরিকে তার সোর্স অবজারভেশন পর্যন্ত ট্রেস করা |
| **Git স্ন্যাপশট** | মেমরি স্টেট ভার্সন, রোলব্যাক, এবং ডিফ করা |
---
তিনটি সিগন্যাল একসাথে মিশিয়ে ট্রিপল-স্ট্রিম রিট্রিভাল:
| স্ট্রিম | যা করে | কখন |
|---|---|---|
| **BM25** | সিনোনিম এক্সপানশন সহ স্টেমড কিওয়ার্ড ম্যাচিং | সবসময় চালু |
| **Vector** | ডেন্স এমবেডিংয়ের উপর cosine similarity | এমবেডিং প্রোভাইডার কনফিগার করা থাকলে |
| **Graph** | এনটিটি ম্যাচিংয়ের মাধ্যমে নলেজ গ্রাফ ট্রাভার্সাল | কোয়েরিতে এনটিটি ডিটেক্ট হলে |
Reciprocal Rank Fusion (RRF, k=60) দিয়ে ফিউজড এবং সেশন-ডাইভার্সিফায়েড (প্রতি সেশনে সর্বোচ্চ 3টি রেজাল্ট)।
ভেক্টর ইনডেক্স পপুলেটেড থাকলে, `mem::search` (`memory_recall`-এর পেছনে) হাইব্রিড BM25 + vector র্যাংকার ব্যবহার করে। এমবেডিং ছাড়া এটি BM25 ব্যবহার করে। `smart-search` গ্রাফ ডেটা থাকলে অতিরিক্তভাবে স্ট্রাকচারাল গ্রাফ ম্যাচ ফিউজ করতে পারে, কিলেস মোডেও। লেসন রিকল প্রতি কোয়েরিতে সম্পূর্ণ করপাস স্ক্যান করার বদলে একটি ডেডিকেটেড ইন-মেমরি BM25 ইনডেক্সে চলে। রিপ্লেসড মেমরি ভার্সন প্রতিটি রিকল পাথ থেকে বাদ পড়ে; ভার্সন চেইন তাদের ইতিহাস রাখে।
ভেক্টর ক্র্যাশ বা ফোর্স-কিল সহ্য করতে পারে। ভেক্টর ইনডেক্স সর্বোচ্চ প্রতি `AGENTMEMORY_INDEX_SAVE_INTERVAL_MS` (10 মিনিট) অন্তর বাকেটে সেভ হয়। মাঝখানে যুক্ত বা বাদ দেওয়া প্রতিটি ভেক্টরও state store-এ একটি ছোট পেন্ডিং লগে তাৎক্ষণিকভাবে লেখা হয়, এবং পরের স্টার্ট এমবেডিং প্রোভাইডারকে কল না করেই সেটা রিপ্লে করে। প্রতিটি সফল সেভ লগটি খালি করে দেয়। রিপ্লের পরেও যে ডকুমেন্টগুলোর ভেক্টর নেই সেগুলো ব্যাকগ্রাউন্ডে `AGENTMEMORY_VECTOR_BACKFILL_MAX` (500)-এর ব্যাচে পুনরায়-এমবেড করা হয় যতক্ষণ না কোনোটা বাকি থাকে, এবং থেমে যাওয়া ব্যাকফিল পরের স্টার্টে চালু থাকে। `/agentmemory/status` এবং ভিউয়ার পেন্ডিং লগের সাইজ ও ব্যাকফিল স্টেট দেখায়। কিলেস ইনস্টল কিছুই লেখে না।
BM25 আউট অফ দ্য বক্সে গ্রিক, সিরিলিক, হিব্রু, আরবি, এবং অ্যাকসেন্টেড ল্যাটিন টোকেনাইজ করে। চাইনিজ / জাপানিজ / কোরিয়ান মেমরির জন্য, CJK রানগুলো ওয়ার্ড-লেভেল টোকেনে ভাগ করতে অপশনাল সেগমেন্টার ইনস্টল করুন (`npm install @node-rs/jieba tiny-segmenter`); এগুলো ছাড়া, agentmemory সফট-ফল করে সম্পূর্ণ-রান টোকেনাইজেশনে এবং stderr-এ একবার একটি হিন্ট প্রিন্ট করে।
### এমবেডিং প্রোভাইডার
কিলেস ইনস্টলে ভেক্টর এমবেডিং বন্ধ থাকে: `mem::search` BM25 ব্যবহার করে, যেখানে `smart-search` বিদ্যমান স্ট্রাকচারাল গ্রাফ ডেটাও ব্যবহার করতে পারে। ফ্রি অন-ডিভাইস সিম্যান্টিক এমবেডিং চালু করতে, এটি `~/.agentmemory/.env`-এ যুক্ত করুন এবং agentmemory রিস্টার্ট করুন:
```env
EMBEDDING_PROVIDER=local
```
নরমাল npm ইনস্টলে অপশনাল `@huggingface/transformers` রানটাইম অন্তর্ভুক্ত থাকে। প্রথম এমবেডিং রিকোয়েস্ট `Xenova/all-MiniLM-L6-v2` ডাউনলোড করে, তাই এর নেটওয়ার্ক অ্যাক্সেস লাগে এবং বেশি সময় নিতে পারে; পরবর্তী ইনফারেন্স অন-ডিভাইসে চলে। `EMBEDDING_PROVIDER` ওভাররাইড না করলে রিমোট প্রোভাইডারগুলো তাদের কী থেকে অটো-ডিটেক্টেড হয়।
| প্রোভাইডার | মডেল | খরচ | নোট |
|---|---|---|---|
| **Local (সুপারিশকৃত অপ্ট-ইন)** | `all-MiniLM-L6-v2` | ফ্রি | প্রথম মডেল ডাউনলোডের পর অন-ডিভাইস, শুধু-BM25-র তুলনায় +8pp রিকল |
| Gemini | `gemini-embedding-001` | ফ্রি টায়ার | 100+ ভাষা, 768/1536/3072 dims (MRL), 2048-টোকেন ইনপুট। `text-embedding-004`-কে প্রতিস্থাপন করে ([deprecated, শাটডাউন Jan 14, 2026](https://ai.google.dev/gemini-api/docs/deprecations)) |
| OpenAI | `text-embedding-3-small` | $0.02/1M | সর্বোচ্চ কোয়ালিটি |
| Voyage AI | `voyage-code-3` | পেইড | কোডের জন্য অপ্টিমাইজড |
| Cohere | `embed-english-v3.0` | ফ্রি ট্রায়াল | জেনারেল পারপাস |
| OpenRouter | কোনো মডেল | ভিন্ন হয় | মাল্টি-মডেল প্রক্সি |
---
54 টুল, 6 রিসোর্স, 3 প্রম্পট, এবং 17 স্কিল।
> **MCP শিম বনাম পূর্ণ সার্ভার:** প্রকাশিত `@agentmemory/mcp` প্যাকেজটি একটি থিন শিম। এটি পূর্ণ 54-টুল সারফেস তখনই দেখায় **যখন এটি `AGENTMEMORY_URL`-এর (প্রক্সি মোড) মাধ্যমে একটি চলমান agentmemory সার্ভারে পৌঁছাতে পারে**। কোনো সার্ভার অ্যাক্সেসযোগ্য না থাকলে, শিমটি 7-টুলের লোকাল সেটে (`memory_save`, `memory_recall`, `memory_smart_search`, `memory_sessions`, `memory_export`, `memory_audit`, `memory_governance_delete`) ফলব্যাক করে। `AGENTMEMORY_TOOLS=core|all` এনভ ভ্যারিয়েবলটি একটি *সার্ভার-সাইড* ফ্ল্যাগ; শিমের `env` ব্লকে এটি সেট করলে কোনো প্রভাব পড়ে না। Cursor / OpenCode / Gemini CLI-এ কেবল 7টি টুল দেখলে, `npx -y @agentmemory/agentmemory@latest` (বা Docker স্ট্যাক) চালু করুন এবং `AGENTMEMORY_URL=http://localhost:3111` সেট করুন।
### 54 টুল
ছোট থেকে বড়, তিনটি টুল সারফেস: `AGENTMEMORY_TOOLS=core` ভিজিবিলিটি 8টি জরুরি টুলে (`memory_save`, `memory_recall`, `memory_consolidate`, `memory_smart_search`, `memory_sessions`, `memory_diagnose`, `memory_lesson_save`, `memory_reflect`) নামিয়ে আনে; নিচের বেস সেটটি রেজিস্ট্রির 14টি ফাউন্ডেশনাল টুল; ডিফল্ট (`AGENTMEMORY_TOOLS=all`) সবগুলো 54টি দেখায়।
বেস টুল (14)
| টুল | বর্ণনা |
|------|-------------|
| `memory_recall` | অতীত অবজারভেশন সার্চ করে |
| `memory_compress_file` | স্ট্রাকচার রক্ষা করে markdown ফাইল কম্প্রেস করে |
| `memory_save` | একটি ইনসাইট, সিদ্ধান্ত, বা প্যাটার্ন সেভ করে |
| `memory_file_history` | নির্দিষ্ট ফাইল সম্পর্কে অতীত অবজারভেশন |
| `memory_patterns` | পুনরাবৃত্ত প্যাটার্ন ডিটেক্ট করে |
| `memory_sessions` | সাম্প্রতিক সেশনের তালিকা দেয় |
| `memory_smart_search` | হাইব্রিড সিম্যান্টিক + কিওয়ার্ড সার্চ |
| `memory_vision_search` | ছবির অবজারভেশন সার্চ করে |
| `memory_timeline` | ক্রনোলজিক্যাল অবজারভেশন |
| `memory_profile` | প্রজেক্ট প্রোফাইল (concept, file, pattern) |
| `memory_export` | সব মেমরি ডেটা এক্সপোর্ট করে |
| `memory_relations` | রিলেশনশিপ গ্রাফ কোয়েরি করে |
| `memory_commit_lookup` | একটি git কমিটের পেছনের সেশন |
| `memory_commits` | একটি সেশনের জন্য রেকর্ড করা কমিট |
এক্সটেন্ডেড টুল (মোট 54টি, ডিফল্ট সারফেস)
| টুল | বর্ণনা |
|------|-------------|
| `memory_patterns` | পুনরাবৃত্ত প্যাটার্ন ডিটেক্ট করে |
| `memory_timeline` | ক্রনোলজিক্যাল অবজারভেশন |
| `memory_relations` | রিলেশনশিপ গ্রাফ কোয়েরি করে |
| `memory_graph_query` | নলেজ গ্রাফ ট্রাভার্সাল |
| `memory_consolidate` | 4-স্তর কনসোলিডেশন চালায় |
| `memory_claude_bridge_sync` | MEMORY.md-র সাথে সিঙ্ক করে |
| `memory_team_share` | টিম মেম্বারদের সাথে শেয়ার করে |
| `memory_team_feed` | সাম্প্রতিক শেয়ার করা আইটেম |
| `memory_audit` | অপারেশনের অডিট ট্রেইল |
| `memory_governance_delete` | অডিট ট্রেইল সহ ডিলিট করে |
| `memory_snapshot_create` | Git-ভার্সনড স্ন্যাপশট |
| `memory_action_create` | ডিপেন্ডেন্সি সহ ওয়ার্ক আইটেম তৈরি করে |
| `memory_action_update` | অ্যাকশনের স্ট্যাটাস আপডেট করে |
| `memory_frontier` | প্রায়োরিটি অনুযায়ী র্যাংকড আনব্লকড অ্যাকশন |
| `memory_next` | একটিমাত্র সবচেয়ে গুরুত্বপূর্ণ পরের অ্যাকশন |
| `memory_lease` | এক্সক্লুসিভ অ্যাকশন লিজ (মাল্টি-এজেন্ট) |
| `memory_routine_run` | ওয়ার্কফ্লো রুটিন ইনস্ট্যান্সিয়েট করে |
| `memory_signal_send` | ইন্টার-এজেন্ট মেসেজিং |
| `memory_signal_read` | রিসিপ্ট সহ মেসেজ পড়ে |
| `memory_checkpoint` | এক্সটার্নাল কন্ডিশন গেট |
| `memory_mesh_sync` | ইনস্ট্যান্সের মধ্যে P2P সিঙ্ক |
| `memory_sentinel_create` | ইভেন্ট-ড্রিভেন ওয়াচার |
| `memory_sentinel_trigger` | বাইরে থেকে সেন্টিনেল ফায়ার করে |
| `memory_sketch_create` | এফিমেরাল অ্যাকশন গ্রাফ |
| `memory_sketch_promote` | পার্মানেন্টে প্রোমোট করে |
| `memory_crystallize` | অ্যাকশন চেইন কমপ্যাক্ট করে |
| `memory_diagnose` | হেলথ চেক |
| `memory_heal` | আটকে থাকা স্টেট অটো-ফিক্স করে |
| `memory_facet_tag` | Dimension:value ট্যাগ |
| `memory_facet_query` | ফ্যাসেট ট্যাগ দিয়ে কোয়েরি করে |
| `memory_verify` | প্রোভেন্যান্স ট্রেস করে |
### 6 রিসোর্স · 3 প্রম্পট · 17 স্কিল
| ধরন | নাম | বর্ণনা |
|------|------|-------------|
| Resource | `agentmemory://status` | স্বাস্থ্য, সেশন সংখ্যা, মেমরি সংখ্যা |
| Resource | `agentmemory://project/{name}/profile` | প্রতি-প্রজেক্ট ইন্টেলিজেন্স |
| Resource | `agentmemory://project/{name}/recent` | একটি প্রজেক্টের সাম্প্রতিক অবজারভেশন |
| Resource | `agentmemory://memories/latest` | সাম্প্রতিক 10টি অ্যাকটিভ মেমরি |
| Resource | `agentmemory://graph/stats` | নলেজ গ্রাফ স্ট্যাটিস্টিক্স |
| Resource | `agentmemory://team/{id}/profile` | শেয়ার্ড টিম প্রোফাইল |
| Prompt | `recall_context` | সার্চ + কনটেক্সট মেসেজ রিটার্ন করে |
| Prompt | `session_handoff` | এজেন্টদের মধ্যে হ্যান্ডঅফ ডেটা |
| Prompt | `detect_patterns` | পুনরাবৃত্ত প্যাটার্ন অ্যানালাইজ করে |
| Skill | `/recall` | মেমরি সার্চ করে |
| Skill | `/remember` | লং-টার্ম মেমরিতে সেভ করে |
| Skill | `/session-history` | সাম্প্রতিক সেশনের সামারি |
| Skill | `/forget` | অবজারভেশন/সেশন ডিলিট করে |
টেবিলটি মূল চারটি স্কিল দেখায়। পূর্ণ সেট হলো 9টি ইনভোকেবল স্কিল প্লাস 8টি রেফারেন্স স্কিল; উপরের Native skills সেকশন দেখুন।
### স্ট্যান্ডঅ্যালোন MCP
পূর্ণ সার্ভার ছাড়াই চালান, যেকোনো MCP ক্লায়েন্টের জন্য। এর যেকোনো একটি কাজ করবে:
```bash
npx -y @agentmemory/agentmemory@latest mcp # canonical (always available)
npx -y @agentmemory/mcp # shim package alias
```
বা আপনার এজেন্টের MCP কনফিগে যুক্ত করুন:
অধিকাংশ এজেন্ট (Cursor, Claude Desktop, Cline, Roo Code, Gemini CLI):
```json
{
"mcpServers": {
"agentmemory": {
"command": "npx",
"args": ["-y", "@agentmemory/mcp"],
"env": {
"AGENTMEMORY_URL": "http://localhost:3111"
}
}
}
}
```
ফাইলটি রিপ্লেস করার বদলে হোস্টের বিদ্যমান `mcpServers` অবজেক্টে `agentmemory` এন্ট্রিটি মার্জ করুন। হোস্টের `localhost`-এ পৌঁছাতে না পারা স্যান্ডবক্সড ক্লায়েন্টের জন্য, `env` ব্লকে `"AGENTMEMORY_FORCE_PROXY": "1"` যুক্ত করুন এবং `AGENTMEMORY_URL`-কে স্যান্ডবক্স পৌঁছাতে পারে এমন একটি রুটে সেট করুন।
OpenCode (`opencode.json`):
```json
{
"mcp": {
"agentmemory": {
"type": "local",
"command": ["npx", "-y", "@agentmemory/mcp"],
"enabled": true
}
},
"plugin": ["./plugins/agentmemory-capture.ts"]
}
```
রেপো থেকে প্লাগইন ফাইল কপি করুন:
```bash
mkdir -p ~/.config/opencode/plugins
cp plugin/opencode/agentmemory-capture.ts ~/.config/opencode/plugins/
cp plugin/opencode/commands/*.md ~/.config/opencode/commands/
```
---
`3113` পোর্টে অটো-স্টার্ট হয়। ভিউয়ার কানেক্ট হওয়ার সময় একটি স্ন্যাপশট লোড করে (`GET /agentmemory/viewer/snapshot`) এবং তারপর লাইভ স্ট্রিম ইভেন্ট অ্যাপ্লাই করে: নতুন মেমরি, লেসন, অবজারভেশন, অডিট এন্ট্রি, গ্রাফ পরিবর্তন, এবং হেলথ আপডেট পোলিং বা পেজ রিলোড ছাড়াই দেখা যায়। অন্য একমাত্র রিকোয়েস্টগুলো হলো আপনি যে অ্যাকশনে ক্লিক করেন, "load more" পেজ, এবং সার্চ। স্ট্রিম বিচ্ছিন্ন হলে, ভিউয়ার দেখায় তার সংখ্যাগুলো কত পুরোনো, ব্যাকঅফ দিয়ে রিকানেক্ট করে এবং একটি স্ন্যাপশট থেকে রিসিঙ্ক করে।
- **চারটি গ্রুপে 12টি ট্যাব**, লাইভ কাউন্ট, ডিপ লিংক (`#memories/`, `#sessions/?obs=`, `#graph/`, `#health/consolidation`), কিবোর্ড শর্টকাট এবং মোবাইল মেনু সহ।
- **Memories:** সার্ভার-সাইড সার্চ, প্রজেক্ট, এজেন্ট ও টাইপ অনুযায়ী ফিল্টার, ভার্সন চেইন ও একটি word diff সহ একটি ডিটেল প্যানেল, প্রোভেন্যান্স লিংক, id-র জন্য কপি বাটন, MCP কল এবং একটি curl কমান্ড, এডিট (একটি নতুন ভার্সন), কনফার্মেশন সহ forget, বাল্ক forget, এবং JSON এক্সপোর্ট।
- **Sessions:** রিডেবল টুল ইনপুট ও আউটপুট সহ একটি ইনলাইন অবজারভেশন টাইমলাইন, ফিল্টার ও পেজিং, এবং প্রতিটি সেশন যে মেমরি ও লেসন তৈরি করেছে।
- **Graph:** সার্চ, রিলেশন ও সোর্স সহ নোড ডিটেল, কেবল কালারের উপর নির্ভর না করা একটি লিজেন্ড, এবং জুম কন্ট্রোল।
- **Health:** `GET /agentmemory/status`-এর লাইভ ভার্সন। প্রতিটি সমস্যার সাথে তার সমাধান থাকে, প্লাস state ব্যাকএন্ড, ইনডেক্স সেভ স্টেট, গ্রাফ প্রোভেন্যান্স কমপ্যাকশনের অগ্রগতি, এবং আসল থ্রেশহোল্ড সহ একটি কনসোলিডেশন এক্সপ্লেইনার।
- **Audit, Activity, Profile, Replay, Lessons, Actions, এবং Crystals** পেজ, প্রতিটিতে একটি এম্পটি স্টেট আছে যা বলে সেকশনটি কী, কেন এটি খালি, এবং সেটা ভরাট করার কমান্ড কী, আর প্রতিটি টার্ম ও নম্বরের উপর একটি `?` গ্লসারি টুলটিপ।
```bash
open http://localhost:3113
```
ভিউয়ার সার্ভার ডিফল্টভাবে `127.0.0.1`-এ বাইন্ড করে এবং REST API-তে রিকোয়েস্ট ফরওয়ার্ড করার সময় সার্ভার সিক্রেট যুক্ত করে, তাই এর কোনো সেটআপ লাগে না। REST-সার্ভড `/agentmemory/viewer` এন্ডপয়েন্ট নরমাল bearer-token নিয়ম মেনে চলে এবং টোকেন ছাড়া ব্রাউজারগুলোকে ভিউয়ার পোর্টে রিডাইরেক্ট করে। CSP হেডার প্রতি-রেসপন্স script nonce ব্যবহার করে এবং ইনলাইন হ্যান্ডলার অ্যাট্রিবিউট বন্ধ রাখে (`script-src-attr 'none'`)।
---
`:3113`-এর ভিউয়ার দেখায় আপনার এজেন্ট কী **মনে রেখেছে**। [iii console](https://iii.dev/docs/console) দেখায় আপনার এজেন্ট কী **করেছে**: প্রতিটি মেমরি অপারেশন একটি OpenTelemetry ট্রেস হিসেবে, প্রতিটি KV এন্ট্রি এডিটযোগ্য, প্রতিটি ফাংশন ইনভোকেবল, প্রতিটি স্ট্রিম ট্যাপযোগ্য। একই মেমরির উপর দুটি জানালা: একটি প্রোডাক্ট-শেপড, একটি ইঞ্জিন-শেপড।
একটি `memory_smart_search` ফায়ার হতে দেখুন এবং BM25 স্ক্যান → embedding lookup → RRF ফিউশন → reranker-কে একটি waterfall হিসেবে দেখুন। KV ব্রাউজারে একটি আটকে থাকা কনসোলিডেশন টাইমার এডিট করুন। একটি টুইকড পেলোড দিয়ে `PostToolUse` হুক রিপ্লে করুন। WebSocket স্ট্রিম পিন করুন এবং অবজারভেশনগুলো লাইভ ল্যান্ড করতে দেখুন।
agentmemory এটা ফ্রিতে দেয় কারণ প্রতিটি ফাংশন কল ও ট্রিগার iii-এর মধ্য দিয়ে ফায়ার হয়; কিছুই কাস্টম নয়, ইন্সট্রুমেন্ট করার কিছু নেই।
Workers পেজ: প্রতিটি কানেক্টেড ওয়ার্কার, agentmemory নিজেও সহ, PID, ফাংশন কাউন্ট, রানটাইম, এবং last-seen সহ।
**আগে থেকেই ইনস্টলড।** কনসোলটি পিন করা `iii` engine (0.22+)-এর সাথে আসে; আলাদা করে ইনস্টল করার কিছু নেই। প্রথম লঞ্চ ইঞ্জিনের পাশে কনসোল বাইনারি ডাউনলোড করে।
**agentmemory-র সাথে লঞ্চ করুন:**
```bash
agentmemory console
```
এটি পিন করা ইঞ্জিনের `iii console`-কে agentmemory রিজলভ করা পোর্টগুলোর (REST, streams, bridge) বিরুদ্ধে চালায় এবং ভিউয়ারের একটা পোর্ট উপরে, ডিফল্টভাবে `http://localhost:3114`-এ সার্ভ করে। `--console-port N` অন্য একটা পোর্ট বেছে নেয়; `--port` এবং `--instance` `stop`-এর জন্য যেভাবে করে ঠিক সেভাবেই agentmemory ইনস্ট্যান্স বেছে নেয়; অন্য যেকোনো ফ্ল্যাগ পাস-থ্রু হয়, যেমন এক্সপেরিমেন্টাল আর্কিটেকচার-গ্রাফ পেজের জন্য `--enable-flow`।
একই কাজ হাতে করে, `agentmemory` PATH-এ না থাকলে কাজে লাগে:
```bash
~/.agentmemory/bin/iii console --port 3114 \
--engine-port 3111 \
--ws-port 3112 \
--bridge-port 49134
```
**কনসোল থেকে আপনি যা করতে পারেন:**
| পেজ | যা করতে ব্যবহার করুন |
|------|-----------|
| **Workers** | প্রতিটি কানেক্টেড ওয়ার্কার ও তার লাইভ মেট্রিক্স দেখুন, এমনকি agentmemory ওয়ার্কারটিও। |
| **Functions** | একটি JSON পেলোড দিয়ে agentmemory-র যেকোনো ফাংশন সরাসরি ইনভোক করুন; কোনো ক্লায়েন্ট ওয়্যার না করে `memory.recall`, `memory.consolidate`, `graph.query` টেস্ট করার জন্য সুবিধাজনক। |
| **Triggers** | HTTP, cron, event, এবং state ট্রিগার রিপ্লে করুন: ম্যানুয়ালি কনসোলিডেশন cron ফায়ার করুন, একটি HTTP রুট রিট্রাই করুন, একটি state পরিবর্তন emit করুন। |
| **States** | সেশন, মেমরি স্লট, লাইফসাইকেল টাইমার, এবং এমবেডিং ইনডেক্সের উপর পূর্ণ CRUD সহ KV ব্রাউজার; ভ্যালু ইন-প্লেস এডিট করুন। |
| **Streams** | মেমরি রাইট, হুক ইভেন্ট, এবং অবজারভেশন আপডেটের জন্য লাইভ WebSocket মনিটর, এগুলো iii স্ট্রিমের মধ্য দিয়ে প্রবাহিত হওয়ার সাথে সাথে। |
| **Queues** | ডিউরেবল কিউ টপিক + ডেড-লেটার ম্যানেজমেন্ট। ফেইলড এমবেডিং / কম্প্রেশন জব রিপ্লে বা ড্রপ করুন। |
| **Traces** | OpenTelemetry waterfall / flame / service-breakdown ভিউ। একটি একক `memory.search` ঠিক কোন ফাংশন, DB কল, এবং এমবেডিং রিকোয়েস্ট তৈরি করেছে তা দেখতে `trace_id` দিয়ে ফিল্টার করুন। |
| **Logs** | trace/span ID-র সাথে ফিল্টার ও কো-রিলেটেড স্ট্রাকচারড OTEL লগ। |
| **Config** | রানটাইম কনফিগারেশন: আপনার ইঞ্জিন ঠিক কোন ওয়ার্কার, প্রোভাইডার, এবং পোর্ট নিয়ে চলছে তা দেখুন। |
| **Flow** | (অপশনাল, `--enable-flow`) প্রতিটি ওয়ার্কার, ট্রিগার, এবং স্ট্রিমের ইন্টারঅ্যাক্টিভ আর্কিটেকচার গ্রাফ। |
Traces: প্রতিটি মেমরি অপারেশনের জন্য waterfall / flame / service breakdown।
**Trace আগে থেকেই চালু:**
`iii-config.yaml` `iii-observability` ওয়ার্কার চালু অবস্থায় আসে (`exporter: memory`, `sampling_ratio: 0.1`, মেট্রিক্স + লগ)। কোনো অতিরিক্ত কনফিগ লাগে না; agentmemory শুরু হওয়ার সাথে সাথে, প্রতিটি মেমরি অপারেশন একটি স্ট্রাকচারড লগ emit করে যা কনসোল পড়তে পারে, এবং তার মধ্যে দশটায় একটা (`sampling_ratio: 0.1`) একটি trace span-ও emit করে।
এর বদলে Jaeger/Honeycomb/Grafana Tempo-তে এক্সপোর্ট করতে চাইলে, `exporter: memory`-কে `exporter: otlp`-এ বদলান এবং iii-র observability ডক্স অনুযায়ী কালেক্টর এন্ডপয়েন্ট সেট করুন।
> **খেয়াল রাখুন:** কনসোলের উপর নিজেই কোনো auth এনফোর্সড নেই; এটিকে `127.0.0.1`-এই (ডিফল্ট) বাঁধা রাখুন এবং কখনো পাবলিকলি এক্সপোজ করবেন না।
---
agentmemory **ইতিমধ্যেই একটি চলমান [iii](https://iii.dev) ইনস্ট্যান্স**। তিনটি প্রিমিটিভ (worker, function, trigger) রানটাইম কম্পোজ করে; KV state, স্ট্রিম, এবং OTEL ট্রেস আসে iii-র সাথে আসা iii-state, iii-stream, এবং iii-observability ওয়ার্কার থেকে। আপনি Postgres, Redis, Express, pm2, বা Prometheus ইনস্টল করেননি, কারণ iii এগুলো প্রতিস্থাপন করে।
তার মানে একটা মাত্র কমান্ড agentmemory-কে একটা সম্পূর্ণ নতুন সক্ষমতা দিয়ে বাড়িয়ে দেয়।
### আরও ওয়ার্কার দিয়ে agentmemory বাড়ান
agentmemory-র প্রয়োজনীয় বিল্টিনগুলো আগে থেকেই `iii-config.yaml`-এ আছে এবং তার সাথেই বুট হয়: `iii-state` (KV), `iii-queue` (ইভেন্ট সাবস্ক্রাইবারদের জন্য ডিউরেবল রিট্রাই), `iii-pubsub`, `iii-cron`, `iii-stream`, এবং `iii-observability` (প্রতিটি ফাংশনে OTEL ট্রেস, মেট্রিক্স, এবং লগ)। [iii worker registry](https://workers.iii.dev)-র বাকি যেকোনো কিছু একই ইঞ্জিনে প্লাগ ইন করে: `iii-config.yaml` কে `~/.agentmemory/iii-config.yaml`-এ কপি করুন (CLI বান্ডলড ফাইলের চেয়ে এই ফাইলটিকে প্রাধান্য দেয় এবং তারপরেও পোর্ট ও ডেটা পাথ এতে রেন্ডার করে), এন্ট্রিটি যুক্ত করুন, `~/.agentmemory/bin/iii update worker` দিয়ে একবার ওয়ার্কার রানটাইম ইনস্টল করুন, এবং agentmemory রিস্টার্ট করুন।
```yaml
workers:
# ...the bundled entries...
- name: database # SQL-backed state adapter when you outgrow the KV defaults
- name: iii-sandbox # run code that came out of memory_recall inside a throwaway VM
- name: mcp # extra MCP servers next to agentmemory's, same engine
```
| ওয়ার্কার | agentmemory-র উপরে যা পাবেন |
|---|---|
| [`database`](https://workers.iii.dev/workers/database) | KV ডিফল্ট ছাড়িয়ে গেলে SQL-ব্যাকড state অ্যাডাপ্টার |
| [`iii-sandbox`](https://workers.iii.dev/workers/iii-sandbox) | `memory_recall` থেকে আসা কোড আপনার শেলে না চলে একটি থ্রোঅ্যাওয়ে VM-এর ভেতরে চলে |
| [`mcp`](https://workers.iii.dev/workers/mcp) | agentmemory-র পাশে অতিরিক্ত MCP সার্ভার দাঁড় করান, একই ইঞ্জিন শেয়ার করে |
0.22.x ইঞ্জিনে উপরের বিল্টিনগুলোর জন্য `iii-` প্রিফিক্সড নামগুলো রাখুন; প্রিফিক্স ছাড়া `http`, `state`, `queue`, `pubsub`, এবং `cron` এন্ট্রিগুলো সেই স্ট্যান্ডঅ্যালোন রেজিস্ট্রি ওয়ার্কার যেগুলোতে agentmemory 0.23 মাইগ্রেশনের সাথে চলে যাবে।
সম্পূর্ণ রেজিস্ট্রি: [workers.iii.dev](https://workers.iii.dev)। সেখানে প্রতিটি ওয়ার্কার agentmemory যে প্রিমিটিভ ব্যবহার করে তার মধ্য দিয়েই কম্পোজ হয়, এবং আপনার কাছে থাকা agentmemory নিজেই তাদের একটি।
### ইঞ্জিন কনফিগ এবং বাইন্ড অ্যাড্রেস
`agentmemory start` প্রথম যে ফাইলটি পায় সেখান থেকে ইঞ্জিন কনফিগ পড়ে: `AGENTMEMORY_III_CONFIG`, বর্তমান ডিরেক্টরির `./iii-config.yaml`, `~/.agentmemory/iii-config.yaml`, তারপর বান্ডলড `iii-config.yaml`। প্রতিবার স্টার্টে এটি সেই ফাইলটি (ডেটা পাথ, পোর্ট, state ব্যাকএন্ড) `~/.agentmemory/data/iii-config.runtime.yaml`-এ রেন্ডার করে এবং রেন্ডার করা কপি দিয়ে ইঞ্জিন লঞ্চ করে, তাই সোর্স ফাইলটি এডিট করুন, রেন্ডার করা ফাইলটি না। সোর্স ফাইলের `host:` ভ্যালুগুলো যেমন লেখা তেমনই রাখা হয়।
বান্ডলড `iii-config.yaml` ইচ্ছাকৃতভাবে `127.0.0.1`-এ বাইন্ড করে, এবং এই ডিফল্ট কনটেইনারের ভেতরেও প্রযোজ্য। কনটেইনারে শুরু হওয়া একটি CLI কনটেইনারের লুপব্যাকে শোনে, তাই পাবলিশড পোর্ট কিছুতেই পৌঁছায় না। পাবলিশড পোর্টের মাধ্যমে একটি কনটেইনারাইজড CLI সার্ভ করতে, `AGENTMEMORY_III_CONFIG`-কে এমন একটি কনফিগে সেট করুন যা `0.0.0.0`-এ বাইন্ড করে। প্যাকেজড `iii-config.docker.yaml` তেমন একটি: এটি `iii-http`, `iii-stream`, এবং ইঞ্জিন পোর্টকে `0.0.0.0`-এ বাইন্ড করে এবং state `/data`-এর নিচে জমা রাখে, তাই সেখানে একটি রাইটেবল ভলিউম মাউন্ট করুন। `AGENTMEMORY_SECRET` সেট রাখুন, এবং কেবল প্রয়োজনীয় পোর্টগুলোই পাবলিশ করুন, `127.0.0.1`-এ বা আপনার বিশ্বস্ত কোনো প্রক্সির পেছনে।
এই রেপোর `docker-compose.yml` CLI-র কনফিগ লুকআপ দিয়ে যায় না: এটি `iii-config.docker.yaml`-কে `/app/config.yaml`-এ মাউন্ট করে, এবং `iii-engine` কন্টেইনার `--config /app/config.yaml` দিয়ে শুরু হয়। ওয়ান-ক্লিক [deploy templates](../deploy/) তাদের এন্ট্রিপয়েন্টে নিজেদের `0.0.0.0` কনফিগ লেখে।
### স্টোরেজ ব্যাকএন্ড: file (ডিফল্ট) বনাম redis
`iii-state` এবং `iii-stream` ডিফল্টভাবে iii-engine-র বান্ডলড ফাইল-বেসড KV স্টোর ব্যবহার করে: প্রতি স্কোপে একটি JSON ফাইল, ইঞ্জিন প্রসেসের মেমরিতে রাখা এবং একটা টাইমারে ডিস্কে পুনরায় লেখা হয়। একক-ইউজার লোকাল ইনস্টলের জন্য এটাই সঠিক ডিফল্ট; একাধিক কনকারেন্ট রাইটার সহ একটি শেয়ার্ড ডেমন এর পরিবর্তে Redis থেকে আসল প্রতি-কী রাইট পায়, প্রতি অপারেশনে একটি নেটওয়ার্ক রাউন্ড ট্রিপের খরচে (প্রতিটি `state::*` কল তখনও একটি Redis কানেকশনে সিরিয়ালাইজ হয়, তাই এটি ফাইল স্টোরের লক-কে একটি সকেটের বিনিময়ে বদলায়, প্যারালালিজমের বিনিময়ে নয়)।
দুটো ওয়ার্কারকেই iii-engine-র বিল্ট-ইন `redis` অ্যাডাপ্টারে বদলাতে `AGENTMEMORY_STATE_BACKEND=redis` (প্লাস `AGENTMEMORY_REDIS_URL`) সেট করুন, যা প্রতিটি রাইটে পুরো স্কোপ পুনরায় লেখার বদলে প্রতিটি কী-কে একটি Redis হ্যাশ ফিল্ড (`HSET`) হিসেবে জমা রাখে:
```env
# ~/.agentmemory/.env
AGENTMEMORY_STATE_BACKEND=redis
AGENTMEMORY_REDIS_URL=redis://localhost:6379
```
`AGENTMEMORY_STATE_BACKEND`-র ডিফল্ট `file`; এটি আনসেট রাখলে আজকের আচরণ অপরিবর্তিত থাকে, এবং একটি অচেনা ভ্যালু (`file` বা `redis` ছাড়া অন্য কিছু) নিঃশব্দ ফলব্যাকের বদলে একটি স্টার্টআপ এরর। `/agentmemory/status` এবং ভিউয়ারের Health পেজ (State store সারি) রিপোর্ট করে কোন ব্যাকএন্ড অ্যাকটিভ এবং এটি উত্তর দেয় কিনা, কখনো URL দেখায় না।
**শুধু প্লেইন `redis://`।** পিন করা ইঞ্জিন (0.22.1) তার Redis ক্লায়েন্ট TLS সাপোর্ট ছাড়াই বিল্ড করে, তাই একটি `rediss://` URL (বেশিরভাগ ম্যানেজড Redis অফারিং, যেমন Upstash, Redis Cloud, এবং in-transit এনক্রিপশন সহ ElastiCache, ডিফল্টভাবে TLS-only) কানেক্ট করতে ফেইল করে। কানেকশনটি আনএনক্রিপ্টেড, তাই Redis পাসওয়ার্ড এবং প্রতিটি স্টোর করা মেমরি তারের উপর প্লেইন টেক্সটে যায়: একটি লোকাল Redis বা আপনার বিশ্বস্ত কোনো প্রাইভেট নেটওয়ার্কের Redis-এ পয়েন্ট করুন। অন্য কোনো Redis-এর জন্য, agentmemory হোস্টে একটি এনক্রিপ্টেড টানেল (stunnel, SSH, বা VPN) চালান, যাতে প্লেইন `redis://` হপটি সেই হোস্টেই থাকে এবং টানেলের আপস্ট্রিম কানেকশন এনক্রিপ্টেড ও অথেন্টিকেটেড থাকে। একটি Redis পাসওয়ার্ডে সিঙ্গল কোট থাকলে, এটা percent-encode করুন (`%27`); ইঞ্জিন পার্স করার আগে URL-কে তার YAML কনফিগে এক্সপ্যান্ড করে।
**প্রতি `--instance`-এ একটি Redis সার্ভার।** ইঞ্জিনের Redis কী প্রিফিক্স (`state:`, `stream::`) ফিক্সড, তাই একই ডেটাবেসের দিকে পয়েন্ট করা দুটি agentmemory ইনস্ট্যান্স (`--instance 1`, `--instance 2`, ...) একে অপরের ডেটা ওভাররাইট করে ফেলে। একটি আলাদা ডেটাবেস ইনডেক্স (`redis://localhost:6379/1`) স্টোর করা ডেটা আলাদা রাখে, কিন্তু ইঞ্জিন লাইভ ভিউয়ার ইভেন্ট একটি Redis pub/sub চ্যানেলের (`stream::events`) উপর রিলে করে, এবং Redis pub/sub ডেটাবেস ইনডেক্স উপেক্ষা করে, তাই প্রতিটি ইনস্ট্যান্সের ভিউয়ার তখনও অন্যটির লাইভ ইভেন্ট দেখাবে। একাধিক ইনস্ট্যান্স চালালে প্রতিটিকে তার নিজের Redis সার্ভার (বা পোর্ট) দিন।
**কী একই থাকে, এবং কী বদলায়।** agentmemory-র প্রতিটি ফিচার Redis-এ কাজ করে: সেশন, অবজারভেশন, মেমরি (remember, supersede, evolve, forget), সার্চ ও ইনডেক্স বাকেট, লেসন, গ্রাফ, অডিট লগ ও তার মাসিক স্কোপ, এক্সপোর্ট ও ইমপোর্ট, গভর্নেন্স ডিলিট, কনসোলিডেশন স্ট্যাটাস, ভিউয়ার স্ন্যাপশট ও তার লাইভ স্ট্রিম, এবং হেলথ মনিটর। ইঞ্জিন প্রতিটি স্কোপকে একটি Redis হ্যাশ (`HSET`/`HGET`/`HGETALL`) হিসেবে জমা রাখে এবং ফাইল স্টোরের মতোই একই state ট্রিগার ফায়ার করে। ইঞ্জিনের তিনটি পার্থক্য agentmemory-র ভেতরে হ্যান্ডল করা হয়:
- Redis কোনো স্কোপের রেকর্ড কোনো ফিক্সড অর্ডারে রিটার্ন করে না। agentmemory সেগুলোকে পুরোনো থেকে সাজায় (রেকর্ড id-তে থাকা তৈরির সময় দিয়ে, তারপর তার টাইমস্ট্যাম্প দিয়ে) যাতে লিস্ট, পেজিং, এবং এক্সপোর্ট চাঙ্ক ফাইল স্টোরের মতো একই অর্ডারে ফিরে আসে।
- ইঞ্জিন Redis-এ একটি Lua স্ক্রিপ্টে পার্শিয়াল আপডেট প্রয়োগ করে যা খালি অ্যারেকে খালি অবজেক্টে বদলে দেয়। agentmemory নিজেই Redis-এ সেই আপডেটগুলো প্রয়োগ করে (read, change, write, একটি প্রতি-কী লকের অধীনে), তাই `tags: []`-এর মতো ফিল্ড অ্যারে-ই থাকে।
- লেগ্যাসি অডিট লগ চেক ডিস্কে ফাইল স্টোরের ফাইল খোঁজার বদলে Redis থেকে পুরোনো স্কোপ পড়ে।
একটা পার্থক্যে আপনার হাত লাগাতে হবে: **Redis রিস্টার্ট হওয়ার পর, agentmemory রিস্টার্ট না হওয়া পর্যন্ত ইঞ্জিন ভিউয়ারে লাইভ ইভেন্ট রিলে করা বন্ধ করে দেয়**। ডেটা তখনও স্বাভাবিকভাবে সেভ ও পড়া হয়। হেলথ মনিটর প্রতি 30 সেকেন্ডে Redis-এর মাধ্যমে একটি টেস্ট ইভেন্ট পাঠায়; সেটা ফিরে না এলে, `/agentmemory/status` এবং ভিউয়ারের Health পেজ "Live updates are not reaching the viewer" দেখায় সমাধান সহ: agentmemory রিস্টার্ট করুন। Redis ডাউন থাকলে, স্ট্যাটাস রিপোর্ট দেখায় "The state store is not answering" এবং এটা যাচাই করার উপায় (`redis-cli -u "$AGENTMEMORY_REDIS_URL" ping`)। একটা খুব বড় স্কোপ লিস্ট করা একটি `HGETALL`-এ পুরো হ্যাশ পড়ে, ফাইল স্টোর এটাকে মেমরিতে রাখার মতোই একই খরচ।
**সুপারিশকৃত Redis সেটিংস।** ডিফল্ট `save 3600 1 300 100 60 10000` স্ন্যাপশট পলিসি একটা ক্র্যাশে মিনিটের রাইট হারাতে পারে, ফাইল স্টোরের 5s ফ্লাশ উইন্ডোর চেয়েও খারাপ। যেটা হারালে আপনার খারাপ লাগবে তার জন্য `appendonly yes` সেট করুন। `maxmemory-policy noeviction` সেট করুন; `allkeys-lru` বা অনুরূপ কিছু Redis তার মেমরি লিমিটে পৌঁছালে নিঃশব্দে মেমরি ড্রপ করে দেয়।
একটি নেটিভ (নন-Docker) স্টার্ট, এবং প্রতিটি ওয়ান-ক্লিক [deploy template](../deploy/) (এগুলো বান্ডলড `iii-config.yaml` ওভাররাইট করে এবং নেটিভভাবে শুরু হয়), `AGENTMEMORY_STATE_BACKEND`/`AGENTMEMORY_REDIS_URL` পড়ে এবং লঞ্চ করা `iii-config`-এ রেন্ডার করে। URL নিজেই সেই রেন্ডার করা ফাইলে কখনো লেখা হয় না, কেবল একটি `${AGENTMEMORY_REDIS_URL}` রেফারেন্স যা ইঞ্জিন প্রসেস বুটের সময় তার নিজের এনভায়রনমেন্ট থেকে এক্সপ্যান্ড করে। কেবল এই রেপোর নিজের Docker Compose পাথ (`AGENTMEMORY_USE_DOCKER=1`, বা সেভাবে শুরু করা একটি ইঞ্জিন রিজিউম করা) `iii-config.docker.yaml`-কে read-only মাউন্ট করে এবং কখনো রেন্ডার করে না; `agentmemory start` এই কম্বিনেশন ডিটেক্ট করলে সতর্ক করে। [iii-state](https://workers.iii.dev/workers/iii-state) এবং [iii-stream](https://workers.iii.dev/workers/iii-stream) ওয়ার্কার ডক্সে দেখানো একই `name: redis` / `config: redis_url: ...` শেপ অনুসরণ করে ফাইলটি হাতে বদলান, এবং কনটেইনার থেকে পৌঁছানো যায় এমন একটি Redis-এ `redis_url` পয়েন্ট করুন। `docker-compose.yml` ইঞ্জিন কন্টেইনারে `AGENTMEMORY_REDIS_URL` পাস করে, তাই `redis_url: '${AGENTMEMORY_REDIS_URL}'` সেখানে কাজ করে এবং মাউন্ট করা ফাইলের বাইরে URL রাখে।
রেন্ডার করা কনফিগ `~/.agentmemory/data/iii-config.runtime.yaml`-এর বাইরে URL রাখে, কিন্তু ইঞ্জিনের নিজের কনফিগারেশন ওয়ার্কার বুট হওয়ার পর তখনও *এক্সপ্যান্ডেড* ভ্যালুটা `~/.agentmemory/config/iii-state.yaml` এবং `iii-stream.yaml`-এ পার্সিস্ট করে (সেই ওয়ার্কার তার সিড জমা রাখার আগেই iii-engine-র `${VAR}` এক্সপানশন ঘটে, এবং এটি রিজলভড ভ্যালু জমা রাখে, রেফারেন্স নয়)। সেই ডিরেক্টরিটাকে একটি ক্রেডেনশিয়াল ধরে নিয়ে চলুন: কোনো শেয়ার্ড হোস্টে `chmod 700 ~/.agentmemory` করুন, এবং ডেটাবেসের অ্যাডমিন ক্রেডেনশিয়ালের চেয়ে agentmemory-র প্রয়োজন অনুযায়ী স্কোপড একটি Redis ACL ইউজার বেছে নিন।
**মাইগ্রেশন স্বয়ংক্রিয় নয়।** `AGENTMEMORY_STATE_BACKEND` বদলালে দুই পাশেই একটি খালি স্টোর থেকে শুরু হয়; কিছুই বিদ্যমান ডেটা file থেকে Redis-এ বা উল্টোদিকে কপি করে না। আপনি যে ব্যাকএন্ড ছেড়ে যাচ্ছেন সেখান থেকে এক্সপোর্ট করুন এবং যেখানে যাচ্ছেন সেখানে ইমপোর্ট করুন। এটা bash এবং zsh-এ (`bash -u` সহ) অভিন্নভাবে চলে। `AUTH=(${AGENTMEMORY_SECRET:+-H "Authorization: Bearer $AGENTMEMORY_SECRET"})`-এর মতো একটি অ্যারে তা করে না: zsh হেডারটাকে একটা বিকৃত শব্দ হিসেবে রাখে যেখানে bash এটাকে দুই ভাগে ভাগ করে, তাই `AGENTMEMORY_SECRET` সেট থাকলেই দুটো রিকোয়েস্টই 401 দেয়:
```bash
# 0. Use the generated secret when none is exported:
AGENTMEMORY_SECRET="${AGENTMEMORY_SECRET:-$(cat ~/.agentmemory/secret 2>/dev/null)}"
# 1. On the old backend, while agentmemory is still running on it:
if [ -n "${AGENTMEMORY_SECRET:-}" ]; then
curl -fsS -H "Authorization: Bearer $AGENTMEMORY_SECRET" http://localhost:3111/agentmemory/export > backup.json
else
curl -fsS http://localhost:3111/agentmemory/export > backup.json
fi
# 2. Confirm backup.json is a usable export before switching backends:
jq -e '.version and .exportedAt' backup.json > /dev/null || {
echo "backup.json is not a valid export; do not switch backends" >&2
exit 1
}
# 3. Switch AGENTMEMORY_STATE_BACKEND (and AGENTMEMORY_REDIS_URL if needed),
# restart agentmemory against the new backend, then:
if [ -n "${AGENTMEMORY_SECRET:-}" ]; then
jq -n --slurpfile d backup.json '{exportData: $d[0], strategy: "merge"}' | \
curl -fsS -H "Authorization: Bearer $AGENTMEMORY_SECRET" -X POST http://localhost:3111/agentmemory/import \
-H 'Content-Type: application/json' -d @-
else
jq -n --slurpfile d backup.json '{exportData: $d[0], strategy: "merge"}' | \
curl -fsS -X POST http://localhost:3111/agentmemory/import \
-H 'Content-Type: application/json' -d @-
fi
```
`/agentmemory/export` একাধিক কলে একটি বড় করপাস চাঙ্ক করার জন্য `?maxSessions=` এবং `?offset=`-ও গ্রহণ করে; import-এ `strategy` হলো `merge` (ডিফল্ট-সেফ), `replace`, বা `skip`।
### iii যা প্রতিস্থাপন করে
| ট্র্যাডিশনাল স্ট্যাক | agentmemory যা ব্যবহার করে |
|---|---|
| Express.js / Fastify | iii HTTP Triggers |
| SQLite / Postgres + pgvector | iii KV State + ইন-মেমরি ভেক্টর ইনডেক্স |
| SSE / Socket.io | iii Streams (WebSocket) |
| pm2 / systemd | iii engine ওয়ার্কার সুপারভিশন |
| Prometheus / Grafana | iii OTEL + হেলথ মনিটর |
| কাস্টম প্লাগইন সিস্টেম | `iii worker add ` |
**219 সোর্স ফাইল · ~52,000 LOC · 2,500+ টেস্ট · 311 ফাংশন · 60 KV স্কোপ**, সবকিছু তিনটি প্রিমিটিভের উপর। কোনো `agentmemory plugin install` নেই। প্লাগইন সিস্টেমটাই iii নিজে।
---
### LLM প্রোভাইডার
agentmemory আপনার এনভায়রনমেন্ট থেকে প্রোভাইডার অটো-ডিটেক্ট করে। একটি প্রোভাইডার LLM-ব্যাকড অপারেশন উপলব্ধ করে, কিন্তু কেবল প্রোভাইডার কনফিগারেশন LLM-লিখিত অবজারভেশন কম্প্রেশন চালু করে না। সেই পাথের জন্য একটি প্রোভাইডার এবং `AGENTMEMORY_AUTO_COMPRESS=true` দুটোই লাগে।
| প্রোভাইডার | কনফিগ | নোট |
|----------|--------|-------|
| **No-op (ডিফল্ট)** | কোনো কনফিগ লাগে না | LLM-ব্যাকড কম্প্রেস/সামারাইজ বন্ধ থাকে। সিন্থেটিক কম্প্রেশন এবং BM25 রিকল তখনও কাজ করে। আগে Claude-সাবস্ক্রিপশন ফলব্যাকের উপর নির্ভর করতেন তাহলে নিচের `AGENTMEMORY_ALLOW_AGENT_SDK` দেখুন। |
| Anthropic API | `ANTHROPIC_API_KEY` | প্রতি-টোকেন বিলিং |
| MiniMax | `MINIMAX_API_KEY` | Anthropic-কম্প্যাটিবল |
| Gemini | `GEMINI_API_KEY` | এমবেডিংও চালু করে |
| OpenRouter | `OPENROUTER_API_KEY` | কোনো মডেল |
| OpenAI API | `OPENAI_API_KEY` | ডিফল্ট `gpt-5.6-luna`, `OPENAI_MODEL` দিয়ে ওভাররাইড করুন |
| **Local (Ollama / LM Studio / vLLM / llama.cpp)** | `OPENAI_API_KEY=local` + `OPENAI_BASE_URL=http://localhost:11434/v1` (Ollama) বা `http://localhost:1234/v1` (LM Studio) + `OPENAI_MODEL=<আপনার মডেল>` | OpenAI-API-কম্প্যাটিবল যা কিছু। জিরো কস্ট, আপনার হার্ডওয়্যারে চলে। নিচে [Local models](#local-models-ollama--lm-studio--vllm) দেখুন। |
| Claude সাবস্ক্রিপশন ফলব্যাক | `AGENTMEMORY_ALLOW_AGENT_SDK=true` | কেবল অপ্ট-ইন। `@anthropic-ai/claude-agent-sdk` সেশন স্পন করে; এটা আগে আনবাউন্ডেড Stop-হুক রিকার্শন তৈরি করত, তাই এটা আর ডিফল্ট নয়। |
### লোকাল মডেল (Ollama / LM Studio / vLLM)
agentmemory যেকোনো OpenAI-API-কম্প্যাটিবল সার্ভারের সাথে কথা বলে, তাই `/v1/chat/completions` এক্সপোজ করা যা কিছুই কোনো কোড পরিবর্তন ছাড়া কাজ করে। কোনো পেইড কী নেই, কোনো ক্লাউড নেই, কোনো রেট লিমিট নেই; সম্পূর্ণভাবে আপনার হার্ডওয়্যারে চলে।
**Ollama** (ডিফল্ট পোর্ট `11434`):
```bash
ollama pull qwen3:8b # or qwen3:4b, gpt-oss:20b, qwen3-coder:30b, etc.
ollama serve
```
```env
# ~/.agentmemory/.env
OPENAI_API_KEY=ollama # any non-empty string; Ollama ignores it
OPENAI_BASE_URL=http://localhost:11434/v1
OPENAI_MODEL=qwen3:8b
```
**LM Studio** (ডিফল্ট পোর্ট `1234`):
LM Studio খুলুন → Local Server ট্যাব → Start Server। পিকার থেকে যেকোনো চ্যাট মডেল বেছে নিন (Qwen 3, gpt-oss, DeepSeek R1, ইত্যাদি)।
```env
# ~/.agentmemory/.env
OPENAI_API_KEY=lmstudio # any non-empty string; LM Studio ignores it
OPENAI_BASE_URL=http://localhost:1234/v1
OPENAI_MODEL=qwen3-8b # match the model name from LM Studio
```
**vLLM / llama.cpp / Text Generation Inference**: একই শেপ। আপনার সার্ভার যে URL এক্সপোজ করে সেদিকে `OPENAI_BASE_URL` পয়েন্ট করুন এবং আপনার সার্ভার গ্রহণ করবে এমন একটি নামে `OPENAI_MODEL` সেট করুন।
**মেমরি কাজের জন্য মডেল বাছাই**: কম্প্রেশন ও সামারাইজেশন ছোট কাজ (<2K টোকেন ইন, <500 টোকেন আউট) যেখানে একটা 7B instruct মডেলই যথেষ্ট। সুপারিশ:
| মডেল | সাইজ | কেন |
|-------|------|-----|
| `qwen3:8b` | ~5.2 GB | 16 GB মেশিনে ব্যালান্সড ডিফল্ট; এক্সট্র্যাকশন ও টুল-শেপড টেক্সটে শক্তিশালী |
| `qwen3:4b` | ~2.6 GB | সবচেয়ে ছোট সেন্সিবল অপশন; কম্প্রেশনের জন্য ঠিক আছে, গ্রাফ এক্সট্র্যাকশনে দুর্বল |
| `qwen3-coder:30b` | ~19 GB | 24-32 GB হার্ডওয়্যারে কোড-শেপড সেশনের জন্য সেরা লোকাল পিক (30B MoE, 3.3B অ্যাকটিভ) |
| `gpt-oss:20b` | ~14 GB | 16 GB RAM-এ ফিট হয় এমন একটি শক্তিশালী জেনারেল মডেল |
| `deepseek-r1:8b` | ~5.2 GB | রিজনিং ডিস্টিল; স্লোয়ার কিন্তু ক্লিনার এক্সট্র্যাকশন |
Qwen 3 মডেল ডিফল্টভাবে থিংক করে এবং কোনো আউটপুটের আগেই পুরো টোকেন বাজেট রিজনিংয়ে পুড়িয়ে দিতে পারে। গ্রাফ-এক্সট্র্যাকশন প্রম্পটে `/no_think` যুক্ত করতে `AGENTMEMORY_LLM_NOTHINK=1` সেট করুন, এবং এক্সট্র্যাকশন খালি ফিরলে `MAX_TOKENS` বাড়ান (16384 কাজ করে)।
রিজনিং-ক্লাস মডেল (`` ব্লক সহ `o1`-স্টাইল) খালি `content` রিটার্ন করতে পারে, একটি `reasoning` ফিল্ডের সাথে যা আপনার লোকাল সার্ভার সামনে আনতে পারে না। এক্সট্র্যাকশন খালি ফিরলে, প্রথমে একটি নন-রিজনিং মডেলে বদলান। `OPENAI_REASONING_EFFORT=none` এনভ OpenAI রিজনিং স্কিমা মিরর করা Ollama Cloud থিংকিং মডেলেও থিংকিং বন্ধ করে দিতে পারে।
লোকাল এমবেডিং একটি অপশনাল ডিপেন্ডেন্সি হিসেবে আসে কিন্তু ডিফল্টভাবে চালু নয়। `Xenova/all-MiniLM-L6-v2` (384-dim)-এ অপ্ট-ইন করতে `EMBEDDING_PROVIDER=local` সেট করুন। প্রথম এমবেডিং রিকোয়েস্ট মডেলটি ডাউনলোড করে; তারপর ইনফারেন্স অন-ডিভাইসে চলে। সেই সেটিং বা একটি রিমোট এমবেডিং কী ছাড়া, ভেক্টর বন্ধ থাকে, `mem::search` BM25 ব্যবহার করে, এবং `smart-search` তখনও বিদ্যমান গ্রাফ ম্যাচ যুক্ত করতে পারে।
### কস্ট-অ্যাওয়্যার মডেল বাছাই
LLM-লিখিত ব্যাকগ্রাউন্ড কম্প্রেশন একটি প্রোভাইডার এবং `AGENTMEMORY_AUTO_COMPRESS=true` দুটো দিয়েই চালু থাকলে, এটা প্রতিটি অবজারভেশনে চলে, তাই মডেল বাছাই মাসিক খরচকে অর্থপূর্ণভাবে বদলে দেয়। ক্যাপচার করা ওয়ার্কলোড ডেটা: 635 রিকোয়েস্ট / 888K টোকেন / 35 ঘন্টার অ্যাকটিভ ব্যবহার, 2026-05-23-র প্রাইসিংয়ে তিনটি OpenRouter মডেলের বিরুদ্ধে চালানো।
| টায়ার | মডেল | Input / 1M | Output / 1M | ক্যাপচার করা 35h-র খরচ | নোট |
|------|-------|------------|-------------|---------------------------|-------|
| সুপারিশকৃত | `deepseek/deepseek-v4-flash-0731` | $0.07 | $0.14 | ~$0.07 (est.) | লেটেস্ট DeepSeek; কম্প্রেশন ওয়ার্কলোডের জন্য সবচেয়ে সস্তা সুপারিশকৃত পিক। |
| সুপারিশকৃত | `deepseek/deepseek-v4-pro` | $0.435 | $0.87 | ~$0.46 | Sonnet-র চেয়ে ~10× কম খরচে সলিড কম্প্রেশন + সামারাইজেশন কোয়ালিটি। |
| সুপারিশকৃত | `qwen/qwen3-coder` | $0.45 | $1.80 | ~$0.55 | আপনার সেশন ভারীভাবে কোড-শেপড হলে শক্তিশালী কোড রিজনিং। |
| প্রিমিয়াম | `anthropic/claude-sonnet-5` | $3.00 | $15.00 | ~$5.02 (est.) | মাপা Sonnet 4.6 রানের মতোই একই লিস্ট প্রাইস; 2026-08-31 পর্যন্ত $2/$10 ইন্ট্রো প্রাইসিং। |
| প্রিমিয়াম | `openai/gpt-5.6-sol` | $5.00 | $30.00 | ~$9 (est.) | ফ্ল্যাগশিপ টায়ার; অলওয়েজ-অন ব্যাকগ্রাউন্ড কাজের জন্য খরচসাপেক্ষ। |
| এড়িয়ে যান | `anthropic/claude-opus-5` | $5.00 | $25.00 | ~$8.40 (est.) | ফ্ল্যাগশিপ-ক্লাস মডেল; কম্প্রেশনের জন্য ওভারস্পেন্ড। |
মাপা সারিগুলো ক্যাপচার করা রান থেকে আসে; (est.) সারিগুলো একই টোকেন মিক্সকে প্রতিটি মডেলের লিস্ট প্রাইস দিয়ে স্কেল করে।
`OPENROUTER_MODEL` একটি প্রিমিয়াম-টায়ার প্যাটার্নের সাথে মিললে agentmemory একটি রানটাইম ওয়ার্নিং প্রিন্ট করে। একটি তথ্যভিত্তিক সিদ্ধান্ত নেওয়ার পর এটা নিশ্চুপ করতে `AGENTMEMORY_SUPPRESS_COST_WARNING=1` সেট করুন।
মেমরি কাজের জন্য কোয়ালিটি বনাম কস্ট ট্রেডঅফ: কম্প্রেশন একটি সামারাইজেশন টাস্ক যার কোয়ালিটি বার তুলনামূলকভাবে ঢিলা (সামারি আবার এজেন্ট পড়ে, ইউজার নয়)। DeepSeek V4 Flash / V4 Pro / Qwen3-Coder এই টাস্কে Sonnet-র রাউন্ডিং এরর-এর মধ্যেই থাকে, আর খরচ হয় 10-70× কম। প্রিমিয়াম-টায়ার মডেলগুলো সেই কোয়েরির জন্য রেখে দিন যা আপনি সরাসরি পড়বেন।
সোর্স: [OpenRouter pricing for Claude Sonnet 5](https://openrouter.ai/anthropic/claude-sonnet-5), [DeepSeek V4 Flash](https://openrouter.ai/deepseek/deepseek-v4-flash-0731), [DeepSeek pricing notes](https://api-docs.deepseek.com/quick_start/pricing/)।
### মাল্টি-এজেন্ট মেমরি (`AGENT_ID` + `AGENTMEMORY_AGENT_SCOPE`)
একাধিক রোল একটি agentmemory সার্ভার শেয়ার করে এমন মাল্টি-এজেন্ট সেটআপে (architect / developer / reviewer / researcher / support-agent), `AGENT_ID` প্রতিটি রাইটকে যে রোল এটা করেছে তা দিয়ে ট্যাগ করে। `AGENTMEMORY_AGENT_SCOPE` নিয়ন্ত্রণ করে রিকল সেই ট্যাগ দিয়ে ফিল্টার করবে কিনা।
```env
TEAM_ID=company
USER_ID=engineering-team
AGENT_ID=architect
AGENTMEMORY_AGENT_SCOPE=isolated # optional; default "shared"
```
দুটি মোড:
| মোড | রাইট ট্যাগ করে | রিকল ফিল্টার করে | কখন ব্যবহার করবেন |
|------|------------|---------------|-------------|
| `shared` (ডিফল্ট) | হ্যাঁ | না | অডিট ট্রেইল সহ ক্রস-এজেন্ট কনটেক্সট। Architect দেখতে পারে developer কী নোট করেছে, কিন্তু প্রতিটি সারি রেকর্ড রাখে কে বলেছে। |
| `isolated` | হ্যাঁ | হ্যাঁ | কড়া বিভাজন। Architect কখনো developer-র অবজারভেশন / মেমরি / সেশন দেখে না। |
`AGENT_ID` সেট থাকলে যা ট্যাগ হয়: `Session.agentId`, `RawObservation.agentId`, `CompressedObservation.agentId`, `Memory.agentId`। রোলটি `api::session::start` → `mem::observe` → `mem::compress` → KV দিয়ে প্রবাহিত হয়।
isolated মোডে যা ফিল্টার হয়: `mem::smart-search`, `/agentmemory/memories`, `/agentmemory/observations`, `/agentmemory/sessions`। প্রতিটি এন্ডপয়েন্ট প্রতি-রিকোয়েস্টে ওভাররাইড করতে `?agentId=` গ্রহণ করে, এবং সম্পূর্ণভাবে env স্কোপ থেকে অপ্ট-আউট করতে `?agentId=*`। `/memories`-ও `?includeOrphans=true` গ্রহণ করে pre-AGENT_ID মেমরি সামনে আনতে যাদের `agentId` undefined।
SDK / REST লেয়ারে প্রতি-কল ওভাররাইড: প্রতিটি মিউটেটিং এন্ডপয়েন্ট (`/session/start`, `/remember`) রিকোয়েস্ট বডিতে একটি `agentId` ফিল্ড গ্রহণ করে যা env-এর উপর জেতে। অনেক রোল একটি সার্ভার প্রসেসের মধ্য দিয়ে রাউট করা রানটাইমের জন্য কাজে লাগে। MCP `memory_save` টুল একই `agentId` ফিল্ড দেখায়, স্ট্যান্ডঅ্যালোন stdio সার্ভার `agentId` এবং `project` দুটোই ফরওয়ার্ড করে, এবং সেভ করা মেমরি সার্চ ইনডেক্সে `agentId` বহন করে, তাই এজেন্ট-স্কোপড সার্চ অবজারভেশনের পাশাপাশি মেমরিও কভার করে।
`AGENT_ID` আনসেট থাকলে, মেমরি আনস্কোপড থাকে (লেগ্যাসি আচরণ, কোনো ট্যাগ নেই, কোনো ফিল্টার নেই)।
### পোর্ট
agentmemory + iii-engine ডিফল্টভাবে চারটি পোর্ট বাইন্ড করে। একটি রিস্টার্ট `port in use` দিয়ে ফেইল করলে, এই টেবিলটি আপনাকে বলে দেয় কোন প্রসেস খুঁজতে হবে।
| পোর্ট | প্রসেস | উদ্দেশ্য | এনভ ওভাররাইড |
|------|---------|---------|--------------|
| `3111` | agentmemory | REST API + MCP HTTP + `/agentmemory/health` + `/agentmemory/livez` | `III_REST_PORT` |
| `3112` | iii-engine | ইন্টারনাল স্ট্রিম ওয়ার্কার (agentmemory + ভিউয়ার দিয়ে কনজিউমড) | `III_STREAM_PORT` (পছন্দনীয়) বা লেগ্যাসি `III_STREAMS_PORT` |
| `3113` | agentmemory | রিয়েল-টাইম ভিউয়ার (`http://localhost:3113`) | রিপোর্টেড URL-এর জন্য `III_VIEWER_PORT` বা `AGENTMEMORY_VIEWER_URL` |
| `49134` | iii-engine | WebSocket; ওয়ার্কাররা এখানে রেজিস্টার করে, OTel টেলিমেট্রি এর উপর দিয়ে প্রবাহিত হয় | `III_ENGINE_PORT` বা `III_ENGINE_URL` |
`--port ` REST অ্যাঙ্কর বদলে দেয় এবং স্ট্রিম `N+1`, ভিউয়ার `N+2`, এবং ইঞ্জিন WebSocket `N+46023` ডিরাইভ করে, কেবল যেখানে উপরের সংশ্লিষ্ট এক্সপ্লিসিট পোর্ট বা URL আনসেট আছে। এটা কোনো আইসোলেটেড লাইফসাইকেল নেমস্পেস তৈরি করে না। দ্বিতীয় ডেমনের জন্য `--instance 1` ব্যবহার করুন; এটা অ্যাঙ্কর 3211 ব্যবহার করে, ডিফল্টভাবে `3211/3212/3213/49234`, এবং একটি আলাদা `instance-1` ডেটা ও লাইফসাইকেল ডিরেক্টরি পায়। ইনস্ট্যান্স 1 থেকে 50 একই প্যাটার্ন অনুসরণ করে।
পিন করা ইঞ্জিন `--no-update-check` দিয়ে শুরু হয় (বুটে GitHub-এর বিরুদ্ধে কোনো আপডেট বা সিকিউরিটি-অ্যাডভাইজরি লুকআপ নেই) এবং iii-র অ্যানোনিমাস ইউসেজ টেলিমেট্রি বন্ধ রেখে: agentmemory যে ইঞ্জিন স্পন করে তার জন্য `III_TELEMETRY_ENABLED=false` সেট করে যদি না আপনি নিজে ভ্যারিয়েবলটি এক্সপোর্ট করেন, এবং বান্ডলড compose ফাইলও একই কাজ করে।
একটি ক্র্যাশড রান শেষে পোর্টগুলো বাঁধা থেকে গেলে, বাসি প্রসেস ক্লিনআপ:
```bash
# macOS / Linux — find whatever is on each port and kill it
lsof -i :3111,3112,3113,49134
pkill -f agentmemory || true
pkill -f 'iii ' || true
# Windows
netstat -ano | findstr ":3111 :3112 :3113 :49134"
taskkill /F /PID
```
গ্রেসফুল নেটিভ শাটডাউনে `agentmemory stop` ওয়ার্কার এবং ইঞ্জিন পিডফাইল দুটোই পরিষ্কারভাবে রিপ করে। Docker মোডে এটা নেটিভ ওয়ার্কার ফ্লাশ করে, ঠিক ভ্যালিডেটেড ইঞ্জিন কন্টেইনারটি থামায়, এবং লসলেস রিস্টার্টের জন্য কন্টেইনার ও তার `/data` মাউন্ট দুটোই রক্ষা করে; পরের স্টার্ট সেই একই কন্টেইনার যাচাই করে পুনরায় শুরু করে। Docker-ব্যাকড আনইনস্টলের জন্য `agentmemory remove --keep-data` লাগে: এটা শেয়ার্ড agentmemory-ম্যানেজড ফাইল সরিয়ে দেয়, ভ্যালিডেটেড কন্টেইনার, তার ডেটা মাউন্ট, এবং সেগুলো রিকভার করতে প্রয়োজনীয় লাইফসাইকেল রেকর্ড রক্ষা করে। ডেস্ট্রাক্টিভ Docker ডেটা ডিলিশন ইচ্ছাকৃতভাবে ব্যাকআপের পর অপারেটরের হাতে ছেড়ে দেওয়া। `--force` পাস না করলে CLI Docker বা VM পোর্ট হোল্ডারদের (Docker backend, vpnkit, colima) নেটিভ ইঞ্জিন হিসেবে গ্রহণ বা সিগন্যাল করতেও অস্বীকার করে। উপরের ম্যানুয়াল ক্লিনআপ শুধু পোস্ট-ক্র্যাশ কেসের জন্য যেখানে কোনো পিডফাইলই বাকি নেই।
### কনফিগ ফাইল
প্রতিটি শেলে ভ্যারিয়েবল এক্সপোর্ট করার বদলে agentmemory-র রানটাইম কনফিগারেশন `~/.agentmemory/.env`-এ রাখুন। ভিউয়ার `export ANTHROPIC_API_KEY=...`-র মতো একটি সেটআপ হিন্ট দেখালে, `export` প্রিফিক্স ছাড়া `ANTHROPIC_API_KEY=...` হিসেবে এটা এই ফাইলে কপি করুন, তারপর agentmemory রিস্টার্ট করুন।
প্রসেস এনভায়রনমেন্ট ভ্যারিয়েবল তখনও কাজ করে এবং ফাইলের ভ্যালুর উপর প্রাধান্য পায়।
Windows-এ, একই ফাইল থাকে `%USERPROFILE%\.agentmemory\.env`-এ:
```powershell
New-Item -ItemType Directory -Force $HOME\.agentmemory
notepad $HOME\.agentmemory\.env
```
একটি API কী-র বদলে Claude Code Pro/Max সাবস্ক্রিপশন দিয়ে টেস্ট করতে, স্পষ্টভাবে অপ্ট-ইন করুন:
```env
AGENTMEMORY_ALLOW_AGENT_SDK=true
AGENTMEMORY_AUTO_COMPRESS=true
```
LLM-লিখিত অবজারভেশন কম্প্রেশনের জন্য দুই লাইনই লাগে: একটি LLM প্রোভাইডারে অ্যাক্সেস (এই এক্সপ্লিসিট সাবস্ক্রিপশন ফলব্যাক সহ) এবং `AGENTMEMORY_AUTO_COMPRESS=true`। একটি প্রোভাইডার একা ডিফল্ট সিন্থেটিক কম্প্রেশন পাথ রেখে দেয়।
কনসোলিডেশন (গ্রাফ নোড, লেসন, ক্রিস্টাল) একটি LLM প্রোভাইডার কনফিগার করা থাকলেই ডিফল্টভাবে চালু থাকে। LLM-ফ্রি অপারেশন চাইলে স্পষ্টভাবে `CONSOLIDATION_ENABLED=false` দিয়ে অপ্ট-আউট করুন। গ্রাফ এক্সট্র্যাকশন একটা আলাদা ফ্ল্যাগ:
```env
GRAPH_EXTRACTION_ENABLED=true
# CONSOLIDATION_ENABLED=false # opt out of auto-consolidation
```
### এনভায়রনমেন্ট ভ্যারিয়েবল
`~/.agentmemory/.env` তৈরি করুন:
```env
# LLM provider (pick one — default is the no-op provider: no LLM calls)
# ANTHROPIC_API_KEY=sk-ant-...
# ANTHROPIC_BASE_URL=... # Optional: Anthropic-compatible proxy / Azure
# GEMINI_API_KEY=...
# OPENROUTER_API_KEY=...
# MINIMAX_API_KEY=...
# OPENAI_API_KEY=*** # NOTE: this same key auto-activates BOTH the
# # OpenAI LLM provider (here) AND the OpenAI
# # embedding provider (further below). Set
# # OPENAI_API_KEY_FOR_LLM=false to scope it
# # to embeddings only.
# OPENAI_BASE_URL=https://api.openai.com # Optional: override for Azure / vLLM / LM Studio / proxies
# # Azure: https://.openai.azure.com/openai/deployments/
# # Auto-detected from `.openai.azure.com` hostname; uses
# # api-key header + api-version query param.
# OPENAI_API_VERSION=2024-08-01-preview # Optional: Azure api-version query param
# OPENAI_MODEL=gpt-5.6-luna # Optional: default model
# OPENAI_TIMEOUT_MS=60000 # Optional: OpenAI-scoped alias for the outbound fetch
# # timeout. Takes precedence over AGENTMEMORY_LLM_TIMEOUT_MS
# # for back-compat with v0.9.17. New configs should
# # prefer the global AGENTMEMORY_LLM_TIMEOUT_MS below.
# OPENAI_REASONING_EFFORT=none # Optional: "low" | "medium" | "high" | "none"
# # Honored only by OpenAI's reasoning models (o1, o3,
# # gpt-*-reasoning) and providers that mirror that
# # schema (Ollama Cloud thinking models). Standard
# # chat models reject this field with 400. Set to
# # "none" for thinking models that return reasoning
# # but no content.
# OPENAI_API_KEY_FOR_LLM=false # Optional: set to false to skip OpenAI auto-detection
# # for LLM (useful if you only want OpenAI for embeddings)
# Opt-in Claude-subscription fallback (spawns @anthropic-ai/claude-agent-sdk);
# leave OFF unless you understand the Stop-hook recursion risk:
# AGENTMEMORY_ALLOW_AGENT_SDK=true
# Embedding provider (BM25-only when unset; local is an explicit opt-in)
# EMBEDDING_PROVIDER=local
# VOYAGE_API_KEY=...
# OPENAI_API_KEY=sk-...
# OPENAI_BASE_URL=https://api.openai.com # Override for Azure / vLLM / LM Studio / proxies
# OPENAI_EMBEDDING_MODEL=text-embedding-3-small
# OPENAI_EMBEDDING_DIMENSIONS=1536 # Required when the model is not in the known-models table
# OPENAI_EMBEDDING_BASE_URL=https://... # Embeddings only; falls back to OPENAI_BASE_URL
# OPENAI_EMBEDDING_API_KEY=sk-... # Embeddings only; wins over OPENAI_API_KEY when set
# Outbound LLM / embedding timeout
# AGENTMEMORY_LLM_TIMEOUT_MS=60000 # Default: 60 000 ms (60 s). Applies to every
# raw-fetch provider (Gemini, OpenRouter, MiniMax,
# OpenAI LLM, OpenAI/Cohere/Voyage/OpenRouter
# embedding). For the OpenAI LLM path, the
# OpenAI-scoped OPENAI_TIMEOUT_MS alias (above)
# takes precedence when set, for back-compat
# with v0.9.17.
# Increase for slow networks or large batch calls;
# decrease to fail-fast on rate-limit holds.
# Search tuning
# BM25_WEIGHT=0.4
# VECTOR_WEIGHT=0.6
# TOKEN_BUDGET=2000
# Auth (generated into ~/.agentmemory/secret on first start when unset)
# AGENTMEMORY_SECRET=your-secret
# VIEWER_ALLOWED_ORIGINS=https://memory.example.com
# AGENTMEMORY_IMPORT_ROOT=~/projects
# Ports (defaults: 3111 API, 3113 viewer)
# III_REST_PORT=3111
# Engine usage telemetry (iii). Off unless you set it; true opts in.
# III_TELEMETRY_ENABLED=false
# Features
# AGENTMEMORY_AUTO_COMPRESS=false # OFF by default. Requires an LLM
# provider as well. When both are on,
# every PostToolUse hook calls your
# LLM provider to compress the
# observation — expect significant
# token spend on active sessions.
# AGENTMEMORY_SLOTS=false # OFF by default. Editable pinned
# memory slots — persona,
# user_preferences, tool_guidelines,
# project_context, guidance,
# pending_items, session_patterns,
# self_notes. Size-limited; agent
# edits via memory_slot_* tools.
# Pinned slots addressable for
# SessionStart injection.
# AGENTMEMORY_REFLECT=false # OFF by default. Requires SLOTS=on.
# Stop hook fires mem::slot-reflect:
# scans recent observations, auto-
# appends TODOs to pending_items,
# counts patterns in
# session_patterns, records touched
# files in project_context. Fire-
# and-forget; does not block.
# AGENTMEMORY_INJECT_CONTEXT=false # OFF by default. When on:
# - SessionStart may inject ~1-2K
# chars of project context into
# the first turn of each session
# (this is what actually reaches
# the model — Claude Code treats
# SessionStart stdout as context)
# - PreToolUse fires /agentmemory/enrich
# on every file-touching tool call
# (resource cleanup, not a token
# fix — PreToolUse stdout is debug
# log only per Claude Code docs)
# Observations are still captured via
# PostToolUse regardless of this flag.
# GRAPH_EXTRACTION_ENABLED=false
# AGENTMEMORY_LLM_NOTHINK=1 # Local reasoning models only: ask the
# model to skip its hidden thinking pass
# during graph extraction. Faster runs;
# relation quality can drop slightly.
# CONSOLIDATION_ENABLED=false # on by default when an LLM provider is configured
# LESSON_DECAY_ENABLED=true
# OBSIDIAN_AUTO_EXPORT=false
# AGENTMEMORY_EXPORT_ROOT=~/.agentmemory
# CLAUDE_MEMORY_BRIDGE=false
# SNAPSHOT_ENABLED=false
# Storage and durability
# AGENTMEMORY_STATE_BACKEND=file # file (default) or redis; see "Storage backend" below
# AGENTMEMORY_REDIS_URL=redis://localhost:6379 # Required with redis, plain redis:// only
# AGENTMEMORY_STATE_SAVE_INTERVAL_MS=2000 # How often the engine writes file state to disk.
# A hard kill loses at most this window.
# AGENTMEMORY_INDEX_SAVE_INTERVAL_MS=600000 # Minimum time between search index saves;
# shutdown and deletes still save at once.
# AGENTMEMORY_GRAPH_COMPACT_ON_BOOT=true # One-time background trim of oversized graph
# provenance; false skips it
# Sessions
# AGENTMEMORY_SESSION_SWEEP_ENABLED=true # Hourly sweep marks sessions left active past
# the threshold as abandoned. Deletes nothing;
# new activity makes the session active again.
# AGENTMEMORY_SESSION_SWEEP_STALE_HOURS=24
# Capture filters (hooks)
# AGENTMEMORY_CAPTURE_ALLOW= # Comma or space list of tool names or globs;
# when set, only these tools are captured
# AGENTMEMORY_CAPTURE_DENY= # Extra names or globs to skip, added to the
# defaults: memory_*, toolsearch,
# listmcpresources, fetchmcpresource
# AGENTMEMORY_CAPTURE_OUTPUT_MAX=8000 # Max characters of tool output per observation
# AGENTMEMORY_PRE_COMPACT_BUDGET=1500 # Token budget for PreCompact context; 0 disables
# Audit log
# AGENTMEMORY_AUDIT_RETENTION_MONTHS=0 # Drop month scopes older than N months; 0 keeps all
# AGENTMEMORY_AUDIT_INDEX_PERSIST=false # 1 or true records index migration and cleanup
# rows (debugging only)
# Team
# TEAM_ID=
# USER_ID=
# TEAM_MODE=private
# Tool visibility: "all" (54 tools, default) or "core" (8 tools, lean)
# AGENTMEMORY_TOOLS=core
```
---
`3111` পোর্টে 138 এন্ডপয়েন্ট। REST API ডিফল্টভাবে `127.0.0.1`-এ বাইন্ড করে। প্রোটেক্টেড এন্ডপয়েন্টে `Authorization: Bearer ` লাগে, এবং mesh sync এন্ডপয়েন্টে দুই পিয়ারেই স্পষ্টভাবে সেট করা `AGENTMEMORY_SECRET` লাগে।
**অথেন্টিকেশন ডিফল্টভাবে চালু।** `AGENTMEMORY_SECRET` সেট না থাকলে (শেলে বা `~/.agentmemory/.env`-এ), সার্ভার প্রথম স্টার্টে একটি র্যান্ডম সিক্রেট জেনারেট করে এবং `0600` মোডে `~/.agentmemory/secret`-এ জমা রাখে। লোকাল সার্ভারের সাথে কথা বলার সময় প্রতিটি বান্ডলড ক্লায়েন্ট সেখান থেকেই এটা পড়ে: CLI, ভিউয়ার, `plugin/scripts`-এর নিচের হুক, MCP সার্ভার এবং `@agentmemory/mcp` শিম, `agentmemory connect`-এ লেখা কনফিগ, এবং বান্ডলড OpenCode, Pi, OpenClaw, Hermes, এবং filesystem-watcher ইন্টিগ্রেশন। জমা রাখা সিক্রেটটি কেবল লুপব্যাক URL-এ (`localhost`, `127.0.0.0/8`, `::1`) পাঠানো হয়। একটি এক্সপ্লিসিট `AGENTMEMORY_SECRET` সবসময় জেতে, এবং রিমোট ক্লায়েন্টদেরও এটা সেট করা লাগে। Docker এবং `deploy/` এন্ট্রিপয়েন্ট নিজেরাই নিজেদের সিক্রেট জেনারেট ও এক্সপোর্ট করে। হাতে API কল করতে:
```bash
curl -H "Authorization: Bearer $(cat ~/.agentmemory/secret)" http://localhost:3111/agentmemory/health
```
**রাইটের জন্য রিকোয়েস্ট নিয়ম।** REST API এবং ভিউয়ারে `POST`, `PUT`, `PATCH`, এবং `DELETE` রিকোয়েস্টে body থাকলে `Content-Type: application/json` পাঠাতে হবে (একটা `charset` প্যারামিটার ঠিক আছে), এবং একটি `Origin` হেডার থাকলে, এটা কনফিগার করা REST বা ভিউয়ার পোর্টের জন্য একটি লুপব্যাক origin হতে হবে বা `VIEWER_ALLOWED_ORIGINS`-এ (কমা-সেপারেটেড, যেমন `https://memory.example.com`) তালিকাভুক্ত থাকতে হবে। যে ক্লায়েন্টগুলো কোনো `Origin` হেডার পাঠায় না (CLI, হুক, MCP, curl, সার্ভার-টু-সার্ভার) তারা প্রভাবিত হয় না। ভিউয়ার তার নিজের origin-ও গ্রহণ করে।
**ফাইল পাথ।** যে এন্ডপয়েন্টগুলো ফাইল পড়ে বা লেখে (`/compress-file`, `/replay/import-jsonl`, `/graph/import-graphify`) তারা কেবল `~/.agentmemory`, ইনস্ট্যান্স ডেটা ডিরেক্টরি, বা `AGENTMEMORY_IMPORT_ROOT`-এ তালিকাভুক্ত একটি ডিরেক্টরির নিচের পাথ গ্রহণ করে (একাধিক ডিরেক্টরি `:` দিয়ে আলাদা করুন, Windows-এ `;`)। `/replay/import-jsonl` তার ডিফল্ট `~/.claude/projects`-ও গ্রহণ করে। `/obsidian/export` `AGENTMEMORY_EXPORT_ROOT`-এর ভেতরেই থাকে এবং `/migrate` `~/.agentmemory`-র ভেতরে। সিমলিংক প্রতিটি চেকের আগে রিজলভ করা হয়।
**সিক্রেট স্ক্রাবিং।** API কী, bearer টোকেন, PEM প্রাইভেট কী ব্লক, এবং URL-এ এমবেডেড ক্রেডেনশিয়াল (`scheme://user:password@host`) টেক্সট জমা রাখার আগে রিড্যাক্ট করা হয়, প্রতিটি রাইট পাথে: observations, remember, evolve, slots, lessons, actions, sketches, signals, checkpoints, imports, jsonl replay, mesh sync, team shares, কম্প্রেশন ও সামারি আউটপুট, crystals, এবং গ্রাফ নোড।
মূল এন্ডপয়েন্ট
| Method | Path | বর্ণনা |
|--------|------|-------------|
| `GET` | `/agentmemory/health` | হেলথ চেক (সবসময় পাবলিক) |
| `GET` | `/agentmemory/status` | কী ভুল আর তা কীভাবে ঠিক করবেন (ব্রাউজারের জন্য HTML, নইলে JSON) |
| `GET` | `/agentmemory/viewer/snapshot` | ভিউয়ার যা দেখায় সবকিছু, একটি রেসপন্সে |
| `POST` | `/agentmemory/session/start` | সেশন শুরু + কনটেক্সট পান |
| `POST` | `/agentmemory/session/end` | সেশন শেষ করুন |
| `POST` | `/agentmemory/observe` | অবজারভেশন ক্যাপচার করুন (নিচে capture delivery দেখুন) |
| `GET` | `/agentmemory/capture` | ক্যাপচার ইনবক্স, ডেড লেটার, এবং অফলাইন স্পুল |
| `POST` | `/agentmemory/capture/retry` | ডেড-লেটার ক্যাপচার রিট্রাই করুন |
| `POST` | `/agentmemory/capture/drain` | লোকাল অফলাইন স্পুল এখনই পাঠান |
| `POST` | `/agentmemory/smart-search` | হাইব্রিড সার্চ |
| `POST` | `/agentmemory/context` | কনটেক্সট জেনারেট করুন |
| `POST` | `/agentmemory/remember` | লং-টার্ম মেমরিতে সেভ করুন |
| `POST` | `/agentmemory/forget` | অবজারভেশন ডিলিট করুন |
| `POST` | `/agentmemory/enrich` | ফাইল কনটেক্সট + মেমরি + বাগ |
| `GET` | `/agentmemory/profile` | প্রজেক্ট প্রোফাইল |
| `GET` | `/agentmemory/export` | সব ডেটা এক্সপোর্ট করুন |
| `POST` | `/agentmemory/import` | JSON থেকে ইমপোর্ট করুন |
| `POST` | `/agentmemory/graph/query` | নলেজ গ্রাফ কোয়েরি |
| `POST` | `/agentmemory/graph/compact` | অতিরিক্ত বড় গ্রাফ প্রোভেন্যান্স ট্রিম করুন |
| `POST` | `/agentmemory/team/share` | টিমের সাথে শেয়ার করুন |
| `GET` | `/agentmemory/audit` | অডিট ট্রেইল |
সম্পূর্ণ এন্ডপয়েন্ট তালিকা: [`src/triggers/api.ts`](../src/triggers/api.ts)
**ক্যাপচার ডেলিভারি।** হুকগুলো প্রতিটি অবজারভেশন একবার `eventId` সহ `POST /agentmemory/observe`-এ পাঠায়। পেলোডের নিজের একটা id থাকলে (যেমন Claude Code-র `tool_use_id`) এটা সেই কলের হোস্টের নিজের id, না থাকলে সেশন, হুক টাইপ, টুলের নাম, ইনপুট, আউটপুট, এবং হোস্ট টাইমস্ট্যাম্পের একটা হ্যাশ। সার্ভার ইভেন্টটিকে state store-এ একটি ক্যাপচার ইনবক্সে লেখে, অবজারভেশনটি জমা রাখে, তারপর ইনবক্স এন্ট্রি সরিয়ে দেয়। স্ট্যাটাস কোড বলে দেয় কী ঘটেছে:
| Status | `status` ফিল্ড | অর্থ |
|---|---|---|
| `201` | `accepted` | জমা হয়েছে। `observationId` নতুন অবজারভেশন। |
| `202` | `accepted` (`state: "retrying"`) | গ্রহণ করা হয়েছে, কিন্তু জমা রাখা ফেইল করেছে। সার্ভার এটা রিট্রাই করে, রিস্টার্টের পরেও। |
| `200` | `duplicate` | এই `eventId` আগেই গ্রহণ করা হয়েছিল। `observationId` বিদ্যমান অবজারভেশন; নতুন কিছু জমা হয় না। |
| `400` / `422` | `rejected` | অবৈধ পেলোড, বা জমা রাখা স্থায়ীভাবে ফেইল করেছে (ইভেন্টটি ডেড লেটার হিসেবে রাখা হয়)। |
| `503` | `rejected` (`retryable: true`) | ইনবক্স ভরা (`AGENTMEMORY_CAPTURE_INBOX_MAX`)। হুকগুলো ইভেন্টটি স্পুল করে এবং পরে পাঠায়। |
ফেইলড ইভেন্টগুলো প্রতি `AGENTMEMORY_CAPTURE_RETRY_INTERVAL_MS` (10 s) দ্বিগুণ হওয়া ব্যাকঅফ দিয়ে রিট্রাই হয়, `AGENTMEMORY_CAPTURE_MAX_ATTEMPTS` (5) পর্যন্ত। যে ইভেন্টগুলো তখনও ফেইল হয় সেগুলো ইনবক্সে ডেড লেটার হিসেবে থাকে, `/agentmemory/status` এবং ভিউয়ার Health পেজে তালিকাভুক্ত হয়, এবং `POST /agentmemory/capture/retry` (`{"eventId": "..."}` বা `{"all": true}`) দিয়ে রিট্রাই করা যায়। গ্রহণ করা ইভেন্ট id-গুলো `AGENTMEMORY_CAPTURE_DEDUP_HOURS` (168 ঘন্টা, সর্বোচ্চ `AGENTMEMORY_CAPTURE_EVENTS_MAX` id) ধরে মনে রাখা হয়, তাই টাইমআউট বা রিস্টার্টের পর রিপ্লে করা একটি হুক একবার জমা হয়, যেখানে তাদের নিজ নিজ হোস্ট id-সহ দুটি আলাদা টুল কল দুইবার জমা হয় যদিও তাদের কনটেন্ট অভিন্ন। একটি অবজারভেশন ডিলিট হলে (forget, সেশন ডিলিট, eviction, auto-forget, বা store রিপ্লেস করা একটি import), তার ইভেন্ট অবজারভেশনটি সরানোর আগে ডিলিটেড হিসেবে মার্ক করা হয়, তাই একই উইন্ডোর মধ্যে সেই ইভেন্টের রিপ্লে একটি ডুপ্লিকেট হিসেবে উত্তর পায় এবং কিছু জমা হয় না। state store প্রতি 2 সেকেন্ডে ডিস্কে লেখে, তাই একটি উত্তর পাওয়া ইভেন্ট তখনও একটা মুহূর্তের জন্য কেবল মেমরিতে থাকতে পারে। এটা কভার করতে, প্রতিটি `2xx` উত্তরও সার্ভারের `bootId` (প্রতি স্টার্টে নতুন), `acceptedAt`, এবং `durableAfterMs` (file store-এ সেভ ইন্টারভাল প্লাস 1.5 s, redis-এ 1.5 s, যেখানে পার্সিস্টেন্স অপারেটরের সেটিং) বহন করে। হুকগুলো সেই উইন্ডো পার হওয়া পর্যন্ত ইভেন্টটিকে লোকাল স্পুলে রাখে এবং অন্য কোনো রিকোয়েস্ট ছাড়াই একটি পরের কলে এটা ডিলিট করে। তার মধ্যে `bootId` বদলে গেলে, সার্ভার রিস্টার্ট হয়েছিল, তাই হুক একই `eventId` দিয়ে ইভেন্টটা আবার পাঠায়; ডিস্কে পৌঁছানো একটি ইভেন্ট দুইবার জমা হয় না। সার্ভারও স্টার্টে এবং প্রতিটি রিট্রাই ইন্টারভালে নিজে এই ইভেন্টগুলো পাঠায়, তাই পরে কোনো হুক না চললেও একটা রিস্টার্ট কিছু হারায় না। পুরোনো হুকগুলো অতিরিক্ত ফিল্ডগুলো উপেক্ষা করে, এবং একটি পুরোনো সার্ভারের বিরুদ্ধে নতুন হুকগুলো আগের মতোই `2xx`-এ ইভেন্ট বাতিল করে।
সার্ভার ডাউন থাকলে, সময়মতো উত্তর না দিলে, বা একটা 5xx রিটার্ন করলে, হুক অবজারভেশনটিকে একটি লোকাল স্পুল ফাইলে যুক্ত করে, `/capture-spool/-.jsonl` (`AGENTMEMORY_CAPTURE_SPOOL_DIR` দিয়ে ফোল্ডারটি ওভাররাইড করুন)। ফাইলটি আপনার ইউজারের জন্য প্রাইভেট (মোড 600), সিক্রেটগুলো সার্ভার যেভাবে রিড্যাক্ট করে ঠিক সেভাবেই রিড্যাক্ট করা হয়, এটা সর্বোচ্চ `AGENTMEMORY_CAPTURE_SPOOL_MAX_BYTES` (5 MiB) ধরে রাখে এবং `AGENTMEMORY_CAPTURE_SPOOL_MAX_AGE_HOURS` (168)-এর চেয়ে পুরোনো এন্ট্রি ড্রপ করে। এটা ভরে গেলে, নতুন এন্ট্রি ড্রপ হয় এবং গণনা করা হয়, এবং `/agentmemory/status` তা রিপোর্ট করে। সার্ভার স্বাস্থ্যবান থাকলে হুক তখনও তার টাইম লিমিটের মধ্যে 0 দিয়ে exit হয় এবং কোনো রিকোয়েস্ট যুক্ত করে না। পরের স্টার্টে এবং সার্ভারে আবার পৌঁছানো প্রথম হুক দিয়ে স্পুলটি পাঠানো হয়, একটা ব্যাকগ্রাউন্ড প্রসেসে যাতে এজেন্ট অপেক্ষা না করে। ইভেন্ট id এটা নিরাপদ করে: একটা টাইমআউটের আগে পৌঁছানো অবজারভেশন দুইবার জমা হয় না। `npx @agentmemory/agentmemory capture` স্পুল এবং সার্ভার ইনবক্স দেখায়, `--drain` স্পুলটি এখনই পাঠায়, এবং `GET /agentmemory/capture` JSON হিসেবে একই জিনিস রিটার্ন করে। স্পুল বন্ধ করতে `AGENTMEMORY_CAPTURE_SPOOL=false` সেট করুন।
**গ্রাফ প্রোভেন্যান্স কমপ্যাক্ট করা।** প্রতিটি নলেজ গ্রাফ নোড ও এজ সবচেয়ে নতুন 32টি অবজারভেশনের id রাখে যেখান থেকে এটা এসেছে। সেই ক্যাপের আগে লেখা store হট নোড প্রতি হাজার হাজার id ধরে রাখতে পারে, যা গ্রাফ সার্চ ও ভিউয়ারকে স্লো করে দেয় বা ওয়ার্কারকে ক্র্যাশ করায়। agentmemory নিজেই এটা ঠিক করে: আপগ্রেডের পর প্রথম স্টার্টে এটা ব্যাকগ্রাউন্ডে ছোট ছোট স্লাইসে, মাঝে একটা বিরতি দিয়ে, প্রতিটি নোড, এজ, সুপারসিডেড এজ (টেম্পোরাল গ্রাফ ইতিহাস), এবং ক্যাশড স্ন্যাপশটকে ক্যাপে ট্রিম করে, যাতে সার্চ, ক্যাপচার, এবং ভিউয়ার চলতে থাকে। এটা তার অগ্রগতি সেভ করে, রিস্টার্টের পর আবার শুরু করে এবং শেষ হওয়ার পর আর কখনো চলে না। `/agentmemory/status` এবং ভিউয়ার Health পেজ এটাকে pending, running (বর্তমান scope ও position সহ), done, বা failed হিসেবে দেখায়। এটা বন্ধ করতে `AGENTMEMORY_GRAPH_COMPACT_ON_BOOT=false` সেট করুন।
হাতে চালাতে, `POST /agentmemory/graph/compact` কল করুন। এটা প্রতিটি নোড ও এজ লিস্ট করার বদলে নাম ও edge-key ইনডেক্সের মধ্য দিয়ে হাঁটে, এবং আবার চালানো নিরাপদ। id ট্রিম করলে এটা একটি `graph_compact` অডিট এন্ট্রি লেখে।
```bash
curl -X POST http://localhost:3111/agentmemory/graph/compact -H "Content-Type: application/json" -d '{}'
```
একটা বড় store-এ, বা কলটি 504 রিটার্ন করলে, এটা স্লাইসে চালান। `scope` (`nodes`, `edges`, বা `history`), `offset`, এবং `limit` পাঠান, তারপর রিটার্ন করা `nextOffset` দিয়ে আবার কল করুন যতক্ষণ না এটা `null` হয়। `nodes`, `edges`, এবং `history`-র জন্য এটা করুন, এবং একটা `{"scope":"snapshot"}` কল দিয়ে শেষ করুন, কারণ একটা স্লাইসড রান ক্যাশড স্ন্যাপশট ছোঁয় না।
```bash
curl -X POST http://localhost:3111/agentmemory/graph/compact -H "Content-Type: application/json" -d '{"scope":"nodes","offset":0,"limit":200}'
curl -X POST http://localhost:3111/agentmemory/graph/compact -H "Content-Type: application/json" -d '{"scope":"snapshot"}'
```
---
```bash
npm run dev # Hot reload
npm run build # Production build
npm test # 2,500+ tests
npm run test:integration # API tests (requires running services)
```
**প্রয়োজনীয়তা:** npm/npx সহ Node.js >= 20; [iii-engine](https://iii.dev/docs) v0.22.1 বা Docker। macOS/Linux অটোমেটিক ইঞ্জিন ইনস্টলের জন্য `curl`, একটি POSIX `sh`, এবং `tar`-ও লাগে; নেটিভ Windows ম্যানুয়াল পিন করা `iii.exe`, WSL2, বা Docker Desktop ব্যবহার করে।