Back to Mem0

Hermes Agent

docs/integrations/hermes.mdx

2.0.813.0 KB
Original Source

Add long-term memory to Hermes Agent, a self-improving AI agent CLI by Nous Research. Hermes has a pluggable memory system, and Mem0 is one of the supported providers. Once enabled, Mem0 learns facts from your conversations and surfaces relevant ones before each turn, without slowing down the chat.

You can run Mem0 in two ways:

  • Platform mode (default): managed Mem0 Cloud. Add your API key and you are ready.
  • OSS mode: fully self-hosted with your own LLM, embedder, and vector store. No data leaves your machine.

How It Works

Hermes runs a built-in memory system (file-based MEMORY.md and USER.md) alongside one external provider. When Mem0 is active, it works additively with the built-in system at three points in every conversation turn.

1. Before the agent responds (prefetch)

When you send a message, Hermes checks for cached Mem0 search results from the previous turn. If they exist, those memories are injected into the system prompt so the model can see them. This is zero-latency, with no waiting on an API call.

2. After the agent responds (sync)

Once the model finishes, Hermes sends the (user message, assistant response) pair to Mem0 in a background thread. Mem0 extracts facts automatically (for example, "user prefers Python" or "user works at Acme Corp"), so you never have to tell it what to remember. Each write is tagged with the gateway channel it came from.

3. Background prefetch for the next turn

At the same time, Hermes runs a background search to pre-load relevant memories for your next message. By the time you type, the results are already cached.

Agent Tools

When Mem0 is active, the model gets five tools it can call during a conversation:

ToolDescriptionParameters
mem0_listList all stored memories, for a full overviewpage, page_size (default 100, max 200)
mem0_searchSemantic search by meaning, ranked by relevancequery (required), top_k (default 10, max 50), rerank (default true, Platform mode only)
mem0_addStore a fact verbatim, with no LLM extractioncontent (required)
mem0_updateUpdate a memory's text by IDmemory_id, text (both required)
mem0_deleteDelete a memory by IDmemory_id (required)

Installation

Install Hermes Agent:

bash
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
source ~/.bashrc

The mem0ai package is installed automatically when you enable the Mem0 provider, so there is no manual pip step. OSS providers may need extra packages (for example qdrant-client, psycopg2-binary, or ollama), which the setup flow installs for you when you pick them.

Platform Setup

Platform mode uses managed Mem0 Cloud and is the fastest way to start.

bash
hermes memory setup

Select mem0, choose Platform, and paste your API key when prompted. The wizard writes the non-secret settings to ~/.hermes/mem0.json and keeps the key in ~/.hermes/.env.

<Note>Get your API key from <a href="https://app.mem0.ai?utm_source=oss&utm_medium=integration-hermes" rel="nofollow">app.mem0.ai</a>.</Note>

Option 2: Manual Configuration

bash
hermes config set memory.provider mem0
echo "MEM0_API_KEY=your-api-key" >> ~/.hermes/.env

Then in your config.yaml:

yaml
memory:
  provider: mem0

That's it. Mem0 runs automatically from here.

OSS (Self-Hosted) Setup

OSS mode runs Mem0 entirely on your own infrastructure: your LLM, your embedder, and your vector store. No data is sent to Mem0 Cloud, and no Mem0 API key is required.

Interactive

bash
hermes memory setup
# Select "mem0", then "Open Source (self-hosted)"
# Follow the prompts for LLM, embedder, and vector store

With flags

bash
hermes memory setup mem0 --mode oss \
  --oss-llm openai --oss-llm-key sk-... \
  --oss-vector qdrant

Supported providers

ComponentProviders
LLMopenai (default model gpt-5-mini), ollama (local, default llama3.1:8b)
Embedderopenai (default text-embedding-3-small), ollama (local, default nomic-embed-text)
Vector storeqdrant (local path or server), pgvector

Flag reference

FlagDescription
--modeplatform or oss
--oss-llmLLM provider (openai or ollama, default openai)
--oss-llm-keyLLM API key (for openai)
--oss-llm-modelOverride the LLM model
--oss-llm-urlLLM base URL (for ollama or a custom endpoint)
--oss-embedderEmbedder provider (default openai)
--oss-embedder-keyEmbedder API key
--oss-vectorVector store (qdrant or pgvector, default qdrant)
--oss-vector-pathLocal Qdrant storage path
--oss-vector-host, --oss-vector-portPGVector or remote Qdrant host and port
--oss-vector-user, --oss-vector-password, --oss-vector-dbnamePGVector connection details
--user-idCanonical user identifier
--dry-runPreview the resolved config without writing it

Switching Modes

You can move between Platform and OSS at any time. Run the setup command again, or edit ~/.hermes/mem0.json directly.

bash
# Platform to OSS
hermes memory setup mem0 --mode oss --oss-llm-key sk-...

# OSS to Platform
hermes memory setup mem0 --mode platform --api-key sk-...

# Preview without writing anything
hermes memory setup mem0 --mode oss --oss-llm-key sk-... --dry-run

A self-hosted ~/.hermes/mem0.json looks like this:

json
{
  "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"}}
  }
}

Configuration

Behavioral settings live in ~/.hermes/mem0.json and are written for you by hermes memory setup. Only the secret MEM0_API_KEY belongs in ~/.hermes/.env.

KeyDefaultDescription
modeplatformplatform (Mem0 Cloud) or oss (self-hosted)
api_keynoneMem0 Platform API key, required in Platform mode. Stored in .env as MEM0_API_KEY
user_idhermes-userIdentifier that scopes memories. See cross-channel behavior below
agent_idhermesAgent identifier attached to writes
reranktrueRerank search results for relevance (Platform mode only)

Cross-channel memories

Hermes can run from the CLI and from gateways like Telegram, Slack, and Discord. The user_id setting controls how memories are scoped across them:

  • Set a user_id and it applies to every gateway, so one person gets a single merged memory store no matter where they talk to the agent.
  • Leave it unset (or at the default hermes-user) and each gateway uses its own native id, keeping per-platform memories separate.

Either way, every write is tagged with metadata.channel (for example telegram or cli), so per-channel views are still possible at query time.

Reliability

  • Circuit breaker: if Mem0 fails five times in a row, Hermes pauses calls for two minutes, then retries. The agent keeps working without memory during that window. Expected client errors, like a 404 on a missing memory id, do not count toward tripping the breaker.
  • Non-blocking: every Mem0 call runs in a background daemon thread, so a slow or failed call never blocks your conversation.
  • Thread-safe: the client uses lazy initialization with locking, and the background sync and prefetch threads are guarded so concurrent gateway messages cannot produce duplicate memories.

Troubleshooting

"Mem0 temporarily unavailable"

The circuit breaker tripped after five consecutive failures and resets after two minutes.

  • Platform mode: check your API key and internet connection.
  • OSS mode: make sure your vector store (Qdrant or PGVector) is running and reachable.

OSS: vector store connection refused

bash
# Local Qdrant: confirm the storage path is writable
ls -la ~/.hermes/mem0_qdrant

# Qdrant server: confirm it is reachable
curl http://localhost:6333/healthz

# PGVector: confirm PostgreSQL is accepting connections
pg_isready -h localhost -p 5432

OSS: Ollama not reachable

bash
curl http://localhost:11434/api/tags

Memories not appearing

  • mem0_add stores text verbatim with no extraction. Ordinary conversation turns are extracted automatically by the background sync.
  • Search is semantic, so try a broader query.
  • Confirm user_id is the same across sessions (check ~/.hermes/mem0.json).

Key Features

  1. Two ways to run: managed Platform or fully self-hosted OSS, switchable at any time.
  2. Zero-latency recall: memories are prefetched in the background and cached before you type.
  3. Automatic extraction: Mem0 extracts and deduplicates facts from each exchange for you.
  4. Non-blocking and fault tolerant: background threads plus a circuit breaker keep the agent responsive even when Mem0 is unreachable.
  5. Additive memory: works alongside Hermes' built-in file memory (MEMORY.md, USER.md).
<CardGroup cols={2}> <Card title="OpenClaw Integration" icon={<svg width="24" height="24" viewBox="0 0 500 500" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="m153.5 173.5q24.62 1.46 46 13.5 12.11 8.1 17.5 21.5 0.74 2.45 0.5 5 0.09 0.81 1 1 1.48-4.9 1-10 5.04 10.48 1.5 22-9.81 27.86-35.5 42.5-26.17 14.97-56 19.5-2.77-0.4-2 1 2.86 1.27 6 1 25.64 1.53 48.5-10 0.34 10.08 2 20 1.08 5.76 5 10 1 1.5 0 3-31.11 20.84-68.5 17.5-23.7-5.7-32.5-28.5-4.39-9.18-3.5-19 15.41 6.23 32 4.5-20.68-6.39-39-18-34.81-27.22-12.5-65.5 11.84-14.83 29-23 4.21 7.66 11.5 12.5 3 1 6 0-26.04-34.62-29-78-0.13-8.46 2-16.5 1 6.5 2 13 3.43 39.53 24.5 73 2.03 2.28 4.5 4 0.5-1.25 1-2.5-1.27-6.54-5-12 0.5-0.75 1-1.5 9.72-3.43 20-4 0.55 10.34 8 17.5 1.94 0.74 4 0.5-17.8-64.6 16.5-122 0.98-1.79 1.5 0-28.21 56.64-13.5 118 1.08 1.43 2.5 0.5 2.21-4.98 2-10.5z" fill="currentColor"/><path fill-rule="evenodd" d="m454.5 97.5q-1.33 11.18-8.5 20-21.81 26.28-55.5 32-1.11-0.2-2 0.5 2.31 2.82 5.5 4.5 1 2 0 4-9.56 11.3-19.5 20 19.71-8.72 31-27 2.68-0.43 5 1-14.24 30.97-48 36.5-9.93 1.71-20 1.5-6.8-0.48-13 1 5.81 6.92 14 11-10.78 16.03-27 26.5 27.16-7.4 38-33.5 4.34 1.35 9 1-9.08 23.84-33 33.5-18.45 6.41-38 7 22.59 8.92 45-1 12.05-5.52 24-11 9.01-1.79 17 2.5 5.28-4.38 11-8 12.8-6.07 27-5 0 0.5 0 1-19.34 2.69-34 15.5 0.5 0.25 1 0.5 17.79-8.09 36-15 2.71-0.79 5-2 2.5-1 5-2 5.53-4.04 11-8 11.7-4.18 24-6.5 7.78-1.36 15 1.5-2.97 18.45-13.5 34-34.92 49.37-94.5 62.5-59.27 12.45-108-23-15.53-12.52-21.5-31.5-2.47-14.26 4-27-3.15 24.41 14 42-4.92-10.28-7-22-1.97-17.63 7-33 47.28-69.5 125.5-100 15.86-3.42 32-5.5 18.63-1.47 37 1.5z" fill="currentColor"/><path fill-rule="evenodd" d="m231.5 238.5q1.31-0.2 2 1-3.13 28.62 15 51-16.25 6.75-27-7.5-1-1-2 0 14.73 29.34 46 18.5 1.79 0.52 0 1.5-37.63 16.82-50.5-22.5-5.1-26.48 16.5-42z" fill="currentColor"/><path fill-rule="evenodd" d="m203.5 266.5q1.31-0.2 2 1-2.48 22.08 12 39-6.99 1.35-14 0.5 4.59 4.08 10 7-8.71 0.28-14.5-6.5-16.98-22.76 4.5-41z" fill="currentColor"/><path fill-rule="evenodd" d="m58.5 284.5q9.6-2.17 14.5 6 5.15 14.18-1 28-11.05-13.14-27.5-17.5 5.15-9.9 14-16.5z" fill="currentColor"/><path fill-rule="evenodd" d="m56.5 313.5q3.43 5.43 8 10-4.88 0.44-8 4-1.11-0.2-2 0.5 28.91 1.65 38 28.5 0.45 3.16-1 6-11.02-7.01-23-12.5-4.75-3.75-9.5-7.5 1.47 7.42 7 13 8.34 27.18 32 43 0.99 2.41-1.5 3.5-40.25 5.58-66.5-25.5-15.67-22.01-8-48 10.46-23.87 34.5-15z" fill="currentColor"/><path fill-rule="evenodd" d="m198.5 319.5q1.44 0.68 2.5 2 2.41 8.23 6 16 1.2 2.64-0.5 5-30.65 21.41-68 18.5-25.16-6.17-32.5-30.5 6.96 4.99 15.5 6.5 8.99 0.75 18 0.5 16.25 2.38 32-2.5 15.9-3.94 27-15.5z" fill="currentColor"/><path fill-rule="evenodd" d="m239.5 342.5q7.02-0.25 14 0.5 4.46 1.06 8 3.5-5.2 2.35-10 5.5-3.88 4.65-9 7.5-9.89-3.09-9.5-13 2.36-3.63 6.5-4z" fill="currentColor"/><path fill-rule="evenodd" d="m214.5 349.5q5.96 7.2 13.5 13 1 1 0 2-28.58 23.34-65.5 20.5-18.15-4.24-27.5-19.5 1.13 0.94 2.5 1.5 14.7 1.42 29-1.5 26.57-0.52 48-16z" fill="currentColor"/><path fill-rule="evenodd" d="m302.5 373.5q0.21 2.44-2 3.5-28.69 7.6-50.5-12.5-0.06-6.71 6.5-9 4.45-0.75 9-1 22.26 2.27 37 19z" fill="currentColor"/><path fill-rule="evenodd" d="m232.5 365.5q17.6 6.19 10.5 23-10.6 10.42-25.5 11.5-25.94 3.21-49-9 36.75-1.65 64-25.5z" fill="currentColor"/><path fill-rule="evenodd" d="m113.5 367.5q7.7-0.01 9.5 7-9.69 7.19-18.5 15.5-7.23 5.76-5.5-3.5 3.12-12.84 14.5-19z" fill="currentColor"/><path fill-rule="evenodd" d="m126.5 380.5q7.88-0.4 12 6.5-8.5 7.25-17 14.5-5.62-12.55 5-21z" fill="currentColor"/><path fill-rule="evenodd" d="m283.5 385.5q3.22 2.95 7 5.5 2.8 4.03 6 7.5 0.42 2.77-2 4-15.5-9.75-31-19.5-1.79-0.98 0-1.5 9.96 2.49 20 4z" fill="currentColor"/></svg>} href="/integrations/openclaw"> Add memory to OpenClaw agents with auto-recall and auto-capture </Card> <Card title="Mem0 Platform" icon="rocket" href="/platform/overview"> Get your API key and explore the Mem0 dashboard </Card> </CardGroup>