TL;DR: 誰もがAIコーディングエージェントのためのメモリプラグインを作っている。実行済みタスクの古い記憶が、このアプリケーションの適切な方向性であるとは思えない。知性にはメタ認知があり、自分の思考過程を考える能力が備わっている。
出典(または続きを読む): github.com/houtini-ai/metacog
というわけで、代わりに神経系を構築しました。Claude Codeのフックを2つ、依存関係はゼロ。核心的な洞察は、エージェントのコンテキストウィンドウをファイリングキャビネットのように扱うことは機能しないということです。エージェントは忘れたことを知っていなければ、それを求めることができません。受動的な想起を、リアルタイムの固有覚信号と、機能しているルールを報酬する強化追跡モデルに置き換えました。
エージェントのメモリの問題
現在のAIコーディングエージェント向けのメモリ解決策の潮流(Claude-Mem、Memsearch、Agent Memory MCP、Cognee、SuperMemory)はすべて同じアーキテクチャに従います:セッションデータを取り込み、圧縮し、SQLiteまたはベクター・ストアに保存し、次のセッションで関連する断片を取得し、コンテキストウィンドウに挿入する。
これはパッシブ・ライブラリアン問題です。メモリシステムはエージェントが検索を決定するのを待ち、テキストを取り出して挿入します。しかしエージェントは自分が忘れたことを知っていなければ、それを検索することができません。それは逆説です。そして経験的には、エージェントは取得した memoriesを読み取り、それを認識し、3回目のツール呼び出しの後、同じ失敗に直面します。
これは検索品質の問題ではありません。建築的な問題です。メモリプラグインはコンテキストウィンドウをファイリングキャビネットのように扱います。しかし認知機能は、LLMエージェントでさえも、そのようには機能しません。
理論的基盤
拡張された心の主張
ClarkとChalmers(1998)は、認知は脳の中だけで起きるものではなく、認知システムと環境の間のループの中で起きると主張しました。ノートは単なる記憶場所ではなく、認知プロセスと密に結び付けられると、それ自体が認知システムの一部になります。
論文: Clark, A. & Chalmers, D. (1998). 「The Extended Mind」。 Analysis, 58(1), 7–19. doi:10.1093/analys/58.1.7
LLMエージェントに適用するとき:フック、状態バッファ、強化ログはエージェントが参照する外部ツールではありません。それらはエージェントの認知プロセスの拡張であり、行動と観察の間のループで作動します。エージェントは自分の固有覚を「チェックする」と決めるのと同じように、あなたが自分のバランス感覚をチェックするのを決めるようにはいきません。
経験的強化学習
Zhao ら(2025)は、訓練時に自分自身の失敗軌跡を反省するエージェントが、標準的な prompting を用いたエージェントと比較してタスク成功率を最大81%向上させることを示しました。そのメカニズムは、何が間違っていてなぜそうなったのかを組織的に自己反省することであり、起きた出来事の単なるリプレイではありません。
論文: Zhao ら(2025)。 「ソフトウェア開発エージェントの経験的共同学習」。 arXiv:2312.17025
この洞察を取り、訓練時間から実行時へと移しました。しかし、素朴な実装は重要な問題に直面しました(下記「シーソー問題」を参照)。
LLMエージェントにおけるメタ認知的モニタリング
LLMのメタ認知に関する最近の研究では、モニタリング(自分の認知状態を評価すること)と、コントロール(その評価に基づいて行動を調整すること)を区別します。ほとんどのエージェントフレームワークはどちらも実装していません。
論文: Weng ら(2024). 「Large Language Model Agentsにおけるメタ認知モニタリングとコントロール」。 arXiv:2407.16867
論文: Xu ら(2024). "CLMC for LLM Agents: 認知モデルとエージェントアーキテクチャのギャップを埋める" arXiv:2406.10155
私たちのアプローチは両方を実装します。固有感覚層は監視を行います。痛覚受容層は制御を担当します。どちらもエージェントが「メタ認知になると決定する」ことを要求せず、それはフックの実行経路で自動的に起こります。
アーキテクチャ: 2つのフック、3層
層1: 固有感覚(PostToolUseフック、常時オン)
ツール呼び出しごとに5つのセンサーが作動します。値が基準内にある場合、出力はゼロでトークンもゼロのコストです。何かが逸脱すると、stderr経由でエージェントのコンテキストに短い信号が注入されます。指示ではなく、単なる認識です。
| 感覚 | 検出内容 |
|---|---|
| O2 | トークンの消費速度 - コンテキストが持続不能な状態で消費されている |
| Chronos | 直前の実時計時間とステップ数 |
| 痛覚受容 | 連続した同様のエラー - エージェントは行き詰っているがそれに気付いていない |
| Spatial | 変更されたファイルが N 個の他ファイルによりインポートされる |
| 前庭感覚 | 行動の多様性 - エージェントが同じ行動を繰り返し、エラーを引き起こしていない |
これは生物学的固有感覚に触発されています。見ずに体が空間の中でどこにあるかを教えてくれる感覚です。エージェントには同等のものはありません。自分の文脈が満たされていくのを見たり、時間が過ぎるのを感じたり、回っているのを検知することはできません。
層2: 痛覚受容(介入のエスカレーション)
層1の閾値が臨界を迎えると(例: 連続する同様のエラーが4回以上)、システムはエスカレーションします:
- ソクラテス的 - 「自分が基づいている前提を述べてください。それを覆すものは何ですか?」
- ディレクティブ - アプローチを変更するための明示的な指示
- ユーザーフラグ - エージェントに停止して人間に確認するよう伝える
これは痛覚反応です。妨害的であるように設計されています。エージェントが連続して4つの同様のエラーに直面している場合、丁寧さは有益ではありません。
層3: 強化追跡(UserPromptSubmitフック、セッションを越える)
ここでアプローチは記憶とは本質的に異なる方向へ展開します。
シーソー問題
初めてセッションを跨いだ学習を実装したとき、規則の信頼度には標準的な時間減衰を用いました。パターンが発生すると > ルールを作成 > 次のセッションでルールを注入 > ルールが障害を防ぐ > 検出がなくなる > 信頼度が減衰 > ルールが削除される > 故障が戻る > ルールが再作成される > 信頼度が上がる > ルールが再度障害を防ぐ > 減衰され > 破棄され > ...
ルールがうまく機能すればするほど、システムはそれをより早く排除します。 それは学習ではありません。振動です。
これは調整の問題ではありません。引き金となるイベントの欠如に基づいて信頼度を減少させるいかなる時間減衰モデルも、予防が成功している場合には罰します。根本的な前提 — 「最近の活動がないことは無関係である」 — は、活動の欠如がルール自身によって引き起こされる場合には誤っています。
強化追跡: 減衰モデルの反転
私たちの解決策: 失敗が欠如していることを効果の証拠として扱います。
セッション中に神経系が失敗パターンを検知すると、検出を記録します――失敗が発生したということです。しかし、既知のパターンがそのルールが有効だったセッションで発動しなかった場合、システムは抑制を記録します――そのルールが存在し、失敗が欠如していたということです。
どちらも証拠となります。どちらも信頼度を高めます。
実装
Claude Codeのフックを2つあります:約400行のJavaScript。
bash npx @houtini/metacog --install
これらのフックは ~/.claude/settings.json(グローバル)または .claude/settings.json(--project を用いたプロジェクトごと)にインストールされます。Metacogは静かに実行され、異常がある場合にのみ出力が表示されます。
[リンク] [コメント]
