Alternatives
mem-port vs mem0 vs Hermes Agent
Three open source projects people compare when they go looking for AI memory. They aren't the same shape: mem0 is a universal memory layer with a hosted option, Hermes Agent is a full self-improving agent that keeps its own agent memory, and mem-port is a local memory server that existing copilots share.
What it is
- mem-port
- An AI memory server. One local daemon holding a shared knowledge graph; it never calls a model itself.
- mem0
- An AI memory layer: SDK, self-hosted Docker server, and a managed cloud platform.
- Hermes Agent
- A full autonomous agent from Nous Research, with agent memory built in rather than offered separately.
External infrastructure
- mem-port
- None. One process, one embedded SurrealDB store on local disk.
- mem0
- Library mode runs a local Qdrant; the self-hosted server is a Docker stack with Postgres/pgvector, plus a graph store for relations.
- Hermes Agent
- None for its own store — SQLite on disk.
API key required
- mem-port
- No. Embeddings run on a local ONNX model, so semantic search works offline.
- mem0
- Yes by default — an LLM (OpenAI by default) extracts facts, though every component is overridable.
- Hermes Agent
- Yes. It's an agent, so it needs a model provider to run at all.
Storage engine
- mem-port
- Embedded SurrealDB (surrealkv://) — graph relations and vector search in the same process.
- mem0
- A vector store (Qdrant, pgvector and ~20 others), optionally paired with a separate graph store.
- Hermes Agent
- SQLite with FTS5, plus agent-curated facts in a MEMORY.md file.
Retrieval
- mem-port
- Semantic vector search over memories and skills, plus graph lookups by entity.
- mem0
- Vector similarity search over LLM-extracted facts.
- Hermes Agent
- Full-text search across past sessions, with session lineage preserved.
Shared across copilots
- mem-port
- Yes, natively. Any MCP client sending the same library-id header reads and writes one graph.
- mem0
- Yes, via the separate OpenMemory MCP server (Docker: API, Postgres, Qdrant).
- Hermes Agent
- hermes mcp serve exposes Hermes to MCP clients; the memory stays Hermes-owned.
Portability
- mem-port
- Namesake feature: export_library and import_library move a whole library as one .memport.json bundle.
- mem0
- Tied to whichever vector and graph stores you deployed, or to the hosted platform.
- Hermes Agent
- Copy the SQLite file; trajectory export targets training data rather than memory hand-off.
Reusable skills
- mem-port
- First-class: save_skill and search_skills, shared by every connected copilot.
- mem0
- Memories only — no separate skill primitive.
- Hermes Agent
- Yes — Hermes writes and improves its own skills, for Hermes.
License
- mem-port
- MIT
- mem0
- Apache-2.0
- Hermes Agent
- Open source (Nous Research)
Sourced from each project's public documentation in August 2026 — check each agent memory GitHub repo for current details. All three are open source and worth reading; pick the one whose shape matches your problem, not the longest column.
The status quo
mem-port vs AGENTS.md
Most projects already hold their agent context in a markdown file — AGENTS.md, CLAUDE.md, .cursorrules. It's the right tool for standing rules, and mem-port doesn't replace it. The difference isn't who writes it; agents generate and update these files routinely. It's that a file is one document, edited whole and loaded in full every session, while mem-port is a store that takes one record at a time and returns only the ones a question needs.
What it is
- mem-port
- A local daemon holding a knowledge graph, exposed to agents as MCP tools they call while they work.
- AGENTS.md
- A file checked into the repo, loaded into the model's context at the start of a session.
How it's written
- mem-port
- One record at a time. save_memory, save_episode, save_skill and save_adr are ordinary tool calls mid-task, and several copilots can write at once — they're talking to one daemon, not editing one file.
- AGENTS.md
- Whole-file edits. Agents write these files too, but adding one fact means rewriting the document, and two agents doing it at the same time overwrite each other.
How it's read
- mem-port
- On demand. Semantic search returns the records relevant to the question actually being asked.
- AGENTS.md
- All of it, every session. Nothing is selected, so context cost scales with the file's length.
As it grows
- mem-port
- Keeps growing. Retrieval stays scoped no matter how large the library gets.
- AGENTS.md
- Hits a ceiling. Past a point it's too long to prepend to every prompt, so it gets trimmed back rather than kept.
Structure
- mem-port
- Five record types — memories, episodes, entities, skills, ADRs — each answering a different retrieval question.
- AGENTS.md
- Free-form prose. A house rule, a past incident, and a design decision all look the same on the page.
History
- mem-port
- ADRs carry a lifecycle (proposed → accepted → superseded/deprecated) and a supersede chain; episodes record what happened.
- AGENTS.md
- Git history, if it's committed. The file itself only shows what's true right now.
Scope
- mem-port
- A library-id, not a directory. One library can span repos and machines; separate library-ids stay fully isolated.
- AGENTS.md
- The directory tree, plus a user-global file in some tools. Nothing crosses machines except through git.
Across copilots
- mem-port
- One graph. Any MCP client sending the same library-id reads and writes it — nothing to duplicate.
- AGENTS.md
- AGENTS.md is converging into a shared standard, but tools still read their own files as well, and every repo keeps its own copy to update.
Review
- mem-port
- No pull request gate — records land as agents write them. You prune with forget_memory, forget_skill, forget_adr.
- AGENTS.md
- Reviewable in a pull request like any other file, and that's a real advantage for rules the whole team is bound by.
Setup
- mem-port
- One command, npx @rsl-innovation/mem-port serve, plus a connect command per copilot. Node >= 22.
- AGENTS.md
- None. Create the file and commit it.
AGENTS.md and mem-port answer different questions, and running both is the expected setup. Keep the markdown file for the standing rules a repo should enforce on every session — conventions, commands, things a reviewer should be able to see in a diff. Use mem-port for what accumulates while you work: decisions and their supersede chains, what happened last time, procedures worth reusing — the context that outgrows a single document, and shouldn't have to be re-explained to the next copilot.