Skip to content

Memory#

A memory is a knowledge base of kind memory. Instead of documents it keeps facts: short, dated statements about people, projects, organisations, decisions, preferences and deadlines, each saying where it came from. Facts change — someone changes team, a launch moves — so a memory keeps what holds now apart from what held before, and answers with the first while still finding the second.

A fact#

Part Example What it is
Subject Ana Who or what the fact is about, by name (up to 120 characters)
Attribute role What about the subject: role, employer, deadline, preferred language, decision (up to 120 characters)
Fact Ana works in research. One sentence that stands on its own and names its subject (up to 2,000 characters)
Source chat: Planning Where it came from: a conversation, added by hand, a file name
When said 2026-10-12 When the fact was said — given with the fact, else when it was kept; a date in the future is taken as now

A fact also records when it was kept, when it was last edited, the facts it replaced, and — once replaced — which fact replaced it and until when it held.

Subject and attribute decide what replaces what#

Two facts are about the same thing when their subject and attribute are the same, ignoring case and extra spaces: Ana / role and ana / Role are one thing; Ana / role and Ana / job are two. When you keep a fact:

It is It becomes
About a new thing Current
About a thing with a current fact, said later Current; the older one moves to the history, with until when it held (the new fact's date) and which fact replaced it
About a thing with a current fact, said earlier History at once: an old message never overrules a newer one
The same sentence as the current fact Nothing: it is not kept twice

Editing a fact corrects its words, subject or attribute, keeps its id and its history, and replaces nothing. Forgetting a fact deletes it; with its history, the facts it replaced too, back to the first.

This is why the attribute matters: keep using the same word for the same thing (role, not role one day and position the next), or a newer fact will stand beside the older one instead of replacing it. The extractor is told the subjects and attributes the memory already knows so it names them the same way.

The history, and how search uses it#

Facts are notes of the memory — one Markdown file each, on the memory's own drive on its machine: current ones under notes/memory/, replaced ones under notes/memory/history/. Each is indexed like any document, its text saying the fact, its date and source, and — for a replaced one — since when it no longer holds. A search therefore finds facts by meaning and by words, with citations, like any base.

After ranking, a memory puts current facts before replaced ones:

  • What does Ana work on? — Ana works in research, current, first.
  • What was Ana's role in September? — still found: Ana leads the data team (as of 1 September, until 12 October), after any current fact the search also found.

Proposed from a conversation you choose#

A memory may have an extractor (spec.extractor): an Eos chat deployment that reads a conversation and proposes its facts. It runs only when you ask — Remember this conversation in the app's chat or the Playground, astra metis remember --from, or POST …/memory/extract:

  1. The conversation is sent once to the memory's machine. Only the person's and the model's turns are read — the last 24,000 characters.
  2. The extractor is given the conversation, today's date and up to 80 of the memory's current facts, and is asked for durable facts as JSON: about people, projects, organisations, decisions, preferences, dates and deadlines, written in the conversation's language. It is told to leave out small talk, questions, guesses, what the assistant only suggested, and anything secret.
  3. Each proposal comes back with what it would replace, or marked as already known. Nothing is kept yet.
  4. You keep the ones you choose; they are saved by the rules above.

The extractor answers at temperature 0, with its thinking turned off for models that have one, and is given up to 10 minutes. A small model on a CPU — Qwen3 4B — takes from seconds to a couple of minutes.

What is never kept#

A fact that looks like a secret is refused when kept by hand (FACT_SENSITIVE) and dropped from extraction's proposals, which say so (a fact about Bruno looked like a password). Looks like a secret:

  • the words password, senha, passwd, API key, secret key, private key, token:, or a PEM block (-----BEGIN);
  • a word starting like a known key or token and at least 16 characters long: sk-, ghp_, gho_, github_pat_, xoxb-, xoxp-, AKIA, AIza, glpat-, ast_, eyJ;
  • a run of 32 or more letters and digits mixed, with at least 4 digits;
  • a card number: 13 to 19 digits (spaces and dashes allowed) that pass the Luhn check.

Keep secrets in your secret manager and refer to them by name.

Who reads a memory#

A memory belongs to its workspace, like any base: whoever may read the workspace's knowledge bases may read its facts, and whoever may add to them may keep, correct and forget facts. There is no per-person scope inside one memory: for a memory of your own, make one in a workspace of your own. Deleting the memory deletes every fact and its history.

Not yet#

  • Remembering by itself. Nothing is extracted unless you ask, each time; there is no switch that remembers every conversation.
  • A memory always in front of the model. A chat does not read the memory by itself; an assistant searches it — Claude Code's skill, an MCP assistant's search_knowledge_base, or a search tool you give a deployment (A memory for your assistant).
  • Facts from documents. Facts come from conversations and by hand; facts and relations read out of a base's documents are planned next.
  • Forgetting everything about one person at once across facts, other than forgetting their facts or deleting the memory.