SSD Nodes Learn メモリ 8GB — 年額 $66
ガイド Matt Connor著者 Matt Connor ・更新日 2026-08-01

Claude CodeにRecallでVPSの作業履歴を引き継ぐ方法

Recall 0.4.0をVPSに導入し、Claude Codeのセッションをローカル保存します。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トークンの消費はゼロです。

解決する問題は小さいものですが、常に発生します。火曜日にVPS上のセッションを終了すると、水曜日のClaude Codeは火曜日の内容を認識していません。手作業でプロジェクトを再説明するか、モデルにリポジトリの半分を再度読み取らせて状況を把握させます。どちらもトークンを消費し、後者は大量に消費します。

Recallのバージョン0.4.0は2026年7月時点で最新で、プロジェクトはMITライセンスです。これはプラグインです。内部のどの処理もネットワーク接続を行いません。

VPS に必要なもの

Recall の capture hook は、plugin とともにリリースされる Python script です。third-party dependency はないため、実際に必要なのは interpreter だけです。

python3 -V

Ubuntu 24.04 では Python 3.12.3 と表示されます。Recall は Python 3.9 以降をサポートします。Minimal container image には interpreter がまったく含まれていない場合があり、その場合は shell が python3: command not found と表示します。先に interpreter をインストールしてください。

sudo apt update && sudo apt install -y python3

NumPy は summarizer の1つの処理を高速化する optional accelerator です。必須ではありません。

python3 -c "import numpy"

ここでは ModuleNotFoundError: No module named 'numpy' で問題ありません。summarizer には pure-Python の経路があり、project の test suite は、どちらの経路でも同じ文が選択されることを確認します。

サーバーでは laptop よりも session memory が重要です。サーバーでの作業は、数日にわたって短時間の訪問として行われるためです。すでに VPS 上の tmux で Claude Code を実行している場合、Recall が前日の session を当日の session に引き継ぎます。

プラグインマーケットプレースから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 は、ディスクに書き込む前に一般的な秘密情報のパターンを削除します。
  • include_git は、現在の差分と最近のコミットを要約に追加します。
  • max_input_chars は、要約処理が1回で読み取る history.md の量に上限を設定します。

VPS 上のプロジェクトでは、自動保存を有効にする変更が有用です。サーバー上のセッションは、停止を決めたときではなく、ターミナルが切断されたときに終了することが多いためです。

{
  "auto_save_context": "on_end",
  "summary_sentences": 12
}

設定を変更せずに一時的に記録を停止するには、一時停止マーカーを作成します。記録を再開するには、このマーカーを削除します。

touch .recall/.capture-paused

本番環境の認証情報を扱うセッションの前に実行してください。リダクションはフィルターであり、保証ではないためです。同じ理由から、一般に AI エージェントから秘密情報を遠ざけること が重要です。安全な秘密情報とは、エージェントに一度も見られない情報です。

Recall はトークンをどの程度節約しますか?

代替手段によって異なります。セッション開始時に要約を読み込むコストは低く済みます。一方、置き換える処理には大きなコストがかかる場合があります。プロジェクトの記憶がないモデルは、ファイルを読み込んでプロジェクトの内容を再確認するためです。

ChartTypical cost of resuming work, per session
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 に必要なトークン数を1,000から2,000とするプロジェクトの公開情報とも一致します。過去のトランスクリプト全体を再生すると、会話全体が再読み込みされ、85,000 トークン程度になります。ファイルを読み込んでモデルにプロジェクトを再確認させる方法はこの2つの中間で、30,000 トークン程度です。この値はリポジトリが大きくなるほど増加します。CLAUDE.md の行は規模の比較用です。短く静的な内容で、前夜に起きたことではなく、継続的に適用するルールをモデルに伝えるため、コストが低くなります。

実際の値はご自身の環境で測定してください。英語の文章では、1トークンはおよそ4文字に相当します。コードでは少し少なくなります。

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 は出力の抑制、--harnessclaudeopencode の選択に使用します。プロジェクトを指定して実行します。

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_contextoff です。/recall:save を実行するか、キーを on_end に設定して SessionEnd フックに処理させてください。

ファイルが誤ったプロジェクトの下に作成される。 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することになります。

セッション内では役立ちません。セッションの途中でコンテキストウィンドウが埋まる問題には、別の対処方法があります。1つのセッション内でコンテキストウィンドウを管理する方法は、このガイドの補足記事です。

設計上、要約は信頼できない入力として扱われます。context.mdはフェンスで囲み、ラベルを付けて挿入します。そのうえで、Claudeは利用する前に確認します。この設計が必要なのは、コミット済みの.recall/ディレクトリには、コミット権限を持つ誰でもエージェントが読むテキストを書き込めるためです。.recall/を個人用にするか共有用にするかを決めてください。個人用のメモリなら.gitignoreに追加し、共有用ならコミットして、他の変更と同様にレビューしてください。エージェントを無人で実行する場合は、VPS上でClaude Codeを安全に実行する方法で、より広い範囲の対策を確認できます。

マスキングは可能な範囲で行われます。APIキー、トークン、PEMブロック、.envの代入など、一般的なパターンを対象にします。コミットする前に.recall/を確認してください。

バージョン番号は成熟度を正確に示しています。2026年7月時点の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 も見つからない場合は、フック自体が実行されていません。/recall:show でプラグインが読み込まれていることを確認し、次にその環境で python3 -V が応答することを確認してください。フックは Python スクリプトです。

Recall はセッションごとにどの程度節約できますか?

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

CLAUDE.md ファイルは引き続き必要ですか?

はい。両者の役割は異なります。CLAUDE.md は意図して作成するファイルで、継続的なルールと build commands を記述します。context.md は前回のセッションで実際に発生した内容から生成されるため、通常は記録しない未完了の migration も保持します。両方を使用してください。

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

はい。Recall は各プロジェクトディレクトリ内の .recall/ にメモリを保持します。そのため、同じ server 上の2つのプロジェクトでも、ログと要約は分離されます。ファイルは user account ではなく working directory に従うため、必ず毎回プロジェクトの root から Claude Code を起動してください。