ConceptsCognitive primitives

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:

● fact● entity● decisionlive force simulation

The ten types

PrimitiveCategoryDecay classWhen to use it
FactDeclarativesemantic (H ≈ 58 d)Durable knowledge — “X is true”
DecisionDeclarativesemantic (H ≈ 58 d)Policy/choice with rationale + supersession
EpisodeEpisodicepisodic (H ≈ 35 d)Temporal event with duration + linked facts
EntityDeclarativenone (no decay)Canonical thing (person, org, project, place)
StrategyProceduralprocedural (H ≈ 173 d)“When X happens, do Y” behavioural pattern
WorkflowProceduralprocedural (H ≈ 173 d)Multi-step recipe with checkpoints
SkillProceduralprocedural (H ≈ 173 d)Reusable capability (prompt template + context)
TaskOperationalnone (lifecycle-based)Trackable work item with state machine
EventEpisodicimmutable (no decay)Immutable occurrence (system, external, user)
ReasoningProceduralconditional (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  → Fact

If 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.