RECALL FOR CLAUDE CODE — SEARCH, CONNECT, TRACE

AI との作業の記憶を、失わないための道具。 AI との作業の記憶を、失わないための道具。

長い開発セッションでは、大事な会話ほど圧縮で画面から消えていきます。でも実は、 Claude Code は会話の全文をディスクに残しています(既定では直近 30 日分・設定で延長可)。消えていたのは記録ではなく、 思い出す手段でした。blue-strawberry はその手段です。stdlib だけで動く 1 ファイルの Python CLI が、過去の全セッションを 3 つの動詞で扱えるようにします。

道具もこのページも AI が書き、AI が検査しましたテストは 71 本、CI は ubuntu と windows の両方で緑です。

こういう瞬間のための道具ですTHE MOMENTS IT IS FOR

あの話、どこでしたっけ

何週間も前のセッションの一言を、キーワードだけで引き当てる。実データ 170MB を 0.1 秒で横断検索できます。

なぜこう決めたんだっけ

設計判断の由来を、当時の会話の実際の発言まで遡って確かめる。 記憶違いや後付けの理屈で上書きされる前に。

圧縮で消える前に

大事な結論は 1 行の索引に蒸留して、毎セッション自動で手元に。 AI の「忘れっぽさ」を、仕組みで打ち消します。

なぜ低負荷で済むのか ― 3 層の思い出し方THREE LAYERS, ONE RECALL

Claude Code は会話をまるごと ~/.claude/projects/<project>/<session-id>.jsonl に残します。コンテキスト圧縮で古いやり取りが表示ウィンドウから落ちても、ディスクの transcript は 残っています。ただし既定では 30 日より古いセッションが起動時に整理されますsettings.jsoncleanupPeriodDays を上げれば長期アーカイブにできます ― この道具はアーカイブが長いほど役立ちます)。また毎回全文を読み直すのは高くつくので、 blue-strawberry は3 層で思い出します。

01

索引 1 行

MEMORY.md の一行(名前 + 一言の説明)をまず見る。ここまでは軽い。

02

記憶ノート

該当したら、そのノートの本文(front matter・系譜)を開く。

03

逐語

系譜のアンカーから、transcript の実際の発言を --deep で読み戻す。

索引 → 記憶ノート → 逐語 の順に開くので、 思い出すたびに transcript 全体を読み直す必要はありません。

考えの由来を、機械で確かめるVERIFIED LINEAGE

記憶は書き換えられます ― 人のノートも、AI の要約も。だから blue-strawberry の記憶ノートは、 重要な主張の由来を当時の会話の瞬間に釘で留めます。系譜: 行は、その検証済みの時系列アンカーです。8 桁のセッション prefix と 時刻を持ち、対象の transcript にその時刻が実在するかを±3 分の窓で機械が検査します。 番人(check)はこれに加えて、dead link・索引ずれ・アンカーの陳腐化も毎回検査します。

# 番人。同梱のサンプルデータで今すぐ試せる
python recall.py --projects-dir sample/projects check

# 矛盾ゼロならこう出る
dead=0 orphan=0 missing=0 ghost=0 stale=0

# 特定の系譜を辿る(--deep で当時の発言そのものを引用)
python recall.py --projects-dir sample/projects lineage node_review --deep

「セッション prefix が transcript のどこにも無い」 「アンカーの時刻が ±3 分以内に見つからない(セッションが分岐・継続してアンカーだけ 古いまま残った)」といった不整合は ERROR として check の終了コードを 1 にします。 WARN のみなら 0 のままです。

使ってみるGETTING STARTED

必要なのは Python 3.9+ だけです。依存ライブラリはゼロ、外部 API も 呼びません。合成のサンプルデータが同梱されているので、実データが無くても今すぐ試せます。

# 導入
git clone https://github.com/namakoo-dev/blue-strawberry.git
cd blue-strawberry
python recall.py --help

# 同梱サンプルで、実データ無しにすぐ試す
python recall.py --projects-dir sample/projects search "notification"
python recall.py --projects-dir sample/projects show a1b2c3d4

テストは71 本pytest -q が GitHub Actions で ubuntu と windows の両方に通っています。記憶レイヤー(check / lineage など)は memory/ が見つからない場合、そのことを言って 終了コード 2 で止まります ― 無いデータをあるふりはしません。transcript の検索・一覧・表示だけなら、 その制約なしに動きます。

確認していないことWHAT IS NOT VERIFIED

確かめた範囲と、確かめていない範囲を分けて書きます。

正直な限界

  • JSONL は非公開の内部形式です。Claude Code は transcript のフォーマットを公開していません ― 観測した構造(圧縮イベントの raw-byte 一致を含む)に合わせているだけなので、更新で壊れる 可能性があります。合成フィクスチャでテストしているので、壊れた場合の多くはサイレントな誤答でなく テストの失敗として出るはずです。ただし把握している形についてのみです。
  • 実データでの検証は一台・一人分です。数百 MB・Windows・日本語 + 英語という一台の実データと、 合成データで開発しました。Linux/macOS は CI 上の合成データのみで検査しています。

確認した

  • テスト 71 本が、transcript のパース・全サブコマンド・記憶グラフの検査・パス自動検出・ 同梱サンプルのエンドツーエンドをカバーし、実データ無しで緑です。
  • CI は ubuntu と windows の両方で緑(GitHub Actions)。
  • 同梱の合成サンプルで全コマンドが実データ無しに動くこと ― checkdead=0 orphan=0 missing=0 ghost=0 stale=0 を報告し、 自分自身の整合性を実演しています。
名前の由来WHY "BLUE STRAWBERRY"

「青いイチゴを描いて」「イチゴは青くないので描けません」。この二行目は誤りで、 誤り方に意味があります。検証が向いていたのは「青いイチゴが自然に存在するか」という 間違った命題でした。問うべきは、手持ちの部品 ― イチゴの形・青という色・描く力 ― を新しく束ねられるかどうかで、束ねられました。blue-strawberry も同じ動きです。 transcript がディスクに残ること、Markdown のノートに wikilink を張れること、 全文検索が既にあること。新しい能力は要らず、束ねればよいと気づくことが要りました。

README で詳しく読む 寓話の全文・設計ノート・正直な限界 dev.to で開発物語を読む(英語) The Day My Agent Started Having Hunches — 実測と失敗込みの記録