Sessions and memory

セッション管理

OpenClaw は会話をセッションに整理します。各メッセージは、送信元 (DM、グループチャット、Cron ジョブなど) に基づいてセッションにルーティングされます。

メッセージのルーティング方法

送信元 動作
ダイレクトメッセージ デフォルトで共有セッション
グループチャット グループごとに分離
ルーム/チャンネル ルームごとに分離
Cron ジョブ 実行ごとに新しいセッション
Webhook Hook ごとに分離

DM 分離

デフォルトでは、継続性のためにすべての DM が 1 つのセッションを共有します。これは単一ユーザー構成では問題ありません。

修正方法:

json5
{  session: {    dmScope: "per-channel-peer", // isolate by channel + sender  },}

その他のオプション:

  • main (デフォルト) -- すべての DM が 1 つのセッションを共有します。
  • per-peer -- 送信者ごとに分離します (チャンネルをまたいで)。
  • per-channel-peer -- チャンネル + 送信者ごとに分離します (推奨)。
  • per-account-channel-peer -- アカウント + チャンネル + 送信者ごとに分離します。

リンク済みチャンネルをドックする

ドックコマンドを使うと、ユーザーは新しいセッションを開始せずに、現在のダイレクトチャットセッションの返信ルートを別のリンク済みチャンネルへ移動できます。例、設定、トラブルシューティングについては、チャンネルドッキングを参照してください。

openclaw security audit で設定を確認します。

セッションのライフサイクル

セッションは期限切れになるまで再利用されます。

  • 日次リセット (デフォルト) -- Gateway ホストのローカル時刻で午前 4:00 に新しいセッションを開始します。日次の鮮度は、後続のメタデータ書き込みではなく、現在の sessionId が開始された時刻に基づきます。
  • アイドルリセット (任意) -- 一定期間非アクティブだった後に新しいセッションを開始します。session.reset.idleMinutes を設定します。アイドル鮮度は最後の実際のユーザー/チャンネル操作に基づくため、Heartbeat、Cron、exec システムイベントによってセッションが維持されることはありません。
  • 手動リセット -- チャットで /new または /reset と入力します。/new <model> はモデルも切り替えます。

日次リセットとアイドルリセットの両方が設定されている場合は、先に期限切れになった方が優先されます。Heartbeat、Cron、exec、その他のシステムイベントターンはセッションメタデータを書き込むことがありますが、それらの書き込みによって日次リセットまたはアイドルリセットの鮮度が延長されることはありません。リセットでセッションが切り替わると、古いセッション用にキューされていたシステムイベント通知は破棄されるため、古いバックグラウンド更新が新しいセッションの最初のプロンプトの前に追加されることはありません。

アクティブなプロバイダー所有 CLI セッションを持つセッションは、暗黙の日次デフォルトでは切断されません。これらのセッションをタイマーで期限切れにする必要がある場合は、/reset を使用するか、session.reset を明示的に設定してください。

状態の保存場所

すべてのセッション状態は Gateway が所有します。UI クライアントは Gateway にセッションデータを問い合わせます。

  • ストア: ~/.openclaw/agents/<agentId>/sessions/sessions.json
  • トランスクリプト: ~/.openclaw/agents/<agentId>/sessions/<sessionId>.jsonl

sessions.json はライフサイクルのタイムスタンプを個別に保持します。

  • sessionStartedAt: 現在の sessionId が開始された時刻。日次リセットはこれを使用します。
  • lastInteractionAt: アイドル有効期間を延長する最後のユーザー/チャンネル操作。
  • updatedAt: 最後のストア行変更。一覧表示や刈り込みには有用ですが、日次/アイドルリセットの鮮度については権威ではありません。

sessionStartedAt がない古い行は、利用可能な場合はトランスクリプト JSONL のセッションヘッダーから解決されます。古い行に lastInteractionAt もない場合、アイドル鮮度は後続の管理用書き込みではなく、そのセッション開始時刻にフォールバックします。

セッションメンテナンス

OpenClaw は時間の経過に伴ってセッションストレージを自動的に制限します。デフォルトでは enforce モードで実行され、メンテナンス中にクリーンアップを適用します。ストア/ファイルを変更せずにクリーンアップ対象を報告するには、session.maintenance.mode"warn" に設定します。

json5
{  session: {    maintenance: {      mode: "enforce",      pruneAfter: "30d",      maxEntries: 500,    },  },}

本番規模の maxEntries 制限では、Gateway ランタイム書き込みは小さな高水位バッファを使用し、バッチで設定済み上限までクリーンアップします。セッションストアの読み取りは、Gateway 起動中にエントリを刈り込んだり上限適用したりしません。これにより、起動のたび、または分離された Cron セッションのたびにストア全体のクリーンアップを実行することを避けます。openclaw sessions cleanup --enforce は上限を即座に適用します。

Gateway モデル実行プローブセッションは、デフォルトで短命です。agent:*:explicit:model-run-<uuid> のような厳密な明示キーに一致する行は固定の 24h 保持を使用しますが、クリーンアップは圧力によって制御されます。つまり、セッションエントリのメンテナンス/上限圧力に達した場合にのみ、古いプローブ行を削除します。モデル実行クリーンアップが実行される場合、それはより広範な古いエントリの年齢カットオフおよびエントリ上限より前に実行されます。通常のダイレクト、グループ、スレッド、Cron、Hook、Heartbeat、ACP、サブエージェントセッションは、この 24h 保持を継承しません。

メンテナンスは、グループセッションやスレッドスコープのチャットセッションを含む永続的な外部会話ポインターを保持しつつ、合成された Cron、Hook、Heartbeat、ACP、サブエージェントエントリが期限切れで削除されることを許可します。

以前にダイレクトメッセージ分離を使用し、その後 session.dmScopemain に戻した場合は、openclaw sessions cleanup --dry-run --fix-dm-scope で古いピアキー付き DM 行をプレビューします。同じフラグを適用すると、それらの古いダイレクト DM 行を廃止し、そのトランスクリプトを削除済みアーカイブとして保持します。

openclaw sessions cleanup --dry-run でプレビューします。

セッションの調査

  • openclaw status -- セッションストアのパスと最近のアクティビティ。
  • openclaw sessions --json -- すべてのセッション (--active <minutes> でフィルター)。
  • チャット内の /status -- コンテキスト使用量、モデル、トグル。
  • /context list -- システムプロンプトに含まれる内容。

関連情報

関連

Was this useful?
On this page

On this page