Skip to content

Session 管理

OpenClaw 将对话组织成会话(Session),每条消息根据来源——DM、群聊、定时任务等——路由到对应会话。

消息路由规则

来源行为
私信(DM)默认共享一个会话
群聊每个群组独立会话
Room/频道每个 Room 独立会话
Cron 任务每次运行新开会话
Webhook每个 Hook 独立会话

DM 隔离(多用户必读)

默认情况下,所有 DM 共享同一个会话,方便单人使用。

警告:如果多人可以给你的 agent 发消息,必须开启 DM 隔离。不开启时,所有用户共享同一个对话上下文——Alice 的私信会暴露给 Bob。

修复方法:

json5
{
  session: {
    dmScope: "per-channel-peer", // 按 channel + 发送者隔离(推荐)
  },
}

其他选项:

说明
main(默认)所有 DM 共享一个会话
per-peer按发送者隔离(跨 channel)
per-channel-peer按 channel + 发送者隔离(推荐
per-account-channel-peer按 account + channel + 发送者隔离

提示:如果同一个人从多个 channel 联系你,可用 session.identityLinks 关联其身份,让他们共享一个会话。

配置完后用 openclaw security audit 验证。

会话生命周期

会话会复用直到过期:

  • 每日重置(默认):gateway 主机本地时间凌晨 4 点开新会话
  • 空闲重置(可选):一段时间不活跃后开新会话,设置 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" 开启自动清理:

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

预览清理计划:openclaw sessions cleanup --dry-run

检查会话状态

bash
openclaw status           # 会话存储路径和近期活动
openclaw sessions --json  # 所有会话(用 --active <分钟数> 过滤)
/status                   # 聊天中查看上下文用量、模型、开关
/context list             # 查看系统 prompt 内容

FAQ

Q:会话文件在哪里,可以备份吗?~/.openclaw/agents/<agentId>/sessions/ 下,.jsonl 文件就是完整记录,可直接备份。

Q:多少天没用的会话会被清理? 默认不自动清理(warn 模式),设置 enforce 后按 pruneAfter 参数(如 30d)清理。

延伸阅读