14.1 KB · updated 2026-07-31 · md

agent-memory.ja.md

docs/i18n/agent-memory.ja.md

レイヤー化されたエージェント メモリ — エージェント別知識グラフ

<!-- translations:start -->

English · 한국어 · 中文 · Русский · Español · Français · Deutsch

<!-- translations:end -->

誰もが全てを覚えているわけではありません。そしてエージェントのコンテキスト ウィンドウが全てを含むことはできません。 Tesseraeの答えはレイヤー化された知識ベースです。すべてのエージェントは独自のセッションから独自のメモリを成長させ、そのメモリは定期的に蒸留され(整理、圧縮、研磨、洗練——そして安全に忘却されます)、マネージャーは自分のレポートの蒸留されたレイヤーのみを見ます。マネージャーのマネージャーはさらなるロールアップを見ます。実際の組織と同様に、単一の読者が常にアーカイブ全体を必要とするわけではありません。

以下のすべてはオプトインと加算型です。 tesserae distillを実行しないプロジェクトは以前とまったく同じように動作します。

レイヤー

  • L0 — プロジェクト グラフ (.tesserae/graph.json)。変更なし。依然として バイト冪等です。コンパイルの構造パスは、観察された各エージェントごとに1つの Agent ノードと各セッションから performed_by エッジをミントします——生の帰属、LLMコストなし。
  • L1 — エージェントごとに1つの成果物 (.tesserae/agents/<key>/distilled.graph.json)。 tesserae distillによって作成されます。通常のグラフ ファイルですが、単一の 48k 読み取りに制限されているため、すべてのエージェントが単一の呼び出しで全蒸留メモリを読み込むことができます。
  • L2' — マネージャー ロールアップ。 レポートを含むエージェントを蒸留する場合、レポートの L1 をロールアップします。系統ごとに重複排除、共有生証拠ごとにグループ化、最高のメモは逐語的に保持します——LLM再要約の深さは 1 に制限されるため、要約は決して要約の言い換えではありません。同じパスは任意の組織の深さまで再帰します。

エージェント ID

エージェントは harness:account:role でキー化されます——役割グレードなので、reviewer サブエージェントと planner サブエージェントは同じマシン上でも*異なる*専門知識を発展させます。役割はトランスクリプト内のサブエージェント記述子から、次に宣言型レジストリ一致ルールから、次に default にフォールバックします。

tesserae agents init         # セッションをスキャンし、組織を推論し、.tesserae/agents/registry.json を書き込みます
tesserae agents tree         # 組織図、セッション数 + 蒸留の陳旧化
tesserae agents list         # 観察されたキー、ラベル、親、セッション数
tesserae agents set-parent claude-code:me:reviewer claude-code:me:manager
tesserae agents rename <old> <new>   # 成果物ディレクトリ + レジストリをアトミックに移行します

init は役割シグナルから階層を推論します。サブエージェントの役割(claude-code:me:reviewer)は、それを生成した主要なエージェント(claude-code:me:default)に親となるため、1 つのコマンドで機能する多層組織が提供されます——set-parent は不要です。--flat を渡して、古い「すべてルート下」チャートを強制します。set-parent は、より深い手動設計の階層にのみ使用されます。ゼロ構成は依然として機能します。レジストリがない場合、すべてのエージェントが org:root にレポートし、agent="org" はフラット チーム概要です。

蒸留

tesserae distill                      # すべてのエージェント、リーフ優先、マネージャー最後
tesserae distill --agent <key>        # 1 つのエージェント
tesserae distill --dry-run            # LLM 呼び出しを推定、何も書き込まない
tesserae distill --max-llm-calls 50   # ハード予算;上限実行は再実行時に収束
tesserae distill --retry-fallbacks    # フォールバックしたクラスターを再試行
tesserae distill --full               # ウォーターマークを無視、最初から再蒸留

パスはエージェントの検索結果をクラスタリングし、各クラスタを要約し(引用ホワイトリストと忠実性リント)、蒸留されたメモをミントします。その ID は系統キーです——その下の未処理 L0 証拠のハッシュであり、LLM の単語ではありません。キャッシングは積極的かつ共有されています。変更されていない入力はウォーターマーク スキップされ、成長するクラスタは段階的に折り込まれ、プロバイダの障害は回路遮断され、決定的な構造フォールバックを生成します(フラグ付き、再試行可能、成功としてキャッシュされません)。

蒸留はオプトインです。TESSERAE_AGENT_DISTILL=1を設定してください(または config.json{"agent_distill": {"enabled": true}})。有効な場合、tesserae refresh も自動的に蒸留します——ただしメモリ圧力下にあるエージェントのみ(その未蒸留の検索結果が コンテキスト読み取りの半分に収まらなくなった場合)、MemGPT スタイルの統合トリガー。

自動統合(睡眠サイクル)

蒸留を覚える必要はありません。脳が休息中にメモリを統合するように、常時オンの tesserae engine デーモンは、プロジェクトがアイドル状態(数分間編集またはセッションなし)になるたびに自動的に統合されます。さらに定期的な上限があるため、継続的にビジーなプロジェクトでも統合されます。各実行は 3 つの操作を実行します。圧縮と忘却(下の蒸留パス)、未取得の知識を不使用による衰退(上の LRU 減衰)、そして生き残ったもの間の新しい接続の発見。蒸留ステップは、上で説明した maybe_distill_on_refresh トリガーを正確にラップします——同じオプトイン ゲート、エージェントごとのウォーターマーク、メモリ圧力チェック——したがって、TESSERAE_AGENT_DISTILL が設定され、コンパイル ゲート下で実行され、決定論的成果物を妨害しない限り、サイクルはノーオプです。

完全な動作、CLI フラグ(--consolidate-idle / --consolidate-every / --consolidate-check)、およびフリート ノート: docs/engine-consolidation.md

忘却 — 削除されない

  • 吸収:衰退した、低信頼度の検索結果が llm 品質蒸留液に覆われている場合、それに折り込まれます (absorbed_refs) し、デフォルト読み込みでは抑制されます——ただし include_supersededdrill_down を介してアクセス可能です。
  • 降格:他のすべては最悪の場合、完全本文から機関のインデックス ノート内のタイトル+参照行に低下します。年齢だけでは知識が見えなくなることはありません。
  • 不使用による減衰 (LRU):減衰は*検索最近性*によって駆動されます。作成年齢だけではありません。読み取りは記録アクセスをサーフェス化します——last_accessed_at / access_count ——node_memory サイドカー(決して graph.json には入りません)。蒸留は、減衰を計算する前にその活動アクセス状態をその作業ビューにマージします。したがって、誰も取得しない検索結果は減衰し、吸収または降格の対象となります。一方、最近読まれたものは年齢に関係なく保持されます。空のサイドカーは、古い年齢のみの動作を正確に再現します。
  • 台帳:すべての昇格/降格/吸収は忘却台帳に追加され、tesserae lint によって表面化されます (AGENT_FORGET_LEDGER)、およびエージェントあたりの未蒸留バックログ メトリック (AGENT_UNDISTILLED_BACKLOG)。

発見された接続

圧縮と忘却に加えて、統合は蒸留されたメモ間の新しい接続も発見します——プロジェクト内のエージェント間、単一のエージェント内だけではなく。ノートを埋め込み、近い対を shares_concept_with エッジとしてリンクします(federation_semantic マーカー付き)。発見は埋め込みゲートされます——実際の埋め込みバックエンドが構成されている場合にのみ実行され、ハッシュ スタブをスキップしてください——したがって、虚偽のリンクを製造することはありません。エッジは .tesserae の下の累積サイドカー オーバーレイに書き込まれますが、決して graph.json に書き込まれません。そしてクエリ/PPR/フェデレーション読み取り時にメモリにマージされます(スコープ ビュー オーバーレイとまったく同じ)。各統合サイクルは、以前のサイクルが発見したものに対して重複排除し、拡張します。実行する睡眠サイクル操作については、 docs/engine-consolidation.md を参照してください。

スコープ ビューの読み取り

CLI から、--agent KEYqueryask、および context のスコープを設定します。

tesserae query "release checklist" --agent claude-code:me:reviewer   # ワーカー ビュー
tesserae ask "what does my team know about deploys?" --agent org      # チーム全体
tesserae agents show claude-code:me:manager    # モード、メンバー、陳旧性
tesserae agents drill SessionInsight:abc123 --agent claude-code:me:reviewer

MCP では、すべてのグラフ読み取りツールが同じ agent= を受け入れます。どちらの場合でも、キーは以下のいずれかに解決されます。

  • ワーカー キー → 独自の生経験 ∪ 独自の蒸留されたメモ、蒸留液優先(吸収された生は読み込み時に派生したオーバーレイによって自動的に抑制されます——決して graph.json に書き込まれません)。
  • マネージャー キー → レポート L1 成果物のフェデレーション のみ。生の検索結果は上方に漏洩しません。
  • org → すべての蒸留された成果物、ゼロ構成。

サポート ツール: agents show / agent_view_explain(メンバー + distilled_through 陳旧ウォーターマーク——各レポートの専門知識がどのくらい古いか)、および agents drill / drill_down(蒸留されたメモの member_refs を生 L0 証拠に解決して、生きている/変更された/吸収された/消失したステータスを取得——すべての呼び出しは監査ログに記録されます)。compile_context --multi-pool は蒸留されたメモと専門知識プロファイル用にバジェット スロットを予約し、出力内の古いまたはフォールバック品質の知識にラベルを付けます。

成長ループ

  • エージェントごとのハーネス: write_harness エージェント モードは、そのエージェントの 解決されたビューに到達する MCP 構成を備えたエージェントごとのハーネス ディレクトリを出力します。 さらに、1 回だけシードされる purpose.md ミッション ページが、その専門知識プロファイルから生成されます。
  • エージェントごとのガイダンス: .tesserae/extraction-guidance-<key>.md を介して 1 つのエージェントの蒸留を操向し、プロジェクト レベル .tesserae/distill-guidance.md の上に階層化します。 1 つのエージェントのストリームを編集すると、そのエージェントのみが再蒸留されます。
  • セマンティック ブリッジ (オプトイン): マネージャー/組織ビューで shares_concept_with エッジで エージェント間の 関連 蒸留液をリンクします——エッジ、マージなし。
  • トピック マップ: agent_topics はエージェントの蒸留液セットを 決定論的 topics.md にロールします——エージェントの目次。
  • サブエージェント昇格: 型付きサブエージェント実行はサブエージェントの 独自のキー下で検索結果をミントするため、委任された作業は代表者の専門知識に蓄積されます。

決定性保証

プロジェクト グラフはバイト冪等のままです。蒸留された成果物は (グラフ バイト、レジストリ、キャッシュ ディレクトリ、以前の成果物、 オプション)が決定論的です。時刻は常にコーパス時計です——セッション自体の最新の瞬間、 再帰的にマネージャーの最新の子ウォーターマーク—— 決して壁時計ではありません。ノード ID は LLM の散文に依存しません。Lint プローブは、エージェント レイヤー ノード上のタイムスタンプ/カウンター形メタデータを拒否します。 その正確なクラスの状態は以前にバイト冪等を破ったためです。

完全設計根拠: docs/superpowers/specs/2026-07-19-layered-agent-kg.md