Overview
Memories and ingested documents live in one graph, connected by the entities they mention. Your saved belief “the ingest worker restarts via systemd” and the runbook you ingested both mention ingest worker, so they sit two hops apart, and recall follows the same edges.Stored per chunk
Entity edges point at individual chunks, so the engine knows which section mentions what.
Shown per document
The graph API rolls those up into one weighted edge, so a 300-page PDF is one node, not 300.
What is in it
Only active memories and edges appear. Stale versions and reverted resolutions drop out.
Indexing
Indexing runs automatically a few seconds after you save a memory or add a file, debounced so a folder ingest becomes one run. Saves stay fast because the model work never blocks them.Extract
One model call per row against a closed vocabulary of 9 entity types, capped at the 5 most
salient entities. The prompt lists names already in your graph so the model reuses them.
Validate
A deterministic pass drops out-of-vocabulary types, math expressions, sentence fragments, and
names under two letters. Formula-heavy chunks skip the model entirely.
Resolve
Survivors resolve to a node by name key: casefolded, trimmed, leading
@ dropped. Folded-away
spellings resolve too, so Opus 4.8 lands on Claude Opus 4.8.Vocabularies and confidence
Vocabularies and confidence
Entity types:
person, organization, project, tool, technology, agent, place,
event, and concept, which is explicitly a last resort. agent means a named AI model or
assistant that does work, the actor rather than the company that made it.The same call extracts typed relationships against a closed predicate list: uses,
depends_on, part_of, created_by, works_on, works_at, located_in, attended.
Out-of-vocabulary predicates and anything under 0.7 confidence are kept as plain mention
edges.A node’s identity is its name key alone. Type is an attribute, so an extractor that says
technology today and project tomorrow cannot fork the node.The schema
The vocabularies live in a registry, not in code. Edit them in the viewer’s Schema tab, withmemloom schema, or at GET /memory/schema.
The description you write is the extraction rule, so write it like one: “a named drug or
supplement” rather than “medications”. A proposal only surfaces after two independent extractions
asked for it.
Managing entities
The Schema tab lists every entity with its usage counts and the tools to correct it.
memloom can find the duplicates for you. See Entity resolution.
Traversal
related_entities.
In the viewer
Click a document diamond to expand it into chunks with their real chunk-level edges. Click a chunk to read it, with breadcrumbs back up. A document’s panel has an Open file button.The daemon only opens files it previously ingested, looked up by document id and never by a path
from the request, so that button cannot be pointed at arbitrary files.