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:

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:

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:

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 doWhat to say
Save a preferenceRemember that I use neovim.
Save a project detailRemember that project "billing-api" uses pytest.
Look something upWhich test framework does billing-api use?
Change a preferenceRemember that I now prefer detailed answers.
Look backShow the history of my answer-style preference.
See what changedWhat changed in what you know about me since last week?
Look at a past momentWhat did you think my editor was on October 1?
Forget somethingForget 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

ItemLocation
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:

SettingWhat it is
Server URLYour server's address. Defaults to http://localhost:23000.
Default collectionUsed when a request does not name one. Set it: a server started with -store does not let Claude list collection names.
API keySent as a bearer token. Leave it empty unless the server requires a key.
Allow writesOff 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 seeWhat to do
Recall failed to connect in /mcpRun recall doctor, fix what it reports, then restart Claude.
recall: command not foundInstall 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 rejectedRun /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.