Skip to main content
OpenClaw 会根据每条入站消息的来源将其路由到一个 会话:私信、群聊、定时任务等。所有会话状态都由 gateway 持有;UI 客户端会向 gateway 查询会话数据。 要在 Control UI、终端或 编程工具中继续使用同一个由 Gateway 持有的会话,请参阅会话同步与附加 如需了解个人代理的默认设置——所有 DM 频道共享一个持续滚动的会话,群组活动和后台工作也会流入其中——请参阅 主会话

消息如何路由

DM 隔离

默认情况下,所有 DM 会共享一个会话以保持连续性,这对于单用户设置来说是可以的。
如果有多人可以给你的代理发送消息,请启用 DM 隔离。否则,所有用户都会共享同一个对话上下文,Alice 的私密消息就会被 Bob 看见。
session.dmScope 可选值:
如果同一个人会通过多个频道联系你,请使用 session.identityLinks 将他们的身份映射到一个统一的 peer id,这样他们就能共享同一个会话。

已链接频道的 Dock

Dock 命令会将当前直接聊天会话的回复路由移动到另一个已链接的频道,而不会开启新会话。有关示例、配置和故障排除,请参见 频道停靠 使用 openclaw security audit 验证你的设置。

隐身会话

隐身会话仅可从 Control UI 的 New thread 屏幕使用。在开始线程之前打开 Incognito,即可将其会话条目、对话记录和压缩状态保存在进程内存中,而不是磁盘上。网关重启时,该线程会消失,不会运行 OpenClaw 的自动内存刷新,并且在你重置或删除它时不会创建对话记录归档。基于 Codex 的运行也会以临时模式启动其 harness 线程,因此 Codex 不会写入 rollout 或本地会话状态文件;其他模型提供方使用 HTTP API,并且不会在 OpenClaw 中保留本地提供方对话记录。 incognito- 前缀段保留给 dashboard、subagent 和隐藏的内部会话键;openclaw doctor --fix 会重命名任何发生冲突的旧版持久化键。 Incognito 不会限制代理的常规工具。明确请求保存信息,或任何由工具驱动的文件写入,仍然可能将数据持久化到隐身会话存储之外。你配置的模型提供方仍会处理你发送的消息,诊断日志保持不变,而 OpenClaw 仍会记录不包含内容的审计元数据,例如 HMAC 引用。 在多用户网关上,隐身线程仅对 admin 范围的连接可见,不会通过其他会话的代理会话工具或对话记录搜索出现。这可以防止它们被存储以及其他由网关中介的用户看到,但不能防止网关所有者或进程操作员看到,因为他们始终可以观察实时会话。

跨会话记住

单独的转录会控制每个会话的本地历史。对于个人 或完全受信任的代理,memory.search.rememberAcrossConversations: true 会在该代理的其他私有 会话中增加一个可选的检索步骤;它不会合并这些转录内容。 私有直接对话和持久的显式 UI 对话可以彼此提供相关 上下文。群组和频道在两个方向上都保持隔离:它们的转录内容不是私有回忆来源,而这些 对话中的回复也不会接收私有转录上下文。当前 会话也被排除在外,因为其历史已经加载。 此设置不会更改会话密钥、DM 范围、路由、传递,或 tools.sessions.visibilityMEMORY.mdmemory/*.md 中的共享工作区记忆也保持其现有行为。当前记忆提供程序 必须支持受保护的私有转录回忆;像 Lossless Claw 这样的上下文引擎仍然相互独立,并且可以与其并行运行。有关设置 和运行时详细信息,请参见 Active Memory

会话生命周期

会话会一直复用,直到你手动重置会话,或选择启用自动重置策略:
  • 不自动重置(默认 mode: "none")——会话保持相同的 sessionId;随着对话增长,压缩机制会管理活跃上下文。
  • 每日重置mode: "daily")——在网关主机配置的本地时间 (session.reset.atHour,默认为 4,范围为 0-23)到达时启用新会话。 每日新鲜度取决于当前 sessionId 的启动时间,而不是之后的元数据写入时间。
  • 空闲重置mode: "idle")——在 session.reset.idleMinutes 分钟无活动后启用新会话。空闲新鲜度取决于上一次真实的用户/频道交互,因此 heartbeat、cron 和 exec 系统事件不会使会话保持活跃。
  • 手动重置——在聊天中输入 /new/reset/new <model> 还会切换模型。
当同时配置了每日和空闲重置时,以先到期的那个为准。heartbeat、cron、exec 和其他系统事件轮次可能会写入会话元数据,但这些写入不会延长每日或空闲重置的新鲜度。当重置使会话滚动时,旧会话中排队的系统事件通知会被 丢弃,因此过时的后台更新不会被追加到新会话的第一条提示前。 具有活跃的、由提供商拥有的 CLI 会话的会话,也遵循相同的不自动重置默认设置。当这些会话应按计时器过期时,请使用 /reset 或显式配置 session.reset 全局启用自动重置,然后按聊天类型或频道进行覆盖:
resetByType 支持 directgroupthread。Doctor 会将旧版的 dm 条目迁移为 direct,并将 session.idleMinutes 迁移为 session.reset.idleMinutes;该架构会拒绝这两种已弃用的形式。

状态存放位置

  • 运行时会话行: ~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite
  • 归档的转录文件: ~/.openclaw/agents/<agentId>/sessions/
  • 旧版行迁移来源: ~/.openclaw/agents/<agentId>/sessions/sessions.json
每个 agent 的 SQLite 数据库中的会话行会保留独立的生命周期 时间戳:
  • sessionStartedAt:当前 sessionId 开始的时间;每日重置使用它。
  • lastInteractionAt:最后一次会延长空闲时长的用户/频道交互。
  • updatedAt:存储行最后一次变更;适合用于列表和清理,但 不作为每日/空闲重置新鲜度的权威依据。
在从旧版本安装迁移时,网关启动和 openclaw doctor --fix 会自动将旧版 sessions.json 行以及热转录 JSONL 历史导入到 SQLite 中。没有 sessionStartedAt 的行会在可用时从旧版转录 JSONL 会话头中解析。 如果较旧的行也缺少 lastInteractionAt,空闲新鲜度会回退到该会话开始时间, 而不是回退到更晚的账务写入时间。需要显式 检查或验证证据时,请使用 openclaw doctor --session-sqlite inspect --session-sqlite-all-agents 以及 Doctor 迁移 顺序

会话维护

OpenClaw 通过 session.maintenance 按时间对会话存储进行约束,默认值如下:
对于生产规模的 maxEntries 限制,Gateway 运行时写入会先使用一个较小的高水位缓冲区,并在批处理中清理回配置的上限。会话存储读取在 Gateway 启动期间不会修剪或限制条目,因此启动和独立的 cron 会话不会承担完整存储清理的成本。openclaw sessions cleanup --enforce 会立即应用该上限。 Gateway 的 model-run 探测会话默认是短生命周期。匹配 agent:*:explicit:model-run-<uuid> 的行使用固定的 24h 保留期,但清理是受压力门控的:只有在达到会话条目维护/容量压力时才移除过期的探测行,并且会在更宽泛的过期条目年龄截止和条目上限之前运行。普通的 direct、group、thread、cron、hook、heartbeat、ACP 和 sub-agent 会话不会继承这项 24h 保留期。 维护会保留持久的外部会话指针,包括群组会话和线程范围的聊天会话,同时仍允许合成的 cron、hook、heartbeat、ACP 和子代理条目过期。 归档会话由用户手动搁置,不受任何自动维护路径影响,包括按年龄修剪、条目上限、model-run 清理和磁盘预算逐出。它们会一直保持归档状态,直到你取消归档或明确删除它们。 如果你之前使用过 DM 隔离,后来又将 session.dmScope 恢复为 main,可以使用 openclaw sessions cleanup --dry-run --fix-dm-scope 预览那些按同伴键区分、已过期的 DM 行。应用同一标志后,会退役这些旧的直接 DM 行,并将其记录保留为已删除的归档。 可以使用 openclaw sessions cleanup --dry-run 预览任何维护运行。

检查会话

延伸阅读

相关内容