Skip to main content

Overview

When an incoming memory cannot be true at the same time as an existing one, memloom keeps both active and records a conflict. Nothing is auto-overwritten and nothing is lost while it is pending.

Both are kept

No last-write-wins, no model picking a winner behind your back.

You decide

Four resolutions, from the CLI, the viewer, or an agent relaying your choice.

Always revertable

Losers go stale, never deleted. Change your mind a week later and resolve it the other way.

How one is detected

On every save with dedup enabled:

Exact duplicates short-circuit

Matched by content hash, with no model call.

Find candidates

Up to 5 active memories at cosine similarity 0.5 or above.

Classify each one

The model says how it relates to the incoming memory.
The record keeps the incoming memory, every contradicting candidate, and the classifier’s stated reason, so you can see later why it was flagged.
Detection needs a model, so it is off in offline mode. Offline saves skip the belief pipeline and always report added.

Resolving

Pending conflicts appear in memloom conflicts, the viewer’s Conflicts tab, GET /memory/conflicts, and the list_conflicts MCP tool. Revert reactivates whatever was staled, deactivates the edges the resolution created, undoes any lineage re-parenting, and puts the conflict back in the queue.

Letting a model clear the queue

Runs the same model over the pending queue a second time, now with context the save-time classifier never had: when each side was recorded, and for imported memories the transcript excerpt it came from. Most import conflicts are a later session recording a change (“we moved to railway”) against an older fact (“the deploy target is fly.io”), which is mechanical once you can see the dates. It answers keep_new, keep_existing, keep_both, or unsure, and is told to prefer unsure over guessing. Only a decisive verdict resolves anything, and it lands in the same revertable history as a manual one.
merge is not available to the judge. There is no reconciled text for a model to author on your behalf.

Three queues, one tab

The Conflicts tab holds three kinds of question. They share a surface and a revert, but not a scope. Only memory conflicts reach the CLI and MCP surfaces. An agent asking about pending conflicts is never handed a question about spelling, or a finding no human has confirmed.
Save-time detection compares an incoming memory against the 5 nearest that existed at that moment, so a pair at rank 6 is never judged. The re-check goes back over old beliefs against 20 neighbours and finds those.Its measured precision is roughly 40 percent, so they wait as findings where dismissing costs a click. Each shows the verbatim clashing sentence from both sides, so it can be judged in seconds. Confirming one writes the real conflict row, and from there it behaves like anything else on this page.