記憶を整えるAIの規則を借りて回したら、一番重いずれはノートの外にあった
9月19日の記事は、自分の環境の構成マップが3か月で4か所ずれていた、次はずれをもっと早く見つける手順に手を入れる、で終えた。見つける仕組みは、その記事を出したのと同じ19日に足した。その話は後半に回して、先に、ずれを直す手入れの規則と、それで何が見つかったかを書く。規則は7月に、AI の記憶まわりの OSS を3つ調べたとき、1つから借りてきたものだ。
外部脳に全体を掴む層を足した記事でも、OSS を評価して思想だけ盗んで実装は捨てた。あちらは何を覚えるかの話だった。今回は覚えたものが腐る話で、借りた規則で3回手入れを回して分かったのは、腐る場所が3つあって、一番重い腐り方はノートの外で起きていた、ということだった。
3つ調べて、残ったのは規則集だった
調べたのは rowboat、agenticow、それと Claude Code の記憶の組み方を公開しているリポジトリの3つ。subagent を3体並べて読ませた。
agenticow はベクトルの記憶を git のように分岐させて、試して、良ければ本線に取り込むための基盤だった。分岐も差分も履歴も、Markdown を git に置いているうちの vault は最初から持っている。記憶の組み方のリポジトリは、今の環境でもうやっていることの手前だった。機能として持ち帰るものはどちらにも無かった。agenticow の README の一文だけは、あとで自動を抜く判断の裏付けになった。
rowboat は、メールや会議からノートを自動で作る製品だ。取り込み側は、最初の外部脳の記事で断った「何を覚えるかを AI が決める」そのもので、そこは見ない。見たのは、作ったノートを整えるほうの note_curation.ts という1ファイルだった。冒頭のコメントはこう始まる。ノートを作る側は追記しかしないので、量が増えるほど質が落ちる。やり取りの記録は膨らみ、古くなった未完了項目は残り、矛盾は溜まる。続けて、本気でやっているエージェントの記憶はどれもバックグラウンドで整理をかける工程に行き着くと書いて、Letta(旧 MemGPT)の sleep-time compute、Stanford の generative agents の reflection、Zep を並べている。自分のエージェントには「gardener」、庭師とあだ名を付けている。
中身は、1回に1ノートだけ書き換える整理係への指示書で、守るべき規則が並んでいる。
- 新しい事実を足さない。出力は全部、元のノートから導けること
- 実質的な中身を消さない。圧縮はしても、決定や約束やリンクは要約の中に残す
- 裏付けの無い推論は、日付付きの観察に書き戻す
- 過ぎた予定の未来形は過去形に直す。ノートに記録が無い限り、実施されたとは書かない
- 45日動きの無い未完了項目は、消さずに休眠の節へ移す
- 矛盾は新しいほうを残し、古い値は履歴として書き添える
- 整理したら frontmatter に日時の印を押す
これを毎日、手入れが要るノートに自動でかける。
抜いたのは「毎日黙って回す」の一点
規則はほぼそのまま、Vault に書き込むときの規約をまとめた obsidian-protocol というスキルに移した。変えたのは回し方だけだ。手入れは俺が指示したときにだけ走る。1回に書き換えるのは1ノートで、Claude が差分を出し、俺が見て承認してから書く。作業ログは一次資料なので対象から外した。整理そのものは Claude がやるが、黙っては書かせない。
何を覚えるかを AI に決めさせないなら、覚えたものを黙って書き換えさせるのも同じことになる、というのが自動を抜いた理由だ。agenticow の README の一文もこれを後押ししている。安いモデルの答えから1つ選ぶ判定を LLM にやらせたら、検証器を付けても同じ候補の多数決より悪かった、という自分たちの実験を引いて、記憶の変更を本線に取り込む判定は、テストや正規表現や人の確認のような、幻覚を起こしようがないものに限る、と書いている。
うちの規約には確信度の印が前からある。検証していない主張には(推測)、裏が取れず人の判断待ちのものには(要確認)を付ける。(推測)を外していいのは、コードやログや実行結果のような決定論的な証拠か、俺の確認があったときだけで、LLM が読み直して確からしいと思っただけでは外さない。整理係の出力を LLM に判定させるのは、この一行とぶつかる。
3回回して、却下は一度も無かった
1回目は7月15日、移した当日に回した。TODO の完了済み7項目を、日次ログを見よという1行にまとめ、AI が週次で出してくるネタ候補の受信箱で、記事になった1件を「公開済み」と畳んだ。2ノートで、小さい。
2回目と3回目は9月18日に続けて回した。2回目は TODO が対象で、78日着手の無かった項目が初めて休眠の節に移った。3回目は環境の構成マップが対象で、これが「手で組んだ外部脳の製品版が出ていたので、比べたら足すものが無かった」で書いた、3か月で4か所ずれていた一枚だ。
3回とも、差分を見て全部そのまま承認した。直してほしくない変更が一つも出てこなかった。許されている変更が、縮める、移す、古い値を履歴にする、書式を揃える、に絞ってあって、事実を足すことも消すこともできない。規則が幅を削っているので、差分は承認できる形にしかならない。
ずれは3つの場所にあった
構成マップの4か所を、どこを見れば分かったかで分けると、こうなる。
公開リポジトリを列挙した一文が、同じノートの表と食い違っていた。これはノートの中だけで分かる。存在しないノートへのリンクも、Vault にそのファイルがあるかを見れば分かる。スキルの版管理の経路が変わっていた件と、リポジトリの一覧から最近作った4つが漏れていた件は、ノートの中には手がかりが無い。Vault の別の日の作業ログに、その変更や新しいリポジトリの記録があって、そこと突き合わせて初めて分かった。
うちの規約の「新しい事実を足さない」は、Vault のどこにも書かれていない事実を足さない、という意味で運用していて、別のノートの記録から写すのは認めている。rowboat のほうは、元のノートから導けること、と書いている。同じ規則でも、どこまでを「元」と見るかで、拾えるずれの範囲が変わる。
4か所の手入れを承認したあと、Claude が(要確認)に落としていた項目、たとえば新しく作ったリポジトリの公開区分を、実機で確かめさせた。そのついでに、ノートに書かれた symlink の記述も全部当たらせた。
1本が symlink ではなかった。朝夕にニュースをまとめる無人タスクの指示ファイルで、ノートにはリポジトリへの symlink と書いてあるのに、実際はコピーになっていた。9月3日から Claude のデスクトップアプリが symlink の指示ファイルを開かなくなり、11日に実ファイルをコピーして配置する方式に切り替えていた。前の記事で1行だけ触れた、コピーに変わっていた件だ。切り替えたこと自体は Vault の別のノートに書いてあったので、これはまだ2つ目の場所のずれで、突き合わせれば分かるはずだった。3回目の手入れは、そのノートまで見に行っていなかった。先があったのは、コピーの中身のほうだ。
コピーをリポジトリの版と比べたら、1行足りなかった。7月に足した「信頼できない文字列を WebFetch に渡さない」という規則だ。Web とメールを読んで動くタスクから、その規則だけが抜けていた。reflog を見ると、コピーはその規則が入る前の main から切った作業ブランチの上で作られていた。15分後に main を取り込んだが、配置はやり直していなかった。承認して Claude に配置スクリプトを流し直させ、2つのタスクのコピーがリポジトリと一致するのを確かめて終えた。
これが3つ目の場所だった。コピーが原本より1行少ないことは、Vault のどこにも書かれていない。ノートを何度読み直しても、Vault の全部と突き合わせても出てこない。
ノートの外を見に行く手順は、規則のどこにも無い
rowboat の整理係に持たされている道具は、ファイルの読み書きと検索と一覧の4つで、コマンドを叩いて実機を確かめる手段は無い。上の箇条には挙げなかったが、規則には「要確認」もある。ただしそれは、同じ時点で食い違う記述が並んでいて、どちらとも決められないときに使うものだ。毎日回るあの設計で出来上がるのは、ノートの中で矛盾の無い一枚だ。
うちの規約にも、現実を見に行けとは書いていない。今回それが起きたのは、決められないものが推測で埋まらずに(要確認)として残り、それが俺の目に入って、確かめろと言ったからだ。実際に見に行ったのは shell を持っている Claude で、俺がしたのは行けと言うことだけだった。差分の承認は3回とも素通りだった。見つかるきっかけは可否の判定より、差分と(要確認)が俺の前に出てきたことにあった。
毎日黙って回る整理係でも、(要確認)は残せる。ただ、それを誰も見ない作りなら、中身の欠けたコピーはそのまま動き続け、ノートは矛盾の無い顔で残る。実際、3回目の手入れを承認した直後の構成マップは、矛盾の無いきれいな表になっていて、そこにはまだ symlink と書いてあった。
見つけるほうだけ機械にした
指示しないと回らない手入れは、指示を忘れれば3か月でも止まったままになる。9月18日に見つかったものも、全部「回して」と言ってから見つかった。
翌19日、見つけるほうだけを機械にした。Claude Code の起動時に走る hook で、Vault の死にリンク、長く動いていない TODO、30日を過ぎた(要確認)と(推測)、90日手入れしていないノートを数えて、件数を1行で出す。標準ライブラリだけの Python で150行、走査は0.06秒。放っておかれた(要確認)を起動のたびに目の前に出すのが、この hook の一番の役目だ。直すほうは前と同じで、指示して、差分を見て、承認する。
4日経った今日、起動したら死にリンクが4件と出た。19日の初回と同じ4件だ。出すだけでは直らない。hook がやれるのは、回してと言うきっかけを作るところまでだ。30日を過ぎた印の警告は3件で、うち2件は、7月に rowboat の規則を移したときの判断メモが印の使い方を説明している行だった。片方の印だけを説明する行を除外し損ねていて、ここは検出のほうの直しどころだ。
ノートの記述のずれなら、数日遅れて直しても間に合う。安全規則の欠落はノートのずれではなく、実機のほうの話だ。配置したファイルが原本と一致しているかは、読まなくても比べれば分かるので、21日に同じ起動時の hook へ比較を3行足した。こちらは件数ではなく、ずれた時点で警告が出る。
整ったノートほど、外を見に行かせる人が要る
借りた規則のうち、3回回して意味があったと言えるのは、足さない、消さない、推論は観察に戻す、という禁止だった。決められないものが(要確認)として残ったのも、その禁止のおかげだ。
自分の記憶を AI に整えてもらう仕組みを入れるなら、整理のうまさより先に見ておくことが2つある。何を禁止しているか。それと、ノートの中で決められないものが誰の目に入り、誰が現実を見に行かせるのか。ノートは整えるほど信じやすくなる。うちでは、その信じやすさの裏を見に行かせる役を、まだ人が握っている。
comments powered by Disqus