Cognitive primitives
Most memory systems give you one type: “a fact”. Mnemosyne ships ten, because human-style memory isn’t homogeneous and agents reason better when the structure of the storage matches the structure of the information.
A live preview — every dot is a typed node, every line a typed edge. Mouse the canvas to see it react:
The ten types
| Primitive | Category | Decay class | When to use it |
|---|---|---|---|
| Fact | Declarative | semantic (H ≈ 58 d) | Durable knowledge — “X is true” |
| Decision | Declarative | semantic (H ≈ 58 d) | Policy/choice with rationale + supersession |
| Episode | Episodic | episodic (H ≈ 35 d) | Temporal event with duration + linked facts |
| Entity | Declarative | none (no decay) | Canonical thing (person, org, project, place) |
| Strategy | Procedural | procedural (H ≈ 173 d) | “When X happens, do Y” behavioural pattern |
| Workflow | Procedural | procedural (H ≈ 173 d) | Multi-step recipe with checkpoints |
| Skill | Procedural | procedural (H ≈ 173 d) | Reusable capability (prompt template + context) |
| Task | Operational | none (lifecycle-based) | Trackable work item with state machine |
| Event | Episodic | immutable (no decay) | Immutable occurrence (system, external, user) |
| Reasoning | Procedural | conditional (depends on Worth) | Cached chain-of-thought with success tracking |
Decay half-life (H) determines how quickly the activation score of a recalled item drops over time. Procedural memory persists much longer than episodic because it represents how the agent acts, not what happened.
Which ones exist today
Status (v3-alpha): All ten primitives are live — each has its own table,
RLS policies, HNSW index, and MCP tools, wired at server boot. A hyperedge
exists as an eleventh PrimitiveKind for n-ary relations (see
Hypergraph relations). Interfaces may still change
before 3.0 stable.
Choosing between them
Use this decision tree:
Is this thing currently happening or just happened?
├── Yes → Event (or Task, if your agent has to do something about it)
└── No → Is it a noun (a thing) or a claim (a statement)?
├── Noun → Entity
└── Claim → Is the claim policy-like (a rule we follow)?
├── Yes → Decision
└── No → Is the claim about "how to do something"?
├── Yes → Strategy / Workflow / Skill
└── No → FactIf the choice is genuinely ambiguous, write a Fact. You can always promote it later — Mnemosyne’s bitemporal model treats promotion as supersession, not a destructive update.
Example walkthrough
A user finishes a deploy. Three different primitives might apply:
{
"type": "event",
"name": "deploy.completed",
"source": "github-actions",
"occurredAt": "2026-06-07T18:22:00Z",
"metadata": { "version": "v2.3.1", "duration": 184 }
}Captures that something happened. Immutable, time-anchored.
A mature agent writes all three on the same event. They reinforce each other.