メインコンテンツへスキップ

セッション管理

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

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

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

DM分離

デフォルトでは、すべてのDMが継続性のために1つのセッションを共有します。これは単一ユーザー環境では問題ありません。
複数の人があなたのエージェントにメッセージできる場合は、DM分離を有効にしてください。これを有効にしないと、すべてのユーザーが同じ会話コンテキストを共有します。つまり、AliceのプライベートメッセージがBobにも見えることになります。
修正方法:
{
  session: {
    dmScope: "per-channel-peer", // チャンネル + 送信者ごとに分離
  },
}
その他のオプション:
  • main(デフォルト) — すべてのDMが1つのセッションを共有します。
  • per-peer — 送信者ごとに分離します(チャンネルをまたぐ)。
  • per-channel-peer — チャンネル + 送信者ごとに分離します(推奨)。
  • per-account-channel-peer — アカウント + チャンネル + 送信者ごとに分離します。
同じ人が複数のチャンネルから連絡してくる場合は、session.identityLinksを使ってそのIDをリンクし、1つのセッションを共有できるようにしてください。
openclaw security auditで設定を確認してください。

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

セッションは期限切れになるまで再利用されます:
  • 日次リセット(デフォルト) — Gatewayホストのローカル時刻で午前4:00に新しいセッションになります。
  • アイドルリセット(任意) — 一定時間の非アクティブ後に新しいセッションになります。session.reset.idleMinutesを設定してください。
  • 手動リセット — チャットで/newまたは/resetを入力します。/new <model>ではモデルも切り替わります。
日次リセットとアイドルリセットの両方が設定されている場合は、先に期限切れになる方が優先されます。

状態の保存場所

すべてのセッション状態はGatewayが保持します。UIクライアントはGatewayにセッションデータを問い合わせます。
  • 保存先: ~/.openclaw/agents/<agentId>/sessions/sessions.json
  • トランスクリプト: ~/.openclaw/agents/<agentId>/sessions/<sessionId>.jsonl

セッションメンテナンス

OpenClawは、時間の経過に応じてセッションストレージを自動的に制限します。デフォルトではwarnモードで動作し(クリーンアップ対象を報告)、自動クリーンアップを行うにはsession.maintenance.mode"enforce"に設定します:
{
  session: {
    maintenance: {
      mode: "enforce",
      pruneAfter: "30d",
      maxEntries: 500,
    },
  },
}
openclaw sessions cleanup --dry-runでプレビューできます。

セッションの確認

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

さらに読む