Skip to main content

Membrick

Open-source agent memory for coding agents.

AI memory that knows what is still true. Your agent doesn't just forget; it can confidently remember outdated decisions.

Membrick is an open-source persistent agent memory layer for Claude Code, Codex, Gemini CLI, Antigravity CLI (AGY), and Muse Code. It turns project history — sessions, documents, decisions, traces, notes, and code — into current, evidence-backed context when an agent needs it.

Search can find the right topic. Membrick helps an agent answer the harder question: is this information still true? It uses relevance, time, and semantic relationships to distinguish the latest truth from old-but-still-relevant history.

Agent memory guide · Quickstart · Reproducible demo · Agent integrations · Benchmarks · Documentation

Current benchmark: 500-question LongMemEval-S. See the latest benchmark results for metrics and the source report.


The stale-memory problem

Your project says one thing on Monday and something different on Friday. Both versions remain relevant to the same question.

Older — decision-a.md

# Gateway Retry Policy

Gateway timeout retry attempts: 5.

Newer — decision-b.md

# Gateway Retry Policy

Gateway timeout retry attempts: 2.

Now ask:

How many retry attempts should we use for gateway timeouts?

A normal retriever can return either document — or both — and leave the model to guess which value is current.

Membrick keeps 2 as the current answer and preserves 5 as superseded history.

That difference matters anywhere project truth changes over time: architecture decisions, API contracts, configuration values, runbooks, ownership, terminology, and implementation plans.

There is no required supersedes: frontmatter in this example. For simple configuration/value claims, Membrick can infer chronological replacement when the documents establish the same semantic domain. Inferred supersession is domain-scoped so unrelated settings such as two different services' timeout values do not suppress one another. Explicit supersession metadata remains authoritative when you provide it.

membrick query \
  "How many retry attempts should we use for gateway timeouts?" \
  examples/demo-real-terminal

Current-state retrieval returns the newer decision with semantic_status: current, and membrick context excludes the stale value.

Reproducible terminal demo

Membrick reproducible terminal demo

The repository includes a reproducible asciinema PTY recording that builds the actual membrick binary, sets deterministic file mtimes for a controlled stale-memory scenario, runs the neutral query above, verifies the result, and renders the captured terminal session.

bash scripts/run_real_terminal_demo.sh

See examples/demo-real-terminal/ and .github/workflows/demo-real-terminal.yml.


Why Membrick?

Agent memory is not only a retrieval problem. It is a state problem.

A useful memory layer has to answer:

  1. Relevance — is this about the question?
  2. Recency — when was this evidence true?
  3. Supersession — did something newer replace it?
  4. Temporal intent — is the user asking about now, last Tuesday, or a historical state?
  5. Evidence — where did the answer come from?
Ordinary retrieval Membrick
Finds topically similar text Ranks relevant and current evidence
Can surface stale decisions as if they are current Tracks time and supersession
Treats relative time as mostly query text Resolves temporal intent against a reference clock
Returns passages Returns context with source and relationship evidence
Treats documents mostly in isolation Connects facts, entities, links, symbols, ownership, and time
Leaves corpus drift hidden Surfaces contradictions, stale claims, terminology drift, orphan pages, and missing links

Historical evidence is not deleted. A historical query can still retrieve superseded material as history rather than presenting it as current state.


Quickstart

Install directly from GitHub:

cargo install --git https://github.com/RooAGI/Membrick

Check what is currently indexed in a folder without scanning it:

membrick status .

Check or index a local corpus:

membrick review /path/to/repo

Query it:

membrick query "what is the current retry policy?" /path/to/repo/docs

Get LLM-ready context:

membrick context "what is the current retry policy?" /path/to/repo/docs

See the CLI reference and full quickstart for Docker, HTTP, Python, Rust, and MCP setup.


Agent integrations

Membrick provides opt-in integrations for major coding-agent clients.

Integration Project memory Lifecycle capture MCP tools Replay / comparison
Claude Code Yes Yes Yes Yes
Codex Yes Yes Yes Yes
Gemini CLI Yes Yes Yes —
Antigravity CLI / AGY Yes Yes Yes —
Muse Code Yes Yes Yes —

Build the Claude Code and Codex integrations:

cargo build --release --features claude-code,codex
./target/release/membrick install claude /path/to/project
./target/release/membrick install codex /path/to/project

All agents share one project-scoped memory store:

/path/to/project/.membrick/memory/

Upgrading from an older version? Legacy per-provider stores (.membrick/claude-memory/, .membrick/codex-memory/, .membrick/gemini-cli-memory/, .membrick/agy-memory/, .membrick/muse-memory/) are migrated into .membrick/memory/ on first run and removed once their migration succeeds.

The shared MCP controls include session recording, memory listing, and runtime enable/disable controls:

mcp__membrick__record_session       {"action":"start|stop|status"}
mcp__membrick__list_memories        {"limit":20}
mcp__membrick__enable_membrick       {}
mcp__membrick__disable_membrick      {}
mcp__membrick__membrick_status        {}

See agent integrations and the MCP guide for the complete setup.


Benchmark highlights

Membrick is evaluated on LongMemEval-S, a public benchmark for long-context agent-memory retrieval over multi-session conversations.

How to read the benchmark numbers

Separate integration smoke runs use a matched routing-decision-supersession task template. The one-run Codex result showed 37.4% fewer reported continuation tokens with Membrick hooks. The Claude run is invalid: both legacy .lint-ai and current .membrick directories were present, so its hooks failed open and continuation retrieved no memory. See the Codex and Claude Code reports. These are diagnostics, not release benchmarks; compare each provider only with its own native baseline.

Every result has three independent labels:

  1. Scope: the 500-question aggregate evaluates the full scoped dataset; the 133-question segmented comparison evaluates only the multi-session slice.
  2. Metric: fractional (regular) recall measures the fraction of all gold sessions recovered; any-hit recall counts a question as successful when at least one gold session is recovered.
  3. Cutoff: @5, @10, and @20 mean the top 5, 10, or 20 returned results. A Recall@5 value must not be compared with Recall@10 without checking both the metric type and benchmark scope.
Benchmark Scope Metric Cutoffs
Aggregate headline 500 questions Fractional and any-hit recall @5, @10, @20
Segmented comparison 133 multi-session questions Any-hit recall (fractional also in raw report) @5, @10

Why two benchmark tables?

The 500-question aggregate is the public overall headline. It runs the heuristic global path across every LongMemEval-S question category. The 133-question segmented comparison isolates the multi-session category and uses the same question subset for fixed segmented, adaptive segmented, and single-index baselines. The single-index row is therefore the fair control for segmented routing—not a second overall headline.

Because the scopes and query mix differ, their recall and latency values must not be compared as a time series or combined into one score.

The current benchmark uses the repository's raw LongMemEval-S dataset, runs 500 question-scoped queries through the heuristic backend, enables structured-fact retrieval, and uses no embedding vectors. This latest result is a release-candidate run, not a tagged-release measurement.

500 questions · heuristic backend · single CPU · no GPU

LongMemEval-S, 500 questions · 2026-10-15 · single index · heuristic NER · structured-fact retrieval · no embeddings Working-tree run based on b204b7e; not a clean release measurement.

Metric Result
Fractional Recall@5 / @10 / @20 89.78% / 95.20% / 98.34%
Any-hit Recall@5 / @10 / @20 96.6% / 98.8% / 100.0%
MRR 88.85%
NDCG@10 87.91%
Mean search time 3.39 ms

Source report: retrieval-longmemeval-500-2026-10-15-v0.6.0-b204b7e-working-tree.json.

Fractional Recall@k is the average fraction of all correct answer sessions recovered in the top k. Any-hit Recall@k counts a query as successful when any correct answer session appears in the top k.

Search latency measures the MemoryService::search call and excludes indexing the question's haystack. The older published 13.0 ms figure used a different timing scope and is not directly comparable. See the latest 500-question report and benchmark details.

The repository keeps the dataset downloader, production-style benchmark binary, shared AgentMemory scorer, comparison workflow, and temporal-reasoning experiment harnesses so results can be reproduced and changes can be evaluated without silently changing the query path.

See benchmark methodology, benchmark results, and comparison methodology.

Latest segmented-index comparison

The latest segmented comparison uses all 500 eligible LongMemEval-S questions with Tantivy 0.25.0. It is an experimental working-tree result. Fixed routing uses five segments; adaptive routing may expand the candidate set to 12. The server and benchmark CLI default to fixed top-3.

Mode Any-hit Recall@5 Any-hit Recall@10 Fractional Recall@5 MRR Avg. query latency
Segmented (fixed top-5) 94.20% 94.20% 86.77% 0.880 2.49 ms
Segmented (enriched + reranked) 94.20% 94.20% 86.77% 0.881 3.85 ms
Adaptive (enriched + reranked) 94.00% 96.00% 86.30% 0.884 7.26 ms
Intent baseline 94.20% 96.20% 85.54% 0.863 0.71 ms
Fused adaptive + global 95.40% 97.20% 87.11% 0.880 61.84 ms
Fused temporal + global 96.00% 97.80% 88.51% 0.885 28.05 ms
Single-index control 94.40% 96.60% 86.41% 0.872 13.45 ms

Fused temporal + global has the highest recall and MRR in this comparison, with higher latency. These segmented timing numbers exclude question-haystack indexing and are not comparable to the standalone MemoryService latency above. See benchmark results and the segmented-index design for conditions and the full report: segment-longmemeval-500-2026-10-05-tantivy-0.25.0-control.json.gz.

Experimental rust-bert POS/NER branch

An experimental model-backed POS/NER branch has also reached higher retrieval metrics, but it is intentionally kept separate from the audited heuristic release dependency graph. See the benchmark documentation for its results and conditions.

Integration smoke measurements

The repository also includes reproducible Claude Code and Codex replay/performance tests. These are diagnostic one-run measurements, not universal performance guarantees.

Provider / arm Continuation Input tokens Tool calls Scenario recall Hook time
Claude native memory 22.47 s 123,536 4 2/3 0 ms
Claude Membrick only 7.05 s 15,914 0 3/3 1.40 s
Codex native memory 38.13 s 151,000 5 2/3 0 ms
Codex Membrick only 18.53 s 62,478 2 2/3 1.33 s

Read the full conditions and limitations:


What Membrick can do

  • Recover the right past session or project note when an agent needs context
  • Rank current evidence ahead of superseded guidance
  • Infer simple chronological configuration updates inside an established semantic domain
  • Preserve historical evidence for historical questions
  • Resolve relative-time queries against an explicit reference date when one is available
  • Catch contradictions before they spread
  • Detect terminology drift across documents
  • Find orphaned or weakly linked pages
  • Query facts, entities, symbols, ownership, and time
  • Build review packets from changed files and related semantic context
  • Feed grounded context into an LLM instead of raw text blobs
  • Keep agent memory inspectable and local to the project

How it works

Membrick treats project memory as more than a bag of text.

Sessions · docs · code · traces
            │
            ▼
        1. Ingest
            │
            ▼
 Facts · entities · symbols · time
            │
            ▼
      2. Understand
            │
            ▼
 Links · ownership · supersession
            │
            ▼
       3. Connect
            │
            ▼
 Ranked · sourced · current context
            │
            ▼
       4. Retrieve

Under the hood, Membrick builds a lexical index plus sparse entity/term tables and overlays graph structure for links, symbols, ownership, semantic relations, and time.

A single prepared-query path owns query analysis, augmented search text, temporal context, routing intent, reference-clock handling, semantic suppression, and provenance annotation. The CLI and IndexStore use the same semantic/temporal query policy so current-state behavior does not depend on which high-level entry point you call.

The same corpus model powers review-oriented checks such as missing cross-references, orphan pages, low-confidence claims, stale knowledge, and semantic drift.

For implementation details, see:


Use Membrick from your stack

CLI

membrick query "what is the current retry policy?" /path/to/repo

Docker / HTTP

export SERVER_TOKEN=local-dev-token
docker compose up --build -d
curl http://127.0.0.1:8080/health

See the HTTP server guide.

Python

Install the PyPI package to get both the Python MemoryService API and the Rust membrick CLI on supported platforms:

pipx install membrick
membrick install codex .

For development from this checkout, build the optional Python extension with uv and maturin:

uv venv --python 3.10
source .venv/bin/activate
uv pip install "maturin>=1.9.4,<2"
maturin develop --release --uv

To build a distributable wheel instead, run maturin build --release; the wheel is written under target/wheels/.

import membrick

memory = membrick.Memory(path="./memory-index")
memory.add(
    "request-1",
    "user-1",
    "session-1",
    [{"role": "user", "content": "Docker runs on Ubuntu hosts"}],
)
print(memory.search("docker ubuntu", "user-1", 5))

# Use the same API against a running membrick server:
# NOTE: base_url must be passed by keyword. A positional first argument
# is `path` and would silently create a local index instead of connecting.
remote = membrick.Memory(base_url="http://127.0.0.1:8080", api_key="local-token")
print(remote.search("docker ubuntu", "user-1", 5))

Rust

MemoryService is the only public memory access API. Request, response, document, and configuration types are public; stores, indexes, snapshots, builders, and persistence modules are internal. See the API migration guide.

use membrick::{MemoryService, PipelineOptions, SourceDocument};

fn main() -> anyhow::Result<()> {
    let mut memory = MemoryService::in_memory(PipelineOptions::default());

    memory.upsert(SourceDocument::with_stable_doc_id_from_source(
        "docs/install.md".to_string(),
        "Docker install guide for Linux hosts".to_string(),
        "docker install".to_string(),
        None,
        vec!["Overview".to_string()],
        vec![],
        None,
        None,
    ));

    memory.refresh()?;
    let results = memory.search_with_filters("docker install", "workspace", None, 5, &Default::default())?;
    println!("{}", serde_json::to_string_pretty(&results)?);
    Ok(())
}

See docs/quickstart.md for complete examples.


When is Membrick a good fit?

Membrick is especially useful when you maintain:

  • Long-running agent memory over conversations, notes, and decisions
  • Markdown knowledge bases with many cross-links
  • Internal documentation where terminology and decisions drift over time
  • Codebases where symbols, ownership, usage, and review context matter
  • Fast-changing corpora where freshness matters as much as relevance

If your only requirement is simple keyword search over a static set of documents, Membrick is probably more machinery than you need.


Project status

Membrick is under active development. The release query path uses the heuristic backend; experimental model-backed query semantics remain separate from the audited release dependency graph.

The security audit workflow runs cargo audit. Binary persistence uses oxicode, and the lexical index uses Tantivy 0.25 to preserve measured recall. Current audits report only transitive Tantivy warnings in lru and memmap2; these are tracked for upstream fixes.

Issues, benchmark reproductions, integration feedback, and contributions are welcome.

License

Apache-2.0

Metadata

Release files for membrick 0.6.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for membrick 0.6.0
File Size Uploaded
membrick-0.6.0.tar.gz 3.9 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for membrick 0.6.0
File
membrick-0.6.0-cp38-abi3-win_amd64.whl CPython 3.8 abi3 Windows x86-64 Details
membrick-0.6.0-cp38-abi3-manylinux_2_39_x86_64.whl CPython 3.8 abi3 Linux glibc 2.39+ x86-64 Details
membrick-0.6.0-cp38-abi3-manylinux_2_39_aarch64.whl CPython 3.8 abi3 Linux glibc 2.39+ ARM64 Details
membrick-0.6.0-cp38-abi3-macosx_11_0_arm64.whl CPython 3.8 abi3 macOS 11.0+ ARM64 Details
membrick-0.6.0-cp38-abi3-macosx_10_12_x86_64.whl CPython 3.8 abi3 macOS 10.12+ x86-64 Details

Total release size: 116.8 MB

Release files / membrick-0.6.0.tar.gz

Download URL membrick-0.6.0.tar.gz
Size 3.9 MB
Tags Source
SHA-256 checksum
How to use checksums
7f96db109ea3c5b94884c3394214ccf616cf5803aeb285913ed4e9125edf994a
BLAKE2b-256 checksum
How to use checksums
1a58f6315ab1344ab8f7bccf8f4adec4151e3266a82363a3cf0ce9a5282acbd5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / membrick-0.6.0-cp38-abi3-win_amd64.whl

Download URL membrick-0.6.0-cp38-abi3-win_amd64.whl
Size 21.2 MB
Tags CPython 3.8 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
6491dcf68ee639fa9bc2cf11128de3fca8893c2d5f64d904c4364574471d7417
BLAKE2b-256 checksum
How to use checksums
9841af374a6db29561959f7a93c8b1a6190c17836778117c448b27d61a7073c9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / membrick-0.6.0-cp38-abi3-manylinux_2_39_x86_64.whl

Download URL membrick-0.6.0-cp38-abi3-manylinux_2_39_x86_64.whl
Size 23.5 MB
Tags CPython 3.8 Linux glibc 2.39+ x86-64 abi3
SHA-256 checksum
How to use checksums
f66ef1584626418c06cf5a845331a41754014fc35cfe81580a4cdab063a231d7
BLAKE2b-256 checksum
How to use checksums
e2d39ca8161b79ee0aa2e7323a271ca38ef017355287f698b833a880b540d809
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / membrick-0.6.0-cp38-abi3-manylinux_2_39_aarch64.whl

Download URL membrick-0.6.0-cp38-abi3-manylinux_2_39_aarch64.whl
Size 23.5 MB
Tags CPython 3.8 Linux glibc 2.39+ ARM64 abi3
SHA-256 checksum
How to use checksums
b22c5a1ddf237ad3ae833d498b31c1e31c2bf849f642193921f843864f045163
BLAKE2b-256 checksum
How to use checksums
b200d9b919af0e2df98e7b3c9125630d722dd36cfe7cb8ae46af80bf911ffc41
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / membrick-0.6.0-cp38-abi3-macosx_11_0_arm64.whl

Download URL membrick-0.6.0-cp38-abi3-macosx_11_0_arm64.whl
Size 21.8 MB
Tags CPython 3.8 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
2a684e271aa19b087af74f8a91a9fa125ab79ef1b74e3dbc8aab0ccedd588287
BLAKE2b-256 checksum
How to use checksums
47ce6f30b133a8b5b6f6ad746cebeb158a361cab62ce302d54d28eda4072ead1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release files / membrick-0.6.0-cp38-abi3-macosx_10_12_x86_64.whl

Download URL membrick-0.6.0-cp38-abi3-macosx_10_12_x86_64.whl
Size 22.9 MB
Tags CPython 3.8 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
94ae1aebf1bf4afa5b888360d8a43b7f2ba71eabd03e3e49fa266652a0918118
BLAKE2b-256 checksum
How to use checksums
459b082bb107e881eac7bd8e01eaed153942d41e0b0bdde70b52ccba93e58d26
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.

Transparency log

Release history Release notifications | RSS feed

0.6.2

6 release files

0.6.1

6 release files

This release

0.6.0 This release

6 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page