クイックスタート
安全なデフォルトとしてopenclaw.json に貼り付けます。プラグインは有効、対象は main、ダイレクトメッセージセッションのみ、モデルはセッションから継承されます。
plugins.entries.*(active-memory.config を含む)は 再起動不要の設定カテゴリに含まれます。
Gateway はプラグインランタイムを自動的に再読み込みするため、手動での再起動は不要です。それでも完全な再起動を強制したい場合は、次を実行します。
plugins.entries.active-memory.enabled: trueはプラグインを有効にしますconfig.agents: ["main"]はmainエージェントだけをオプトインしますconfig.allowedChatTypes: ["direct"]はダイレクトメッセージセッションにスコープします(グループ/チャンネルは明示的にオプトイン)config.model(任意)は専用のリコールモデルを固定します。未設定の場合は現在のセッションモデルを継承しますconfig.modelFallbackは、明示モデルまたは継承モデルが解決されない場合にのみ使われますconfig.promptStyle: "balanced"はrecentモードのデフォルトです- アクティブメモリは対象の対話型永続チャットセッションでのみ実行されます(実行される条件を参照)
仕組み
ブロッキング サブエージェントが呼び出せるのは、設定された記憶リコールツールだけです(記憶ツールを参照)。クエリと利用可能な記憶の関連が弱い場合はNONE を返し、メイン返信は追加コンテキストなしで続行されます。
アクティブメモリは会話を強化する機能であり、プラットフォーム全体の推論機能ではありません。
| サーフェス | アクティブメモリを実行するか |
|---|---|
| Control UI / Web チャットの永続セッション | はい。プラグインが有効で、エージェントが対象の場合 |
| 同じ永続チャットパス上の他の対話型チャンネルセッション | はい。プラグインが有効で、エージェントが対象の場合 |
| ヘッドレスの 1 回限りの実行 | いいえ |
| Heartbeat/バックグラウンド実行 | いいえ |
汎用の内部 agent-command パス | いいえ |
| サブエージェント/内部ヘルパー実行 | いいえ |
実行される条件
2 つのゲートをどちらも通過する必要があります。- 設定でのオプトイン — プラグインが有効で、現在のエージェント ID が
config.agentsに含まれている。 - ランタイム適格性 — セッションが対象の対話型永続チャットセッションであり、そのチャット種別が許可されていて、会話 ID がフィルタで除外されていない。
セッション種別
config.allowedChatTypes は、どの種類の会話でアクティブメモリを実行できるかを制御します。デフォルト:
direct、group、channel、explicit(不透明なセッション ID を持つポータル形式のセッション。例: agent:main:explicit:portal-123)。
ダイレクトメッセージセッションはデフォルトで実行されます。グループ、チャンネル、明示セッションはオプトインが必要です。
config.allowedChatIds と config.deniedChatIds を追加します。
allowedChatIdsは解決済み会話 ID の許可リストです。空でない場合、アクティブメモリは会話 ID がリストに含まれるセッションでのみ実行されます。これはダイレクトメッセージを含む すべての 許可済みチャット種別を一度に狭めます。すべてのダイレクトメッセージを維持しつつグループだけを狭めるには、ダイレクト相手の ID もallowedChatIdsに追加するか、テスト中のグループ/チャンネルロールアウトにallowedChatTypesをスコープしたままにします。deniedChatIdsは拒否リストであり、常にallowedChatTypesとallowedChatIdsより優先されます。
chat_id/open_id、Telegram のチャット ID、Slack のチャンネル ID)。照合では大文字と小文字を区別しません。allowedChatIds が空でなく、OpenClaw がセッションの会話 ID を解決できない場合、推測せずにそのターンのアクティブメモリをスキップします。
セッショントグル
設定を編集せずに、現在のチャットセッションのアクティブメモリを一時停止または再開します。plugins.entries.active-memory.config.enabled やその他のグローバル設定は変更しません。
代わりにすべてのセッションで一時停止/再開するには、グローバル形式を使います(owner または operator.admin が必要)。
plugins.entries.active-memory.config.enabled を書き込みますが、plugins.entries.active-memory.enabled はオンのままにするため、あとでアクティブメモリを再び有効にするコマンドは利用可能なままです。
表示方法
デフォルトでは、アクティブメモリは通常の返信には表示されない隠しの非信頼プロンプト接頭辞を注入します。目的の出力に合わせてセッショントグルをオンにします。/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 は、ブロッキング サブエージェントが見る会話量を制御します。フォローアップに十分答えられる最小のモードを選びます。コンテキストサイズが大きくなるにつれて、message から recent、full へ進むほど timeoutMs を増やします。
- message
- recent
- full
最新のユーザーメッセージだけが送信されます。最速の動作、安定した好みのリコールへの最も強いバイアスが必要で、フォローアップターンに会話コンテキストが不要な場合に使います。
config.timeoutMs は 3000〜5000 ms あたりから始めます。プロンプトスタイル
config.promptStyle は、サブエージェントが記憶を返す積極性または厳格さを制御します。
| スタイル | 動作 |
|---|---|
balanced | recent モードの汎用デフォルト |
strict | 最も控えめ。近接コンテキストからのにじみ込みが最小 |
contextual | 最も継続性に優しい。会話履歴がより重視される |
recall-heavy | より弱いがそれでも妥当な一致でも記憶を浮上させる |
precision-heavy | 一致が明白でない限り、積極的に NONE を優先 |
preference-only | お気に入り、習慣、ルーティン、嗜好、繰り返し現れる個人的事実に最適化 |
config.promptStyle が未設定の場合のデフォルト対応:
config.promptStyle は常にこの対応を上書きします。
モデルフォールバックポリシー
config.model が未設定の場合、アクティブメモリは次の順序でモデルを解決します。
config.modelFallbackPolicy は古い設定のために残された非推奨の互換フィールドです。現在はランタイム動作を変更しません。modelFallback は上記の連鎖における厳密な最後の手段であり、解決済みモデルがエラーになったときに別のモデルへ差し替えるランタイムフェイルオーバーではありません。
速度の推奨
config.model を未設定のままにする(セッションモデルを継承する)のが最も安全なデフォルトです。既存のプロバイダー、認証、モデル設定に従います。より低いレイテンシが必要な場合は、代わりに専用の高速モデルを使います。リコール品質は重要ですが、ここではメイン回答パスよりレイテンシが重要であり、ツールサーフェスも狭いです(記憶リコールツールのみ)。
優れた高速モデルの選択肢:
cerebras/gpt-oss-120b、低レイテンシの専用リコールモデルgoogle/gemini-3-flash、主チャットモデルを変更しない低レイテンシのフォールバックconfig.modelを未設定のままにした場合の通常のセッションモデル
Cerebras のセットアップ
chat/completions アクセスを持つことを確認してください。/v1/models で表示されるだけでは、それは保証されません。
メモリツール
config.toolsAllow は、ブロッキングサブエージェントが呼び出せる具体的なツール名を設定します。デフォルトはアクティブメモリプロバイダーによって異なります。
plugins.slots.memory | デフォルトの toolsAllow |
|---|---|
未設定 / memory-core (組み込み) | ["memory_search", "memory_get"] |
memory-lancedb | ["memory_recall"] |
toolsAllow が受け付けるのは具体的なメモリツール名のみです。ワイルドカード、group:* エントリ、コアエージェントツール (read、exec、message、web_search など) は、隠しサブエージェントが開始される前に暗黙的に除外されます。
組み込み memory-core
明示的なtoolsAllow は不要です。
LanceDB メモリ
memory スロットを選択するだけで、active memory はmemory_recall を使用します。
Lossless Claw
Lossless Claw は、独自のリコールツールを備えた外部コンテキストエンジン Plugin (openclaw plugins install @martian-engineering/lossless-claw) です。まずコンテキストエンジンとしてセットアップしてください。コンテキストエンジン を参照してください。その後、active memory をそのツールに向けます。
toolsAllow に lcm_expand を追加しないでください。Lossless Claw はそれをトップレベルの active-memory サブエージェント用ではなく、委譲された展開のための低レベルツールとして使用します。
高度なエスケープハッチ
推奨セットアップの一部ではありません。config.thinking はサブエージェントの思考レベルを上書きします (デフォルトは "off" です。active memory は返信パスで実行され、追加の思考時間はユーザーに見えるレイテンシに直接加算されるためです)。
config.promptAppend は、デフォルトプロンプトの後、会話コンテキストの前にオペレーター指示を追加します。非コアメモリ Plugin が特定のツール順序やクエリ整形を必要とする場合は、カスタム toolsAllow と組み合わせてください。
config.promptOverride はデフォルトプロンプト全体を置き換えます (会話コンテキストは引き続き後ろに追加されます)。別のリコール契約を意図的にテストする場合を除き、推奨されません。デフォルトプロンプトは、メインモデル向けに NONE またはコンパクトなユーザーファクトコンテキストのいずれかを返すように調整されています。
トランスクリプトの永続化
ブロッキングサブエージェントの実行は、呼び出し中に実際のsession.jsonl トランスクリプトを作成します。デフォルトでは一時ディレクトリに書き込まれ、実行完了直後に削除されます。
デバッグのためにこれらのトランスクリプトをディスク上に保持するには、次のようにします。
config.transcriptDir で変更します。これは慎重に使用してください。トランスクリプトはビジーなセッションではすぐに蓄積する可能性があり、full クエリモードは大量の会話コンテキストを複製し、これらのトランスクリプトには隠しプロンプトコンテキストとリコールされたメモリが含まれます。
設定
すべての active memory 設定はplugins.entries.active-memory の下にあります。
| キー | 型 | 意味 |
|---|---|---|
enabled | boolean | プラグイン自体を有効にします |
config.agents | string[] | Active Memory を使用できるエージェント ID |
config.model | string | 任意のブロッキングサブエージェントモデル参照。未設定の場合は現在のセッションモデルを継承します |
config.allowedChatTypes | ("direct" | "group" | "channel" | "explicit")[] | Active Memory を実行できるセッション種別。既定値は ["direct"] |
config.allowedChatIds | string[] | allowedChatTypes の後に適用される任意の会話単位の許可リスト。空でないリストはフェイルクローズします |
config.deniedChatIds | string[] | 許可されたセッション種別と許可 ID を上書きする、任意の会話単位の拒否リスト |
config.queryMode | "message" | "recent" | "full" | ブロッキングサブエージェントが参照する会話量を制御します |
config.promptStyle | "balanced" | "strict" | "contextual" | "recall-heavy" | "precision-heavy" | "preference-only" | メモリを返すかどうかを判断するとき、ブロッキングサブエージェントがどの程度積極的または厳密になるかを制御します |
config.toolsAllow | string[] | ブロッキングサブエージェントが呼び出せる具体的なメモリツール名。既定値は ["memory_search", "memory_get"]、または plugins.slots.memory が memory-lancedb の場合は ["memory_recall"]。ワイルドカード、group:* エントリ、コアエージェントツールは無視されます |
config.thinking | "off" | "minimal" | "low" | "medium" | "high" | "xhigh" | "adaptive" | "max" | ブロッキングサブエージェント向けの高度な thinking 上書き。速度のため既定値は off |
config.promptOverride | string | 高度な完全プロンプト置換。通常の使用では推奨されません |
config.promptAppend | string | 既定または上書きされたプロンプトに追加される高度な追加指示 |
config.timeoutMs | number | ブロッキングサブエージェントのハードタイムアウト(範囲 250-120000 ms、既定値 15000) |
config.setupGraceTimeoutMs | number | recall タイムアウトが切れる前の高度な追加セットアップ予算。範囲 0-30000 ms、既定値 0。v2026.4.x からのアップグレード手順は コールドスタート猶予 を参照してください |
config.maxSummaryChars | number | Active Memory 要約の最大文字数(範囲 40-1000、既定値 220) |
config.logging | boolean | チューニング中に Active Memory ログを出力します |
config.persistTranscripts | boolean | 一時ファイルを削除せず、ブロッキングサブエージェントのトランスクリプトをディスク上に保持します |
config.transcriptDir | string | エージェントセッションフォルダ配下の相対ブロッキングサブエージェントトランスクリプトディレクトリ(既定値 "active-memory") |
config.modelFallback | string | モデルフォールバックチェーン の最後のステップでのみ使用される任意のモデル |
config.qmd.searchMode | "inherit" | "search" | "vsearch" | "query" | ブロッキングサブエージェントが使用する QMD 検索モードを上書きします。既定値は "search"(高速な字句検索)— メインメモリバックエンド設定に合わせるには "inherit" を使用します |
| キー | 型 | 意味 |
|---|---|---|
config.recentUserTurns | number | queryMode が recent の場合に含める以前のユーザーターン数(範囲 0-4、既定値 2) |
config.recentAssistantTurns | number | queryMode が recent の場合に含める以前のアシスタントターン数(範囲 0-3、既定値 1) |
config.recentUserChars | number | 最近のユーザーターンごとの最大文字数(範囲 40-1000、既定値 220) |
config.recentAssistantChars | number | 最近のアシスタントターンごとの最大文字数(範囲 40-1000、既定値 180) |
config.cacheTtlMs | number | 同一クエリが繰り返された場合のキャッシュ再利用(範囲 1000-120000 ms、既定値 15000) |
config.circuitBreakerMaxTimeouts | number | 同じエージェント/モデルでこの回数連続してタイムアウトした後、recall をスキップします。成功した recall 時、またはクールダウン期限切れ後にリセットされます(範囲 1-20、既定値 3)。 |
config.circuitBreakerCooldownMs | number | サーキットブレーカーが作動した後に recall をスキップする時間(ms)(範囲 5000-600000、既定値 60000)。 |
推奨セットアップ
recent から始めます:
/verbose on を、デバッグ要約には /trace on
を使用します。どちらもメイン返信の前ではなく、後続メッセージとして送信されます。
その後、レイテンシを下げるには message に移行し、追加コンテキストに
より遅いサブエージェント実行の価値がある場合は full に移行します。
コールドスタート猶予
v2026.5.2 より前は、プラグインがコールドスタート中にtimeoutMs を暗黙的に追加で 30000
ms 延長していたため、モデルのウォームアップ、埋め込みインデックスのロード、最初の
recall が 1 つの大きな予算を共有できました。v2026.5.2 では、その猶予が明示的な
setupGraceTimeoutMs 設定の背後に移されました。オプトインしない限り、timeoutMs は既定で
recall 作業の予算になりました。ブロッキングフックはその予算を 2 つの固定フェーズでラップします。
recall 開始前のセッション/設定プリフライトに最大 1500 ms、その後 recall 作業停止後の
中断確定とトランスクリプト復旧に別の固定 1500 ms です。どちらの許容量もモデルやツールの
実行を延長しません。
v2026.4.x からアップグレードし、古い暗黙的猶予の世界に合わせて timeoutMs をチューニングしていた場合
(推奨スターターの timeoutMs: 15000 はその一例です)、v5.2 より前の実効予算を復元するには
setupGraceTimeoutMs: 30000 を設定します:
timeoutMs + setupGraceTimeoutMs + 3000 ms です(設定された recall-work バジェットに、最大 1500 ms のプリフライトと、固定の 1500 ms のリコール後完了猶予を加えたもの)。組み込みのリコールランナーは同じ有効タイムアウトバジェットを使用するため、setupGraceTimeoutMs は外側のプロンプト構築ウォッチドッグと内側のブロッキングリコール実行の両方をカバーします。
コールドスタートのレイテンシが受け入れられるトレードオフである、リソースが限られた Gateway では、より低い値(5000-15000 ms)も機能します。トレードオフは、Gateway 再起動後の最初のリコールが、ウォームアップ完了中に空を返す可能性が高くなることです。
デバッグ
Active Memory が期待した場所に表示されない場合:- Plugin が
plugins.entries.active-memory.enabledで有効になっていることを確認します。 - 現在のエージェント 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 が実際に登録するツール名が指定されていることを確認します。
埋め込みプロバイダーが切り替わった、または動作しなくなった
埋め込みプロバイダーが切り替わった、または動作しなくなった
memorySearch.provider が未設定の場合、OpenClaw は OpenAI 埋め込みを使用します。Bedrock、DeepInfra、Gemini、GitHub Copilot、LM Studio、local、Mistral、Ollama、Voyage、または OpenAI 互換の埋め込みには、memorySearch.provider を明示的に設定します。設定されたプロバイダーを実行できない場合、memory_search は語彙ベースのみの取得に劣化することがあります。プロバイダーがすでに選択された後のランタイム失敗は、自動的にフォールバックしません。意図的な単一のフォールバックが必要な場合にのみ、任意の memorySearch.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 値については、推奨セットアップの コールドスタート猶予 を参照してください。