plugins/memory/mem0/README.md
Server-side LLM fact extraction with semantic search and hybrid multi-signal retrieval via the Mem0 Platform v3 API.
pip install mem0aihermes memory setup # select "mem0"
Or manually:
hermes config set memory.provider mem0
echo "MEM0_API_KEY=your-key" >> ~/.hermes/.env
Behavioral settings live in $HERMES_HOME/mem0.json (set them via hermes memory setup). Only the secret MEM0_API_KEY belongs in ~/.hermes/.env.
| Key | Default | Description |
|---|---|---|
mode | platform | platform (Mem0 Cloud) or oss (self-managed, in-process) |
host | — | Self-hosted Mem0 server URL (the Docker dashboard). When set, connects over HTTP with X-API-Key. Don't combine with mode: oss |
user_id | hermes-user | User identifier on Mem0 |
agent_id | hermes | Agent identifier |
rerank | false | Rerank search results for relevance (platform mode only) |
The plugin has three connection modes:
api.mem0.ai). Set MEM0_API_KEY. (default)host. See below.mode: oss. See below.Connect the plugin to a standalone Mem0 server you run yourself — the Docker-shipped Mem0 dashboard/server with its own REST API. Unlike OSS mode (which runs mem0ai in-process with your own vector store), here the plugin just talks HTTP to your server.
ADMIN_API_KEY.hermes memory setup # select "mem0" → "Self-hosted server"
# Or non-interactive:
hermes memory setup mem0 --mode selfhosted --host http://localhost:8888 --api-key your-admin-api-key
echo "MEM0_HOST=http://localhost:8888" >> ~/.hermes/.env
echo "MEM0_API_KEY=your-admin-api-key" >> ~/.hermes/.env
$HERMES_HOME/mem0.json:
{
"host": "http://localhost:8888",
"api_key": "your-admin-api-key"
}
mem0_search — it connects to your server.The plugin authenticates with X-API-Key and uses the server's /search and /memories routes. api_key is optional — omit it only for servers running with AUTH_DISABLED.
Setting
hostroutes to the self-hosted server automatically. Don't setmode: oss— OSS takes precedence and ignoreshost.
Run Mem0 locally with your own LLM, embedder, and vector store. This is the in-process SDK mode. To instead connect to a Mem0 server you run via Docker, see Self-Hosted Dashboard (Server) Mode above.
hermes memory setup
# Select "mem0" → "Open Source (self-hosted)"
# Follow prompts for LLM, embedder, and vector store
hermes memory setup mem0 --mode oss \
--oss-llm openai --oss-llm-key sk-... \
--oss-vector qdrant
| Component | Providers |
|---|---|
| LLM | openai, ollama |
| Embedder | openai, ollama |
| Vector Store | qdrant (local/server), pgvector |
| Flag | Description |
|---|---|
--mode | platform or oss |
--oss-llm | LLM provider (default: openai) |
--oss-llm-key | LLM API key |
--oss-embedder | Embedder provider (default: openai) |
--oss-vector | Vector store (default: qdrant) |
--oss-vector-path | Qdrant local path |
--user-id | User identifier |
hermes memory setup mem0 --mode oss --oss-llm-key sk-...
Or edit $HERMES_HOME/mem0.json directly:
{
"mode": "oss",
"oss": {
"llm": {"provider": "openai", "config": {"model": "gpt-5-mini"}},
"embedder": {"provider": "openai", "config": {"model": "text-embedding-3-small"}},
"vector_store": {"provider": "qdrant", "config": {"path": "~/.hermes/mem0_qdrant"}}
}
}
hermes memory setup mem0 --mode platform --api-key sk-...
hermes memory setup mem0 --mode oss --oss-llm-key sk-... --dry-run
| Tool | Description |
|---|---|
mem0_search | Semantic search by meaning |
mem0_add | Store a fact verbatim (no LLM extraction) |
mem0_update | Update a memory's text by ID |
mem0_delete | Delete a memory by ID |
Circuit breaker tripped after 5 consecutive failures. Resets after 2 minutes.
# If using local Qdrant, check the storage path is writable:
ls -la ~/.hermes/mem0_qdrant
# If using Qdrant server, check it's reachable:
curl http://localhost:6333/healthz
# Verify PostgreSQL is running and accepting connections:
pg_isready -h localhost -p 5432
# Check Ollama is running:
curl http://localhost:11434/api/tags
mem0_add stores verbatim (no extraction). Use sync_turn for LLM extraction.user_id matches between sessions ($HERMES_HOME/mem0.json).