NORTHTEKDevs

GENOME

Community NORTHTEKDevs
Updated

Auditable memory layer for AI agents: zero-LLM-call local ingest (~10ms/msg, air-gapped), matches Mem0 on accuracy at ~1000x lower ingest cost, bi-temporal belief-state, MCP server. Honest LoCoMo/LongMemEval benchmarks. Open source (Apache-2.0).

GENOME

Open memory for AI agents. Same answer accuracy as Mem0 — but ~1,000× cheaper to store, runs fully offline, and keeps an auditable record.

License: Apache 2.0Python 3.11+

Most agent-memory tools (like Mem0) call an LLM on every message to decide what toremember. That's the slow, expensive part — and GENOME's bet is that you don't need it.GENOME just embeds each message locally: no LLM, no API, no network in the write path.

Benchmarked honestly on public datasets (LoCoMo, LongMemEval), GENOME answers just asaccurately as Mem0 — while storing memories for a tiny fraction of the cost and runningcompletely offline.

Honest up front: on answer accuracy, GENOME ties Mem0 — we do not claim to beatit there (two independent benchmark runs confirm parity). The advantage is cost, speed,offline operation, and a temporal/auditable record Mem0 can't produce.

GENOME vs Mem0 at a glance

GENOME Mem0
Answer accuracy (LoCoMo, LongMemEval) tied tied
LLM calls to store one message 0 1+
Write speed ~10 ms ~2,000 ms
Runs offline / air-gapped yes no (needs an LLM API)
Ingest cost (10k-user deployment) ~$190 / yr $159k–$1.6M / yr
"What was true in March?" (point-in-time) yes no
Deterministic, auditable memory yes no

Every number is measured within one harness — same responder, judge, embedder, and top-k;only the memory layer changes — with paired significance tests. Full detail and per-numberprovenance: benchmarks/RESULTS.md. Formatted report:benchmarks/GENOME-LoCoMo-Report.pdf.

Why it's ~1,000× cheaper: it never calls an LLM to remember

Storing one message costs one LLM call in Mem0, zero in GENOME (just a local embedding).That's not a benchmark you can argue with — it's arithmetic, and it holds no matter whichLLM you price it against. At 10,000 users × 50 messages/day (15M messages/month):

Model Mem0 uses to extract Mem0's yearly ingest bill GENOME
Claude Haiku $1,601,757 $190
gpt-4o-mini $238,596 $190
cheapest hosted model $159,064 $190

The gap survives the cheapest model and grows in production (Mem0 re-sends stored memoriesto the LLM as the store fills). Reproduce: python benchmarks/tco_project.py (no API key).

It runs air-gapped

GENOME's default embedder is local. We proved the write path is genuinely offline byblocking all network during writes — they still succeed:

  • ~10 ms/message, 0 network calls, 0 LLM calls (python benchmarks/local_writepath.py)
  • Mem0 can't do this — it needs an LLM API call to ingest.

That makes GENOME usable on-prem, in regulated environments, or fully offline. It's a yes/nocapability, not a price point.

How it works

  • Write: embed the message locally and store it. No LLM, no network. (~10 ms)
  • Read: vector search over your memories, with an optional local cross-encoder rerankerfor harder queries.
  • Optional bi-temporal layer: track how facts change over time and answer "what was trueat time T" — see below.

Install

Until the PyPI release lands, install from source:

pip install "git+https://github.com/NORTHTEKDevs/genome.git"

(pip install genome-memory is coming.) The default embedder is local(sentence-transformers/all-MiniLM-L6-v2) — no API key, works offline; the first rundownloads the ~90 MB model once. OpenAI embeddings are optional for higher-dimensional retrieval.

Quickstart (fully local, no API key)

from genome import Memory

mem = Memory(storage="genome.db")   # local embedder by default; ":memory:" for ephemeral

# Store a message -- embedded locally, no LLM call, no network
mem.add("Ada met Lin at the robotics summit in Berlin.", user_id="u1")
mem.add("They are collaborating on an open-source planning library.", user_id="u1")

# Retrieve the most relevant memories
for hit in mem.search("Where did Ada meet Lin?", user_id="u1", limit=5):
    print(f"{hit.score:.3f}  {hit.content}")

Memory mirrors Mem0's API (add / search / get / delete / reset) — a neardrop-in swap. To use OpenAI embeddings instead (set OPENAI_API_KEY):

from genome import Memory, EmbeddingProvider
mem = Memory(storage="genome.db",
             embedding_provider=EmbeddingProvider(model_name="openai:text-embedding-3-small"))

Use it as an MCP server (fully-local memory for any agent)

GENOME ships an MCP server, so any MCP client (Claude Desktop, Claude Code, Cursor, …) getspersistent cross-session memory that runs entirely on the local machine — no LLM calls,no API keys, no data leaves the box. Most memory MCPs can't say that.

Install with the mcp extra, then add it to your client's config:

pip install "genome-memory[mcp] @ git+https://github.com/NORTHTEKDevs/genome.git"
{
  "mcpServers": {
    "genome": { "command": "genome-mcp" }
  }
}

Tools the agent gets: remember (store a fact/preference, local + 0 LLM), recall(semantic search), forget (delete the memory matching a query), reset_memories(clear a user's memories). Memories persist in ~/.genome/memories.db (override with theGENOME_MCP_DB env var). Run standalone with genome-mcp or python -m genome.mcp.server.

The honest results

Same responder + judge + embedder for every system; only the memory layer changes.

What we measured Result Verdict
Answer accuracy, in-window (LoCoMo) GENOME 0.851 vs Mem0 0.855 (p > 0.23) Tied
Answer accuracy, harder bench (LongMemEval, n=90 & n=205) directionally ahead, not significant (p = 0.14–0.19) Tied
Accuracy when history overflows the context window +0.409 at 80× less context (p = 8e-10) Win
Cost to store a message 0 LLM calls vs 1+; 837–8,433× cheaper Win
Write path ~10 ms, air-gapped, 0 network calls Win
Point-in-time ("what was true at T") belief-state 0.870 vs Mem0 0.676 (synthetic data) Win, with caveat
Retrieval hit-rate with reranking improves hit@10 (up to 0.943); local + free Win

What we tested that didn't help (so you don't have to)

We publish our nulls — it's how you know the wins are real:

  • Synthesis / consolidation: accuracy-neutral at equal token budget (p = 0.86).
  • Hybrid (BM25 + dense) and graph retrieval: hybrid underperformed plain dense on LoCoMo;graph was not validated here.
  • Reranking's accuracy gain is embedder-dependent: it reliably improves retrievalhit-rate, but its effect on final answer accuracy depends on the embedder — treat it as aretrieval-quality tool, not a guaranteed accuracy win.

Bi-temporal memory: "what was true at time T"

GENOME can track how facts change over time and answer point-in-time questions — somethingoverwrite-based memory structurally can't do (it only keeps the latest value):

from genome.memory.belief import ingest_belief_turn, answer_belief_context

mem = Memory(storage="genome.db", llm_call=my_llm_fn)

# facts land at their DOMAIN time (parsed from the text), not wall-clock ingest time
ingest_belief_turn(mem, "In March 2024, Jordan moved to Seattle.", session_time=t0, user_id="u")
ingest_belief_turn(mem, "Jordan just moved to Austin.", session_time=t2, user_id="u")

answer_belief_context(mem, "Where does Jordan live now?", user_id="u")            # -> Austin
answer_belief_context(mem, "Where did Jordan live in early 2024?", user_id="u")   # -> Seattle
answer_belief_context(mem, "List every city Jordan has lived in.", user_id="u")   # -> Seattle; Austin

On the TempBelief benchmark it answers as-of queries at 0.870 vs Mem0's 0.676, with theknowledge graph audited at 0.97 precision / 0.96 recall. Caveat: TempBelief is synthetictext with explicit dates; the edge shrinks on natural speech. Real capability, bounded proof.

Optional features

Opt-in; the default path stays LLM-free and local at ingest.

mem = Memory(
    storage="genome.db",
    llm_call=my_llm_fn,             # LLM-based fact extraction on add()
    resolve_conflicts=True,         # ADD/UPDATE/DELETE vs existing memories
    auto_extract_entities=True,     # entity graph for graph retrieval
    auto_consolidate_threshold=200, # summarize-or-prune when a scope grows past N
)
mem.search("...", user_id="u1", mode="hybrid")   # modes: "dense" (default), "hybrid", "graph"

Reranking (local, free, no API):

from genome.memory.rerank import CrossEncoderReranker
mem = Memory(storage="genome.db", reranker=CrossEncoderReranker())   # lazy-loaded
mem.search("Where did the user go on vacation?", user_id="u1", limit=5)  # reranked

Reproduce the benchmarks

The LoCoMo and LongMemEval datasets are not bundled (they carry their own licenses —LoCoMo is CC BY-NC 4.0). See benchmarks/data/README.md todownload them. The first two lines need no dataset and no API keys:

python benchmarks/local_writepath.py        # local write path: ~10ms/msg, 0 network
python benchmarks/tco_project.py            # deployment cost projection
python benchmarks/verdict.py                # in-window accuracy + McNemar
python benchmarks/haystack_report.py        # overflow / context-window crossover
python benchmarks/ingest_cost.py --n 80     # measured ingestion cost vs Mem0
python benchmarks/lme_qa.py --n 90          # LongMemEval head-to-head vs Mem0
python benchmarks/tempbelief_run.py --convs 6   # bi-temporal point-in-time vs baselines

License

Apache License 2.0 — see LICENSE and NOTICE.

GENOME is free and open source: read it, modify it, self-host it, and embed it in your ownapplications — commercial use included — under the terms of Apache 2.0. Questions:[email protected].

Copyright 2026 Northtek (FrostByte Digital LLC).

MCP Server · Populars

MCP Server · New

    getArbor-dev

    Arbor

    Graph-native code intelligence that replaces embedding-based RAG with deterministic program understanding.

    Community getArbor-dev
    Q00

    ouroboros

    Agent OS: Stop prompting. Start specifying.

    Community Q00
    velane-sh

    velane

    Velane is agentic cloud for deploying your basic workflows, agents and sub-agents. 800+ OAuth integrations, sandboxed Bun and Python execution, and a full deployment pipeline managed via MCP

    Community velane-sh
    MCPBlender

    BlenderMCP

    🎨 Control Blender 3D with Claude AI — prompt-driven 3D modeling, materials & scene generation via MCP

    Community MCPBlender
    MCPBlender

    AbletonMCP

    🎵 Control Ableton Live with Claude AI — create tracks, arrange clips & compose music via MCP

    Community MCPBlender