Claude CodeにRecallでメモリを追加する方法
Recall 0.4.0をVPSに導入し、セッション履歴をローカルで要約して再開する方法を解説します。Python 3.9以降が必要で、APIトークンを消費しません。
Claude Code のメモリに対して Recall が行うこと
Recall は、セッションをまたいで各プロジェクトのメモリを保持する Claude Code プラグインです。プロジェクト内の .recall/ フォルダーに、2 つの markdown ファイルを書き込みます。1 つは発生した内容を追記するログで、もう 1 つは前回どこまで進んだかをまとめた短い概要です。どちらも、作業中のマシン上でローカルの Python 要約ツールが生成するため、メモリ自体で API トークンを消費することはありません。
Recall が解決するのは、小さいものの常に発生する問題です。火曜日に VPS 上のセッションを終了すると、水曜日の Claude Code は火曜日の内容を何も認識していません。手作業でプロジェクトを説明し直すか、モデルにリポジトリの半分を再度読ませて状況を把握させる必要があります。どちらもトークンを消費し、後者では大量のトークンを消費します。
Recall の現行バージョンは 0.4.0 です。2026 年 7 月時点で、プロジェクトは MIT ライセンスで提供されています。これはプラグインです。ネットワーク通信を行う機能は含まれていません。
VPS に必要なもの
Recall の capture hook は、プラグインに同梱されている Python スクリプトです。サードパーティー依存関係はないため、実質的な要件はインタープリターだけです。
python3 -VUbuntu 24.04 では Python 3.12.3 です。Recall は Python 3.9 以降をサポートしています。最小構成のコンテナーイメージには、インタープリターがまったく含まれていない場合があります。その場合、シェルは python3: command not found と返します。先にインストールしてください。
sudo apt update && sudo apt install -y python3NumPy は、要約処理の 1 ステップを高速化するオプションのアクセラレーターです。必須ではありません。
python3 -c "import numpy"ここでは ModuleNotFoundError: No module named 'numpy' が許容される回答です。要約処理には pure Python の経路があり、プロジェクトのテストスイートは、どちらの経路でも同じ文が選択されることを確認します。
サーバーでは、ノートパソコンよりセッションのメモリが重要です。サーバー作業は、数日にわたる短時間の訪問として行われるためです。すでに VPS 上の tmux で Claude Code を実行している場合、Recall が前日のセッションを当日のセッションに引き継ぎます。
プラグインマーケットプレイスからRecallをインストールする
Claude Codeのセッション内で、2つのコマンドを入力します。
/plugin marketplace add raiyanyahya/recall
/plugin install recall@recall2番目のコマンドはplugin@marketplaceを読み取ります。ここでは、どちらの名前もrecallです。コピーアンドペーストのミスに見えますが、ミスではありません。
プラグイン独自のコマンドを実行して、インストールを確認します。
/recall:show/recall:showは現在の概要を表示します。新しいプロジェクトでは、まだ表示する内容がありません。そのため、実際に確認しているのは、コマンド自体が存在することです。Claude Codeが/recall:showを認識しない場合、プラグインは読み込まれておらず、フックも実行されません。
チェックアウトから実行する場合は、リポジトリをcloneしてから検証します。
git clone https://github.com/raiyanyahya/recall ~/recall
cd ~/recall && claude plugin validate .claude plugin validate .は.claude-plugin/のマニフェストを読み取り、プラグインの形式が正しいかどうかを報告します。次に、claude --plugin-dir ~/recallを指定してプロジェクトディレクトリからClaude Codeを起動します。
フックが書き込む内容とタイミング
Recall は 3 つの Claude Code フックを登録します。それぞれがプラグインディレクトリ内の Python スクリプトを実行します。
SessionStartは起動時、再開時、クリア時に実行されます。context.mdを表示するため、セッション開始時に概要を確認できます。Stopは Claude が応答を完了するたびに実行されます。そのターンをログに追記します。SessionEndはセッション終了時に実行され、概要を再生成できます。
この処理により、.recall/ 内に 2 つのファイルが作成されます。
history.mdは追記専用の記録です。プロンプト、応答、変更されたファイル、実行したコマンドが含まれます。context.mdは生成されたダイジェストです。目的、概要、次の手順、変更されたファイル、実行したコマンド、git のコンテキストが含まれます。
実際のセッションを 1 回実行したら、ディレクトリを確認します。
ls -la .recall/history.md に内容が書き込まれていることを確認できるはずです。context.md は存在しない場合があります。これは障害ではなく、デフォルトの動作です。auto_save_context は設定しない限り off なので、概要は要求した場合にだけ書き込まれます。
/recall:saveこのコマンドは history.md に対してローカルの要約処理を実行し、context.md を書き換えます。アルゴリズムには、TF-IDF(term frequency、inverse document frequency)によるスコアリングと、TextRank による文のランキングを使用します。処理は決定的かつ抽出的です。つまり、ログ内にすでに存在する文を選択します。モデルは呼び出さないため、この処理は無料で実行でき、マシンをオフラインにした状態でも動作します。
1 つのプロジェクト用に Recall を設定する
設定はプロジェクトのルートにある recall.config.json ファイルに保存されます。以下は出荷時のデフォルト設定です。
{
"output_dir": ".recall",
"capture_history": true,
"summary_sentences": 8,
"redact": true,
"include_git": true,
"max_input_chars": 200000
}output_dirは 2 つのファイルの保存場所を指定します。プロジェクト内に置いてください。capture_historyはhistory.mdログの記録を有効または無効にします。auto_save_contextにはoffまたはon_endを指定でき、デフォルトはoffです。summary_sentencesは、context.mdに残す文章の数です。値を増やすと要約が長くなり、セッション開始時の負荷も少し増加します。redactは、ディスクに書き込む前に一般的な Secret のパターンを除去します。include_gitは、現在の差分と最近のコミットを要約に追加します。max_input_charsは、要約処理が 1 回で読み取るhistory.mdの量に上限を設定します。
VPS 上のプロジェクトでは、自動保存を有効にする変更が有用です。サーバー上のセッションは、停止を決めたときではなく、端末が切断されたときに終了することが多いためです。
{
"auto_save_context": "on_end",
"summary_sentences": 12
}設定を変更せずに一時的にキャプチャを停止するには、一時停止マーカーを作成します。再度キャプチャを開始するには、そのマーカーを削除します。
touch .recall/.capture-paused本番環境の認証情報を扱うセッションの前に、この操作を行ってください。redaction はフィルターであり、完全な保証ではないためです。一般に AI エージェントから Secret を除外すること も同じ考え方に基づきます。安全な Secret とは、エージェントが一度も見ない Secret です。
Recall はトークンをどの程度節約しますか?
代替手段が何だったかによって異なります。セッション開始時に要約を読み込むコストは小さいです。一方、置き換える処理によってはコストが大きくなります。プロジェクトの情報を持たないモデルは、ファイルを読んで内容を再発見する必要があるためです。
The data behind this chart
[
{
"label": "Recall context.md",
"char_count": "4,800",
"est_tokens": "1,200"
},
{
"label": "Hand-written CLAUDE.md",
"char_count": "3,200",
"est_tokens": "800"
},
{
"label": "Re-reading the repo",
"char_count": "120,000",
"est_tokens": "30,000"
},
{
"label": "Full transcript replay",
"char_count": "340,000",
"est_tokens": "85,000"
}
]以下は中規模プロジェクトでの一般的な値であり、環境固有の測定値ではありません。Recall の要約は、およそ 1,200 トークンで読み込まれます。これは、resume に必要なトークン数を 1000 から 2000 とするプロジェクトの公開説明とも一致します。過去の完全な transcript を再生すると、会話全体を再読み込みするため、85,000 トークン程度になります。ファイルを読んでモデルにプロジェクトを再発見させる場合は、その中間である 30,000 トークン程度です。この値はリポジトリが大きくなるほど増加します。規模を比較するために CLAUDE.md の行も示しています。これは短く固定的な内容なので低コストです。また、前回のセッションで起きたことではなく、常に適用するルールをモデルに伝えます。
実際の値は自分の環境で測定してください。英語の通常の文章では、1 トークンはおよそ 4 文字です。コードでは少し少なくなります。同じ VPS 上のローカルモデルにも要約を渡す場合は、resume を信頼する前に、要約が収まるコンテキストウィンドウを確認してください。Ollama は、末尾を切り捨てたことを通知せず、短いデフォルトのコンテキスト長で長いプロンプトを切り捨てます
wc -c .recall/context.md .recall/history.md
echo $(( $(wc -c < .recall/context.md) / 4 ))セッション内では、/context が現在コンテキストウィンドウに読み込まれている内容を示し、/cost がセッション全体の合計を報告します。最初のセッションは何も読み込まずに開始し、次のセッションは要約を用意して開始して、結果を比較してください。セッションのトークンが実際にどこで消費されるかを詳しく確認するには、Claude Code がトークンを使用する仕組みに内訳があります。
この説明を正確にするため、1 つ注意が必要です。要約はセッション開始時に毎回読み込まれるため、利用しない要約は節約ではなく小さな追加コストになります。セッションが長時間実行される場合を除き、summary_sentences はデフォルト値のままにしてください。もう一方のコストも抑えるには、セッションで不要な出力を減らします。動作する最小限の変更を行うようエージェントを誘導すると、要約対象となるログも短くなります。
セッションなしで要約を再生成する
リポジトリを clone した場合、要約ツールには独自のコマンドラインエントリーポイントがあります。これは、VPS 上でターミナルとともにセッションが終了し、後から要約だけ取得したい場合に便利です。
python3 ~/recall/scripts/make_context.py --helpヘルプ出力には、受け付けるフラグが一覧表示されます。--cwd はプロジェクトのルート、--transcript は明示的な transcript ファイル、--quiet は出力の抑制、--harness は claude と opencode の選択に使用します。プロジェクトを指定して実行します。
python3 ~/recall/scripts/make_context.py --cwd /srv/projects/apiセッションの transcript を読み取り、history.md してから、指定したディレクトリの下に context.md を書き込みます。marketplace 経由でインストールした場合、plugin は Claude Code が管理するディレクトリに配置されます。この場合、/recall:save が同じ処理を行うためのサポートされた方法です。
何も書き込まれない場合
完全なセッションの後も .recall/ ディレクトリがない。 フックが実行されていません。/recall:show を入力してプラグインが読み込まれていることを確認し、その後 python3 -V を実行します。フックコマンドは最初に python3、次に python を試します。そのため、どちらもない環境では何も書き込まれず、エラーも表示されません。
history.md は増えるが、context.md は変わらない。 auto_save_context はデフォルトで off です。/recall:save を実行するか、キーを on_end に設定して SessionEnd フックに処理させます。
ファイルが誤ったプロジェクトの下に作成される。 Recall は Claude Code の起動元ディレクトリを基準に書き込みます。そのため、ホームディレクトリからセッションを開始すると、そこにメモリが保存されます。プロジェクトのルートから開始し、ls -la .recall/ を使ってファイルの実際の保存先を確認します。
キャプチャが停止したが、何も警告されない。 ls -a .recall/ で一時停止マーカーを確認します。先週作成した .capture-paused ファイルが、現在も機能しています。
長時間のセッションの後も要約が短い。 max_input_chars は要約生成への入力を 200000 文字に制限するため、非常に長いログは途中で切り詰められます。ログをローテーションしてください。
mv .recall/history.md .recall/history-2026-07-30.mdその後、短いセッションを 1 回実行し、ls -la .recall/ を再度確認して、新しい history.md が作成されたことを確認します。
Recall の限界
Recall はログと要約機能を組み合わせたものです。そのため、対象外になるものを明確にしておく必要があります。
要約機能は抽出的です。TextRank は history.md にすでに存在する文を選ぶだけなので、判断が正しかったかどうかは評価しません。火曜日に記録された誤った方針転換も、水曜日に記録された適切な判断も、同じように扱われます。重要な判断に関わる場合は、context.md を読み、手作業で修正してください。これは markdown ファイルなので、編集を妨げるものはありません。
検索機能はありません。プロジェクトごとに、現在の要約と増加し続けるログが1つずつあるだけです。プロジェクトをまたいで検索できるメモリではありません。3週間前にデータベースについて何を決めたかを確認する場合は、history.md を grep することになります。また、セッション間の情報共有も行いません。同じ VPS で2つのセッションを同時に開いても、互いのログは見えません。一方のセッションがもう一方のセッションの作業内容を知る必要がある場合は、実行中に セッション間で直接テキストを渡せます。
セッション内の問題には役立ちません。セッションの途中でコンテキストウィンドウが埋まる問題は別の問題であり、対処方法も異なります。1つのセッション内でコンテキストウィンドウを管理する方法は、このガイドの補足記事です。
設計上、要約は信頼できない入力として扱われます。context.md はフェンスで囲み、ラベルを付けて挿入されます。Claude は、それを利用する前に確認します。この設計が必要なのは、コミット済みの .recall/ ディレクトリには、コミット権限を持つ人なら誰でも、エージェントが読むテキストを書き込めるためです。エージェントが読み取った内容についてどの程度確認を求めるかは、セッション開始時の permission mode で決まります。auto mode は 14 August 2026 に Claude Code のデフォルトになります。.recall/ を個人用にするか共有用にするかを最初に決めてください。個人用なら .gitignore に追加し、共有用ならコミットして、他の変更と同じようにレビューします。エージェントを無監視で実行する場合は、VPS で Claude Code を安全に実行する方法で、より広い境界を確認してください。
秘匿情報の削除は、可能な範囲で行われます。API keys、tokens、PEM blocks、.env assignments など、一般的なパターンを対象にします。コミットする前に .recall/ を読んでください。
バージョン番号は成熟度を正直に示しています。2026年7月時点の 0.4.0 では、設定キーとファイル構成が release 間で変更される可能性があります。依存している環境を upgrade する前に、changelog を読んでください。
FAQ
Recall はコードやトランスクリプトをどこかへ送信しますか?
いいえ。キャプチャフックと要約処理は自分のマシン上で実行される Python スクリプトです。プラグインは API key を保持せず、ネットワーク通信も行いません。要約にはモデルではなく TF-IDF と TextRank を使用するため、この処理に費用はかからず、マシンをオフラインにした状態でも動作します。その代わり、要約は抽出的です。ログから文を選択するだけで、新しい文を生成するわけではありません。
.recall/context.md が見つからない、または古いままなのはなぜですか?
auto_save_context のデフォルト値は off です。そのため、要約は /recall:save を実行した場合にのみ再生成されます。各セッションの終了時に書き直すには、recall.config.json で "auto_save_context": "on_end" を設定します。history.md も見つからない場合、フック自体が実行されていません。/recall:show でプラグインが読み込まれていることを確認し、そのマシンで python3 -V が応答することを確認してください。フックは Python スクリプトだからです。
Recall はセッションごとにどの程度節約できますか?
要約の読み込みには、通常、1,200 トークン程度かかります。一方、リポジトリを再度読み、現在位置を把握する必要があるモデルでは、通常 30,000 トークン程度かかります。これらは一般的な目安です。セッション内で wc -c .recall/context.md と /context コマンドを使用し、コールドスタートの場合と要約から再開した場合を比較して、自分の環境で測定してください。
CLAUDE.md ファイルは引き続き必要ですか?
はい。2つは異なる役割を持ちます。CLAUDE.md には、常設するルールやビルドコマンドなど、自分で意図的に記述する内容を入れます。context.md は前回のセッションで実際に起きたことから生成されるため、通常は記録しようと思わない、途中までの移行作業なども保持します。両方を残してください。
1台の VPS で複数のプロジェクトの記憶を保持できますか?
はい。Recall は各プロジェクトディレクトリ内の .recall/ に記憶を保持するため、同じサーバー上の2つのプロジェクトでも、ログと要約は分離されます。毎回プロジェクトのルートから Claude Code を起動してください。ファイルはユーザーアカウントではなく、作業ディレクトリに従うためです。