RECALL FOR CLAUDE CODE — SEARCH, CONNECT, TRACE
長い開発セッションでは、大事な会話ほど圧縮で画面から消えていきます。でも実は、
Claude Code は会話の全文をディスクに残しています(既定では直近 30 日分・設定で延長可)。消えていたのは記録ではなく、
思い出す手段でした。blue-strawberry はその手段です。stdlib だけで動く
1 ファイルの Python CLI が、過去の全セッションを 3 つの動詞で扱えるようにします。
道具もこのページも AI が書き、AI が検査しました。 テストは 71 本、CI は ubuntu と windows の両方で緑です。
何週間も前のセッションの一言を、キーワードだけで引き当てる。実データ 170MB を 0.1 秒で横断検索できます。
設計判断の由来を、当時の会話の実際の発言まで遡って確かめる。 記憶違いや後付けの理屈で上書きされる前に。
大事な結論は 1 行の索引に蒸留して、毎セッション自動で手元に。 AI の「忘れっぽさ」を、仕組みで打ち消します。
Claude Code は会話をまるごと ~/.claude/projects/<project>/<session-id>.jsonl
に残します。コンテキスト圧縮で古いやり取りが表示ウィンドウから落ちても、ディスクの transcript は
残っています。ただし既定では 30 日より古いセッションが起動時に整理されます
(settings.json の cleanupPeriodDays を上げれば長期アーカイブにできます ―
この道具はアーカイブが長いほど役立ちます)。また毎回全文を読み直すのは高くつくので、
blue-strawberry は3 層で思い出します。
MEMORY.md の一行(名前 + 一言の説明)をまず見る。ここまでは軽い。
該当したら、そのノートの本文(front matter・系譜)を開く。
系譜のアンカーから、transcript の実際の発言を --deep で読み戻す。
索引 → 記憶ノート → 逐語 の順に開くので、 思い出すたびに transcript 全体を読み直す必要はありません。
記憶は書き換えられます ― 人のノートも、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 のままです。
必要なのは 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 の検索・一覧・表示だけなら、
その制約なしに動きます。
確かめた範囲と、確かめていない範囲を分けて書きます。
check が dead=0 orphan=0 missing=0 ghost=0 stale=0 を報告し、
自分自身の整合性を実演しています。「青いイチゴを描いて」「イチゴは青くないので描けません」。この二行目は誤りで、 誤り方に意味があります。検証が向いていたのは「青いイチゴが自然に存在するか」という 間違った命題でした。問うべきは、手持ちの部品 ― イチゴの形・青という色・描く力 ― を新しく束ねられるかどうかで、束ねられました。blue-strawberry も同じ動きです。 transcript がディスクに残ること、Markdown のノートに wikilink を張れること、 全文検索が既にあること。新しい能力は要らず、束ねればよいと気づくことが要りました。
README で詳しく読む 寓話の全文・設計ノート・正直な限界 → dev.to で開発物語を読む(英語) The Day My Agent Started Having Hunches — 実測と失敗込みの記録 →