{"id":49348760,"url":"https://github.com/uranid/mnem","last_synced_at":"2026-05-03T15:01:57.837Z","repository":{"id":354066849,"uuid":"1221867246","full_name":"Uranid/mnem","owner":"Uranid","description":"Versioned, mergeable agent memory with hybrid GraphRAG retrieval. Embed in Rust or Python, or talk to it over MCP. Runs locally.","archived":false,"fork":false,"pushed_at":"2026-05-01T04:30:53.000Z","size":1453,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-05-01T13:29:09.272Z","etag":null,"topics":["agent-memory","graphrag","knowledge-graph","local-first","mcp","rust","vector-search","version-control"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Uranid.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":null},"created_at":"2026-04-26T19:28:44.000Z","updated_at":"2026-05-01T04:30:56.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Uranid/mnem","commit_stats":null,"previous_names":["uranid/mnem"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/Uranid/mnem","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Uranid%2Fmnem","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Uranid%2Fmnem/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Uranid%2Fmnem/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Uranid%2Fmnem/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Uranid","download_url":"https://codeload.github.com/Uranid/mnem/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Uranid%2Fmnem/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32536582,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-02T12:25:33.646Z","status":"ssl_error","status_checked_at":"2026-05-02T12:24:51.733Z","response_time":132,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent-memory","graphrag","knowledge-graph","local-first","mcp","rust","vector-search","version-control"],"created_at":"2026-04-27T09:00:57.165Z","updated_at":"2026-05-02T14:01:01.268Z","avatar_url":"https://github.com/Uranid.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"assets/logo/mnem-logo.svg\" alt=\"mnem logo\" width=\"140\" height=\"140\" /\u003e\n\n# mnem\n\n**Git for knowledge graphs.** Versioned, mergeable agent memory with\nhybrid GraphRAG retrieval. Embed in Rust or Python, run the CLI, or plug\ninto any MCP client. Local-first. Apache-2.0.\n\n[![License: Apache-2.0](https://img.shields.io/badge/license-Apache--2.0-blue?style=flat)](LICENSE)\n[![CI](https://github.com/Uranid/mnem/actions/workflows/ci.yml/badge.svg)](https://github.com/Uranid/mnem/actions/workflows/ci.yml)\n[![crates.io](https://img.shields.io/crates/v/mnem-cli.svg?style=flat)](https://crates.io/crates/mnem-cli)\n[![docs.rs](https://img.shields.io/docsrs/mnem-core?style=flat\u0026label=docs.rs)](https://docs.rs/mnem-core)\n[![MSRV 1.95](https://img.shields.io/badge/MSRV-1.95-orange?style=flat)](rust-toolchain.toml)\n[![Runs on Linux macOS Windows WASM](https://img.shields.io/badge/runs%20on-linux%20%7C%20macos%20%7C%20windows%20%7C%20wasm-2ea44f?style=flat)](#install)\n\n\u003c/div\u003e\n\n---\n\n## What it is\n\nmnem is a versioned, content-addressed knowledge graph for AI agent\nmemory. Think Git, but the diff is over a graph and the merge is over\nembeddings. Every fact has a cryptographic identity, every retrieve\nfuses vector + sparse + graph signals, and every response tells you\nexactly what got dropped at your token budget.\n\n---\n\n## Quickstart\n\n```bash\ncargo install --locked mnem-cli --features bundled-embedder\n\nmkdir my-graph \u0026\u0026 cd my-graph\nmnem init\nmnem ingest README.md\nmnem retrieve \"what does this project do\" --top-k 5\n```\n\n`--features bundled-embedder` ships the in-process ONNX MiniLM-L6-v2\nso `mnem retrieve` works zero-config. Drop the flag if you want to\nconfigure your own embedder (Ollama / OpenAI / Cohere) via\n`.mnem/config.toml`. GPU-accelerated variants\n(`bundled-embedder-cuda`, `bundled-embedder-directml`) live under\n[Install](#install).\n\nFive minutes from zero. See [`docs/src/quickstart.md`](docs/src/quickstart.md) for the longer walkthrough,\nor jump to [Install](#install) for your platform.\n\n---\n\n## `mnem integrate` (interactive setup wizard)\n\n```bash\nmnem integrate\n```\n\nThe shortest path from a fresh checkout to a working agent. Detects\nyour environment, prompts for embedder + LLM choice (ONNX bundled /\nOllama / OpenAI / Cohere / mock), writes `.mnem/config.toml`,\nsmoke-tests the result, and offers to wire mnem into every supported\nclient in one pass. Around two minutes end to end.\n\nTargets: Claude Desktop, Claude Code, Cursor, Continue, Zed, custom MCP\nclients, raw HTTP, raw Python.\n\n---\n\n## Wire into any MCP client\n\n```bash\nmnem mcp install     # auto-detects + writes the entry\n```\n\nAuto-detects and configures: **Claude Desktop**, **Claude Code**,\n**Cursor**, **Continue**, **Zed**. Any other MCP-aware host works via a\nhand-edited `mcpServers` entry pointing at the `mnem mcp serve` stdio\ncommand (see [`docs/src/mcp.md`](docs/src/mcp.md)).\n\nRestart your client. The agent gets `mnem_retrieve`, `mnem_ingest`,\n`mnem_traverse`, `mnem_stats`, `mnem_remove` (and 6 more) as native\ntools. No extra daemon, no port to manage.\n\n---\n\n## Commands\n\n| Command | What it does |\n|---------|-------------|\n| `mnem init` | create a new graph in the current dir |\n| `mnem ingest \u003cfile\u003e` | add nodes from a file (md / pdf / chat-json) |\n| `mnem retrieve \u003cquery\u003e` | hybrid retrieval (vector + sparse + graph) |\n| `mnem mcp install` | wire as MCP server in Claude / Cursor / Zed |\n| `mnem integrate` | **interactive setup wizard** for any client / provider |\n| `mnem doctor` | probe embedder + store + config; first-run sanity |\n| `mnem stats` | nodes, edges, refs, embedder health, repo size |\n| `mnem log` / `diff` / `branch` / `merge` | git-style history ops over the graph |\n| `mnem ref` / `cat-file` / `blame` | inspect refs and individual objects |\n| `mnem export` / `import` | CAR archives for ship-and-load |\n| `mnem-http --bind addr` | start the HTTP JSON server on `addr` |\n\n`mnem integrate` is the shortest path to a working agent: detects your\nenvironment, prompts for embedder + LLM choice, writes config,\nsmoke-tests the result. Around two minutes end to end.\n\nFull reference: [`docs/src/cli.md`](docs/src/cli.md).\n\n---\n\n## Install\n\n\u003e The `bundled-embedder` Cargo feature ships the in-process ONNX\n\u003e MiniLM-L6-v2 (no Ollama, no API keys). Recommended for first-run.\n\u003e Drop the flag to leave embedder configuration to your own\n\u003e `.mnem/config.toml` (`provider = ollama|openai|cohere|...`).\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003emacOS\u003c/b\u003e\u003c/summary\u003e\n\n```bash\n# Recommended: Cargo with bundled embedder\ncargo install --locked mnem-cli --features bundled-embedder\n\n# Homebrew (0.1.0+)\nbrew install mnem\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eLinux\u003c/b\u003e\u003c/summary\u003e\n\n```bash\n# Any distro: Cargo with bundled embedder\ncargo install --locked mnem-cli --features bundled-embedder\n\n# CUDA-accelerated embedder (NVIDIA GPU)\ncargo install --locked mnem-cli --features bundled-embedder-cuda\n\n# Distro packages (v1.x)\nyay -S mnem                       # Arch (AUR)\nnix-env -iA nixpkgs.mnem          # Nixpkgs\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eWindows\u003c/b\u003e\u003c/summary\u003e\n\n```powershell\n# Recommended: Cargo with bundled embedder\ncargo install --locked mnem-cli --features bundled-embedder\n\n# DirectML-accelerated embedder (any GPU vendor on Windows)\ncargo install --locked mnem-cli --features bundled-embedder-directml\n\n# Package managers (v1.x)\nwinget install mnem\nscoop install mnem\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003ePython (PyPI)\u003c/b\u003e\u003c/summary\u003e\n\n```bash\npip install mnem-cli\nmnem --version\n```\n\nShips the `mnem` binary as a manylinux / macOS / Windows wheel with\nthe bundled embedder pre-baked. No Cargo feature flag needed; the\nPyPI build always includes it.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eDocker\u003c/b\u003e\u003c/summary\u003e\n\n```bash\ndocker run --rm -p 9876:9876 ghcr.io/uranid/mnem-http:latest\n```\n\nThe image is built with `FEATURES=onnx-bundled`; the bundled embedder\nis always present in Docker.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eFrom source\u003c/b\u003e\u003c/summary\u003e\n\n```bash\ngit clone https://github.com/Uranid/mnem\ncd mnem\n\n# Build the CLI with bundled embedder (recommended)\ncargo build --release --locked -p mnem-cli --features bundled-embedder\n\n# Or build without (bring your own embedder via config.toml)\ncargo build --release --locked -p mnem-cli\n\n./target/release/mnem --version\n```\n\nRequires Rust 1.95+.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003eWASM (in-browser)\u003c/b\u003e\u003c/summary\u003e\n\n```bash\ncargo build --release --target wasm32-unknown-unknown -p mnem-core\n```\n\n`mnem-core` has no tokio, no filesystem, no network. Same retrieval\nlogic runs unchanged in browsers and edge workers. The bundled\nembedder is NOT WASM-compatible (ort uses native libs); supply\nembeddings from the host.\n\n\u003c/details\u003e\n\n### Verify\n\n```bash\nmnem --version\nmnem doctor\n```\n\n`mnem doctor` probes embedder + store + config and prints a\ngreen/yellow/red checklist. Useful first command after install.\n\n---\n\n## What you get\n\nLegend: $\\color{gold}{\\textbf{(unique)}}$ = mnem-original; not shipping\nin any other agent-memory system today. $\\color{orange}{\\textbf{(rare)}}$\n= exists in 1-2 peers, often gated behind paid tiers.\n$\\color{gray}{\\textbf{(standard)}}$ = table-stakes done well.\n\n1. **Plug-and-play** $\\color{orange}{\\textbf{(rare)}}$. Bundled ONNX MiniLM-L6-v2 runs in-process. No Ollama, no API keys, no cold-start network call. `mnem init` and you're retrieving. mem0 + Graphiti both require an external LLM endpoint at ingest. → [Install](docs/src/install.md)\n\n2. **Swappable providers** $\\color{orange}{\\textbf{(rare)}}$. Embedder, sparse encoder, reranker, and LLM all set via config strings. Switch local ONNX to hosted Cohere with one flag. No fork, no rebuild. Most peers ship single-path stacks; provider swap is architectural here. → [Embedding providers](docs/src/guides/embed-providers.md)\n\n3. **Hybrid GraphRAG retrieval** $\\color{gray}{\\textbf{(standard, done well)}}$. Vector (HNSW) + sparse (BM25 / SPLADE) + graph traversal, fused via RRF. GraphRAG built in and optional → on for multi-hop, off when dense saturates. → [Retrieval architecture](docs/src/architecture/retrieval.md)\n\n4. **Token-budget transparency** $\\color{gold}{\\textbf{(unique)}}$. Every retrieve emits `tokens_used`, `candidates_seen`, `dropped` counters. No silent truncation. **No other agent-memory system exposes this** as first-class response fields. → [Observability](docs/src/architecture/retrieval.md)\n\n5. **Content-addressed objects** $\\color{gold}{\\textbf{(unique)}}$. Every node / tree / sidecar / commit has a CID derived from canonical DAG-CBOR + BLAKE3. Identical content collapses across machines. Determinism + replay become real, not a slogan. Peers use opaque UUIDs. → [Core concepts](docs/src/core-concepts.md)\n\n6. **Versioned + 3-way mergeable** $\\color{gold}{\\textbf{(unique)}}$. Commits, branches, diff, log, **three-way merge**, signed Ed25519 history. Two agents writing the same scope offline reconcile by graph + embedding merge → not \"last write wins\". → [Core concepts](docs/src/core-concepts.md)\n\n7. **Deterministic ingest** $\\color{orange}{\\textbf{(rare)}}$. No LLM at ingest. parse + chunk + extract is statistical (KeyBERT optional), so same bytes in → same CIDs out. Audit-friendly, fuzz-tested, byte-identical across machines. → [Ingest pipeline](docs/src/guides/ingest.md)\n\n8. **Reproducible benchmarks** $\\color{orange}{\\textbf{(rare)}}$. Matches MemPalace on LongMemEval (R@5 0.966), +0.218 R@5 on LoCoMo, +0.047 on ConvoMem, +0.120 on MemBench under the same embedder. Numbers ship with the harness. → [Benchmarks](benchmarks/README.md)\n\n9. **Single binary** $\\color{orange}{\\textbf{(rare)}}$. ~40 MB Docker image. Embedded redb store. No daemon, no cloud, no account. Runs offline. → [Architecture overview](docs/src/architecture/overview.md)\n\n10. **WASM-clean core** $\\color{gold}{\\textbf{(unique among peers)}}$. `mnem-core` has no tokio, no filesystem, no network. Same retrieval logic compiles unchanged to `wasm32` → runs in Chrome, on Cloudflare Workers, on Lambda cold-start. Graphiti + mem0 are Python + external DB stacks; they cannot ship to the edge. → [Architecture overview](docs/src/architecture/overview.md)\n\n11. **Four surfaces, one core** $\\color{orange}{\\textbf{(rare)}}$. CLI, HTTP, MCP, and Python all wrap the same Rust engine. `mnem mcp install` and Claude Desktop has it natively. → [CLI reference](docs/src/cli.md) | [MCP](docs/src/mcp.md)\n\n12. **Skills as graphs, not markdown** $\\color{gold}{\\textbf{(unique angle)}}$. Today, agent skills live in flat `.md` files → downloaded, pasted into prompts, hand-edited, never queried. mnem promotes them to a versioned, queryable, mergeable graph. Export your graph, import someone else's, diff the two, merge the parts you want. → [Agent memory guide](docs/src/guides/agent-memory.md)\n\n13. **Property + fuzz tests** $\\color{orange}{\\textbf{(rare)}}$. Parsers are property-tested + fuzz-harnessed; CAR round-trip and merge-commit are byte-identical. Trust signal usually only seen at the infra-DB tier.\n\n## GraphRAG\n\nmnem ships GraphRAG built in. One knob per stage, opt-in per query,\nnever required. Dense retrieval saturates first; turn graph stages on\nwhen multi-hop, cross-document, or compositional queries surface.\n\n### Stages and flags\n\n| Stage | Flag | What it does |\n|-------|------|------|\n| **Vector lane** | always on | HNSW over per-commit dense embeddings (default 384-d MiniLM). |\n| **Sparse lane** | config-driven | BM25 + SPLADE-onnx, fused with vector via Reciprocal Rank Fusion. Toggled by `[sparse]` block in `config.toml`. |\n| **Vector candidate pool** | `--vector-cap \u003cN\u003e` | Lift the dense pool size from default 256. Higher = better long-tail recall, +cost. |\n| **Top-K** | `--top-k \u003cN\u003e` | Final returned set (default 10). |\n| **Label scope** | `--label \u003cstr\u003e` | Confine retrieval to a sub-graph (per-user, per-conversation, per-tenant). |\n| **Graph expansion** | `--graph-expand \u003cN\u003e` | Add N neighbours of top-K seeds via authored edges. Audit-recommended default `20` when graph is on. |\n| **Graph mode** | `--graph-mode \u003cdecay\\|ppr\u003e` | `decay` (default) = exponential weight by hop. `ppr` = Personalised PageRank over the hybrid adjacency index, paper-grade scoring for multi-hop. |\n| **Community filter** | `--community-filter` | Run Leiden community detection; drop low-coverage communities before fusion. Implicit `--community-min-coverage 0.1`. |\n| **KeyBERT extraction** | `--extractor keybert` | Ingest-time keyphrase enrichment. Strengthens sparse + community signals. |\n| **Summarisation** | `--summarize` | Centroid + MMR summary of the top-K, with diversity. |\n| **Cross-encoder rerank** | `--rerank \u003cprovider:model\u003e` | Post-fusion reorder. Supports `cohere:rerank-english-v3.0`, `voyage:rerank-1`, local. |\n| **Hybrid v4 boost** | `--hybrid-v4-boost` | Bench-harness BM25-style score boost. Mirrors MemPalace's `hybrid_v4` for apple-to-apple comparisons. NOT a default for production. |\n\n### Quick examples\n\n```bash\n# Dense baseline (no graph, no fancy stuff)\nmnem retrieve \"what does this project do\" --top-k 5\n\n# Add multi-hop graph traversal\nmnem retrieve \"...\" --graph-expand 20\n\n# Full Palace-tier stack: graph-expand + community-filter + PPR + KeyBERT\nmnem retrieve \"...\" --graph-expand 20 --community-filter --graph-mode ppr --extractor keybert\n\n# Stack a cross-encoder reranker on top\nmnem retrieve \"...\" --graph-expand 20 --community-filter --rerank cohere:rerank-english-v3.0\n\n# Per-user scoping\nmnem retrieve \"...\" --label user-42 --graph-expand 20\n\n# Hybrid v4 boost (bench harness; mirrors MemPalace harness helper)\nmnem retrieve \"...\" --hybrid-v4-boost\n```\n\n### When to enable\n\n- **Single-document corpus, simple queries** → leave graph off, dense saturates\n- **Multi-hop / compositional questions** → `--graph-expand 20`\n- **Long history with cross-document references** → add `--community-filter`\n- **Recall ceiling needed** → stack `--rerank` on top\n- **Multi-tenant agent memory** → always `--label \u003ctenant\u003e`\n\n→ Full retrieval architecture: [`docs/src/architecture/retrieval.md`](docs/src/architecture/retrieval.md)\n→ Tuning playbook: [`docs/src/guides/retrieval-tuning.md`](docs/src/guides/retrieval-tuning.md)\n\n## Benchmarks\n\nONNX MiniLM-L6-v2 embedder, same bytes on every system. No LLM rerank.\nDense retrieval (vector + top-k); the LongMemEval Hybrid v4 row mirrors\nMemPalace's harness helper. Reproduce: `bash benchmarks/harness/run_bench.sh`.\n\n### vs MemPalace\n\n\u003e MemPalace's column carries their public headline numbers, **cross-verified**\n\u003e by running their adapter end-to-end under our harness. mnem's column comes\n\u003e from the same harness, same embedder bytes (ONNX MiniLM-L6-v2), same\n\u003e dataset hashes. Both columns are reproducible; raw artefacts in\n\u003e [`benchmarks/proofs/v0.1.0/`](benchmarks/proofs/v0.1.0/).\n\n| Benchmark | Split | Metric | MP | mnem 0.1.0 | Δ |\n|-----------|-------|--------|----|-----------|---|\n| LongMemEval | 500 Q | R@5 session | 0.966 | $\\color{lightgreen}{\\textbf{0.966}}$ | ±0 |\n| LongMemEval | 500 Q | R@10 session | 0.982 | $\\color{lightgreen}{\\textbf{0.982}}$ | ±0 |\n| LoCoMo | 1986 Q | R@5 session | 0.508 | $\\color{lightgreen}{\\textbf{0.726}}$ | **+0.218** |\n| LoCoMo | 1986 Q | R@10 session | 0.603 | $\\color{lightgreen}{\\textbf{0.855}}$ | **+0.252** |\n| ConvoMem | 250 (5x50) | avg recall | 0.929 | $\\color{lightgreen}{\\textbf{0.976}}$ | **+0.047** |\n| MemBench | simple/roles 100 | R@5 | 0.840 | $\\color{lightgreen}{\\textbf{0.960}}$ | **+0.120** |\n| MemBench | highlevel/movie 100 | R@5 | 0.950 | $\\color{lightgreen}{\\textbf{1.000}}$ | **+0.050** |\n| LongMemEval | 500 Q hybrid-v4 | R@5 session | 0.982 | $\\color{salmon}{0.976}$ | -0.006 |\n\n### vs mem0\n\n\u003e mem0 doesn't publish recall@K headlines on these datasets, so both\n\u003e columns are our reproductions: we ran mem0's adapter end-to-end under\n\u003e the same harness, same embedder bytes (ONNX MiniLM-L6-v2), and the\n\u003e same per-item scoping (`infer=False` + `user_id`-per-item) documented\n\u003e in [`benchmarks/results/methodology.md`](benchmarks/results/methodology.md).\n\u003e Both columns reproducible; raw artefacts in\n\u003e [`benchmarks/proofs/v0.1.0/`](benchmarks/proofs/v0.1.0/).\n\n| Benchmark | Split | Metric | mem0 | mnem 0.1.0 | Δ |\n|-----------|-------|--------|------|-----------|---|\n| LongMemEval | 500 Q | R@5 session | 0.946 | $\\color{lightgreen}{\\textbf{0.966}}$ | **+0.020** |\n| LongMemEval | 500 Q | R@10 session | 0.962 | $\\color{lightgreen}{\\textbf{0.982}}$ | **+0.020** |\n| LoCoMo | 1986 Q | R@5 session | 0.466 | $\\color{lightgreen}{\\textbf{0.726}}$ | **+0.260** |\n| LoCoMo | 1986 Q | R@10 session | 0.676 | $\\color{lightgreen}{\\textbf{0.855}}$ | **+0.179** |\n| ConvoMem | 250 (5x50) | avg recall | 0.558 | $\\color{lightgreen}{\\textbf{0.976}}$ | **+0.418** |\n| MemBench | simple/roles 100 | R@5 | 0.410 | $\\color{lightgreen}{\\textbf{0.960}}$ | **+0.550** |\n| MemBench | highlevel/movie 100 | R@5 | 0.970 | $\\color{lightgreen}{\\textbf{1.000}}$ | **+0.030** |\n| LongMemEval | 500 Q hybrid-v4 | R@5 session | 0.930 | $\\color{lightgreen}{\\textbf{0.976}}$ | **+0.046** |\n\n### Latency\n\n| Benchmark | mean retrieve | total wall (n questions) |\n|-----------|--------------:|-------------------------:|\n| LongMemEval 500 Q | 711 ms | 1127 s (~19 min) |\n| LongMemEval 500 Q hybrid-v4 | 729 ms | 1133 s (~19 min) |\n| LoCoMo 1986 Q | 333 ms | 720 s (~12 min) |\n| ConvoMem 250 (5x50) | 398 ms | 218 s (~4 min) |\n| MemBench simple/roles 100 | 1874 ms (e2e) | 187 s (~3 min) |\n| MemBench highlevel/movie 100 | 491 ms (e2e) | 49 s (~1 min) |\n\n`(e2e)` = end-to-end mean when the adapter doesn't expose phase timing.\n\n### Reproduce\n\n```bash\n# Cache datasets (one-time; 264 MB LongMemEval + 3 MB LoCoMo)\nmnem bench fetch longmemeval     # HuggingFace\nmnem bench fetch locomo          # GitHub raw\nmnem bench fetch                 # alternative: every shipped bench in one go\n\n# Run via interactive wizard or explicit args\nmnem bench                       # TUI; default selects v0.1.0 items\nmnem bench run --benches longmemeval --with mnem --limit 50 --non-interactive\nmnem bench results ./bench-out   # re-render RESULTS.md from prior run\n```\n\n`mnem bench` ships in 0.1.0 with the in-process mnem adapter +\nLongMemEval / LoCoMo scorers + real ONNX MiniLM-L6-v2 (50q canary\nlands R@5 = 0.92, close to the headline 0.966 on the full split).\nConvoMem, MemBench, hybrid-v4, and mem0 / MemPalace side-by-side\nadapters land in 0.2.0 (TUI lists them today behind `[0.2.0]` tags).\n\nFor the headline parity numbers above (full splits), the legacy\nBash harness remains the canonical reproduction path:\n\n```bash\nbash benchmarks/harness/run_bench.sh\n```\n\nMethodology, raw artifacts, per-bench breakdowns:\n[`benchmarks/`](benchmarks/) and [`docs/src/benchmarks/`](docs/src/benchmarks/).\nSee also [`docs/src/benchmarks/run-locally.md`](docs/src/benchmarks/run-locally.md)\nfor the `mnem bench` walkthrough.\n\n## Compared to others\n\n- [mnem vs Graphiti](docs/src/comparisons/graphiti.md) - bitemporal substrate, Neo4j-bound\n- [mnem vs mem0](docs/src/comparisons/mem0.md) - agent memory layer, OSS leader\n- [mnem vs MemPalace](docs/src/comparisons/mempalace.md) - methodology peer\n- [mnem vs Supermemory](docs/src/comparisons/supermemory.md) - closed-cloud incumbent\n- [mnem vs Cognee](docs/src/comparisons/cognee.md) - KG-for-agents alternative\n- [mnem vs Letta](docs/src/comparisons/letta.md) - agent-memory framework\n- [mnem vs graphify](docs/src/comparisons/graphify.md) - lightweight graph tool\n\nFull matrix: [`docs/src/comparisons/README.md`](docs/src/comparisons/README.md).\n\n## When NOT to use mnem\n\n- **You need transactional OLTP.** mnem is append-only with versioned\n  history; row-level UPDATE/DELETE semantics aren't the model.\n- **You need sub-50 ms cloud-scale retrieval at 10k+ QPS.** mnem is\n  local-first. Multi-region sharded retrieval is on the roadmap, not\n  in v1.\n\n\u003e Looking for hosted memory, multi-region replicas, shared graphs across\n\u003e teams, or a managed remote layer? A sibling project bringing those to\n\u003e mnem is in active development - watch this space.\n\n## Architecture\n\n15-crate Rust workspace. WASM-clean core, async/IO at the edges.\nPer-commit embedding sidecars; node identity is decoupled from the\nembedder. Three retrieval lanes (vector + sparse + graph) fused with RRF.\n\nFull overview: [`docs/src/architecture/overview.md`](docs/src/architecture/overview.md).\n\n## Documentation\n\n- [Quickstart](docs/src/quickstart.md) - five-minute walkthrough\n- [Install](docs/src/install.md) - per-platform install matrix\n- [CLI reference](docs/src/cli.md) - every subcommand and flag\n- [MCP server](docs/src/mcp.md) - tools exposed, client wiring\n- [Core concepts](docs/src/core-concepts.md) - CIDs, commits, labels\n- [Configuration](docs/src/configuration.md) - env vars, config.toml\n- [Architecture overview](docs/src/architecture/overview.md)\n- [Benchmarks methodology](docs/src/benchmarks/methodology.md)\n- [Reproduce benchmarks](docs/src/benchmarks/reproduce.md)\n- [Retrieval tuning](docs/src/guides/retrieval-tuning.md)\n- [Embedding providers](docs/src/guides/embed-providers.md)\n- [Migrations](docs/src/migrations/)\n\n## Crates\n\n| Crate | Role |\n|-------|------|\n| [`mnem-cli`](crates/mnem-cli) | `mnem` binary - one command for everything |\n| [`mnem-core`](crates/mnem-core) | graph model, retrieval, indexing, sidecars |\n| [`mnem-http`](crates/mnem-http) | HTTP JSON server |\n| [`mnem-mcp`](crates/mnem-mcp) | MCP server (stdio) |\n| [`mnem-py`](crates/mnem-py) | PyO3 Python bindings |\n| [`mnem-embed-providers`](crates/mnem-embed-providers) | ONNX bundled, Ollama, OpenAI, Cohere |\n| [`mnem-sparse-providers`](crates/mnem-sparse-providers) | BM25, SPLADE-onnx |\n| [`mnem-rerank-providers`](crates/mnem-rerank-providers) | Cohere, Voyage |\n| [`mnem-llm-providers`](crates/mnem-llm-providers) | OpenAI, Anthropic, Ollama |\n| [`mnem-ingest`](crates/mnem-ingest) | parse + chunk + extract pipeline |\n| [`mnem-graphrag`](crates/mnem-graphrag) | community summarisation, centroid + MMR |\n| [`mnem-ann`](crates/mnem-ann) | HNSW wrapper |\n| [`mnem-backend-redb`](crates/mnem-backend-redb) | redb-backed store |\n| [`mnem-transport`](crates/mnem-transport) | CAR codec + remote framing |\n\n## Contributing\n\nIssues and PRs welcome. Start here:\n\n- [`CONTRIBUTING.md`](CONTRIBUTING.md) - branch conventions, review etiquette, how to ship a PR\n- [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md) - rules of engagement (Contributor Covenant 2.1)\n- [`SECURITY.md`](SECURITY.md) - vulnerability disclosure policy\n\n## License\n\n[Apache-2.0](LICENSE). See [`NOTICE`](NOTICE) for third-party attributions.\n\n---\n\n⭐ **Find mnem useful?** A star is the strongest signal we get from a\nsatisfied builder - it helps the next agent developer find this repo\nwhen they're stuck on memory. We read every issue, every PR, every\nmention. Tell us what you built.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Furanid%2Fmnem","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Furanid%2Fmnem","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Furanid%2Fmnem/lists"}