自戒、点検、内省

終わらない反省会をしよう

うちのClaudeの外部記憶装置2つ 長期記憶と永続記憶のいま

Claudeのメモリー機能は強力なものの、もっと自分がコントローラブルな記憶がほしいよねということで、改めて先だってかいた仕組みを捉え直していました。

retrospective.hatenadiary.com

retrospective.hatenadiary.com

2つの記憶の役割

実装の通りですが「記憶」を2つに整理しました。

長期記憶 永続記憶
ストレージ SQLite3(FTS5 + sqlite-vec) esa(タグ 永続
書き込み 自動(Hook)+ 手動 手動のみ
読み取り MCP経由 MCP経由
性格 受動的・蓄積型 能動的・厳選型
対象 会話・操作ログ全般 忘れてはならないこと

長期記憶は「勝手に覚えて勝手に思い出してくれる」。永続記憶は「自分が選んで残したものを参照できる」。用途が違うので、両立して使っています。

長期記憶

文字通り長い記憶です。長いけども消えるときには消える。そういうものです。

記憶方法

最初の記事では、セッション終了時に会話をまるごと保存する Stop hook だけ入れてましたが、少し複雑になっています。

Stop         ──→ セッション全体をキャプチャ
PostToolUse  ──→ Edit/Write/WebFetch/WebSearch の結果を保存
PreToolUse   ──→ Skill 呼び出し前に関連記憶を注入

PostToolUse は「何をしたか」を蓄積するためのものです。ファイルを編集したとき、外部ページを取得したとき、その結果を長期記憶に書き込みます。ただしコンテンツが短すぎるもの(200文字未満)はスキップして、ノイズを抑えています。

PreToolUse のスキルコンテキスト注入は、少し変わったアイデアです。Skill ツールが呼ばれる直前に、スキル名で長期記憶を検索し、関連する過去の記憶をコンテキストとして差し込みます。「このスキルを前回使ったときに何が起きたか」を Claude に渡してからスキルを実行できるわけです。

複数 Mac 間の同期

最近 Mac が複数台になったので、iCloud Drive 経由で記憶を同期できるようにしました。

/long-term-memory-dump  # 各 Mac で NDJSON として書き出す
/long-term-memory-sync  # 他 Mac の dump を取り込む

content_hash で冪等処理をしているので、自分の Mac 分を再度取り込んでも重複しません。「分散記憶」という感じで、各 Mac が独自の記憶を持ちながら、相互に補完できます。

そして同期処理をやっていると、攻殻機動隊のフチコマの同期シーンを思い出しますね。

読み取りは chiebukuro-mcp に分離

MCP サーバーを書き込み専用(3ツール: store/delete/stats)にして、読み取りは別の chiebukuro-mcp に任せる構成にしました。chiebukuro-mcp の chiebukuro.jsonmemory.db を登録すると、chiebukuro_query_long_term_memorychiebukuro_semantic_search_long_term_memory が自動生成されます。

1つの MCP サーバーに全機能を詰め込むより、責務が明確になりました。

retrospective.hatenadiary.com

永続記憶

こちらは前回の記事とアーキテクチャは変わっていません。esa の bist チームに 永続 タグをつけて保存するシンプルな設計です。

MCP サーバーは 3 ツール構成です。

ツール 役割
permanent_memory_search tag:永続 -in:Archived で検索
permanent_memory_create タグ 永続 自動付与で新規作成
permanent_memory_update revision 競合検知あり更新

更新時は esa の revision 番号を比較して競合を検知します。ブラウザから直接 esa を編集した場合でも、MCP 越しに上書きしてしまわないようにするためです。

Claude Code 上では archive と organize の 2 つのスキルも用意しています。不要になった記憶を Archived/ カテゴリに退避したり、全体を棚卸しして重複を整理したりできます。

2つ合わせると何が変わるか

長期記憶だけあると「何かあったはずだが出てこない」があります。検索にかかるかどうかが会話の粒度に依存するので。

永続記憶だけだと「覚えておきたいと思ったことしか残らない」。その判断を自分が常に正しくできるとは限りません。

2つを並べることで、自動の網と、意図的な選択の両方が揃います。どちらか片方だけより、補完関係があります。

これから

メンテですね。

長期記憶に溜まったデータを棚卸しする /long-term-memory-cleanup スキルをちゃんと使うことと、永続記憶の permanent-memory-organize を定期的に走らせることです。どちらも「蓄積したあとの管理」が課題で、そこはまだ手動です。

自動で増やす仕組みは動いているので、次は自動で整理する方向を考えています。