Claude Code
Claude forgets everything when a session ends. The Recall plugin gives it a memory that lasts: tell it once that you prefer concise answers or that a project uses pytest, and a new session already knows. When something changes, the new value replaces the old one and the old one stays in the history.
The Polign marketplace on GitHub has two plugins:
recallremembers your preferences and project facts across sessions, using Recall.polignlets Claude search your own polign_db collections, and teaches it how to run the server and write code against it.
Both run on macOS and Linux and need Claude Code
installed first. The Recall plugin also needs the recall command, and the
Polign plugin the polign CLI.
Recall: set up in one command
Install recall. Either way you also get polign-server, the
database it keeps memories in:
brew install polign/tap/recall # macOS pip install polign-recall # macOS, Linux or Windows
Then run:
recall setup
Then restart Claude Code. The command:
- finds Claude Code and checks its version,
- starts a private database on your computer, on free local ports, with a generated key,
- checks that a memory read and the MCP tools work, without saving any sample memories,
- adds the Polign marketplace and installs
recall@polign.
You don't need to keep a server running in a terminal. When Claude connects, the plugin starts the local database if it is not already running, against the same data folder. It does not start at login.
To check a setup later, run recall doctor. It checks the same things
without starting anything or writing memories, and says which tools Claude gets. Inside
Claude, /mcp shows whether the Recall connection is up.
Which model works out the facts
At a terminal, setup asks which extraction model to use. It lists none, a
hosted model for each provider key it finds in the environment, and the local Ollama models
that generate text. It never picks one itself. To answer without being asked, give setup
the model:
recall setup -extract-model anthropic:claude-haiku-4-5-20251001
With a model, Claude gets three tools that take plain text: remember,
recall and forget. Recall's model works out the facts, picks or
creates the predicate for each one, and answers come back as sentences with what each
replaced. Things to know before you choose one:
- The model is called on every remember and forget. Remembering the exact same text again does not call it.
- It needs
ANTHROPIC_API_KEY(orOPENAI_API_KEYforopenai:<model>) in the environment Claude Code runs in, and the text you remember is sent to that provider. - A local model works too, as
ollama:<model>. Pick a fast one: a thinking model such asqwen3:8btook 24 to 82 seconds per write in our tests. - Run setup again with
-extract-model noneto go back to the typed tools, or with-typedto keep them alongside a saved model. Your memories stay as they are.
Setup run without a terminal, as by a script, asks nothing and saves no model.
Try it
Start a request with /recall:recall-memory, or just ask. Claude reads memory
before relying on saved context.
/recall:recall-memory Remember that I prefer concise answers.
In a new session:
/recall:recall-memory What answer style do I prefer?
| What you want to do | What to say |
|---|---|
| Save a preference | Remember that I use neovim. |
| Save a project detail | Remember that project "billing-api" uses pytest. |
| Look something up | Which test framework does billing-api use? |
| Change a preference | Remember that I now prefer detailed answers. |
| Look back | Show the history of my answer-style preference. |
| See what changed | What changed in what you know about me since last week? |
| Look at a past moment | What did you think my editor was on October 1? |
| Forget something | Forget my preferred editor. |
With none, Claude decides what to remember and fills in each fact itself,
with eight tools: remember, recall, forget,
memory_history, timeline, diff,
list_predicates and explain. Facts
are typed: each one is a predicate with a value. Recall starts with predicates for coding
work and personal facts, such as prefers_test_framework or likes,
and on a setup made with recall 0.14 or later Claude can name a new one when none fits; it
is defined by its first use. On older setups the list is fixed, and anything that fits no
predicate is kept as a note in your own words. Either way, a new value for a single-valued
predicate replaces the old one by the predicate's rule. With a model, the same rule
applies; the model only decides how each statement is filed.
Forgetting removes a fact from current answers and keeps it in the history. It does not permanently delete the record.
To see why Claude believes something, run recall explain "which editor do I
use?". For each answer it shows the text it came from, the predicate it was filed
under, the rule that decides it, and its history.
Three more commands read the record from your terminal. recall history "my
editor" lists every statement about it, oldest first, each as what it ended and
began believing. recall ask -as-of 2026-10-01 "my editor" answers as of that
date. recall diff -from 7d lists what started and stopped being believed in
the last week.
$ recall history "my editor"
user preferred editor
believed now: user preferred editor: zed
2026-09-01 10:00 stated, user_stated
+ user preferred editor: vim
2026-09-20 10:00 replaced, user_stated
- user preferred editor: vim
+ user preferred editor: emacs
2026-10-05 10:00 replaced, user_stated
- user preferred editor: emacs
+ user preferred editor: zed
Where the memories live
| Item | Location |
|---|---|
| Connection settings and launcher | ~/.config/polign/recall/ |
| Local database | ~/.config/polign/recall/data/ |
| Local server log | ~/.config/polign/recall/server.log |
These stay outside Claude's plugin folder, so updating or reinstalling the plugin does not
touch your memories. Settings and the local key are readable only by your user. Set
POLIGN_RECALL_HOME before both setup and Claude to use another folder.
Use a shared database
To share memory with other machines, other agents, or a team, point setup at a polign_db server instead of the local one:
export POLIGN_API_KEY=... # only if the server requires a key
recall setup -url https://memory.example.com -collection team_memory
A collection is a named group of memories. The default is
recall_lexical_v1. Later runs keep the saved connection; pass
-url and -collection again to change it, or -local to
go back to the local database. Changing the connection does not copy memories across.
Install by hand
If you'd rather run the server yourself, start it in one terminal:
polign-server -store "fs:$HOME/.local/share/recall/data"
Then run these two commands inside Claude, one at a time, and restart it:
/plugin marketplace add Polign/polign
/plugin install recall@polign
Without a saved setup, the plugin finds recall on your PATH or in the usual
install locations and connects to POLIGN_URL, POLIGN_COLLECTION and
POLIGN_API_KEY from the terminal that starts Claude. A saved setup takes
precedence over these variables.
The Polign plugin
The second plugin connects Claude to a polign_db server you already run, so it can search your collections while it works:
/plugin install polign@polign
Claude Code asks for these settings when you enable it:
| Setting | What it is |
|---|---|
| Server URL | Your server's address. Defaults to http://localhost:23000. |
| Default collection | Used when a request does not name one. Set it: a server started with -store does not let Claude list collection names. |
| API key | Sent as a bearer token. Leave it empty unless the server requires a key. |
| Allow writes | Off by default. A model that can write can also replace existing records by reusing their ids. |
It also adds two skills Claude loads when they apply: polign-server for
starting, configuring and debugging the server, and polign-client for code that
uses the Python SDK, the LangChain and LlamaIndex packages, or the HTTP and gRPC APIs. They
keep Claude from guessing flag names and API shapes.
Other MCP hosts
Both plugins are MCP servers that work with any MCP host. For Recall, run
recall setup -no-plugin and give the host this command:
recall mcp
Or connect to a server directly with recall mcp -write and the
POLIGN_* variables above. Leave out -write for a read-only
connection. That serves the plain-text tools; add -extract-model
<provider:model> so the server works out the facts, or -typed
for the typed tools. recall mcp -h lists every option, including a custom
predicate file. For the database tools, use polign mcp.
If something goes wrong
| What you see | What to do |
|---|---|
Recall failed to connect in /mcp | Run recall doctor, fix what it reports, then restart Claude. |
recall: command not found | Install it with brew install polign/tap/recall or pip install polign-recall. Older setups ran Recall through polign recall; run recall setup once to move to the new command. |
bind: address already in use (manual install) | Another server has the port. Connect to it, or start a second one with -http 127.0.0.1:23100 -grpc 127.0.0.1:23101. |
| The marketplace address is rejected | Run /plugin marketplace add and /plugin install as two separate commands. |
Source & license
Both plugins are open source under the Apache License 2.0 and live in github.com/Polign/polign. Bug reports and pull requests go there.