core
One per agent, stored encrypted. Persona, its understanding of its owner, mood, unfinished business, passing notes: all of it is its own stance, written by itself, never produced by automatic extraction and never shared with others.
A memory answers only what the conclusion is, who it is about, when, and where it came from. The original text never enters memory; it stays in the raw transcript table. By turn number, use recollect_turn to fetch that turn, with up to 10 turns of context on either side. So the model can be swapped at any time and prompts can be edited at any time, while not a single byte of the original session is lost.
Memory is not one thing. One half is the agent's own encrypted notebook, visible and writable only to itself; the other half is the world it lives through with you, searchable, traceable, and readable by other agents under the same person. World memory is shared across devices and agents: everyone extracts and recalls together; core accepts only a single agent's key.
One per agent, stored encrypted. Persona, its understanding of its owner, mood, unfinished business, passing notes: all of it is its own stance, written by itself, never produced by automatic extraction and never shared with others.
What you lived through together: who said what and when, what was decided, how it turned out. Every row carries provenance and a pointer; the pointer fetches the original words, and rows can be retracted, replaced, or read by other agents under the same owner.
Not three databases, and not three storage tiers: the same material, shown at three levels of granularity for different occasions.
Memory is not free-form paragraphs but separate rows: this one a form of address, that one a state, another an event, each hung on a fixed identity. That identity is the anchor. Click or hover any node to see what it connects to. The diagram below is illustrative only.
The tools are the same; the focus differs. Companion agents lean on the always-on brief, mood, and profile; engineering agents lean on the timeline, handoffs, and original words. Each uses the other's: companion agents also read world memory, and engineering agents have their own core.
"Who am I? Where did we get to?"
The always-on brief: identity, relations, unfinished business, all at once.
"How is he feeling right now?"
Mood and state, with time and expiry, never hardcoded as permanent attributes.
"What should I call him?"
User profile and persona settings, visible only to this agent.
"Note it down before it gets lost."
Written to the notebook, append-only; the summary flows into the always-on brief on its own.
"Where did that deploy script from last time end up?"
A one-line brief plus numbered handles; expand by number when you need detail.
"What exactly were the original words?"
Search the original words directly; hits carry turn_uid and a session id. For the source text, use "get".
"What was said before and after this line?"
Fetch the target turn by turn_uid, with 10 turns before and after in the same session; it works across machines.
"Which session did I say this in?"
List sessions, then pull context per session.
"Where did I stop last time?"
Read the handoff note the previous session left, then carry on.
"Did this one help?"
Answer after use: helped / no use / partial / conditions not met / expired.
"This one is wrong."
File a report and let a human decide; never edit the database directly, and never let the model edit itself.
13 shared memory tools plus 28 private tools (read and write the agent's own notebook); the rest are for operations and debugging and are not used day to day.
Not a copy of the chat log, but six kinds of thing you can use directly; each one traces back to the original words.
Who, where, what, how many. Can be cited repeatedly, and can be overturned.
The deploy script is scripts/build-release.sh
When it happened, what happened, how it turned out. Timestamped, so it lines up.
The release process changed once on Oct 24
What was decided, why, and whether it changed later. The old row is marked "superseded", not deleted.
Branch first, then merge; never push to main directly
How it felt and where things stood at the time, with an expiry; it fades out when stale instead of becoming a permanent label.
Wants two days off this week (until Friday)
Who and whom, what relation, from when. A change adds a new row instead of editing the old one.
A-Lan is a colleague, since Oct 12
People, projects, machines, accounts. Every memory hangs on an anchor, so a different wording does not make a different person.
"the recollect project"
Another class is written by the agent itself: persona, user profile, notebook, handoff notes. These live in core, visible only to this agent; the six kinds above live in the shared memory layer and can be read, within permissions, by other agents under the same owner.
A recall first pulls candidates from the local keyword index — exact term matching, no embedding model — then renders the same set of candidates in different ways: for the model, a numbered brief where the line-start [1] is the handle, which trades back into that memory; the turn pointer inside a memory is then resolved with recollect_turn to fetch the original words; for programs, JSON; for whoever is checking, an evidence chain that expands all the way to the original words. Switch tabs to see different cuts of the same memory.
A recall first renders candidates as one natural-language sentence with [n] handles at the start of each line; the sentence carries context, so it is harder to misread than a pile of fragments and fields. Reading it calls no model, and the model does not have to parse the schema first.
t-7f3a · span 128–214[e12] → transcript.dbExpand returns the memory body plus the turn:<uid> pointer; fetching that turn by pointer uses recollect_turn(with 10 turns before and after), and fetching a whole session uses recollect_session. The pointer points at the same passage on another device, or after a re-import.
The expansion of source text in this demo is drawn by the mechanism of recollect_turn / recollect_session ; the numbers in the buttons are illustrative; the fields and flow come from the real implementation.
The memory layer is not one big table. Identity and provenance, extraction and review, the entities themselves, usage and references, operations: each forms a group, and audit and provenance are built in from the first migration.
No need to memorize table names; the five groups are enough. Each group owns one concern, and a missing group is obvious at a glance.
These are the main groups, not the full table list: 25 formal core tables plus 7 side tables for attribution, review, events, archiving, and reuse — 32 in all. The version comes from MEMORY_VERSION = 6 which is authoritative.