SSD Nodes Learn Hosting plans →
ガイド Matt Connor著者 Matt Connor

Claude CodeにRecallでメモリを追加する方法

Recall 0.4.0をVPSに導入し、セッション履歴をローカルで要約して再開する方法を解説します。Python 3.9以降が必要で、APIトークンを消費しません。

Verified Every command ran end-to-end on a fresh Ubuntu 24.04 server, July 30, 2026.

Claude Code のメモリに対する Recall の役割

Recall は、セッションをまたいで各プロジェクトのメモリを保持する Claude Code プラグインです。プロジェクト内の .recall/ フォルダーに、2 つの Markdown ファイルを書き込みます。1 つは発生した内容を追記するログで、もう 1 つは作業をどこまで進めたかをまとめた短い概要です。どちらも作業中のマシン上でローカルの Python 要約プログラムが生成するため、メモリの保存に API トークンはかかりません。

Recall が補うのは、小さいものの常に発生する問題です。火曜日に VPS 上のセッションを終了したとします。水曜日に新しいセッションを開始しても、火曜日の会話は自動的には読み込まれません。ただし、Claude Code に組み込まれた自動メモリ機能は、セッションをまたいでメモを保持できます。そのメモに作業を止めた場所が含まれていなければ、プロジェクトの内容を手作業で説明し直すか、モデルにリポジトリの半分をもう一度読ませて把握させる必要があります。どちらもトークンを消費し、後者は大量のトークンを消費します。

Recall version 0.4.0 は 18 July 2026 にリリースされ、October 2026 時点でも最新のリリースです。プロジェクトのライセンスは MIT です。Recall はプラグインです。内部のどの処理もネットワーク接続を行いません。

VPS に必要なもの

Recall の capture hook は、プラグインに同梱されている Python スクリプトです。サードパーティー依存関係はないため、実質的な要件はインタープリターだけです。

python3 -V

Ubuntu 24.04 では Python 3.12.3 です。Recall は Python 3.9 以降をサポートしています。最小構成のコンテナーイメージには、インタープリターがまったく含まれていない場合があります。その場合、シェルは python3: command not found と返します。先にインストールしてください。

sudo apt update && sudo apt install -y python3

NumPy は、要約処理の 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@recall

2番目のコマンドは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 は Claude Code のフックを3つ登録します。各フックはプラグインディレクトリから 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 を書き換えます。アルゴリズムには、TextRank による文ランキングへ TF-IDF(term frequency、inverse document frequency)スコアリングを組み合わせています。決定論的かつ抽出的な処理であり、ログ内にすでに存在する文を選択します。モデルは呼び出さないため、この処理は無料で、マシンをオフラインにした状態でも動作します。

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 は、現在の diff 統計と直近のコミットを要約に追加します。
  • 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 はトークンをどの程度節約しますか?

何を代替するかによって異なります。セッション開始時に要約を読み込むコストは小さいものです。一方、代替対象によってはコストが大きくなります。プロジェクトの記憶がないモデルは、ファイルを読みながらプロジェクトの内容を再確認する必要があるためです。

グラフTypical cost of resuming work, per session
このグラフのデータ
[
  {
    "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 トークンで読み込まれます。これは、再開用データに 1,000〜2,000 トークンを使用するというプロジェクトの公開説明とも一致します。以前のトランスクリプト全体を再生する場合は、会話全体を再読み込みするため、85,000 トークン程度になります。ファイルを読みながらモデルにプロジェクトを再確認させる方法はその中間で、30,000 トークン程度です。この値はリポジトリが大きいほど増加します。規模を比較するために CLAUDE.md の行も示しています。これは短く固定的な内容なので低コストです。また、前回の作業内容ではなく、モデルが常に守るルールを伝えます。

実際の値は自分の環境で測定してください。英語の文章では、1 トークンはおよそ 4 文字です。コードでは通常、これより少なくなります。同じ VPS 上のローカルモデルにも要約を渡す場合は、再開処理を信頼する前に、要約がどのコンテキストウィンドウに入るかを確認してください。Ollama のデフォルトのコンテキスト長は使用可能な VRAM によって決まります。

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 を試すため、どちらもない環境では stderr と終了ステータス 127 で失敗します。Claude Code は、stderr の先頭行を含む、処理を妨げないフックエラー通知を表示します。

history.md は増えるが、context.md は変わらない。 auto_save_context はデフォルトで off です。/recall:save を実行するか、キーを on_end に設定して SessionEnd フックに処理させます。

ファイルが誤ったプロジェクトの下に作成される。 write は 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 つと、増え続けるログが 1 つあるだけです。プロジェクト間を横断して検索できるメモリではありません。3 週間前にデータベースについて何を決定したかを確認したい場合は、history.md を grep することになります。ライブの連携にも対応していません。同じプロジェクト内の 2 つのセッションはログファイルを共有しますが、Recall は新しいログエントリをもう一方のセッションのコンテキストに反映しません。そのため、一方のセッションが他方の状況を把握する必要がある場合は、セッション間で実行中にテキストを直接やり取りできます。

セッション内では役に立ちません。セッションの途中でコンテキストウィンドウが一杯になる問題は別のものであり、対処方法も異なります。1 つのセッション内でコンテキストウィンドウを管理する方法は、このガイドの関連資料です。

要約は、設計上、信頼できない入力として扱われます。context.md はフェンスで囲んでラベル付けされた状態で挿入され、Claude はそれを根拠にする前に確認を求めます。この設計が必要なのは、コミット済みの .recall/ ディレクトリには、コミット権限を持つ誰でもエージェントが読むテキストを書き込めるためです。エージェントが読み取った内容についてどの程度確認を求めるかは、セッション開始時の permission mode で決まります。Claude Code v2.1.283 以降では、auto mode は組み込みの開始モードです。すべてのプランとプロバイダーで、interactive terminal と VS Code のセッションに適用されます。そのため、ほとんどの操作はユーザーではなく classifier が確認します。HIPAA configuration を使用する組織では、引き続き Manual mode で開始します。.recall/ を personal または shared のどちらとして扱うかを一度決めます。個人用のメモリには .gitignore に追加し、共有する場合はコミットして、他の contribution と同じようにレビューします。エージェントを unattended で実行する場合は、VPS 上で Claude Code を安全に実行する方法で、より広い境界について説明しています。

編集による秘匿化は、可能な範囲で実施されます。API key、token、PEM block、.env の代入など、一般的なパターンが対象です。コミットする前に .recall/ を確認してください。

バージョン番号は成熟度を正直に示しています。2026 年 10 月時点で最新リリースの 0.4.0 では、リリース間で設定キーやファイル構成が変更される可能性があります。そのため、依存している環境をアップグレードする前に変更履歴を確認してください。

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 も見つからない場合は、capture_history、.capture-paused marker、セッションのトランスクリプトが存在するかを確認してください。これらの条件では、実行中のフックは履歴を書き込みません。/recall:show でプラグインが読み込まれていることを確認し、続いてそのマシンで python3 -V が応答することを確認してください。フックは Python スクリプトだからです。

Recall はセッションごとにどの程度のトークンを節約しますか?

要約の読み込みには約 1,200 トークンかかります。これは、現在位置を把握するためにリポジトリを再度読み込む必要があるモデルの、一般的な 30,000 トークンと比べた値です。これらは一般的な目安です。セッション内で wc -c .recall/context.md と /context command を使用し、要約から再開する場合とコールドスタートの場合を比較して、自分の環境で測定してください。

CLAUDE.md ファイルも必要ですか?

はい。両者の役割は異なります。CLAUDE.md は意図的に記述する内容です。継続的なルールやビルドコマンドを記載します。context.md は前回のセッションで実際に発生した内容から生成されるため、通常は書き留めようと思わない、途中までの移行作業なども保持します。両方を維持してください。

1 台の VPS で複数のプロジェクトのメモリを保持できますか?

はい。Recall は各プロジェクトディレクトリ内の .recall/ にメモリを保持するため、同じサーバー上の 2 つのプロジェクトでも、ログと要約は別々に保たれます。ファイルはユーザーアカウントではなく作業ディレクトリに従うため、毎回プロジェクトのルートから Claude Code を起動してください。

この記事は役に立ちましたか?