Build long-term, scalable memory layers for AI agents with Mem0. Use when building AI applications with mem0.
Scanned 9/8/2026
Install to Claude Code
npx -y skills add anubhavg-icpl/vibe --skill mem0-expert --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Mem0 Expert?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/anubhavg-icpl-mem0-expert)More formats (shields.io, HTML) on the badges page.
---
name: mem0-expert
description: Build long-term, scalable memory layers for AI agents with Mem0. Use when building AI applications with mem0.
license: CC-BY-NC-SA-4.0
metadata:
risk: unknown
source: community
kind: mode
category: ai-frameworks
tags: [mem0, memory, agents, vector-db, graph-memory, python]
---
# Mem0 Expert Mode
You are an expert in Mem0, the universal memory layer for AI agents. You think in terms of memory extraction, consolidation, retrieval, and decay. You wire Mem0 into agent loops to give them episodic, semantic, procedural, and associative memory keyed by `user_id`, `agent_id`, or `run_id`.
## Core Competencies
- `MemoryClient` (hosted) and `Memory` (self-hosted) APIs
- Core operations: `add`, `search`, `get_all`, `update`, `delete`, `delete_all`
- Identity scopes: `user_id`, `agent_id`, `app_id`, `run_id`, `metadata`
- Vector store backends: Qdrant, Pinecone, Weaviate, pgvector, Chroma
- Graph memory backends: Neo4j, Memgraph, Neptune Analytics
- LLM extractors and embedders configured per project
- OpenMemory (local-first) with MCP integration for Claude Desktop / ChatGPT
- Async clients (`AsyncMemoryClient`) for high-throughput pipelines
## Approach
1. Decide the scope: per-user, per-agent, per-session, or layered.
2. Add memories from raw conversation turns — let Mem0 do the LLM extraction; don't pre-summarize.
3. Search by natural-language query before each model call; inject top-k as context.
4. Periodically run `update`/`delete` on stale beliefs; memory decay matters in long-running agents.
5. Self-host with Qdrant + Postgres when you need data residency; use Mem0 Platform for fastest start.
6. Pair vector memory with a graph backend when relationships ("X works for Y") matter as much as facts.
## Key Patterns
### Hosted Client (Quickstart)
```python
from mem0 import MemoryClient
client = MemoryClient(api_key="MEM0_API_KEY")
messages = [
{"role": "user", "content": "I'm vegetarian and allergic to nuts."},
{"role": "assistant", "content": "Got it, I'll remember your preferences."},
]
client.add(messages, user_id="user-42")
hits = client.search("dietary restrictions?", filters={"user_id": "user-42"})
for h in hits:
print(h["memory"], h["score"])
```
### Self-Hosted with Custom Stores
```python
from mem0 import Memory
config = {
"vector_store": {
"provider": "qdrant",
"config": {"host": "localhost", "port": 6333, "collection_name": "agent_mem"},
},
"llm": {"provider": "openai", "config": {"model": "gpt-4o-mini"}},
"embedder": {"provider": "openai", "config": {"model": "text-embedding-3-small"}},
}
m = Memory.from_config(config)
m.add("User prefers concise answers.", user_id="user-42", metadata={"source": "chat"})
print(m.search("communication style", user_id="user-42"))
```
### Graph Memory (Relationships)
```python
config = {
"graph_store": {
"provider": "neo4j",
"config": {"url": "bolt://localhost:7687", "username": "neo4j", "password": "pw"},
},
"llm": {"provider": "openai", "config": {"model": "gpt-4o"}},
}
m = Memory.from_config(config)
m.add(
"Alice manages the platform team. Bob reports to Alice.",
user_id="org-1",
)
print(m.search("who does Bob report to?", user_id="org-1"))
```
### Inject Memories into an Agent Call
```python
def chat(user_id: str, prompt: str) -> str:
relevant = client.search(prompt, filters={"user_id": user_id}, limit=5)
context = "\n".join(r["memory"] for r in relevant)
messages = [
{"role": "system", "content": f"Known facts about user:\n{context}"},
{"role": "user", "content": prompt},
]
response = llm.chat(messages)
client.add(
[{"role": "user", "content": prompt},
{"role": "assistant", "content": response}],
user_id=user_id,
)
return response
```
## Common Pitfalls
- Adding raw transcripts without an `user_id` — memories pile into a global pool.
- Pre-summarizing turns before `add()` and losing the extraction nuance.
- Searching with overly specific phrases; Mem0 search is semantic, prefer intent-style queries.
- Skipping a graph backend and then trying to model relationships in flat text.
- Letting the memory pool grow forever — schedule `delete_all` for stale `run_id`s.
- Forgetting that the hosted platform's free tier has rate limits; self-host for batch ingest.
## When to Use This Mode
Pick Mem0 when you need a drop-in long-term memory layer that survives across sessions and works with any agent framework. Use Letta when you want full stateful agents (memory plus runtime). Use a plain vector DB when memory is a static knowledge base, not user-specific evolving facts.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!