HindsightでClaude Codeは前回の決定を覚えていられるか?

gen
gen

@gennnn ・ 38本

サムネイル

昨日Claude Codeと30分かけて決めた設計方針を、今朝の新しいセッションでまた一から説明していませんか? GitHub Trendingで急上昇しているOSSのHindsightは、会話ログから決定事項を抜き出して、次のプロンプトに自動で差し込むメモリ層です。ただしドキュメントを読むと、既定のまま入れると事故りかねない設定が2つあります。

CLAUDE.mdとauto memoryで、前回の決定はどこまで残るのか

Claude Codeがセッションをまたいで持ち越せる記憶は、自分で書くCLAUDE.mdと、Claudeが自分でメモを書くauto memoryの2つです。どちらもセッション開始時に読み込まれますが、auto memoryの索引MEMORY.mdは先頭200行か25KBまでで、個別のトピックファイルは必要なときにだけ開かれます(Claude Codeの公式ドキュメント)。

つまり次のセッションに届くのは、誰かがファイルに書き残した分だけです。「日時はUTCで保存して、表示だけJSTにする」と会話で決めても、auto memoryが拾わなければ翌日のClaudeは知りません。理由まで残っていることはさらに少ない。

あなたのCLAUDE.md、最後に更新したのはいつでしょう? 1週間前なら、その後の決定はどこにも書かれていないかもしれません。

Hindsightは会話ログから事実を抜いて、リポジトリ単位で覚える

HindsightはVectorizeが公開しているMITライセンスのエージェント用メモリで、スターは9月末時点で3.7万を超えています。Retainが会話をLLMに通して事実・時間・登場する要素・その関係に分解して保存し、Recallが意味検索・キーワード検索・グラフ検索・時間軸の検索を並列に走らせて結果を統合します。溜まった記憶を横断して新しいつながりを探すReflectを加えた3操作が中核です。

Claude Codeとはフック・MCPツール・skillでつながり、思い出した内容はチャット画面に出ないadditionalContextとしてClaudeにだけ渡ります。起動時に決まった範囲を読むCLAUDE.mdと違い、プロンプトのたびに関連する記憶を探しにいくわけです。

個人的にグッときたのは記憶の置き場所です。既定ではcoding-agent::{gitProject}という名前でリポジトリごとに1つのバンク(記憶の保管単位)が作られ、Claude Code、Codex、Cursorなど対応エージェントの間で共有されます。Claude Codeで決めたことを、同じリポジトリで開いたCodexも知っている状態になるんです。

Claude Codeへの導入はnpx 1行、旧プラグインの手順は使わない

検索するとclaude plugin install hindsight-memoryで入れる手順がまだ出てきますが、これは旧プラグインです。公式ドキュメントに、Coding Agentsプラグインで置き換えられたと明記されています。今の入れ方はこうです。

cd /path/to/repo
npx @vectorize-io/hindsight-coding-agents install claude-code --server daemon

記憶の保存先は3つから選びます。

モード
記憶の置き場所
必要なもの
cloud(既定)
Hindsight Cloud
APIトークン
self-hosted
自分で立てたサーバー
--api-url の指定
daemon
手元で動くデーモン
LLMのAPIキー、またはClaude Code CLI

daemonは事実の抽出にLLMを使うので、OPENAI_API_KEYやANTHROPIC_API_KEYなどを順に探し、なければClaude Code CLIを使います。Apple SiliconのmacではlitellmをソースからビルドするためRustのツールチェーンが要る、とドキュメントに注記があります。読み飛ばすとインストールで詰まるやつです。

入ったかどうかは、Claude Codeからhindsight_sync_statusツールを呼んで"synced": trueが返るかで確かめます。設定は~/.hindsight/coding-agent.jsonの1ファイルにまとまっています(Coding Agentsのドキュメント)。

Hindsightの既定はクラウド保存、Memory Defenseはオプトイン

ここが一番の罠です。サーバーを指定しないとクラウドが既定で、会話のトランスクリプトはHindsightのサーバーに送られます。daemonにしても、事実の抽出では指定したLLMに会話が渡ります。

さらに秘密情報のスキャン機能「Memory Defense」は、全バンクで初期状態がオフです。有効にすると、APIキー・GitHubトークン・DB接続文字列・秘密鍵など45パターンを保存前に検査し、伏せ字にする(redact)か記憶ごと捨てる(block)かを選べます。何も設定しなければ、会話に貼った.envの中身もスキャンされないまま保存されます。

有効化は、バンクの作成時かPATCH /v1/{tenant}/banks/{bank_id}/configでmemory_defenseを足します(Memory Defenseのドキュメント)。

{
  "memory_defense": {
    "enabled": true,
    "rules": [
      { "on": "sensitive_data", "action": "redact" }
    ]
  }
}

ポリシーを入れる前に保存された記憶は、あとから遡ってスキャンされません。過去の会話をまとめて取り込む--import-conversationsをインストールと同時に付けると未スキャンのログが一気に入るので、取り込みは有効化のあとに回します。個人情報のパターンも米国のクレジットカード番号や社会保障番号が中心で、マイナンバーのような日本の形式は対象外です。

HindsightのLongMemEval 91.4%は、あなたのリポジトリの数字ではない

Hindsightの紹介でよく出てくるのが、長期記憶ベンチマークLongMemEvalの91.4%です。2025年12月の発表で、90%を超えた初のエージェントメモリとされました。ただ、この最高値はGemini 3 Pro Previewを使ったときのものです。

Hindsightの論文では、20Bのオープンモデルだと83.6%でした。しかもLongMemEvalの題材はユーザーとチャットアシスタントの会話履歴で、コードベースの設計判断を思い出せるかを測ったものではありません。

daemonで使うLLMが変われば、抽出される記憶の質も変わります。あなたが抽出に使う予定のモデルは、何でしょうか? 数字を眺めるより、自分のリポジトリで1回試すほうが早いです。

Claude Codeの記憶を3日後に試す手順

確かめたいのは「Hindsightがないと忘れて、あると思い出すか」です。テスト用のリポジトリで次の順に進めます。

  1. プロジェクトの.claude/settings.jsonに"autoMemoryEnabled": falseを書き、auto memoryを止める。CLAUDE.mdにもテスト内容は書かない
  2. Claude Codeと設計判断を1つ、理由つきで決める(例: 日時はUTCで保存し表示だけJST、海外ユーザーを想定しているため)
  3. 次のセッションでhindsight_sync_statusが"synced": trueを返すのを確かめる
  4. 3日空けて、答えを含まない聞き方をする(例: 「予約テーブルに日時カラムを足したい。保存形式はどうする?」)
  5. ~/.hindsight/coding-agent.jsonのautoInjectを"none"にして、同じ質問をもう一度投げる

5は自動の差し込みだけを止める設定で、MCPツールは残ります。Claudeが自分から記憶を検索しにいくかどうかも、見比べるポイントです。

判定は、決定だけ返るか、理由まで返るか、途中で方針を変えたときに新しいほうが出るか、の3段階です。同じリポジトリでCodexにも同じ質問を投げれば、バンク共有が効いているかも分かります。

あなたなら、どの決定でテストしますか? 何度も説明し直している決定を選ぶと、結果がそのまま導入判断になります。

Hindsightを足すかは、CLAUDE.mdの書き忘れで決まる

CLAUDE.mdは、毎回必ず守らせたいルールの置き場所として残ります。Hindsightが拾うのは、会話の途中で生まれて誰もファイルに書かなかった決定とその経緯です。役割が違うので、重ねて使うものだと僕は考えています。

足す価値があるのは、同じ説明を週に何度も繰り返している人と、Claude CodeとCodexを同じリポジトリで行き来している人です。1つのエージェントだけを使い、CLAUDE.mdとauto memoryがちゃんと育っているなら、急いで入れる理由は薄いです。

試すならdaemonモードで入れて、過去ログを取り込む前にMemory Defenseを有効にする。この順番さえ守れば、あとは3日待つだけです。