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 and the polign CLI (0.6.6 or later) installed first.

Recall: set up in one command

polign 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 polign recall doctor. It checks the same things without starting anything or writing memories. Inside Claude, /mcp shows whether the Recall connection is up.

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.
Forget somethingForget my preferred editor.

Claude gets five tools: remember, recall, forget, memory_history and list_predicates. Facts are typed. Each one is a predicate from a fixed list (15 to start, such as prefers_test_framework or project_constraint) with a value. A new value for a single-valued predicate replaces the old one by rule, not by the model's judgment. Anything that fits no predicate is kept as a note in your own words.

Forgetting removes a fact from current answers and keeps it in the history. It does not permanently delete the record.

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
polign 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 the polign CLI 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 run polign mcp, which works with any MCP host. For Recall, run polign recall setup -no-plugin and give the host this command:

polign recall mcp

Or connect to a server directly with polign mcp -memory-only -write and the POLIGN_* variables above. Leave out -write for a read-only connection. polign mcp -h lists every option, including a custom predicate file.

If something goes wrong

What you seeWhat to do
Recall failed to connect in /mcpRun polign recall doctor, fix what it reports, then restart Claude.
polign does not recognize recall or mcpAn older binary is first on your PATH. Check which -a polign and polign -version.
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.