Skip to main content

a-memory

Your AI agents forget. a-memory makes them remember. 4-tier agent memory with hybrid search, a real knowledge graph, and envelope encryption — all in plain SQLite files. Zero cloud. Zero external APIs.

CI codecov License: MIT Python 3.10+ Ruff MCP Compatible Docs Release

Naming note: the product name is a-memory; this repository is still Cipher208/a-memory (renaming is pending — all links above use the current name).


Why SQLite?

Every other memory server sends your agent's data through a cloud API or requires a separate vector database.

a-memory stores everything in SQLite files on your machine.

  • Zero infrastructure. No Docker, no database server, no embedding API keys.
  • Zero data leaving your network. Works air-gapped.
  • Layer-isolated by design. User facts and agent identity never share a namespace.
  • One directory = entire memory. Back up with cp, sync with rsync.

Why this exists

Three problems a-memory solves:

① Agent self-evolution — your AI stops repeating mistakes between sessions. It remembers decisions, errors, and corrections in a dedicated agent layer, and an hourly consolidation sweep promotes what matters into long-term facts.

② User persona persistence — your agent knows who it's talking to even after weeks of silence. Preferences, history, emotional context live in the user layer, isolated from agent identity.

③ Project continuityproject tracks per-project context: decisions with rationale and outcomes, artifact maps, a graphify-powered code index — so a fresh session picks up where the last one left off.


Get started

git clone https://github.com/Cipher208/a-memory.git
cd a-memory
uv sync
uv run ariel-memory          # MCP server on stdio — connect from any MCP client

Point your MCP client at it:

{
  "mcpServers": {
    "a-memory": {
      "command": "/path/to/a-memory/.venv/bin/python",
      "args": ["mcp_server/server.py", "--transport", "stdio"]
    }
  }
}

HTTP transport with dashboard:

uv run ariel-memory --transport http --port 8000 --dashboard

PyPI package (pip install a-memory) ships with the repo rename. See Roadmap.


The five primitives

Agents see exactly five tools — one verb per intent, no tool-choice paralysis:

Primitive Intent What it does
think remember Routes content to the right layer (L4 facts / L3 episodes / wiki / graph) based on importance, emotion, and relations
dream recall Hybrid search across ALL layers (FTS5 + binary embeddings + wiki + graph), returns a token-budgeted digest
forget let go Context-aware deletion with Shadow Bin archival (exact / fuzzy / recent)
evolve grow Records personality/rules evolution for the agent
project continue Per-project identity, decision log, artifact map, code index

Quick demo — Python MCP client:

# think — routed to the right store automatically
await session.call_tool("think", {"text": "User prefers dark mode", "layer": "user"})

# dream — finds it across every store, a week later
res = await session.call_tool("dream", {"query": "dark mode preference"})
print(res["summary"])

~30 additional fine-grained operations (typed CRUD per store, sessions, ops/admin) stay available behind ARIEL_EXPOSE=all.


Features

Category What's inside
🧠 Memory L1 Reflex → L2 Sessions → L3 Episodic → L4 Core, importance scoring, typed memory kinds with TTL policies, layer isolation
🔍 Search FTS5 + MIB binary embeddings + hybrid RRF ranking, multi-source merge (RAG + Wiki + Episodic + Core + Graph), dream digest
🕸️ Graph Epistemic knowledge graph + temporal timeline, typed nodes and edges, BFS traversal
📁 Projects Decision log (what/why/outcome), artifact map, graphify code index — survives between sessions
🔐 Security Envelope encryption (libsodium secretbox), master key chain, rate limiting
🛠️ Ops Auto-backup cron, saga rollback pattern, Prometheus metrics, read-only replica, hourly self-maintenance (decay + consolidation + auto-VACUUM)
🌐 Wiki FTS5-indexed markdown files — edit in Obsidian/VS Code, search from MCP

Architecture

graph TD
    A[LLM Agent] -->|MCP Protocol| B[mcp_server]
    B --> C{Importance Scoring}
    C --> D[L1: ReflexBuffer]
    D --> E[L2: SessionStore]
    E --> F{EmotionTrigger?}
    F -->|high emotion| G[L3: EpisodicMemory]
    F -->|normal| H[L4: CoreMemory]

    B --> I[RAG Engine]
    I --> J[FTS5 Search]
    I --> K[MIB Binary Search]
    I --> L[Hybrid RRF Ranking]

    B --> M[Wiki System]
    M --> N[.md Files]
    M --> O[SQLite Index]

    B --> P[Knowledge Graphs]
    P --> Q[Epistemic Graph]
    P --> R[Temporal Graph]

    B --> S[Project Store]
    S --> T[Decisions / Artifacts / Code Index]

    U[Hourly Sweep] -->|consolidate| G
    U -->|promote| H
    U -->|auto-VACUUM| V[(SQLite)]

Comparison

a-memory mem0 memgpt chroma
MCP native
4-layer hierarchy ✅ Layer-isolated
Local-only (no cloud) SQLite — 0 infra ❌ needs API ❌ needs API ✅ local
Own semantic search (no API) ✅ MIB binary + FTS5 hybrid vector only
Knowledge graph ✅ Typed nodes + edges
Envelope encryption ✅ libsodium
Lifecycle hooks ✅ per-layer, config-gated limited limited none
Backup / restore ✅ Auto-cron + saga

Roadmap

  • 4-layer memory hierarchy with layer isolation
  • Hybrid search (FTS5 + MIB binary embeddings)
  • Knowledge graphs (epistemic + temporal)
  • Hourly consolidation sweep + DB self-maintenance
  • mcp 2.x native SDK
  • Repo rename to Cipher208/a-memory + PyPI package (pip install a-memory)
  • Screenshot / asciinema demo in README
  • LLM-assisted consolidation on top of the deterministic sweep

Contributing

PRs welcome! See CONTRIBUTING.md.

License

MIT © Cipher208


If this project helps you, star it on GitHub.

Star History

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

a_memory-1.7.0.tar.gz (484.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

a_memory-1.7.0-py3-none-any.whl (677.7 kB view details)

Uploaded Python 3

File details

Details for the file a_memory-1.7.0.tar.gz.

File metadata

  • Download URL: a_memory-1.7.0.tar.gz
  • Upload date:
  • Size: 484.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.15

File hashes

Hashes for a_memory-1.7.0.tar.gz
Algorithm Hash digest
SHA256 cc3afc1ab826e5ceb834025b69eeb964837bf0b5abcf97351e13ca6e8bee9781
MD5 cce82bd66d5f5b8bc2a9ab685c94463f
BLAKE2b-256 9407ea13af2bbfe18707a4353544bbb22dc7fbb970cbb1f9c696abe416f91d85

See more details on using hashes here.

File details

Details for the file a_memory-1.7.0-py3-none-any.whl.

File metadata

  • Download URL: a_memory-1.7.0-py3-none-any.whl
  • Upload date:
  • Size: 677.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.15

File hashes

Hashes for a_memory-1.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9baa075e096a0c59ddc594c5acebd6ad68bec9ae2866a23c442d11641b246b5c
MD5 cf4ef43bd15001bd86fe0092036ad557
BLAKE2b-256 7f61fe85fa1d73ba36dba9f8dd61260562248eae1afa7f0844ba729d00afa3a4

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.7.0 This release

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page