The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Agent Memory OS listing page.
English · 繁體中文
A local-first memory system for AI-agent teams — not just giving one agent a memory, but a shared memory fabric for a fleet of agents working together: private, team, and project-scoped memories behind a hard ACL, associative recall, and federated sync that keeps a mesh of nodes (and their org structure) in agreement. One SQLite file, zero required dependencies, Apache-2.0.
Why · Compare · Install · Quickstart · Features · Federation · Web UI · User Guide
The built-in web console: token-usage by agent/team/project, memory browse, and the ACL-safe association graph.
Real work happens in teams of agents — a project might mix Claude Code, Codex, OpenClaw, and several Hermes profiles, across multiple teams and projects, on one machine or many. They need to share the right knowledge with the right teammates and keep private what should stay private:
team:<id> memory; a project (a subset of the team) sees project:<id> memory; nothing leaks across the boundary. Membership is first-class and manageable, and drives the ACL.project:<id> means the same thing everywhere.pip install and go.team:<id> memory reaches the whole team, project:<id> memory only that project — a hard ACL, managed in the console/CLI/API. Removing a member re-scopes recall instantly; deleting a scope revokes its memory.shared/full/team:/project:) is an enforced authorization scope: a peer can only assert membership within its own scope and can only shrink a memory's visibility, never widen it — no cross-scope escalation from a bundle.context_pack_report() explains every include/exclude decision).CONFLICT markers), and reserved budget for core memories.memory_links graph lets related memories surface even when they share no query terms; traversal is ACL-safe (invisible nodes are untraversable).record_recall, or auto_reinforce=True on context packs); unhelpful recalls weaken links and confidence (helpful=False).procedure, a companion on preference); profiles persist in the database and re-weight ranking only, never bypassing ACL.consolidate() pass that merges duplicates and synthesizes strongly co-recalled clusters into concept memories.Most agent-memory systems optimize for LLM-driven extraction at hosted scale. AgentMemoryOS optimizes for a different point: local-first, team-scoped, and federated — memory you run yourself, shared across a fleet under a hard ACL. This is a positioning comparison (architecture, not a benchmark); verify each row against the projects' current docs.
| AgentMemoryOS | Mem0 | Zep / Graphiti | |
|---|---|---|---|
| Run it | One SQLite file, pip install | Self-host (configure LLM + vector DB) or hosted | Zep Cloud, or self-host Graphiti on Neo4j/FalkorDB |
| Core needs an LLM | No (FTS5 + optional local vectors) | Yes (LLM extraction, e.g. gpt-5-mini) | Yes (LLM builds the temporal graph) |
| External services | None required | LLM API + vector store | Graph DB + LLM + embeddings (3+ systems to self-host) |
| Scope / ACL model | Private / agent / team / project / global — hard gate before ranking | Per user / agent / session id | Per user / session graph |
| Cross-node federation | Yes — memories and org structure converge; revocation propagates | Centralized store | Centralized (Cloud or your graph DB) |
| Built-in MCP server | Yes | Via SDK | Via SDK |
| License / self-host | Apache-2.0, fully OSS | OSS core; graph & advanced tiers paid | Community Edition deprecated; self-host = raw Graphiti |
Mem0 and Zep are strong at LLM-based extraction and managed-scale retrieval — things AgentMemoryOS deliberately doesn't do. Reach for AgentMemoryOS when you want a dependency-light memory you own, shared correctly across a team of agents, that keeps working offline and syncs on your terms.
Or pick pieces: agent-memory-os (core, zero dependencies), [api] (Web UI), [mcp] (MCP server), [semantic] (turbovec vector recall).
Docker: the prebuilt multi-arch image is the complete AgentMemoryOS (web console + MCP server + CLI); the first argument picks the mode:
Or docker compose up -d. Console at http://localhost:8000, memories persist in a volume. See the Docker guide (Docker Hub image + a two-node sync mesh).
Requires Python 3.11+ with SQLite FTS5 (included in standard CPython builds).
After installing, run two commands:
The token is stored at <home>/web_token (mode 600); agent-memory-web picks
it up automatically and the console prompts for it on first use. Manage it
later with agent-memory token show|rotate|disable. Two narrower tiers exist:
--readonly (GET-only) and --sync (federation routes only — hand this to a
peer instead of the admin token).
Prefer a runnable script?
examples/team_memory.pyshows three agents sharing one store under a hard ACL in ~40 lines —python examples/team_memory.py.
Design invariants:
memories table is the single source of truth; FTS/vector indexes are disposable and rebuildable (rebuild_indexes()).memory_links) are authoritative data, survive index rebuilds, decay when unused, and never let an invisible memory bridge two visible ones.See SPEC.md for the full contract.
AgentMemoryOS uses two storage layers with strictly different authority:
memories.db file.[full] / [semantic]) is the semantic vector
engine: an in-memory quantized index that recalls memories by meaning rather
than keywords. It is deliberately disposable — it returns candidate
memory_ids and scores only; every candidate rejoins SQLite and passes the
ACL/expiry hard gates before its content can be used, and the index can be
dropped and rebuilt at any time without touching the truth store.Semantic recall works out of the box:
semantic="auto" wires in a self-syncing turbovec index over a built-in
deterministic hashing embedder (no model downloads; typo- and
morphology-tolerant lexical vectors). The index rebuilds itself whenever the
memories table changes and degrades silently to lexical + resonance recall
when the backend isn't installed. For deeper semantics, plug any embedding
model into TurbovecSemanticCandidateProvider.from_vectors(...) with your
own embed_query. agent-memory doctor confirms the backend is importable.
Archived memories leave recall entirely but stay restorable (Web UI → Tools →
Retention & archive, or POST /api/archive/{id}/restore). Pinned and
authority-track memories are never archived by decay. Databases self-migrate
through a versioned, forward-only migration table (agent-memory check
reports the schema version).
Backups use SQLite's online backup API, so they are consistent even while
agents are writing. --keep N rotates out older backups in the same name
series (and can never delete the live database). Disposable indexes rebuild
automatically after a restore.
Upgrades & health. agent-memory update checks PyPI, upgrades, and restarts
the running console; --check reports only. Point health checks at GET /healthz
(200/503) and a Prometheus scraper at GET /metrics.
One project can mix Claude Code, Codex, OpenClaw, and multiple Hermes
profiles against a single store. Register each agent with its teams —
in the console's Agents tab or via API — and team members automatically
see team:<project> memories with no extra wiring:
Or declare the whole fleet as code — <home>/agents.toml is re-applied
every time the store opens (file-listed agents are file-authoritative;
manually registered agents are untouched):
Each MCP server declares its identity with AGENT_MEMORY_AGENT_ID, so
memories default to that agent as owner and every recall carries its team
ACL. Ship one project's shared memory to another host with
agent-memory sync export apollo.jsonl --team apollo.
Peers are stored per-home; sync auto (or the console's "Sync mesh now")
converges bidirectionally with each peer — last-writer-wins on memories and
profiles, strongest-wins on links — and unreachable peers fail individually,
never fatally. File bundles (sync export/import) cover air-gapped moves.
Pair with agent-memory service install and a cron/timer entry for
continuous mesh sync.
Encrypt the wire. Give every node the same mesh key and sync bundles are encrypted app-layer (Fernet), so memory content stays confidential even over plain HTTP or through a proxy — the key is a separate secret that never travels on the wire:
The sync-scoped token still rides in the Authorization header, so prefer
https:// peer URLs (certificate-verified) for non-localhost peers to protect
the token too. See SECURITY.md for the exact guarantees.
Step-by-step guides for wiring AgentMemoryOS into common agents — click a tile:
Hermes Agent gets a native memory-provider plugin (not just MCP):
pip install agent-memory-os && agent-memory hermes install, then pick
agent-memory-os in hermes memory setup — recall is injected every turn and
amos_* tools carry the team/project ACL. No API key, no LLM. See the
Hermes guide.
Any MCP-capable agent can use the same pattern: run
python -m agent_memory_os.mcp_server as a stdio MCP server pointing at a
shared AGENT_MEMORY_HOME.
Wire it into Claude Code in one line (set the agent identity so memories are owned correctly):
Tools (12): memory_add (with a share arg for team/project/global), memory_search, memory_context_pack, memory_orchestrate_context, memory_link, memory_update, memory_share, memory_recall_feedback, memory_consolidate, memory_offload_context, memory_reload_context, memory_snapshot_diff. Set AGENT_MEMORY_AGENT_ID so each agent acts under its own identity — and two agents pointed at the same home instantly share team:/project: memories.
The console speaks English, 繁體中文, 简体中文, 日本語, and 한국어 — auto-detected from the browser, switchable in the header. It ships with a stats dashboard (scope/type/relation breakdowns, 14-day activity, most-recalled memories), search and recency browsing (memory cards with in-place editing, feedback, links, and delete actions), an interactive association-graph view, a context-pack preview with per-memory decisions, and add/link/consolidate tools — all driven by a global "acting as" identity.
Endpoints: health/stats/dashboard/integrity · memories CRUD + browse · search / context-pack / orchestrate · links + graph · recall feedback · share / revoke / audit · consolidate / retention / archive+restore · agents registry · peers + mesh sync · bundle export/import · owner list / reassign / purge · fleet status/trigger (Ed25519-signed cross-node ops). Full table in the User Guide.
Search, browse, graph, recall feedback, and context-pack accept requester_agent_id and enforce the same ACL hard gates as the SDK. Requests without a requester run in unrestricted admin view — bind to localhost only, or require a bearer token on every API route with --token <secret> (or AGENT_MEMORY_WEB_TOKEN).
Note: keep the --home database on a local disk. Network filesystems (NFS/SMB) can fail SQLite FTS5 schema creation with database is locked.
install registers the console with the native service manager so it starts
automatically at login and restarts on failure — launchd LaunchAgent on
macOS, a systemd user unit on Linux, a Task Scheduler logon task on Windows.
No admin rights required; the service runs the exact Python environment it
was installed from, and logs to <home>/logs/web.log. On Linux, run
loginctl enable-linger $USER if it must start at boot without a login.
Add --dry-run to preview the actions. CI runs the full test suite on
Ubuntu, macOS, and Windows across Python 3.11–3.13.
Stable — 1.x. The contracts above are implemented, covered by the test
suite (300+ tests across a 3-OS CI matrix, plus a migration upgrade-path job),
and audited by repeated fan-out code + security reviews (reports under
docs/reviews/). Performance is verified at 10k memories (add
0.17 ms, search <1 ms, context-pack 7.8 ms). The database self-migrates forward;
see the CHANGELOG for what each release added.
docker/docker compose startup, config via env, two-node sync meshscripts/validation_run.py)