diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..dcd69a7 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,69 @@ +# AGENTS.md — Mem0 Local Hermes Plugin + +## Structure + +Single-file plugin: `__init__.py` contains the `Mem0LocalMemoryProvider` class. HTTP client in `client.py`. Manifest in `plugin.yaml`. + +## Key Commands + +```bash +# Install from repo +hermes plugins install ARIA/mem0-local-hermes-plugin + +# Install from local path (development) +hermes plugins install /path/to/mem0-local-hermes-plugin + +# Activate memory provider +hermes memory mem0-local + +# Restart gateway after changes +hermes gateway restart + +# Verify Mem0 server +curl http://localhost:8000/health +``` + +## Configuration + +**Two-tier config (JSON overrides env):** + +1. `~/.hermes/.env` — Primary config +2. `~/.hermes/mem0-local.json` — Optional overrides + +**Required env vars:** +- `MEM0_BASE_URL` — Mem0 server URL (default: `http://localhost:8000`) +- `MEM0_USER_ID` — User identifier (default: `hermes-user`) + +**Optional env vars:** +- `MEM0_AGENT_ID` — Agent identifier (default: `hermes`) +- `MEM0_PREFETCH_LIMIT` — Max memories to prefetch (default: `3`) +- `MEM0_PREFETCH_SCORE_THRESHOLD` — Min similarity % (default: `60`) + +## Architecture + +**Memory injection flow:** +1. `queue_prefetch()` — Spawns background thread on user message +2. `prefetch()` — Returns cached result next turn +3. `pre_llm_call` hook — Sync prefetch for immediate injection (fallback context) +4. `sync_turn()` — Non-blocking server-side fact extraction + +**Circuit breaker:** 5 consecutive failures → 120s cooldown. + +**Dual-context registration:** +- `register_memory_provider()` — When installed in `plugins/memory/` +- `register_tool()` + `pre_llm_call` hook — When installed in `~/.hermes/plugins/` + +## Tools + +| Tool | Purpose | +|------|---------| +| `mem0_profile` | Get all stored memories | +| `mem0_search` | Semantic search with optional reranking | +| `mem0_conclude` | Store fact verbatim | +| `mem0_delete` | Delete memory by ID | + +## Dependencies + +- `requests` (via `pip_dependencies` in `plugin.yaml`) +- Hermes gateway with memory provider support +- Self-hosted Mem0 server (Docker image: `mem0ai/mem0:latest`) diff --git a/README.md b/README.md index 0e0660e..1df98a0 100644 --- a/README.md +++ b/README.md @@ -42,10 +42,7 @@ Self-hosted Mem0 memory provider for Hermes-Agent. Provides semantic memory sear curl http://localhost:8000/health ``` - Your setup uses port 8889: - ```bash - curl http://10.0.0.150:8889/health - ``` + Adjust the URL/port as needed for your setup. ## Installation @@ -98,35 +95,30 @@ Set in `~/.hermes/.env`: | `MEM0_BASE_URL` | Local Mem0 server URL | `http://localhost:8000` | | `MEM0_USER_ID` | User identifier | `hermes-user` | | `MEM0_AGENT_ID` | Agent identifier | `hermes` | +| `MEM0_PREFETCH_LIMIT` | Max memories to prefetch before LLM call | `3` | +| `MEM0_PREFETCH_SCORE_THRESHOLD` | Min similarity score % to include memory (0-100) | `60` | Example: -```env -MEM0_BASE_URL=http://10.0.0.150:8889 -MEM0_USER_ID=henry_hofmann -MEM0_AGENT_ID=hermes -``` + ```env + MEM0_BASE_URL=http://localhost:8000 + MEM0_USER_ID=my-user + MEM0_AGENT_ID=hermes + MEM0_PREFETCH_LIMIT=3 + MEM0_PREFETCH_SCORE_THRESHOLD=60 + ``` ### Method 2: Config File (Optional Overrides) Create `~/.hermes/mem0-local.json` to override specific settings: ```json { - "base_url": "http://10.0.0.150:8889", - "user_id": "henry_hofmann", + "base_url": "http://localhost:8000", + "user_id": "my-user", "agent_id": "hermes", "rerank": true, - "timeout": 10.0 -} -``` - -Example for your setup: -```json -{ - "base_url": "http://10.0.0.150:8889", - "user_id": "henry_hofmann", - "agent_id": "hermes", - "rerank": true, - "timeout": 10.0 + "timeout": 10.0, + "prefetch_limit": 3, + "prefetch_score_threshold": 60 } ``` @@ -218,7 +210,7 @@ After 5 consecutive API failures, the plugin pauses requests for 120 seconds to ### Connection issues -If your Mem0 server is on a different machine (like your 10.0.0.150): +If your Mem0 server is on a different machine: - Ensure firewall allows connections on port 8889 - Verify the server binds to 0.0.0.0, not just localhost - Check network routing between Hermes-Agent and Mem0 server diff --git a/client.py b/client.py index 31fe6f1..cde4c10 100644 --- a/client.py +++ b/client.py @@ -1,6 +1,6 @@ """Local Mem0 server HTTP client. -Based on OpenAPI spec from http://10.0.0.150:8889/openapi.json +Based on Mem0 server OpenAPI specification. Endpoints: - POST /add - Add memory