セッション管理
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に含まれている内容。
さらに読む