Skip to content

The four memory types

Every memory has a type, set when the agent writes it with memory_type. The type decides how the memory is stored and kept, not how it scores. All four types carry significance and the STARE dimension scores in the same way.

Type Holds Example
semantic (the default) Facts, preferences, decisions Zephyr Logistics renews its support contract every March.
episodic Something that happened, at a point in time Dana from Zephyr escalated ticket 4411 on the call today; we agreed a workaround.
procedural How to do something the agent can do To issue a refund, run scripts/refund.sh with the order id.
commitment Something the agent owes, with a due date or schedule Send Zephyr Logistics the renewal quote by October 20.

Semantic memory is the default; a mm_remember call without memory_type stores one. Use it for anything that stays true until something changes it: a customer’s preferences, a decision, how a system is set up.

The category argument (fact, decision, preference, observation and so on) sorts semantic memories further. It decides which section of the compiled memory file a memory appears under, such as Core Facts or Key Decisions.

An episodic memory records an event: a call, an incident, a release. Write one when when it happened is part of the meaning.

mm_remember({"source": "agent", "text": "Dana from Zephyr Logistics escalated ticket 4411 on the call today; we agreed a workaround.",
"memory_type": "episodic", "category": "episode"})

To list an agent’s events, filter search by type:

mm_search({"memory_type": "episodic"})
| # | mem_id | Sig | Eligible | Category | Date | Text |
|---|--------|-----|----------|----------|------|------|
| 1 | `1e66c92f07e2d62d` | 0.80 | - | episode | 2026-10-03 | Dana from Zephyr Logistics escalated ticket 4411 on the call today; we agreed a ... |

Give events the episode category as well; that is what places them under Key Episodes in the compiled file. An episodic memory with category fact is listed with the facts.

Grouping related events across sessions into threads is part of the Episodic dimension of STARE. It is in pilot and off by default; see STARE.

A procedural memory tells the agent it can do something, and how. This guards against a common failure: an agent that says “I can’t send that” when instructions for doing it are already in its memory.

Procedural memories behave differently from the rest:

  • They are kept when the budget is tight. Procedures appear in the compiled file under Capabilities, ahead of everything else, and like pinned memories they are dropped only if the protected memories alone overflow the budget.
  • Only the agent itself, or a person, can store one. Because procedures are always kept, a write from another identity is stored as semantic instead, and the response says so. Set MM_ACTOR to the agent’s own name, as in the Quickstart.

Before an agent reports that it cannot do something, it can check:

mm_capability_verify({"capability": "refund"})
**YES** — capability verified: 'refund'
- **mem_id:** `2b47366a861a87ca`
- **text:** To issue a refund, run scripts/refund.sh with the order id; amounts over 500 EUR need a second approver.
- **sig:** 0.80
- **last_invoked_at:** (never recorded)
- **created:** 2026-10-03
- **other matches:** 0

When nothing matches, the answer is **NO**, and the agent’s inability report stands. Pass "update_invoked": true when the agent actually uses the capability, to record when it was last used.

A commitment is a promise with a due date, a recurring duty with a schedule, or a standing obligation. It differs from the other types in two ways:

  • It is stored at once, not queued for consolidation, so it is on the agent’s due list as soon as the write returns.
  • It stays on the due list until it is closed, however old it gets. Closing it is an explicit, recorded act.
mm_remember({"source": "agent", "text": "Send Zephyr Logistics the renewal quote.",
"memory_type": "commitment", "commitment_status": "pending", "due_at": "2026-10-20"})
**Remembered** — `2feb993d7cc72852`

Commitments have their own guide: Commitments.

Ask If yes
Does the agent owe this to someone? commitment
Is this how to do something? procedural
Does it matter when this happened? episodic
Otherwise semantic

One conversation can produce several memories of different types. A support call might yield an event (the escalation), a fact (the customer’s renewal month) and a commitment (the quote that was promised). Write each one separately.

Commitments are searchable as soon as they are written. The other three types are queued: the writing agent can find them at once, and consolidation moves them into the store for everyone else. See When memories become searchable.