OMEM vs Zep

Zep builds a knowledge graph of your sessions. OMEM keeps a court record.

Zep assembles conversations into a temporal knowledge graph and serves fast, relevant context, with a managed cloud. OMEM optimizes for a different property: every belief is an auditable claim with evidence, state, and a replayable history. Speed of recall versus defensibility of the record.

What Zep is genuinely good at

A comparison that cannot say this is an advertisement. These are real strengths, and if they match your problem, use Zep.

Temporal knowledge graphs
Entities and relations extracted from sessions into a graph that understands time. Genuinely strong engineering, and a good fit for context assembly.
Session summarization at scale
Long conversations become usable context without you building that pipeline.
A managed cloud
If you want the graph without operating it, that exists. OMEM has no cloud; you run it.

What OMEM does differently

Every claim below is asserted by the repository's CI, so none of it can quietly stop being true.

Belief state, not stored strings
Every claim has a state (believed, contradicted, unknown) computed from the evidence at query time. Two agents asserting opposite things produces CONTRADICTED with both sides on the record, never a silent overwrite.
Conflicts are declared, never guessed
Two claims disagree only when someone declared them opposed. No model reads your memories to decide they conflict, which is what keeps the same question giving the same answer a year later.
Answers for itself
Ask why about any belief and get the evidence chain: who said it, the quoted source, what was concluded from it, what contradicts it. The whole state replays from an append-only log, and omem-verify proves it rather than claims it.
Takes things back
Retract a fact and everything concluded from it is withdrawn in the same request, cascade included. Declared inference rules come with truth maintenance built in.
Hunches that know they are hunches
The intuition layer forms expectations from single examples, keeps a case file per hypothesis, interrogates its own guesses, and never lets a hunch pass as a belief. expects() and believes() are different verbs.
Zero dependencies, committed license
Stdlib-only Python (CI fails the build if a runtime dependency appears), SQLite by default, runs air-gapped. MIT, with a written commitment in CONTRIBUTING.md that the core stays MIT.
mem.remember(agent="sales", about="customer:acme", claim="prefers_annual_billing")
mem.remember(agent="support", about="customer:acme", claim="not:prefers_annual_billing")
 
mem.believes(about="customer:acme", claim="prefers_annual_billing")
# -> CONTRADICTED (both sides on the record, neither silently wins)
 
mem.why(assertion_id)
# -> the evidence chain: who said it, the quoted source, what conflicts

The honest decision guide

Choose Zep when

  • You want managed infrastructure and automatic graph construction from sessions
  • The goal is rich context assembly rather than an auditable belief record
  • Summarized history is acceptable as the source of truth

Choose OMEM when

  • The record matters: who asserted what, on what evidence, and what happened when it was contradicted
  • Extraction must be inspectable and deterministic, with a model only ever proposing
  • You need declared inference with take-backs, not just retrieval
  • Zero-dependency, self-hosted, air-gap-friendly deployment is a requirement