Skip to content

Core concepts

On this page you will learn:

  1. which fields a memory record has and where they come from;
  2. what the unverified, stale and conflict statuses mean;
  3. how records relate to each other: versions of one fact, summaries and the graph.

Running example: the team agreed that staging is deployed through the app-staging systemd unit, and the rule is written down in docs/deploy.md.

A record is one fact, decision or agreement. The agent creates it with remember and finds it with search. This is a record as it appears in search results:

{
"id": "4d428a41-e7b0-4f81-a886-f40c6f6c766c",
"workspace": "default",
"scope": "shared",
"content": "staging is deployed through the app-staging systemd unit",
"source": "agent",
"source_id": "docs/deploy.md",
"source_hash": "sha256:9f2c…",
"source_revision": "a1b2c3d",
"fact_key": "deploy.staging.method",
"confidence": 0.8,
"status": "unverified",
"derived_from": [],
"score": 2,
"graph_relations": [],
"created_at": "2026-10-05T09:12:00+00:00",
"updated_at": "2026-10-05T09:12:00+00:00"
}
FieldSet byMeaning
idserverUnique record ID. Used by forget and derived_from.
workspaceagentWorkspace — a named collection inside a project. Defaults to default.
scopeagentA filter label, shared by default. It does not restrict access (see below).
contentagentThe record text. Secrets are replaced with placeholders before saving.
sourceagentWho saved it: owner by default; you will also see agent, telegram and others.
source_id, source_hash, source_revisionagentProvenance: the document, a hash of its content, its version. See Source and freshness.
fact_keyagent or archivistTopic key. Records with the same key are compared with each other.
confidenceagent, archivistConfidence from 0 to 1, default 0.5.
statusserverunverified, stale or conflict — computed on every search.
derived_fromagentIDs of the records this one summarizes.
scoreserverRelevance to the query in this search.
graph_relationsarchivistLinks to other records.
created_at, updated_atserverCreation and last-change time (ISO 8601).

remember never deletes or overwrites existing records: every call adds a new one. Only forget deletes, and softly — the record disappears from search and the graph, while the fact of deletion is kept for audit.

There is no verified status in MMW. The server records where a fact came from; it does not claim the fact is true.

StatusWhenWhat the agent should do
unverifiedThe normal state of every new record, even one with a source_hash.Use it, keeping the source and confidence in mind.
staleThe source changed: search or validate_memory received a current_source_hash different from the stored one; or the archivist marked the record as contradicted by a newer one.Re-read the source and update the fact.
conflictOther records in the same workspace share the fact_key but differ in content or source hash.Do not pick one silently — show the disagreement to a person.

If several statuses apply, the more alarming one wins: conflict over stale, stale over unverified. A summary takes the worst status of the records it was built from.

scope (shared by default; private is common) is just a tag you can filter search and validate_memory by. A record with scope: "private" is visible to everyone with access to the project.

Who sees what is decided elsewhere:

  • in a personal account — by the key’s project (see Workspaces and projects);
  • in an organization — by the record’s visibility: author only, department, project or the whole organization (see Visibility).

A number from 0.0 (unsure) to 1.0 (certain), default 0.5. Values outside the range are rejected. The agent sets it when saving; the archivist may lower an older record’s confidence when a newer one refines or contradicts it.

A good habit: 0.9 and up for what was read in a document or confirmed by a person; 0.5 for the agent’s own conclusions; lower for guesses.

fact_key is a stable name for a topic, such as deploy.staging.method. Saving again with the same key adds a new version; earlier ones are kept and nothing is deleted.

fact_key = deploy.staging.method
───────────────────────────────────────────────────────────
v1 "through the app-staging systemd unit" ─┐
v2 "through Docker Compose, staging service" ├─ both have status conflict
─┘ until the wrong one is removed with forget

If the versions are identical (same text and same source hash), there is no conflict. Details: Conflicts and summaries.

If you did not set a fact_key, the archivist may assign a service key of the form archivist:shelf:short-summary.

When the agent condenses several records into one (“this week’s deployment summary”), it passes their IDs in derived_from (up to 50 existing records). The summary remembers what it was built from and inherits the conflict and stale status of its sources, so condensing never hides unresolved contradictions.

After a record is saved, the archivist compares it with recent records in the same workspace and may create links. Search results show them in graph_relations:

"graph_relations": [
{
"relation": "supersedes",
"direction": "outgoing",
"weight": 0.9,
"target_id": "0b7e…",
"preview": "staging is deployed manually with scp"
}
]

Relation types: relates_to, fixes_issue and supersedes. preview is the first 120 characters of the linked record. Links to deleted records, or records you cannot see, are not shown.