Conflicts & Checkup
A memory you can trust has to notice when it disagrees with itself. Engram runs that noticing locally, on small local models, under one strict rule: models nominate, people judge. No model output ever moves a trust score or changes the graph on its own.
Suspected conflicts
A local scan — at write time, six-hourly in the daemon, or on demand with Scan now — flags unlinked look-alike pairs as suspected conflicts. Each pair waits for a judgment, from you in the Review drawer or from the assistant at the start of its next session:
- Conflict — they genuinely contradict; a visible
conflicts-withedge records it (and starts the evidence-based trust demotion on stable knowledge — see Trust & decay). - Replaces — the newer supersedes the older; the older is archived into the node's history, readable forever, never silently in the way.
- Dismiss — fine together; the pair is never raised again.
Suspects carry a triage hint from the local NLI model (contradiction / entailment / neutral), which orders the queue — contradiction-hinted pairs first — but never decides anything. When the model reads a contradiction as lopsided, the hint also names which side likely carries the negation ("the older side"), so you know where to look first.
A contradiction also travels along edges. When a new note contradicts one already in the graph — or you link it replaces / conflicts-with — every note that builds on, needs, or holds because of the old one is queued against the new one with the hint inherited: "the harbor ingester mirrors the sibling's settings" is worth a second look the moment "the sibling now retries 19 times" arrives, though no sentence model can see that pair as a contradiction — the two notes name different subjects. Judge it like any other suspect: dismiss it if the dependent still stands on its own. Which verbs carry this is the inherits role in the graph's ontology.
Checkup: interrogate the canon
Beyond finding what the graph says, the Checkup panel asks whether it agrees. It runs a small local NLI model (natural-language inference — entailment / neutral / contradiction) over your own knowledge: zero tokens, fully offline.


Type a claim and the canon answers with receipts. A real run against this repository's graph: the claim "graph is cloud saved" comes back contradicts, listing the principles that disagree — local-first, user-owned — each one click from its full node. A claim the canon supports lists its backing nodes the same way. Retracted (0.9.2) means a Tombstone says the claim was deliberately removed — sorted out by role before the model runs, because "Removed: X" against "X" is not a pair it reads reliably — so the claim is not something to act on. And silent is an answer too: nearby nodes with no verdict means the graph simply doesn't know — usually something worth capturing.
Above the claim box, one-click sweeps over the whole graph:
- Find hidden conflicts — look-alike pairs the model reads as contradictions, plus less similar pairs whose titles name the same subject and contradict each other — the same second way in the write path uses.
- Find duplicates — pairs that state the same thing; judge as Replaces to merge their histories.
Both read at most 300 pairs per click. A pair judged without being queued is remembered — until either note is edited or the logic model changes — so on a large graph each click continues where the last one stopped. When a sweep finds nothing it says why: how many pairs it judged, and how many close pairs were already linked, already raised, archived, or judged on an earlier run.
- Check open problems — does an existing Decision or Resolution already answer an open Problem? Pairs that are already linked another way are flagged as such rather than re-suggested blindly.
- Triage stale notes — for each note whose trust has decayed, what the live canon suggests: reconfirm (something current still backs it — one click restores its trust), contradicted (the canon now disputes it — judge it as a conflict), or isolated (nothing current speaks to it — a candidate to archive).
Below, instant structural checks with no models at all: Decisions missing a recorded reason, nodes with no connections. Everything a sweep finds lands as a nomination in the Review drawer.
Crowded subjects (0.11.0) lists the piles of close notes a sleep would consolidate, each named by the terms its notes share, with Keep to mark one reviewed as it is. Notes nothing reaches (no edge, no tag) are listed as islands with Keep all. Both are measured from the stored vectors, with no model. To consolidate, ask your assistant to sleep (/engram-sleep); see Memory model.
The assistant's side
Your assistant has the same power as the check_claim MCP tool — "does the canon contradict this plan?" before acting, no tokens spent — and every write it makes comes back with the full verdict set in the same turn (see Recall & capture).
One honesty note: the similarity thresholds behind the conflict scan were calibrated on the default embedding model. If you switch embedding models, detection quality is unvalidated until re-tuned — the pane says so where you switch.