Skip to content

Meta-Memory Plane

The structured 'why' plane attached to every record — intent, rationale, evidence, decisions, and a typed context graph.

Meta-memory is a cross-cutting plane attached to every curated MemoryRecord and every RawJournalRecord. It is not a sixth memory store; it is structured metadata that records why a memory exists, why the agent or user thought something was true or useful, and how that rationale links to other memories.

recall.query indexes the provided and inferred meta-memory text, so you can search for "why this decision" the same way you search for "what was decided." recall.graph can include the full plane with include_meta: true.

Why a "why" plane?

Curated memory tells you what. Raw journal tells you what was said. Neither captures the reasoning that made an event memorable — the constraints, alternatives weighed, evidence relied on, or the decision reached. Without that, downstream agents can recall a fact without knowing whether it is still load-bearing.

Meta-memory closes that gap. Every record can carry:

  • Intent — why the memory was captured or generated
  • Rationale — why the agent or user believed the memory was true or useful
  • Trigger — what event prompted capture
  • Goals — what the agent was trying to accomplish
  • Evidence — pointers to source records, raw journal entries, excerpts, or external references
  • Assumptions — explicit assumptions made at capture time
  • Alternatives — other options considered and why they were not chosen
  • Decision — the chosen action or conclusion
  • Confidence — a 0.0 to 1.0 self-rating
  • Tags — free-form labels for retrieval

Capture Status

Not every record can claim a fully reasoned rationale. Capture status separates explicit rationale from engine-derived or missing rationale:

StatusMeaning
providedSupplied by a client or user during encode/update
inferredCreated deterministically by engine lifecycle work, such as dream_tick
legacyRecord was created before typed meta-memory existed
unavailableNew record has no explicit rationale at ingest time

The Context Graph

Meta-memory carries a typed graph. Each MetaEdge connects two records (or a meta plane to a record) with a relation that explains how they relate:

rust
pub enum MetaRelation {
    MotivatedBy,
    CausedBy,
    DerivedFrom,
    Supports,
    Contradicts,
    ChoseOver,
    Explains,
    ContextOf,
}
RelationReads as
MotivatedBy"this memory exists because of …"
CausedBy"this memory was caused by …"
DerivedFrom"this memory was derived from …" (raw → curated, or summary → source)
Supports"this memory supports the claim in …"
Contradicts"this memory contradicts …"
ChoseOver"this decision was chosen over …"
Explains"this memory explains …"
ContextOf"this memory provides context for …"

dream_tick populates DerivedFrom automatically when it summarizes raw journal entries into curated episodic or semantic records, giving every dream-derived memory a backlink to the verbatim source.

Provided in Encode

Send meta-memory directly with encode.store, encode.batch, encode.update, encode.store_raw, and encode.batch_raw:

json
{
  "content": { "blocks": [/* ... */] },
  "store": "semantic",
  "meta": {
    "intent": "Remember why this preference is load-bearing",
    "rationale": "User repeatedly asked for low-load workflows during long test runs.",
    "decision": "Default to low-load verification commands.",
    "alternatives": [
      { "option": "Always run the full integration suite", "reason_dropped": "Latency cost too high" }
    ],
    "evidence": [
      { "kind": "raw_journal", "record_id": "01916e3a-..." }
    ],
    "confidence": 0.9,
    "tags": ["preferences", "workflow"]
  }
}

Searching the Why Plane

recall.query indexes provided and inferred meta-memory text. A query like "why did we drop the full integration suite" matches against rationale, alternatives, and decision text — even when the record's primary content does not mention those words.

recall.graph exposes the typed edges with include_meta: true, returning the meta-memory payload and meta_edges array alongside association edges. This lets you visualize a decision and the reasoning chain that produced it as a single graph.

CLI

The CLI accepts an --meta-json flag on store and store-raw:

bash
cerememory store \
  "Default to low-load verification commands" \
  --store semantic \
  --meta-json '{
    "intent": "Capture the rule and why",
    "rationale": "User repeatedly asked for low-load workflows.",
    "decision": "Use --quick by default",
    "confidence": 0.9
  }'

The same --meta-json is available on store-raw, where it captures why a verbatim journal entry is being preserved (forensic intent, redaction notes, follow-up reminders).

Cross-Transport Coverage

Meta-memory is wired through every flow that creates, updates, exports, imports, summarizes, recalls, or rebuilds memory:

  • Engine store and update
  • HTTP /v1/encode, /v1/encode/batch, /v1/encode/raw, /v1/encode/raw/batch, PATCH /v1/encode/:id
  • gRPC encode and recall messages (typed MetaMemory)
  • MCP store, update, batch_store, store_raw, batch_store_raw (meta_json parameter)
  • CMA archive export and import (preserved across round-trips)
  • recall.query (indexed for "why" queries)
  • recall.graph (returns meta_edges)
  • dream_tick (emits inferred meta-memory with DerivedFrom backlinks)

Next Steps

Data Model

See the full MetaMemory and MetaEdge type definitions

Encode Operations

Send meta-memory with every store and update call

Recall Operations

Search the why plane with recall.query and recall.graph