Memory agents can share
and correct.
With the history kept.
When a user changes a preference, an agent has to stop using the old value without losing the record of it. Recall is a memory layer built on polign_db. Each kind of fact declares how a new value applies, so a correction follows a rule rather than a model's judgment, and every earlier statement stays queryable. Agents in different processes and on different machines read and write the same memory.
Typed memory
A memory is a subject, a predicate, and a typed value. Fifteen built-in predicates cover preferences, identity, and project facts, and you can define more. Agents write only declared kinds, so one cannot invent a second name for a fact that already exists.
Corrections by rule
A predicate declares whether it holds one value or many. A new value replaces the old one when only one is allowed, and is added alongside when several are. Restating what is already believed writes nothing. No model is asked which value to keep.
History you can query
Forgetting records a withdrawal instead of deleting. Ask what is believed now, what was believed at any earlier moment, or the full history of a fact. Nothing is edited in place.
Shared across agents
Agents in different processes and on different machines use the same memory. A correction one agent writes is returned by later reads from the others. Recall adds no transactions of its own, so read timing follows the storage backend.
Replayable audit
Export a versioned bundle of the events and rules behind a memory query result. A standalone verifier reproduces that result offline, without a database or an embedding model. It covers what memory returned, not the agent's reasoning.
Your storage
Runs on polign_db against your own S3, GCS, or Azure bucket. API keys bound to a namespace are the isolation boundary between teams and agents. No embedding service is needed to start; bring your own model for semantic search.
Quick start
Start a polign_db node, then use Recall from Python or connect an agent through MCP. The example needs no model or embedding API key. The Claude Code plugin is a ready-made MCP integration for memory across coding sessions, and recall-livekit gives a LiveKit voice agent the caller's facts before its first reply.
# a local node; use -store s3://bucket/prefix for a durable one polign-server -store "fs:$HOME/.local/share/recall/data" # in another terminal pip install polign-recall export POLIGN_URL=http://127.0.0.1:23000 export POLIGN_COLLECTION=recall_demo # one process saves a preference, then changes it from polign_recall import Client with Client() as memory: memory.remember("user", "prefers_editor", "vim") memory.remember("user", "prefers_editor", "neovim") # a later process, anywhere with the same URL and collection with Client() as memory: print(memory.recall("user", "prefers_editor")[0].value) # neovim print([e.value for e in memory.history("user", "prefers_editor")]) # ['vim', 'neovim']
# any MCP host with a stdio transport launches the polign CLI { "mcpServers": { "recall": { "command": "/absolute/path/to/polign", "args": ["mcp", "-memory-only", "-write"], "env": { "POLIGN_URL": "http://127.0.0.1:23000", "POLIGN_COLLECTION": "recall_demo" } } } } # tools the host sees: list_predicates, remember, recall, # memory_history, forget. Omit -write to expose only the readers.
What it is, and what it is not yet
Recall is early and has no production deployments yet. The list below is what ships today; the second column is what it does not do, stated plainly.
- Go library with no dependencies outside the standard library
- Python client on PyPI as polign-recall
- MCP server through the polign CLI, read-only or read-write
- Claude Code plugin for memory across sessions
- LiveKit Agents package for voice agents that remember the caller
- Fifteen built-in predicates, extendable per application
- As-of reads that answer what was believed at an earlier time
- Audit bundles with an offline verifier
- Word-overlap search built in; model embeddings optional
- Not an extractor: your agent proposes facts, Recall validates them and applies the rules
- No link from a belief to the words it came from, yet
- Forget is a withdrawal, not permanent deletion; delete the records in polign_db for that
- No hosted version; it runs where you run it
Give your agents one memory.
Open source, on a database in your own bucket.