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:
| Status | Meaning |
|---|---|
provided | Supplied by a client or user during encode/update |
inferred | Created deterministically by engine lifecycle work, such as dream_tick |
legacy | Record was created before typed meta-memory existed |
unavailable | New 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:
pub enum MetaRelation {
MotivatedBy,
CausedBy,
DerivedFrom,
Supports,
Contradicts,
ChoseOver,
Explains,
ContextOf,
}| Relation | Reads 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:
{
"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:
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
storeandupdate - 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_jsonparameter) - CMA archive export and import (preserved across round-trips)
recall.query(indexed for "why" queries)recall.graph(returnsmeta_edges)dream_tick(emitsinferredmeta-memory withDerivedFrombacklinks)
Next Steps
See the full MetaMemory and MetaEdge type definitions
Send meta-memory with every store and update call
Search the why plane with recall.query and recall.graph