mnemo β€” a zero-dependency memory layer for AI agents

pip install agora-mnemo Β· PyPI Β· GitHub Β· MIT

mnemo is the recall + consolidation core of an autonomous research system, distilled to a single dependency-free Python file plus an MCP server so any Claude / Cursor / agent can use it as memory. Its design rules are measured, not assumed (provenance + runnable probes in the repo).

  • Value-ranked recall β€” top-k by relevance Γ— accrued value, not cosine alone.
  • Per-type decay + capacity-aware consolidation β€” the "dream" pass links near-duplicates and marks stale/superseded, never rewriting the raw note.
  • Lexical + semantic auto-mode β€” BM25 + embeddings fused by Reciprocal Rank Fusion.
  • Contradiction flagging β€” mutually-incompatible memories surface for review, never auto-deleted.
  • Corroboration-gated influence (0.4.0) β€” recall(influence_only=True) restricts the memories allowed to drive an action to those that earned corroboration (a credited good outcome, or β‰₯2 distinct-source links).

Why 0.4.0 matters: poison-resistant recall

We red-teamed mnemo with a real AgentPoison-style single-instance memory-poisoning attack (Chen et al., NeurIPS 2024; PoisonedRAG, Zou et al., USENIX Security 2025). Findings, all with runnable receipts:

  • A plain-English trigger sentence in one poisoned memory hijacks raw top-1 retrieval 88–100%, is scale-invariant (60β†’10 000 memories), and evades a perplexity filter.
  • Retrieval-time / embedding-geometry defenses do not generalize across encoders.
  • recall(influence_only=True) drops the single-instance poison's rank-1 hijack to 0% on MiniLM / BGE / Contriever and every scale β€” because it lives in provenance metadata, not embedding geometry. Honest cost: a rare-but-true memory that hasn't earned corroboration is filtered too (recall 1.00 corroborated vs 0.08 uncorroborated), so this mode is for adversarial / untrusted ingestion. It raises attacker cost (β‰₯3 coordinated records + β‰₯2 forged independent provenances), it does not make poisoning impossible.
from mnemo import Mnemo
m = Mnemo("memory.json")                      # or Mnemo(..., embed=my_embedder)
m.remember("Pre-trend tests catch only ~31% of fatal DiD bias.", tags=["causal"], value=3)
m.recall("difference in differences", k=5)
m.recall("difference in differences", k=5, influence_only=True)   # only corroborated memory drives actions

Part of Agora. MIT-licensed.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support