Introduction
Polign Recall is memory for AI agents. When a fact changes, the new value replaces the old one by a declared rule, the old value stays on record, and every agent reads the same memory from a bucket you own.
Most agent memory is text the model searches. That works until a fact changes. Then the search finds the old value and the new one, the model has to guess which is true, and nobody can say later what the agent believed when it acted. Recall stores facts with a type, so the answer comes from a rule.
Memory where a correction follows a rule, nothing is erased, and you can ask what was believed at any moment.
A memory is a typed fact
Each memory has a subject (who or what it describes), a predicate (the kind of fact), and a value:
| Subject | Predicate | Value |
|---|---|---|
user | prefers_editor | neovim |
billing-api | prefers_test_framework | pytest |
billing-api | uses_technology | Go |
A registry lists the predicates your application accepts. Recall ships with fifteen, covering preferences, identity, and project facts, and you can add your own. Agents can write only declared kinds, so one agent cannot invent a second name for a fact that already exists. A statement that fits no predicate is kept as a note instead of being dropped.
Corrections follow a rule
- One value. A predicate like
prefers_editorholds one value. A new value replaces the current one. - Several values. A predicate like
uses_technologyholds many. A new value is added next to the others. - Restating changes nothing. Saying what is already believed writes nothing.
No model is asked which value to keep. Your agent proposes facts; Recall checks them against the registry and applies the rule.
Nothing is erased
Every statement is kept in order. A correction adds a new statement, and forgetting adds a withdrawal. From that record you can ask three things:
- What is believed now.
- What was believed at an earlier moment, with the same call and an
as_oftime. - The full history of a fact, oldest first.
Forgetting removes a fact from current answers. It is not permanent deletion; delete the records in polign_db for that.
One memory for many agents
Agents in different processes and on different machines read and write the same memory. A correction one agent writes is returned by later reads from the others. API keys bound to a namespace keep one team's or customer's memory apart from another's.
What it runs on
Recall stores its records in polign_db, Polign's engine, which keeps everything in your own S3, GCS, or Azure bucket. On one machine, the Python client starts a local server in a folder for you. To share memory across machines, you run polign_db against your bucket.
What it is not, yet
- Not an extractor. It does not read conversations on its own. Your agent proposes facts and Recall validates them.
- No hosted version. It runs where you run it.
- Early. Recall has no production deployments yet.
Next steps
- Get started to save, correct, and read back your first memory.
- Claude Code gives Claude memory across sessions in one command.
- Integrations covers LangGraph, LiveKit, Vapi, and MCP hosts.
- How it works explains the engine underneath and its guarantees.