Overwrite the value, or keep both and hope.
- Overwrite it, and “what was my rent in May?” has no answer.
- Keep both undated, and the newest text wins before it is true.
- No receipt. You cannot see the turn the number came from.
Open long-term memory you can trust.
A small, inspectable library + CLI + GUI for dated facts, as-of answers, supersession, budgeted search, and clickable receipts. It is where we demonstrate the agent-memory method and publish the recipes behind our SOTA results.
Simulation · example walkthrough. The personal-assistant scenario and memory records below are seeded examples, not customer data. The library, code, and benchmark harness are real and runnable; the depicted history is illustrative.
Apache-2.0 · Python 3.10+ · runs locally
How much is my rent?
Landlord raised rent to €950 from June.
2024-04-02 · turn 18 Monthly rent is €800.
2024-01-08 · turn 4 Both answers are right — but only on the right date. Most memory keeps one value and overwrites it, so asking in May returns June’s number, the €800 figure is gone, and there is no way to show what changed or when anyone learned it.
Your landlord mentions the rent. It becomes one small dated fact.
“Monthly rent is €800.”
A change is announced now, but it does not start until June.
“The landlord is raising the rent to €950 from June.”Memory records both when it heard this and when it becomes true.
The same question, two dates, two correct answers.
as of 15 May → €800 per month · as of 1 June → €950 per monthThe €800 fact is still there, marked as replaced, and still openable.
Every answer comes with a short receipt of how it was found.
answer: €950 per month cites: turn 18, turn 4 receipt: 3 buckets opened · 30% of memory read
New here? MemBukkit is the open, code-first project where this memory method is demonstrated and benchmarked. Memseek is the context engine built on the same method for production agents — this page is the small, runnable half — what a context engine is.
The demo records “Monthly rent is €800” with the source turn and the time from which the claim is valid. Atomic facts are useful here because later evidence can replace one value without rewriting unrelated memory.
# conceptual record projection
fact: Monthly rent is €800
valid_from: 2024-01-08
source: conversation / turn 4
status: current valid_fromMakes “what was true then?” different from “what is true now?”
sourceKeeps the answer openable back to the exact conversation turn.
One active rent fact. No future value is inferred.
The landlord’s April message says the rent rises to €950 in June. Memory must distinguish when the statement was observed from when the new value becomes true.
# conceptual record projection
fact: Monthly rent is €950
observed_at: 2024-04-02
valid_from: 2024-06-01
source: conversation / turn 18
supersedes: rent-800 observed_atRecords when the system learned about the change.
valid_fromPrevents the April message from making the May answer prematurely become €950.
supersedesLinks the replacement to the older claim without deleting it.
One future-effective €950 fact plus a supersession edge to the €800 fact. Both sources remain inspectable.
For May, the €800 interval is still valid. For June, the superseding €950 claim wins. The response includes the evidence turns plus the buckets opened and scan budget used to find them.
Monthly rent is €800.
Rent becomes €950 from June.
€800 per month.
cites turn 4€950 per month.
cites turn 18 and preserves turn 4 as superseded historyVisible effect: one question produces two correct answers because the query date changes which fact is valid.
# conceptual query receipt
question: How much is my rent?
as_of: 2024-06-01
answer: €950 per month
evidence: [turn 18, turn 4]
receipt:
buckets_opened: 3
scan_budget: 30% as_ofEvaluates fact validity at the requested time rather than flattening the timeline.
evidenceShows the winning claim and the history needed to explain what changed.
receiptMakes the bounded retrieval path inspectable, including what memory was not scanned.
No memory is written by the question. The read returns a dated answer and an explainability receipt.
The broader context engine for production agents: search, maintained state, provenance, policies, connectors, and prompt-time context assembly.
What a context engine is →The focused agent-memory project: a library, CLI, explainability GUI, demos, and the public benchmark harness you can run yourself.
Read the MemBukkit docs →A vector match is not enough when facts change. MemBukkit keeps both the current answer and the history required to verify it.
Turn conversations and documents into atomic facts with dates and source references.
Ask what was true on a particular date instead of flattening old and new facts together.
Mark what changed without silently deleting the history needed to explain the answer.
See the scan budget, buckets opened, evidence used, and source turn behind a result.
The method partitions memory, routes each question into the most useful region, and ranks within that bounded scan. MemBukkit makes each step inspectable; Memseek offers this search inside the full context engine.
See the method and eval →Higher reported numbers use a different judge. MemBukkit uses LongMemEval’s official gpt-4o judge and publishes the frozen recipe behind the result.
LongMemEval-S · 500 questions. Solid bars use the benchmark’s official gpt-4o judge. Patterned bars use another judge and are context, not like-for-like rankings. See who judged what ↗
Query-time model list-price floors on measured answer context; write-time distillation and hidden reasoning tokens are excluded. Sources and protocol →
82.0% vs 56.4% with the same reader, official judge, and ingestion.
~3.2k tokens read per question instead of roughly 100k.
Accuracy falls from 80.0%; excluding a matched random set leaves 82.3%.
Run the personal-assistant demo, ask about rent in May and June, and inspect why the answer changes. The same local store powers the CLI and GUI.
First use needs an API key (or a local LLM), downloads model weights, and distills the bundled demo once. Later opens reuse the local store.
# clone and install
$ git clone https://github.com/memseekai/membukkit
$ cd membukkit
$ pip install -e ".[all]"
$ export OPENAI_API_KEY=sk-...
# open the explainability GUI with a bundled story
$ membukkit ui --demo personal-assistant
# or reproduce a low-cost benchmark smoke test
$ membukkit bench --repro longmemeval-gpt4o-mini --lite Want to inspect agent memory, run a demo, or verify the benchmarks? Start with MemBukkit. Want the search method inside a governed context layer? Start with Memseek.