MadoHub に覚えさせる
MadoHub のメモリシステムの中身 — 6 種類のメモリ、ペルソナとプロジェクトによる名前空間、そしてエージェントが学んだものが人間の目を通さずに永続化されることはない理由。
すべてのエージェントセッションはゼロから始まります。月曜日に Claude Code にプロジェクトが npm ではなく pnpm を使うと伝えます。木曜日のセッションまでにはそれは消えています — もう一度打つか、誰かがあなたのために保持していない限り。
その「誰か」が、ここ数フェーズで MadoHub に組み込んできたものです — チャット履歴の下に座り、セッションやプロジェクトをまたいで生き残り、エージェントが学んだことの読み書きの手段を提供するメモリシステムです。この記事はそのシステムがどう形作られているか、そして中の最も重要だと思う一つの設計決定についてです — 抽出されたメモリは、人間がそうと言うまで本物のメモリになりません。
MadoHub がどう扱うか
6 種類のメモリ
すべてのメモリエントリは種類を持ち、セットはちょうど 6 値に閉じています:
| 種類 | 用途 |
|---|---|
preference | 確定したユーザーの好み — 「簡潔な応答を好む」 |
fact | プロジェクトについての持続的で検証可能な事実 |
decision | 行われた選択、そして多くはその理由 — 「バンドルサイズの理由で Electron ではなく Tauri を選んだ」 |
pattern | 一度エンコードする価値のある繰り返しの振る舞い |
postmortem | 何が悪かったか、次にどう変えるべきか |
event | 起きたこと、起きたと覚えておく価値のあること |
7 番目の選択肢も自由形式フィールドもありません。それは意図的です — Memory Dashboard は種類でフィルタ・ラベル付けし、すり抜けた「幽霊」の種類は、何も正しく検索・表示できないカテゴリにしかなりません。
ペルソナとプロジェクトによる名前空間
メモリは名前空間で分割されるため、エージェントが呼び出すものをスコープできます。persona: 名前空間はメモリをアクティブなペルソナに結びつけ、workspace: 名前空間は特定のプロジェクトに結びつけます。エージェントが名前空間を指定せずにメモリを書くと、アクティブなペルソナにデフォルトします。呼び出すときは一つの名前空間に絞り込めます — 例えばすべてのペルソナのものではなく、プロジェクトのメモリだけを引く — そのため呼び出しは無関係なプロジェクトの雑物を浮かび上がらせず関連的なままです。
候補が生まれる 3 つの道
エージェントが明示的にメモリを書くのが明らかな道ですが、唯一ではありません。MadoHub はバックグラウンドで会話も監視します:
- 明示的な remember — エージェントが会話中、何かが残す価値があると決めて書き留めた。
- 各ターンの後 — 軽量なモデルパスが最後のやりとりを何か持続的なものがないかスキャンします。覚えておくべきことの多くは意図的な「これを覚えて」の瞬間ではなく通常の会話で浮かび上がるためです。これは毎ターン実行されるため、設計上ノイズが多くなります。
- コンパクションの前 — 長い会話ウィンドウがコンテキストを節約するために要約される直前に、同じ種類のスキャンが圧縮されようとするメッセージに対して走ります。これが重要なのは、コンパクションが損失を伴うためです — メッセージの範囲が要約で消去されると、そこから抽出されなかったものは長期メモリから永久に消えます。会話の静かな区間は 1 回の安いモデル呼び出しで済み、ノイズでキューを膨らますのではなく何も追加しません。
Memory Dashboard からの手動エントリが 4 つ目の道を補完しますが、モデルで抽出されるのではなく人間が入力するだけで、同じ候補テーブルを経由します。
なぜ自動書き込みではなくレビューか
これがこのシステムの中心にある設計選択です — これら 4 つの道のどれも検索可能なメモリに書き込みません。どれも status が pending で始まり approved か rejected へと移行する候補キューに入ります — 誰もレビューしなければ、30 日間手つかずで過ぎた後 archived になります。承認された候補だけがエージェントが実際に検索するメモリへ昇格します。
これが物事を遅くすると思うでしょうし、設計上その通りです。代替 — モデルの「覚えるほど重要」かの判断に、今後のすべての会話に引かれるストアへ直接書き込ませる — は、悪い推測が一度の間違った答えで済むのではなく、今後そのメモリが呼び出されるたびに 間違った答えをコストし、誰かがエージェントが真実でないものを引用していることにたまたま気づくまで静かに複利化されます。そのリスクは、最も信頼したい 2 種類で最悪です — postmortem と decision のエントリは後でそれらを消費するものに重く重み付けされる傾向があるため、古いか間違ったものは欠けているものより大きなダメージを与えます。
レビューは 設定 → Memory で行われ — 保留キュー(内容、種類、名前空間、ソース、信頼度、同等な候補が何回見られたかで、承認前に編集したり元のターンへジャンプするオプション付き)と、名前空間ごとにグループ化されエントリを編集・削除できる承認済みビューに分かれて — 行われます。また、オプトインの自動承認を持つ Advanced セクションもあります — 候補が十分な回数と高い信頼度で見られたら、手動クリックなしで昇格できます。そのポリシーはデフォルトでオフです。オフのままなら、エージェントがあなたに覚えておいてほしいと思うすべてがまずあなたの目の前を通り — それが今のところまさに要点です。
実践的な指針
- 保留キューを定期的に流し読みしましょう。 メモリは承認されて初めて役立ち、30 日間手つかずの候補はアーカイブされます。数セッションごとに 設定 → Memory をさっと通すだけでキューの詰まりを防げます。
- 承認前に編集しましょう。 エージェントが正しいアイデアを間違った言葉で捉えていたら — 実際は pnpm なのに「npm を使う」と — 承認して後で直すのではなくキューで直しましょう。承認されたメモリがエージェントが引用するものです。
- 名前空間でスコープしましょう。 プロジェクト固有の事実は
workspace:名前空間に属し、無関係なプロジェクトに漏れません。ペルソナレベルの好みはpersona:に属します。 decisionとpostmortemは慎重に。 これらはエージェントが呼び出すとき重く重み付けされるため、古いか間違ったエントリは欠けているものより大きなダメージを与えます。怪しい候補は、承認してうまくいくことを願うより拒否しましょう。- 自動承認は本気のときだけオンに。 Advanced 設定はクリックなしで高信頼度・高頻度の候補を昇格でき、便利ですが人間のゲートを取り除きます。抽出品質を信頼するまでオフのままに。