Your agent should be able to say why it believes something.
Most agent memory is a list of facts. When two of them conflict, one silently overwrites the other and the history is gone. OMEM keeps both, tracks which one is believed right now, and can reconstruct any past state. And on that footing it does what a list never could: it leaps to conclusions from single examples, doubts its own leaps, and takes conclusions back the moment the facts under them die.
Runs on your own machine, with no external services.MIT · Python 3.9+ · no dependencies
Customer prefers email over phone
As of now, this assertion is contradicted.
Provenance
- ticket:8842Event “prefer email please”
- d:1Derivation extraction from event
- a:alice-emailAssertion prefers_email_over_phone
Contradicted by
Both claims are kept. Neither was deleted, and either can be reconstructed at any point in the past.
Belief interval
The useful part of a memory layer is the part that says no.
Anything can store a fact. What decides whether your agent is trustworthy is what it declines to do with one.
- It will not decide what is true
- Two claims conflict only when a caller has declared the pair opposed. OMEM never reads two sentences and concludes they disagree, because that judgement is what would stop the same question having the same answer a year from now.
- It will not let a hunch pass as a belief
- The intuition layer guesses eagerly and is never allowed to lie about it. expects() and believes() are different verbs: a hypothesis carries its case file, its strength stays below any evidenced confidence, and the engine's UNKNOWN stays UNKNOWN however good the hunch.
- It will not run what nobody authorised
- A model may propose a repair. Only action types registered in code can execute, the risk class comes from OMEM's registry rather than from the plan that claims it, and a high-risk action needs a named approver on top of the permission.
- It will not quietly overwrite
- A contradiction keeps both claims, records which is currently believed, and can reconstruct either side at any past point in time. Nothing is lost when something changes.
It concludes things. And it can take them back.
Declare a rule, and OMEM composes what it knows into conclusions that carry their premises. The reason to want that is what happens on the way down: retract one fact and every conclusion resting on it is withdrawn in the same request, cascade included, with the whole chain answerable to why().
It learns from one example, then doubts itself harder than you would.
Humans learn fast by leaping to conclusions, and confabulate for the same reason. OMEM keeps the speed and drops the confabulation: one similar case is enough to form an expectation, and every expectation is born suspect, wearing a case file.
A skeptic pass works each case against everything OMEM holds. Only evidence about the target itself can support or refute; rival hypotheses compete and reality picks the winner. A case that will not resolve asks a question, the answer is recorded as evidence under the answerer's name, and a calibration record keeps the boldness of new leaps honest about the record of old ones.
And it generalizes. From what it has seen across many people OMEM learns priors, regularities of the form “people who hold P tend to hold Q”, and uses them to read someone new from very little. A prior fires only into a silence and yields the instant that person's own evidence disagrees, so a general pattern never overrides an individual. Each prior stores counts, never a person, so the learned model of people carries no fact about anyone.
How the intuition layer worksA model proposed exec_shell. OMEM did not run it.
OMEM records what breaks and repairs it under policy. The model is a reasoning component that may propose a plan; OMEM decides what is permitted, what executes, and whether it actually worked.
Error text and model output are data here. Neither can name an action into existence, and the refusal is written down with the reason for every action rather than disappearing.
How the healing loop worksTwo agents disagree. Both are kept, one is believed, and you can ask why.
Belief state over time
Every claim carries an interval. Ask what was believed last Tuesday and get last Tuesday's answer, not today's.
Provenance you can follow
Ask why something is believed and get the chain of assertions and evidence that led there.
What changed while you were gone
changes(since) returns the delta an agent wants at session start: what appeared, what closed and how, which conflicts opened, who merged.
A judgment queue, not a guessing engine
When two records look like one person, or a declared rule is violated, the question waits for a human. Approvals are recorded under the approver's name, and a dismissed question is never asked twice.
Private by default
Memory belongs to an agent unless you share it with a team or the project.
Everyday habits are memory
“Mornings work best for me” attaches to the person who wrote it, grounded in their own sentence, extracted offline with no LLM. The priors tier then learns what people are like in general, as counts that name nobody.
The right to be forgotten, executed
One request rewrites the record for real: the person's data, the cascade behind it, and their sentences quoted under surviving beliefs. Replay-verified before anything is touched; what remains is a hash, counts, and a date.
A commons that teaches AI what people are like
Consenting installs pool anonymous counts about human working behaviour, offered as a CC BY 4.0 training corpus. The objective is to connect humans and AI by giving AI a real understanding of our nature, while holding no fact about anyone.
The dashboard is included
One pip install serves the API and the UI on the same port. No Node at runtime, no second process.
Marketing that cannot fail is indistinguishable from marketing that is false.
So the load-bearing sentences here are executable. Each one names the test that goes red the moment it stops being true, and those tests run on every commit.
The Witness benchmark
Memory benchmarks measure recall. Witness measures testimony: no asserting what nobody said, retraction honoured, disagreement kept visible, two people with one name kept apart, conclusions dying with their premises. OMEM's card is asserted in CI. Adapters for Mem0 and Graphiti are included and run with your keys, because this repo publishes no numbers it did not run.
benchmarks/witness/README.mdIt phones home to nobody
A guard installed under the socket layer, then a full working session: identity, contradiction, a rule cascade, recall, hunches. One outbound connection or DNS lookup that is not loopback fails the build with the address in hand.
server/tests_airgap.pyUpgrades never rewrite your past
An ops log frozen on 2026-08-29 replays on every commit and must produce a byte-identical state digest. The suite also tampers with one op and requires the digest to move, so the check is proven able to fail.
server/tests_upgrade_stability.pyThe claims ledger
Sixteen load-bearing sentences mapped to the test behind each. The ledger is itself guarded: a row whose file goes missing fails CI. A claim with no row is opinion.
CLAIMS.md
This is early software, and the second list matters as much as the first.
OMEM is free while it is in beta, and it is missing things you would need before putting it somewhere serious. They are written down rather than discovered during a security review.
- No SSO or SCIM
- No SOC 2, ISO 27001 or HIPAA BAA
- No key rotation tooling
- No region pinning
- An audit chain that detects tampering, not one that prevents it
- One writer per database, so no high availability
The whole thing runs on your laptop in about a minute.
No signup, no card, no quota, and no service to depend on. If it breaks or feels wrong, that is exactly the feedback worth having right now.