<div align="center">
<picture> <source media="(prefers-color-scheme: dark)" srcset="https://img.shields.io/badge/Mengram-a855f7?style=for-the-badge&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMjAgMTIwIj48cGF0aCBkPSJNNjAgMTYgUTkyIDE2IDk2IDQ4IFExMDAgNzggNzIgODggUTUwIDk2IDM4IDc2IFEyNiA1OCA0NiA0NiBRNjIgMzggNzAgNTIgUTc2IDY0IDYyIDY4IiBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS13aWR0aD0iOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+PGNpcmNsZSBjeD0iNjIiIGN5PSI2OCIgcj0iOCIgZmlsbD0iI2ZmZiIvPjwvc3ZnPg=="> <img alt="Mengram" src="https://img.shields.io/badge/Mengram-a855f7?style=for-the-badge&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMjAgMTIwIj48cGF0aCBkPSJNNjAgMTYgUTkyIDE2IDk2IDQ4IFExMDAgNzggNzIgODggUTUwIDk2IDM4IDc2IFEyNiA1OCA0NiA0NiBRNjIgMzggNzAgNTIgUTc2IDY0IDYyIDY4IiBmaWxsPSJub25lIiBzdHJva2U9IiNmZmYiIHN0cm9rZS13aWR0aD0iOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+PGNpcmNsZSBjeD0iNjIiIGN5PSI2OCIgcj0iOCIgZmlsbD0iI2ZmZiIvPjwvc3ZnPg=="> </picture>
Give your AI agents memory that actually learns
     
Website ยท Get API Key ยท Docs ยท Console ยท Examples
</div>
pip install mengram-ai # or: npm install mengram-ai
from mengram import Mengram
m = Mengram(api_key="om-...") # Free key โ mengram.io
m.add([{"role": "user", "content": "I use Python and deploy to Railway"}])
m.search("tech stack") # โ facts
m.ask("what's my tech stack?") # โ synthesized answer + citations
m.episodes(query="deployment") # โ events
m.procedures(query="deploy") # โ workflows that evolve from failures
Native multilingual: ask in Russian, Chinese, Spanish, Japanese โ Mengram retrieves and answers across 23 languages (Cohere multilingual embeddings + rerank).
---
Install in one prompt (any AI tool)
Paste this into Claude Desktop, Cursor, Codex, Claude Code, or Windsurf โ the agent reads our setup guide, installs the SDK, configures the MCP server, and verifies the round-trip end-to-end. No terminal context-switching.
Install Mengram for me. Fetch the canonical install guide at
https://mengram.io/agent-install.txt and follow it precisely.
My email is YOUR_EMAIL_HERE.
Works in any agent with shell + file-edit + web-fetch tools. Prefer doing it manually? See the plain-text guide โ it's structured for human eyes too.
---
Claude Code โ Zero-Config Memory
Two commands. Claude Code remembers everything across sessions automatically.
pip install mengram-ai
mengram setup # Sign up + install hooks (interactive)
Or manually: export MENGRAM_API_KEY=om-... โ mengram hook install
What happens:
Session Start โ Loads your cognitive profile (who you are, preferences, tech stack)
Every Prompt โ Searches past sessions for relevant context (auto-recall)
After Response โ Saves new knowledge in background (auto-save)
No manual saves. No tool calls. Claude just knows what you worked on yesterday.
mengram hook status # check what's installed
mengram hook uninstall # remove all hooks
---
Why Mengram?
Every AI memory tool stores facts. Mengram stores 3 types of memory โ and procedures evolve when they fail.
| | Mengram | claude-mem | Mem0 | Zep | Letta | |---|:---:|:---:|:---:|:---:|:---:| | Semantic memory (facts, preferences) | Yes | Yes | Yes | Yes | Yes | | Episodic memory (events, decisions) | Yes | Partial | No | No | Partial | | Procedural memory (workflows) | Yes | No | No | No | No | | Procedures evolve from failures | Yes | No | No | No | No | | Cognitive Profile | Yes | No | No | No | No | | Native multilingual (23 languages) | Yes | No | No | No | No | | Ask & Citations (synthesized answer) | Yes | No | No | No | No | | Multi-user isolation | Yes | No | Yes | Yes | No | | Knowledge graph | Yes | No | Yes | Yes | Yes | | Claude Code hooks (auto-save/recall) | Yes | Yes | No | No | No | | LangChain + CrewAI + MCP | Yes | No | Partial | Partial | Partial | | Import ChatGPT / Obsidian | Yes | No | No | No | No | | Pricing | Free tier | Free / OSS | $19-249/mo | Enterprise | Self-host |
Get Started in 30 Seconds
1. Install
pip install mengram-ai
2. Setup (creates account + installs Claude Code hooks)
mengram setup
Or get a key manually at mengram.io and export MENGRAM_API_KEY=om-...
3. Use
from mengram import Mengram
m = Mengram(api_key="om-...")
# Add a conversation โ auto-extracts facts, events, and workflows
m.add([
{"role": "user", "content": "Deployed to Railway today. Build passed but forgot migrations โ DB crashed. Fixed by adding a pre-deploy check."},
])
# Search across all 3 memory types at once
results = m.search_all("deployment issues")
# โ {semantic: [...], episodic: [...], procedural: [...]}
<details> <summary><b>File Upload (PDF, DOCX, TXT, MD)</b></summary>
# Upload a PDF โ auto-extracts memories using vision AI
result = m.add_file("meeting-notes.pdf")
# โ {"status": "accepted", "job_id": "job-...", "page_count": 12}
# Poll for completion
m.job_status(result["job_id"])
// Node.js โ pass a file path
await m.addFile('./report.pdf');
// Browser โ pass a File object from <input type="file">
await m.addFile(fileInput.files[0]);
# REST API
curl -X POST https://mengram.io/v1/add_file \
-H "Authorization: Bearer om-..." \
-F "file=@meeting-notes.pdf" \
-F "user_id=default"
</details>
<details> <summary><b>JavaScript / TypeScript</b></summary>
npm install mengram-ai
const { MengramClient } = require('mengram-ai');
const m = new MengramClient('om-...');
await m.add([{ role: 'user', content: 'Fixed OOM by adding Redis cache layer' }]);
const results = await m.searchAll('database issues');
// โ { semantic: [...], episodic: [...], procedural: [...] }
</details>
<details> <summary><b>REST API (curl)</b></summary>
# Add memory
curl -X POST https://mengram.io/v1/add \
-H "Authorization: Bearer om-..." \
-H "Content-Type: application/json" \
-d '{"messages": [{"role": "user", "content": "I prefer dark mode and vim keybindings"}]}'
# Search all 3 types
curl -X POST https://mengram.io/v1/search/all \
-H "Authorization: Bearer om-..." \
-d '{"query": "user preferences"}'
</details>
3 Memory Types
Semantic โ facts, preferences, knowledge
m.search("tech stack")
# โ ["Uses Python 3.12", "Deploys to Railway", "PostgreSQL with pgvector"]
Episodic โ events, decisions, outcomes
m.episodes(query="deployment")
# โ [{summary: "DB crashed due to missing migrations", outcome: "resolved", date: "2025-05-12"}]
Procedural โ workflows that evolve
Week 1: "Deploy" โ build โ push โ deploy
โ FAILURE: forgot migrations
Week 2: "Deploy" v2 โ build โ run migrations โ push โ deploy
โ FAILURE: OOM
Week 3: "Deploy" v3 โ build โ run migrations โ check memory โ push โ deploy โ
This happens automatically when you report failures:
m.procedure_feedback(proc_id, success=False,
context="OOM error on step 3", failed_at_step=3)
# โ Procedure evolves to v3 with new step added
Or fully automatic โ just add conversations and Mengram detects failures and evolves procedures:
m.add([{"role": "user", "content": "Deploy failed again โ OOM on the build step"}])
# โ Episode created โ linked to "Deploy" procedure โ failure detected โ v3 created
Ask Your Memory (RAG built-in)
m.ask() returns a synthesized answer with citations โ not a raw fact list. Mengram embeds your query, retrieves the top relevant facts, and uses Cohere Chat to write a grounded answer with native source attribution.
result = m.ask("what programming languages do I use?")
print(result["answer"])
# 'You use Python and Rust. Python is your daily language [1] and
# Rust is your favorite [2]. You also know Java for enterprise
# systems [3].'
for cit in result["citations"]:
print(f' "{cit["text"]}" โ {cit["sources"][0]["fact"]}')
# "Python and Rust" โ uses Python daily for backend development
# "favorite [2]" โ Rust is favorite language
# "Java" โ specializes in Java/Spring Boot
Multilingual: ask in any of 23 languages, get an answer in the same language with citations linking back to facts in the original language they were stored. Premium feature (Pro / Growth / Business).
Cognitive Profile
One API call generates a system prompt from all memories:
profile = m.get_profile()
# โ "You are talking to Ali, a developer in Almaty. Uses Python, PostgreSQL,
# and Railway. Recently debugged pgvector deployment. Prefers direct
# communication and practical next steps."
Insert into any LLM's system prompt for instant personalization.
Import Existing Data
Kill the cold-start problem:
mengram import chatgpt ~/Downloads/chatgpt-export.zip --cloud # ChatGPT history
mengram import obsidian ~/Documents/MyVault --cloud # Obsidian vault
mengram import files notes/*.md --cloud # Any text/markdown
Integrations
<table> <tr> <td width="50%">
Claude Code โ Auto-memory hooks
mengram hook install
3 hooks: profile on start, recall on every prompt, save after responses. Zero manual effort.
</td> <td width="50%">
MCP Server โ Claude Desktop, Cursor, Codex, Windsurf, Cline
{
"mcpServers": {
"mengram": {
"command": "mengram",
"args": ["server", "--cloud"],
"env": { "MENGRAM_API_KEY": "om-..." }
}
}
}
30 tools for memory management.
</td> </tr> <tr> <td width="50%">
LangChain โ pip install langchain-mengram
from langchain_mengram import (
MengramRetriever,
MengramChatMessageHistory,
)
retriever = MengramRetriever(api_key="om-...")
docs = retriever.invoke("deployment issues")
</td> <td width="50%">
CrewAI
from integrations.crewai import create_mengram_tools
tools = create_mengram_tools(api_key="om-...")
# โ 5 tools: search, remember, profile,
# save_workflow, workflow_feedback
agent = Agent(role="Support", tools=tools)
</td> </tr> <tr> <td width="50%">
OpenClaw
openclaw plugins install openclaw-mengram
Auto-recall before every turn, auto-capture after. 12 tools, slash commands, Graph RAG.
</td> <td width="50%">
CLI โ Full command-line interface
mengram search "deployment" --cloud
mengram profile --cloud
mengram import chatgpt export.zip --cloud
mengram hook install
</td> </tr> <tr> <td width="50%">
Claude Managed Agents โ MCP memory for hosted agents
{
"mcp_servers": [{
"type": "url",
"name": "mengram",
"url": "https://mengram.io/mcp/sse"
}]
}
30 memory tools via MCP. Docs
</td> <td width="50%">
n8n โ HTTP nodes for any workflow
POST https://mengram.io/v1/add
POST https://mengram.io/v1/search
No code needed โ drag and drop memory into any n8n workflow.
</td> </tr> </table>
Multi-User Isolation
One API key, many users โ each sees only their own data:
m.add([...], user_id="alice")
m.add([...], user_id="bob")
m.search_all("preferences", user_id="alice") # Only Alice's memories
m.get_profile(user_id="alice") # Alice's cognitive profile
Async Client
Non-blocking Python client built on httpx:
from mengram import AsyncMengram
async with AsyncMengram() as m:
await m.add([{"role": "user", "content": "I use async/await"}])
results = await m.search("async")
profile = await m.get_profile()
Install with pip install mengram-ai[async].
Metadata Filters
Filter search results by metadata:
results = m.search("config", filters={"agent_id": "support-bot", "app_id": "prod"})
Webhooks
Get notified when memories change:
m.create_webhook(
url="https://your-app.com/hook",
event_types=["memory_add", "memory_update"],
)
Agent Templates
Clone, set API key, run in 5 minutes:
| Template | Stack | What it shows | |---|---|---| | DevOps Agent | Python SDK | Procedures that evolve from deployment failures | | Customer Support | CrewAI | Agent with 5 memory tools, remembers returning customers | | Personal Assistant | LangChain | Cognitive profile + auto-saving chat history |
cd examples/devops-agent && pip install -r requirements.txt
export MENGRAM_API_KEY=om-...
python main.py
Use with AI Agents
Mengram works as a persistent memory backend for autonomous agents. Your agent stores what it learns, and recalls it on the next run โ getting smarter over time.
from mengram import Mengram
m = Mengram(api_key="om-...")
# Agent completes a task โ store what happened
m.add([
{"role": "user", "content": "Apply to Acme Corp on Greenhouse"},
{"role": "assistant", "content": "Applied successfully. Had to use React Select workaround for dropdowns."},
])
# โ Extracts: fact ("applied to Acme Corp"), episode ("Greenhouse application"),
# procedure ("React Select dropdown workaround")
# Next run โ agent recalls what worked before
context = m.search_all("Greenhouse application tips")
# โ Returns past procedures, failures, and successful strategies
# Report outcome โ procedures evolve
m.procedure_feedback(proc_id, success=False,
context="Dropdown fix stopped working")
# โ Procedure auto-evolves to a new version
Works with any agent framework โ CrewAI, LangChain, AutoGPT, custom loops. The agent just calls add() after actions and search() before decisions.
Self-Hosted (Ollama)
When running locally with Ollama, use models with 8B+ parameters and 8K+ context window. The extraction prompt is ~4,000 tokens โ smaller models will hallucinate or mix examples with real data.
| Model | Parameters | Works? | |-------|-----------|--------| | llama3.1:8b | 8B | Yes | | mistral:7b | 7B | Yes | | gemma2:9b | 9B | Yes | | llama3.1:70b | 70B | Best | | phi4-mini:3.8b | 3.8B | No โ context too small |
API Reference
| Endpoint | Description | |---|---| | POST /v1/add | Add memories (auto-extracts all 3 types) | | POST /v1/add_text | Add memories from plain text | | POST /v1/add_file | Upload file (PDF, DOCX, TXT, MD) โ vision AI extraction | | POST /v1/search | Semantic search | | POST /v1/search/all | Unified search (semantic + episodic + procedural) | | GET /v1/episodes/search | Search events and decisions | | GET /v1/procedures/search | Search workflows | | PATCH /v1/procedures/{id}/feedback | Report outcome โ triggers evolution | | GET /v1/procedures/{id}/history | Version history + evolution log | | GET /v1/profile | Cognitive Profile | | GET /v1/triggers | Smart Triggers (reminders, contradictions, patterns) | | POST /v1/agents/run | Memory agents (Curator, Connector, Digest) | | GET /v1/me | Account info |
Full interactive docs: mengram.io/docs
Quota Headers
Every authenticated response includes usage headers:
| Header | Description | |--------|-------------| | X-Quota-Add-Used | Add calls used this month | | X-Quota-Add-Limit | Add calls allowed this month | | X-Quota-Search-Used | Search calls used this month | | X-Quota-Search-Limit | Search calls allowed this month |
SDKs expose this via .quota:
m.search("test")
print(m.quota) # {"add": {"used": 5, "limit": 30}, "search": {"used": 12, "limit": 100}}
Community
- GitHub Issues โ bug reports, feature requests
- GitHub Discussions โ show your use case, ask questions
- API Docs โ interactive Swagger UI
- Examples โ ready-to-run agent templates
Star History
<a href="https://star-history.com/#alibaizhanov/mengram&Date"> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=alibaizhanov/mengram&type=Date&theme=dark" /> <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=alibaizhanov/mengram&type=Date" /> <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=alibaizhanov/mengram&type=Date" /> </picture> </a>
License
Apache 2.0 โ free for commercial use.
---
<div align="center">
Get your free API key ยท Built by Ali Baizhanov ยท mengram.io
</div>






