Not all memories carry the same risk if they are wrong. A misremembered package manager preference is annoying; a misremembered budget ceiling or production constraint could cause real harm. Engram uses a three-tier risk model to decide — without asking you every time — whether a candidate memory can be written automatically or must wait for explicit approval.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/xantorres/engram/llms.txt
Use this file to discover all available pages before exploring further.
The three tiers
| Tier | Name | Behaviour |
|---|---|---|
| 1 | Auto-append | Written to memory-log.md immediately on sync --apply. No human confirmation required. |
| 2 | Registry | Added to the memory.md frontmatter registry automatically. Used for memories that need indexing but pose no sensitivity risk. |
| 3 | Curated | Held in queue/<id>.json until you explicitly run engram promote <id> --confirm. requires_confirm returns true. |
classify(kind, conflict=…, edits_curated_node=…):
- The dedup engine returned
conflict— a contradictory memory already exists. - The new memory would edit a node already in a curated slot of the registry.
- The memory’s
kindis a member ofCURATED_KINDS.
Kind-to-tier mapping
| Kind | Default Tier | Auto-appendable? | Notes |
|---|---|---|---|
preference | 1 | ✅ Yes | Everyday workflow preferences — low blast radius if wrong |
tooling | 1 | ✅ Yes | CLI tools, editors, package managers |
project | 1 | ✅ Yes | Active repos, tech-stack facts |
infra | 1 | ✅ Yes | Hosts, regions, cluster names |
identity | 3 | ❌ No | Names, handles, account IDs — curated |
fiscal | 3 | ❌ No | Budgets, billing — curated |
people | 3 | ❌ No | Contacts, team roles — curated |
constraint | 3 | ❌ No | Policies, approval gates — curated |
location | 3 | ❌ No | Offices, time zones — curated |
health | 3 | ❌ No | Medical / dietary — curated |
There is no kind that defaults to tier 2. Tier 2 is reserved for memories that are elevated out of tier 1 due to minor metadata concerns during registry reconciliation — it is assigned programmatically, not by kind alone.
Why conflicts always escalate
The dedup engine compares every incoming candidate against all promoted memories using token overlap and precision token matching (identifiers, dates, monetary amounts). When it detects a contradiction — the same subject but a different value — it returns"conflict" and classify immediately returns TIER_CURATED, regardless of what kind the memory has.
preference or tooling memory can end up in the review queue if it contradicts something you previously confirmed. The alternative — silently overwriting a promoted memory with an unverified harvested value — would be a data integrity failure.
The requires_confirm gate
Any code path that writes to the permanent store checks requires_confirm(tier) before proceeding:
requires_confirm returns False and the bridge writes directly. For tier-3 memories, the bridge leaves the record in queue/ and prints a prompt reminding you to run engram review list.
The kind_allowlist mechanism
The kind_allowlist configuration key lets you expand the set of kinds that Engram is permitted to auto-capture for a given project. For example, adding project to the allowlist (it already is by default) or adding infra lets passive harvest write those kinds to the log without asking.
engram remember (which always stages a candidate regardless of kind) or on conflict escalation.
Tier assignment at a glance
Step-by-step tier classification walkthrough
Step-by-step tier classification walkthrough
When the bridge processes a pending candidate, it runs the following checks in order:
-
Conflict check — Has dedup returned
"conflict"for this candidate?- Yes →
TIER_CURATED(stop)
- Yes →
-
Curated-node edit check — Does this memory update the
factof an existingidthat currently lives in a curated slot?- Yes →
TIER_CURATED(stop)
- Yes →
-
Kind check — Is
kindinCURATED_KINDS?- Yes →
TIER_CURATED(stop)
- Yes →
-
Default — Kind is in
AUTO_KINDS.- →
TIER_AUTO_APPEND
- →
risk_tier on the memory record and is visible in engram review list and audit.jsonl.