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