会話をまたいで記憶する
個人用または完全に信頼されたエージェントでは、エージェントごとの設定 1 つで、他の 非公開会話をまたぐ制限付き検索を有効にします。session.dmScope が
未設定または "main" であり、どのバインディングも session.dmScope を上書きしては
なりません。DM 分離が設定されている場合、デフォルトでは無効になります。明示的な true または false が常に優先されます。有効にすると、
OpenClaw はそのエージェントのセッショントランスクリプトをインデックス化し、対象となる非公開返信の前に Active
Memory 検索パスを実行します。このパスは、同じエージェントの他の非公開会話から
関連するトランスクリプトの抜粋を読み取れます。現在回答中の会話は除外されます。
プライバシー境界は固定されています。
- 非公開のダイレクト会話と明示的な永続 UI 会話は、互いを検索できます
- グループとチャンネルは、検索元にも検索先にもなりません
- 別のエージェントのトランスクリプトは決して対象になりません
- 十分な会話メタデータがない不明またはアーカイブ済みのトランスクリプトは拒否されます
tools.sessions.visibility が拡張されたり、より広範な sessions_* ツールアクセスが付与されたりすることはありません。共有
ワークスペースメモリ(MEMORY.md と memory/*.md)は既存の動作を維持します。
Active Memory は有効なままにする必要があります。検索により、対象となる返信へ制限付きのブロッキング処理が
追加されます。タイムアウト、検索不能、結果なしのいずれの場合も、呼び出されたトランスクリプトコンテキストを使わずに
返信が続行されます。OpenClaw の組み込みメモリ
プロバイダーは、builtin と QMD の両方のバックエンドで、この保護されたトランスクリプト検索パスを
サポートします。他のメモリプロバイダーは独自の検索動作を維持しますが、
非公開トランスクリプトへの認可を自動的には受け取りません。openclaw doctor は、
未対応のプロバイダーまたは不足している memory_search ツールを報告します。
高度な Active Memory のクイックスタート
高度で安全なデフォルトとしてopenclaw.json に貼り付けます。Plugin を有効にし、
main のみに限定し、ダイレクトメッセージセッションだけを対象にし、モデルはセッションから継承します。
plugins.entries.*(active-memory.config を含む)は、再起動不要の
設定カテゴリに含まれます。
Gateway は Plugin ランタイムを自動的に再読み込みするため、手動で再起動する
必要はありません。それでも完全な再起動を強制する場合は、次を実行します。
plugins.entries.active-memory.enabled: trueは Plugin を有効にしますconfig.agents: ["main"]はmainエージェントのみを対象にしますconfig.allowedChatTypes: ["direct"]はダイレクトメッセージセッションに限定します(グループやチャンネルは明示的にオプトインします)config.model(任意)は専用の検索モデルを固定します。未設定の場合は現在のセッションモデルを継承しますconfig.modelFallbackは、明示的なモデルも継承モデルも解決されない場合にのみ使用されますconfig.fastModeは、メインエージェントを変更せずに検索用の高速モードを任意で上書きしますconfig.promptStyle: "balanced"はrecentモードのデフォルトです- Active Memory は、対象となる対話型の永続チャットセッションでのみ実行されます(実行条件を参照)
仕組み
ブロッキング方式のサブエージェントは、設定されたメモリ検索ツールのみを呼び出せます( メモリツールを参照)。クエリと 利用可能なメモリの関連性が弱い場合、NONE を返し、メインの返信は
追加コンテキストなしで続行されます。
Active Memory は会話を強化する機能であり、プラットフォーム全体の
推論機能ではありません。
セッションが永続的でユーザー向けであり、エージェントに検索対象となる
有意義な長期メモリがあり、生のプロンプト決定性よりも継続性やパーソナライズが
重要な場合に使用します。たとえば、安定した好み、繰り返される習慣、
自然に提示すべき長期的なコンテキストです。自動化、内部ワーカー、
ワンショット API タスク、または非表示のパーソナライズが意外に感じられる場所には
適していません。
実行条件
Active Memory には 2 つの有効化パスがあります。- 会話をまたいで記憶するは、有効な
memory.search.rememberAcrossConversations設定を持つエージェントを自動的に対象にしますが、 非公開のダイレクト会話または明示的な永続 UI 会話に限られます。 - 高度な Active Memoryは、
plugins.entries.active-memory.config.agentsに列挙されたエージェント ID を対象にし、Plugin のチャット タイプとチャット ID の制御を適用します。
/active-memory off は、その会話で両方の
パスを一時停止します。いずれかの条件が満たされない場合、そのターンでは Active Memory は実行されず、
メインの返信には影響しません。
セッションタイプ
config.allowedChatTypes は、高度な Active Memory パスを実行できる
会話の種類を制御します。「会話をまたいで記憶する」の範囲を拡張することはできません。
高度な Active Memory がグループやチャンネルで許可されていても、
その製品設定は非公開会話のみに限定されたままです。デフォルトは次のとおりです。
direct、group、channel、explicit(不透明なセッション ID を持つポータル形式のセッション。
たとえば agent:main:explicit:portal-123)。
ダイレクトメッセージセッションはデフォルトで実行されます。グループ、チャンネル、明示的セッションは
オプトインする必要があります。
config.allowedChatIds と config.deniedChatIds を追加します。
allowedChatIdsは、解決済み会話 ID の許可リストです。 空でない場合、Active Memory は会話 ID がリストに含まれるセッションでのみ 実行されます。これにより、ダイレクトメッセージを含む、許可されたすべてのチャットタイプが 一度に絞り込まれます。グループだけを絞り込みつつ、すべてのダイレクトメッセージを維持するには、 ダイレクトの相手 ID もallowedChatIdsに追加するか、allowedChatTypesを テスト中のグループ/チャンネル展開に限定してください。deniedChatIdsは拒否リストであり、常にallowedChatTypesとallowedChatIdsより優先されます。
chat_id/open_id、Telegram のチャット ID、Slack のチャンネル ID)。照合では
大文字と小文字が区別されません。allowedChatIds が空でなく、OpenClaw が
セッションの会話 ID を解決できない場合、Active Memory は推測せずにそのターンを
スキップします。
セッション切り替え
設定を編集せずに、現在のチャットセッションで Active Memory を一時停止または 再開します。plugins.entries.active-memory.config.enabled、エージェントの
memory.search.rememberAcrossConversations 設定、その他のグローバル
設定は変更しません。
代わりにすべてのセッションで一時停止/再開するには、グローバル形式を使用します(
所有者または operator.admin が必要です)。
plugins.entries.active-memory.config.enabled に書き込みますが、
plugins.entries.active-memory.enabled は有効なままにするため、後で Active Memory を
再度有効にするコマンドを引き続き利用できます。
確認方法
デフォルトでは、Active Memory は通常の返信には表示されない、非表示の信頼されていない プロンプト接頭辞を挿入します。必要な出力に対応するセッション切り替えを 有効にします。/verbose onはステータス行を追加します:🧩 Active Memory: status=ok elapsed=842ms query=recent summary=34 chars/trace onはデバッグ要約を追加します:🔎 Active Memory Debug: Lemon pepper wings with blue cheese.
/trace raw を使用すると、トレースされた Model Input (User Role) ブロックに、生の
非表示接頭辞が表示されます。
クエリモード
config.queryMode は、ブロッキング方式のサブエージェントに表示される会話の量を
制御します。フォローアップへ適切に回答できる最小のモードを選択してください。コンテキストサイズの増加に合わせて、
timeoutMs を message から recent、full へと増やします。
- message
- recent
- full
最新のユーザーメッセージのみが送信されます。最速の動作、安定した好みの検索への最も強い偏りが必要で、
フォローアップターンに会話コンテキストが不要な場合に使用します。
config.timeoutMs では 3000~5000 ms 前後から始めます。プロンプトスタイル
config.promptStyle は、サブエージェントがメモリを返す際の積極性や厳格さを制御します。
config.promptStyle が未設定の場合のデフォルトマッピング:
config.promptStyle は常にこのマッピングを上書きします。
モデルのフォールバックポリシー
config.model が未設定の場合、Active Memory は次の順序でモデルを解決します。
config.modelFallbackPolicy は古い設定のために保持されている非推奨の互換性フィールドです。ランタイムの動作には影響しなくなりました。modelFallback は厳密に上記チェーンの最後の手段であり、解決済みモデルでエラーが発生した際に別のモデルへ切り替えるランタイムフェイルオーバーではありません。
速度に関する推奨事項
config.model を未設定のままにしてセッションモデルを継承するのが最も安全なデフォルトです。既存のプロバイダー、認証、モデルの設定に従います。レイテンシを下げるには、代わりに専用の高速モデルを使用してください。想起品質は重要ですが、ここではメインの回答パスよりレイテンシの方が重要であり、ツールサーフェスも限定的です(メモリ想起ツールのみ)。
高速モデルとして適した選択肢:
cerebras/gpt-oss-120b、専用の低レイテンシ想起モデルgoogle/gemini-3-flash、プライマリチャットモデルを変更しない低レイテンシのフォールバックconfig.modelを未設定にして、通常のセッションモデルを使用
Cerebras の設定
chat/completions アクセス権があることを確認してください。/v1/models に表示されているだけでは保証されません。
メモリツール
config.toolsAllow は、高度な Active Memory のためにブロッキングサブエージェントが呼び出せる具体的なツール名を設定します。デフォルトは現在のメモリプロバイダーによって異なります。
設定されたツールがどれも利用できない場合、またはサブエージェントの実行が失敗した場合、Active Memory はそのターンの想起をスキップし、メインの応答はメモリコンテキストなしで続行されます。カスタム想起ツールでは、構造化された結果フィールドが空の結果または失敗を明示的に報告しない限り、空でないモデル可視のツール出力が想起の根拠として扱われます。
toolsAllow は具体的なメモリツール名のみを受け付けます。ワイルドカード、group:* エントリ、およびコアエージェントツール(read、exec、message、web_search など)は、非表示のサブエージェントが起動する前に暗黙的に除外されます。
組み込みメモリ
明示的なtoolsAllow は不要です。
LanceDB メモリ
LanceDB をインストールして設定すると、Active Memory は自動的にmemory_recall を使用します。明示的な toolsAllow は不要です。
memory.search.rememberAcrossConversations は、memory_recall を通じて非公開のセッショントランスクリプトを公開しません。LanceDB がアクティブなメモリプロバイダーの場合は、LanceDB の自動想起または上記の高度な設定を使用してください。
Lossless Claw
Lossless Claw は、独自の想起ツールを備えた外部コンテキストエンジン Plugin(openclaw plugins install @martian-engineering/lossless-claw)です。まずコンテキストエンジンとして設定してください。コンテキストエンジンを参照してください。その後、Active Memory にそのツールを指定します。
lcm_expand を toolsAllow に追加しないでください。Lossless Claw はこれを委任された展開のための低レベルツールとして使用しており、トップレベルの Active Memory サブエージェント向けではありません。Lossless Claw は現在のメモリプロバイダーを置き換えずに、コンテキストの組み立て方を変更します。rememberAcrossConversations も使用する場合は、memory_search を toolsAllow に残してください。LCM 専用のツールリストも高度な Active Memory では有効ですが、製品のトランスクリプト想起パスは無効になります。
高度なエスケープハッチ
推奨設定には含まれません。config.thinking はサブエージェントの思考レベルを上書きします(デフォルトは "off")。Active Memory は応答パス内で実行されるため、思考時間を増やすとユーザーに見えるレイテンシが直接増加します。
config.fastMode は、ブロッキングメモリサブエージェントについてのみ高速モードを上書きします。true、false、または "auto" を使用してください。未設定のままにすると、通常のエージェント、セッション、モデルのデフォルトを継承します。"auto" は想起モデルに設定された fastAutoOnSeconds のカットオフを使用します。
config.promptAppend は、デフォルトプロンプトの後、会話コンテキストの前にオペレーター指示を追加します。コア以外のメモリ Plugin で特定のツール順序やクエリ形成が必要な場合は、カスタムの toolsAllow と組み合わせてください。
config.promptOverride はデフォルトプロンプトを完全に置き換えます(会話コンテキストはその後も追加されます)。別の想起コントラクトを意図的にテストする場合を除き、推奨されません。デフォルトプロンプトは、メインモデル向けに NONE または簡潔なユーザー事実コンテキストのいずれかを返すよう調整されています。
トランスクリプトの永続化
ブロッキングサブエージェントの実行では、呼び出し中に実際のsession.jsonl トランスクリプトが作成されます。デフォルトでは一時ディレクトリに書き込まれ、実行完了直後に削除されます。
デバッグのためにこれらのトランスクリプトをディスク上に保持するには、次のように設定します。
config.transcriptDir で変更できます。使用には注意してください。ビジーなセッションではトランスクリプトが急速に蓄積する可能性があり、full クエリモードでは大量の会話コンテキストが重複します。また、これらのトランスクリプトには非表示のプロンプトコンテキストと想起されたメモリが含まれます。
設定
Active Memory のすべての設定はplugins.entries.active-memory 配下に置かれます。
調整に役立つフィールド:
推奨セットアップ
まずrecent から始めます:
/verbose on、デバッグ要約に /trace on を
使用します。どちらもメインの応答より前ではなく、その後のフォローアップとして送信されます。
その後、レイテンシーを下げるには message に移行し、サブエージェントの実行が遅くなっても
追加コンテキストに価値がある場合は full に移行します。
コールドスタート猶予
v2026.5.2 より前では、Plugin はコールドスタート時にtimeoutMs を暗黙的にさらに 30000
ms 延長していたため、モデルのウォームアップ、埋め込みインデックスの読み込み、最初の
リコールで 1 つの大きな予算を共有できました。v2026.5.2 では、この猶予が明示的な
setupGraceTimeoutMs 設定の背後に移されました。オプトインしない限り、デフォルトでは
timeoutMs がリコール処理の予算になります。ブロッキングフックはその予算を
2 つの固定フェーズで囲みます。リコール開始前のセッション/設定の事前確認に最大 1500 ms、
リコール処理停止後の中止処理の確定とトランスクリプト復旧に別途固定 1500 ms が割り当てられます。
どちらの割り当てもモデルまたはツールの実行時間を延長しません。
v2026.4.x からアップグレードし、従来の暗黙的な猶予がある環境向けに timeoutMs を調整していた場合(推奨されていた初期値 timeoutMs: 15000 がその一例です)、v5.2 より前の実効予算を復元するには setupGraceTimeoutMs: 30000 を設定します。
timeoutMs + setupGraceTimeoutMs + 3000 ms です(設定されたリコール処理予算に、最大 1500 ms のプリフライトと、固定の 1500 ms のリコール後完了猶予を加えた時間)。組み込みのリコールランナーは同じ実効タイムアウト予算を使用するため、setupGraceTimeoutMs は外側のプロンプト構築ウォッチドッグと内側のブロッキングリコール実行の両方に適用されます。
コールドスタートのレイテンシーを許容可能なトレードオフとするリソースの限られた Gateway では、より低い値(5000-15000 ms)も使用できます。ただし、ウォームアップの完了中に Gateway の再起動後の最初のリコールが空の結果を返す可能性が高くなります。
デバッグ
Active Memory が想定した場所に表示されない場合:- Plugin が
plugins.entries.active-memory.enabledで有効になっていることを確認します。 - 会話をまたぐ Remember では、エージェントの実効
memory.search.rememberAcrossConversations設定が有効であることを確認し、openclaw doctorを実行して、現在のメモリプロバイダーが保護された トランスクリプトのリコールをサポートしていることを検証します。また、明示的に設定している場合は、config.toolsAllowにmemory_searchが含まれていることを確認します。高度な Active Memory では、エージェント ID がconfig.agentsに記載されていることを確認します。 - 対象となる対話型の永続的な会話でテストしていることを確認します。
- グループとチャンネルでは、会話をまたぐトランスクリプトのリコールが使用されないことに注意してください。
config.logging: trueをオンにして、Gateway のログを監視します。openclaw status --deepを使用して、メモリ検索自体が機能することを確認します。
maxSummaryChars を厳しくします。Active Memory が遅すぎる場合は、queryMode または timeoutMs を下げるか、直近のターン数とターンごとの文字数上限を減らします。
よくある問題
高度な Active Memory は設定済みメモリ Plugin のリコールパイプライン上で動作するため、リコールに関する予想外の動作の多くは Active Memory のバグではなく、埋め込みプロバイダーの問題です。デフォルトのmemory-core パスでは memory_search と memory_get を使用し、memory-lancedb スロットでは memory_recall を使用します。別のメモリ Plugin を使用する場合は、config.toolsAllow に、その Plugin が実際に登録するツールが指定されていることを確認します。会話をまたぐ Remember の適用範囲はより限定的です。現在のメモリプロバイダーが、OpenClaw の保護された同一エージェント/プライベートセッション向けリコールパスをサポートしている必要があります。
埋め込みプロバイダーが切り替わった、または動作しなくなった
埋め込みプロバイダーが切り替わった、または動作しなくなった
memory.search.provider が未設定の場合、OpenClaw は OpenAI の埋め込みを使用します。Bedrock、DeepInfra、Gemini、GitHub
Copilot、LM Studio、local、Mistral、Ollama、Voyage、または OpenAI 互換の
埋め込みを使用する場合は、memory.search.provider を明示的に設定します。設定されたプロバイダーを実行できない場合、memory_search は
字句検索のみへ機能低下することがあります。プロバイダーがすでに選択された後に発生したランタイム障害では、
自動的なフォールバックは行われません。意図的に単一のフォールバックを使用する場合にのみ、オプションの memory.search.fallback を設定します。プロバイダーと例の完全な
一覧については、メモリ検索を参照してください。リコールが遅い、空になる、または一貫性がない
リコールが遅い、空になる、または一貫性がない
/trace onをオンにして、Plugin が管理する Active Memory のデバッグ サマリーをセッション内に表示します。/verbose onもオンにすると、各応答後に🧩 Active Memory: ...ステータス行も表示されます。- Gateway のログで
active-memory: ... start|done、memory sync failed (search-bootstrap)、またはプロバイダーの埋め込みエラーを監視します。 openclaw status --deepを実行して、メモリ検索バックエンドと インデックスの正常性を確認します。ollamaを使用する場合は、埋め込みモデルがインストールされていることを確認します (ollama list)。
Gateway の再起動後、最初のリコールが `status=timeout` を返す
Gateway の再起動後、最初のリコールが `status=timeout` を返す
v2026.5.2 以降では、最初のリコールが実行される時点までにコールドスタートのセットアップ(モデルのウォームアップ + 埋め込み
インデックスの読み込み)が完了していない場合、実行が設定済みの
timeoutMs 予算に達し、空の出力とともに status=timeout を返すことがあります。Gateway のログでは、再起動後の最初の対象応答付近に active-memory timeout after Nms が表示されます。推奨される setupGraceTimeoutMs の値については、推奨セットアップのコールドスタートの猶予を参照してください。