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 what was believed at any point in the past.

Runs on your own machine, with no external services.MIT · Python 3.9+ · no dependencies

a:alice-email
as of
Contradicted

Customer prefers email over phone

by support-bot@v2.1asserted t=1
Confidence
0.62

As of now, this assertion is contradicted.

Provenance

  1. ticket:8842
    Event “prefer email please”
  2. d:1
    Derivation extraction from event
  3. a:alice-email
    Assertion prefers_email_over_phone

Contradicted by

prefers_email_over_phone
not:prefers_email_over_phone
by import-bot@v1at t=3src crm:sync:19

Both claims are kept. Neither was deleted, and either can be reconstructed at any point in the past.

Belief interval

A real assertion from the demo project. Change “as of” and watch the belief state move.

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 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.

A 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 works
result = mem.healing.handle(
error={"component": "billing-sync", "error_type": "AuthError"},
plan={"diagnosis": "credentials rotated upstream",
"actions": [{"type": "reload_config"},
{"type": "exec_shell"}]},
)
 
result["status"]
# "denied" - nothing executed
 
result["decisions"]
# reload_config permitted (low risk)
# exec_shell unknown action type (not registered)

Two agents disagree. Both are kept, one is believed, and you can ask why.

from omem import Memory
 
mem = Memory(api_key="omem_sk_...", project="proj_...")
 
mem.remember(agent="support", about="customer:alice",
claim="prefers_annual_billing")
 
# Nothing infers that these two disagree. You say so, once.
mem.contradict("prefers_annual_billing", "prefers_monthly_billing")
 
mem.remember(agent="sales", about="customer:alice",
claim="prefers_monthly_billing")
 
mem.believes(about="customer:alice", claim="prefers_annual_billing")
# "CONTRADICTED" - not deleted, not overwritten
 
mem.why(assertion_id) # the chain that led there
  • 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.

  • Private by default

    Memory belongs to an agent unless you share it with a team or the project.

  • The dashboard is included

    One pip install serves the API and the UI on the same port. No Node at runtime, no second process.

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.

Read the full security page
  • 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.

pip install omem-infrastructure
omem-server