自戒、点検、内省

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

Claude Code の"永続記憶"システムをつくった ─ esa と 5 つのスキルで「忘れない自分」へ

Claude Code のスキルつくりって楽しいじゃないですが。しかし作るときはいいが、そのあと何があったけなを覚えきれません。覚えていなければ発動もできない。

そんなことをpostしたところ

とmentionをいただき、それだ!と。

スキルもそうだし、忘れたくないことを永続記憶として残しておきたい。

こうして、esa を使った個人永続記憶システムを作ることにしました。

長期記憶との違い

先日の記事 Claudeに長期記憶のMCPサーバーRubyで自作した - 自戒、点検、内省では、SQLite とベクトル検索を使った長期記憶システムを作りました。あちらは「会話を自動的に蓄積し、長期記憶として関連する文脈を自動で引き出す」しくみです。RAG に近い考え方で、Claude が勝手に覚えて勝手に思い出してくれます。また長期記憶なので薄れていくことも仕組みの一つです。

今回作った永続記憶は、それとは別のものです。

長期記憶はある程度受動的・自動的ですが、に厳選したものを忘れてはならないこととして能動的に記録し、思い出せるようにすることを狙っています。

「覚えておきたい」と判断したものだけを、自分の言葉で残す。将来の自分が読んで文脈を取り戻せるように。

なぜ esa か

esa は2014年から普段使いして慣れているサービスです。タグで整理できて、Markdown で書けて、MCP サーバーもある。新しいインフラを立てるより、使い慣れた場所に乗せるほうが摩擦が少なくて済みます。

思い出したんですが、そんな10年代前半の導入当時、飲み会の熱い議論が翌日に忘れられる揮発問題を esa で解決しようとしていたのでした。今回も本質は同じです。「忘れる問題」を esa で解く。

なお、ストレージの設計はシンプルにしました。自分のesaにタグ 永続 をつけて保存する。それだけです。

5 つのスキルの役割

操作は CRUD + 整理の 5 つに分けました。

スキル 役割
permanent-memory-new 新しい永続記憶を作る
permanent-memory-read 記憶を読み込んでコンテキストに展開する
permanent-memory-update 既存の記憶を更新する
permanent-memory-archive 不要になった記憶を Archived/ に退避する
permanent-memory-organize 全記憶を棚卸しして重複・陳腐化を整理する

タイトルは [キーワード][キーワード] 内容の概要 という形式にしました。検索性とインデックスとしての可読性を両立させるためです。

ハマったこと:スキルの description 最適化

スキルは、Claude が「このスキルを今使うべきか」を description だけで判断します。description が曖昧だと誤トリガーや無視が起きます。

特に困ったのが、長期記憶 DB との混同でした。「記憶を読んで」と言ったとき、長期記憶 DB へのアクセスを指しているのか、esa の永続記憶を指しているのか、Claude が迷ってしまいます。

これを解決するために、run_loop.rb という Ruby スクリプトを自作しました。20 クエリを用意して、claude -p でトリガー率を計測し、Claude に description の改善を依頼する ─ というループを回します。

2 イテレーションで 100% に到達しました。決め手になった記述はこれです。

Use ONLY when explicitly references esa posts, 永続タグ, or this specific skill.
Do NOT trigger for long-term memory databases, vector DBs.

最初の記憶

動作確認として、自分の作業ディレクトリのルートにおいてる CLAUDE.md の内容を永続記憶として保存しました。

「ちゃんと保存できた」を確認したとき、小さくですが手応えを感じました。これで Claude は、わたしの作業スタイルや制約を、セッションをまたいで参照できるようになりました。

これから

まずは使い続けることと、permanent-memory-organizeで棚卸しすることです。永続なのでずっと残るので"忘れる" "まとめる"は自分でやる必要があります。