Recall について
Recallは、エージェント向けの永続メモリと実行状態を提供するGoライブラリ、コマンドラインサーバー、Pythonクライアントです。事実の訂正履歴や時点指定の読み取りに対応し、中断したエージェントは記録から再開できます。データは運用者が用意するデータベースに保存されます。
主な機能
- 01事実の訂正と履歴を保持
- 02時点指定の読み取りと根拠の説明
- 03作業状態、ターン、ツール呼び出しを記録
- 04記録から中断したエージェントを再開
- 05ローカル、PostgreSQL、MongoDB、Qdrantなどに対応
活用シーン
- 01会話をまたいでユーザーの好みを保存・訂正
- 02過去の時点でエージェントが認識していた事実を確認
- 03クラッシュや移行後にタスクの進捗を再開
- 04複数エージェントに分離された名前空間を提供
MCP 対応
メモリと状態を操作するMCPツールを提供します。ローカルではstdioで接続でき、streamable HTTP対応サーバー経由でも利用できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Polign Recall
Recall は、会話やプロセスが終わっても保持されるメモリと状態をエージェントに提供します。メモリとは、エージェントが知っていることです。ユーザーが述べた事実と、その訂正がすべて保持されるため、エージェントは現在信じていること、以前信じていたこと、そしてその理由を説明できます。状態とは、エージェントが置かれている状況です。進捗、次のインスタンスに向けたメモ、実行中だったツール呼び出しが保持されるため、クラッシュしたり別のマシンに移動したりしても、自身の記録から実行を再開できます。
Recall は Go ライブラリであり、MCP ツールと HTTP で同じ操作を提供する recall バイナリ、そして Python クライアントも含まれています。データは、ユーザーが運用する polign_db、PostgreSQL、MongoDB、Qdrant のいずれかに保存されます。Apache 2.0 ライセンスです。

9 か月間にわたる 1 人のユーザー、3 軒の住居、3 社の勤務先、3 つの仕事用メールアドレス、6 つの質問。Claude Opus 5.5 が 3 つのシステムすべてで抽出、回答、評価を行いました。Recall は 18/18、mem0 は 18/18、Zep は 12/18 でした。1 件のメッセージを保存するためのトークン数は、Recall が 3.0k、mem0 が 12.7k、Zep が 14.7k です。
インストール
pip install polign-recall # the Python client, the recall binary, and the database it runs
brew install polign/tap/recall # the same for Homebrew
go install github.com/Polign/recall/cmd/recall@latest # the binary alone; it fetches the database on first use
次に、お使いのエージェントに設定します。
claude mcp add recall -- recall mcp -write # Claude Code
Cursor に追加 ·
VS Code に追加 ·
その他の MCP ホストの場合:コマンドは recall、引数は mcp -write です(詳細)。
何も設定しない場合、メモリは ~/.local/share/recall 内のローカルデータベースに保存されます。このデータベースは初回使用時に起動し、マシン上のすべてのエージェントで共有されます。始めるにあたって、モデルや API キーは必要ありません。すでに運用しているデータベースにメモリを保存する方法については、バックエンドをご覧ください。
訂正の例
変更はすべて保持されます。記録を読み取るコマンドは 3 つあります。
$ recall history "which editor do I use"
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
$ recall ask -as-of 2026-09-25 "which editor do I use"
Believed as of 2026-09-25 00:00:
user preferred editor: emacs (since 2026-09-20)
replaced: vim (since 2026-09-01)
$ recall diff -from 2026-09-15 -to 2026-10-31
Changed between 2026-09-15 00:00 and 2026-10-31 00:00:
- user home city: Lisbon
+ user home city: Porto
- user preferred editor: vim
+ user preferred editor: zed
Recall を選ぶ理由
- 訂正は上書きではなく、記録として残ります。 新しい値は、内容を確認できるルールに従って古い値に置き換わり、回答には置き換えられた内容も常に含まれます。
- どの時点の情報も読み取れます。
as_of、history、diffにより、エージェントがその時点で何を信じていたか、いつ変わったかを確認できます。 - すべての回答に情報源があります。
recall explainを使うと、事実の出どころとなったメッセージ、適用されたルール、その履歴を確認できます。 - エージェントは記録から再開できます。 クラッシュしたエージェントや別の場所に移動したエージェントは、スナップショットではなく、作業状態、直近のやり取り、未完了のツール呼び出しを復元できます。
- 保存先もルールも自分で決められます。 メモリは、すでに運用しているデータベースに保存され、何を記憶するかの語彙は自分で定義することも、制限なく使えるようにすることもできます。
クイックスタート
Python 3.10 以降が必要です。好みを保存してから、訂正してみましょう。
pip install polign-recall
python - <<'PY'
from polign_recall import Client
with Client(local_dir="./recall-data") as memory:
memory.remember("user", "prefers_editor", "vim")
memory.remember("user", "prefers_editor", "neovim")
PY
別のプロセスから、現在の値、履歴、訂正前に信じられていた内容を読み取ります。
python - <<'PY'
from polign_recall import Client
with Client(local_dir="./recall-data") as memory:
print(memory.recall("user", "prefers_editor")[0].value) # neovim
events = memory.history("user", "prefers_editor")
print([e.value for e in events]) # ['vim', 'neovim']
before = memory.recall("user", "prefers_editor", as_of=events[0].observed_at)
print(before[0].value) # vim
PY
./recall-data を最初に開いたクライアントが、その場所にローカルデータベースを起動し、後続のクライアントはそれを共有します。プログラムの終了後もメモリはそこに残ります。引数なしの Client() は ~/.local/share/recall を使い、マシン上のすべてのエージェントでメモリを共有します。Python クライアントガイドでは、モデルを使ったプレーンテキストのメモリ、忘却、履歴、エージェントの再開について説明しています。
メモリの仕組み
メモリは、対象、述語、型付きの値で構成されます。例:user、
prefers_editor、neovim。述語はレジストリに登録されており、値の型、
述語が単一の値を持つか複数の値を持つか、どの述語と矛盾するかが定義されています。例:
dislikes は likes を、gave_away は owns を除外します。単一値の述語は新たな
記述があると値を置き換えますが、複数値の述語は値を蓄積します。忘却は撤回として記録され、
削除は行われません。Recall には、コーディング、パーソナルアシスタント、サポート、営業、音声エージェント向けの
スターターレジストリが用意されています。また、
すでに記憶された内容に手を加えることなく、後からレジストリを変更できます。
述語を定義する必要はありません。 オープンボキャブラリーでは、述語を初めて使うときに その述語が定義されます。また、モデルを設定すれば、MCP ツールはプレーンテキストを受け取り、 述語はどこにも現れません。
recall setup -extract-model anthropic:claude-haiku-4-5-20251001
remember("I switched from helix to zed last week")
recall("which editor do I use?") -> "user prefers editor: zed" (before: helix)
forget("my editor")
モデルが各記述の分類方法を決定します。分類後は述語のルールに従って置き換えが行われ、
分類はすべて記録されます。誤った分類は、以降のすべての回答に反映される1つのイベントで修正されます。
モデルが独自にメモリを照合することはありません。Recall がレジストリのルールを適用し、
矛盾している可能性のある内容を示したうえで、残りの内容をエージェントが確認できるようにします。
そのため、すべての修正は、それを生じさせたルールまたは記述までさかのぼって確認できます。recall mcp -typed では、
代わりに型付きツール(remember(subject, predicate, value))が提供されます。
詳細は開発者向けリファレンスを参照してください。
Memory APIが仕様です。
状態
Recall のもう一方の機能で、独自の仕様は docs/state-api-v1.mdにあります。エージェントは作業中に現在の状態を 書き残し、新しいプロセスはスナップショットではなく、その記録から作業を再開します。
- 作業状態:目標、計画、進捗、注目点、決定事項、未解決の質問。
- ターン(原文のまま)と、参照形式で保存される大きなツールの出力。
- 作業場所を示すポインター:ブランチ、オブジェクトキー、プロセス。
- アクション:世界に影響を与える各ツール呼び出しは、実行前に記録され、結果とともに完了として記録されます。そのため、 その間にクラッシュが発生した場合も確認でき、次回の再開時には、呼び出しが繰り返されるのではなく未確認として表示されます。
Resume はエージェント ID のリースを取得するため、同時にエージェントとして動作するプロセスは1つだけです。
トークン予算内でコンテキストを再構築し、モデル向けの1つのブリーフィングとして表示します。
agent, err := client.Resume(ctx, recall.ResumeRequest{AgentID: "coder-1", TokenBudget: 8000})
if err != nil {
return err
}
defer agent.Release(context.Background())
briefing := agent.Resumed().Briefing // hand this to the model
同じ操作は MCP ツール(agent_resume、update_working_state、
record_turn、begin_action、...)としても利用でき、recall serve では
POST /v1/agent/<verb> の HTTP ルートとしても利用できます。HTTP ではサーバーがリクエスト間のリースを保持します。
resume はエポックを返し、書き込みには毎回そのエポックを指定します。そのため、古いプロセスが後継プロセスの記録を
上書きすることはありません。State API はベータ版ですが、書き込まれる記録は安定しています
(STABILITY.md)。再開のサンプルでは、タスクの途中でエージェントを終了し、
新しいプロセスで作業を続ける様子を示しています。
多数のエージェントへの提供
recall mcp は、1 つのエージェントに対して 1 つのプロセスです。recall serve は、同じメモリと状態を HTTP 経由で多数のエージェントに提供し、それぞれのキー名に対応する名前空間内で動作します。データベースの認証情報はサーバーが保持し、エージェントは Recall キーを保持します。
recall serve -backend polign -url http://polign:23000 -bootstrap-key-file admin.key
recall key create -backend polign -url http://polign:23000 -namespace acme:agent-7 -expires 168h
各名前空間には独自のコレクションが割り当てられるため、呼び出し元が送信した内容によって、別の名前空間のレコードにアクセスすることはできません。POST /mcp はストリーミング可能な HTTP 経由の MCP です。POST /v1/<tool> はメモリツールの引数を本文として受け取り、POST /v1/agent/<verb> は状態ツールの引数を受け取ります。RECALL_URL と RECALL_API_KEY を設定すれば、stdio MCP クライアントは recall connect 経由でサーバーに接続できます。
Kubernetes では、Pod にキーは不要です。recall serve -kubernetes を使うと、投影されたサービスアカウントトークンを送信して、自身のエージェント ID に固定された短命のキーを取得できます。このキーの取得と更新は、recall connect と Python クライアントが自動で行います。Helm チャートは Polign/polign の charts/recall にあります。agent-sandbox デモでは、kind 上でこれを実行します。
バックエンド
| ローカル(デフォルト) | polign_db | PostgreSQL + pgvector | MongoDB | Qdrant | |
|---|---|---|---|---|---|
RECALL_BACKEND | local | polign | pgvector | mongodb | qdrant |
RECALL_BACKEND_URL | ディレクトリ | http://host:23000 | postgres://user:pw@host/db | mongodb://user:pw@host/db | http://host:6333 |
| メモリ、履歴、as-of | はい | はい | はい | はい | はい |
| キーワード検索 | はい | はい | はい | はい | いいえ |
| キャッシュされた読み取り | はい | はい | はい | はい | いいえ |
| 状態 API(リース) | はい | はい | はい | はい | いいえ |
export RECALL_BACKEND=pgvector RECALL_BACKEND_URL=postgres://user:password@localhost:5432/mydb
recall mcp -write
すべてのコマンドでデータベースを指定する設定は、-backend、-url、-key の 3 つ、または上記の環境変数です。各バックエンドの要件や追加方法を含むその他すべての情報は、docs/backends.md をご覧ください。
ベンチマーク
LongMemEval のユーザーファクトのサブセットを使用しています。ユーザー自身の事実、好み、更新、日付に関する 267 個の質問を対象に、読み手と判定者に Claude Sonnet 5.5 を使用し、上流のプロンプトを用いています。
| 読み手に与える情報 | スコア |
|---|---|
| なし | 6.0 |
| チャット履歴全体 | 88.0 |
| セッションに対する BM25、上位 10 件 | 89.9 |
| Recall の組み込み単語検索 | 88.8 |
| モデル埋め込み器を使った Recall(OpenAI text-embedding-3-small、512 次元) | 92.9 |
| 回答が含まれるセッションのみ | 96.6 |
単語検索を使った Recall は全体では BM25 と同等ですが、好みに関する質問では劣ります(70.0 対 83.3)。モデル埋め込み器を使うと、Recall が上回ります。Recall が読み手に渡したトークン数は質問あたり約 28k で、BM25 は 44k、履歴全体では 168k でした。評価ハーネスは eval/longmemeval にあります。
インテグレーション
| Python | pip install polign-recall を実行し、クライアントガイドをご覧ください。 |
| Go | go get github.com/Polign/recall を実行し、Go ライブラリガイドをご覧ください。 |
| MCP | 任意のエージェントを接続して、記憶、想起、忘却を行えます。 |
| Claude Code | Recall プラグイン:コーディングセッションをまたいだメモリ。 |
| LangGraph | pip install recall-langgraph を実行して、LangGraph エージェントを再開できます。 |
| LiveKit、Vapi | recall-livekit と recall-vapi を使って、音声エージェントで通話相手のメモリを利用できます。 |
| Pydantic AI | pip install recall-pydantic-ai を実行すると、Pydantic AI エージェントでメモリツールを利用できます。 |
| Vercel AI SDK | ワンクリックでデプロイできる Next.js チャットの例。 |
| OpenClaw | npm の @polign/openclaw-recall、OpenClaw プラグイン。 |
ドキュメント
開発者向けリファレンス · Memory API の仕様 · State API の仕様 · バックエンド · MCP 経由での接続 · メモリ読み取りのキャッシュ · 履歴のエクスポートと再生 · 安定版とベータ版について · 開発ガイド
プロジェクトを支援する
Recall によってエージェントが古い事実に基づいて動作するのを防げた場合は、この リポジトリにスターを付けると、ほかの人にも見つけてもらいやすくなります。バグ、質問、アイデアは issueにお寄せください。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。