Technical Guide
12. Sessions:会话、历史和状态怎么保存
区分 OpenClaw 的 agent、session、workspace 和状态目录,理解跨渠道连续对话如何保存。
这篇解决什么问题
OpenClaw 是多渠道助手。用户可能从 Telegram 发一句,又从 CLI 发一句,还可能有不同 agent 和不同 workspace。
这就需要 session 模型。
状态目录里的 session
官方 runtime workflow 文档提到:
agents/<agentId>/sessions/
agents/<agentId>/sessions/sessions.json
sessions/ # legacy paths may exist
也就是说,session 是按 agent 组织的。
相关源码目录
src/agents/sessions/
src/config/sessions.ts
src/config/sessions/
src/gateway/
src/channels/turn/
src/agents/sessions/ 不只是历史记录,还涉及 extension loading、resource discovery、skills、prompts、themes、TUI-backed tool renderers。
agent 和 session 不一样
可以这样区分:
agent:一个助手身份和配置边界
session:一次或一组连续对话历史
workspace:这个 agent/session 操作的文件空间
channel thread:平台上的聊天上下文
这些概念会被路由绑定在一起,但不是同一个东西。
为什么 session 持久化重要
因为 Agent 需要知道:
- 前面聊过什么;
- 之前工具调用结果是什么;
- 当前任务是否已经压缩过;
- 这个 channel/thread 属于哪个 session;
- 用户发
/reset、/new时要改哪个 session。
什么时候该删 session
官方 workflow 文档给了 reset 思路:如果只想重置 sessions,删除对应 agent 的:
agents/<agentId>/sessions/
如果要保留模型认证,不要删:
agents/<agentId>/agent/auth-profiles.json
这点很实用。很多时候你只想清历史,不想重配全部 provider。
常见误区
以为换 channel 就换 session
不一定。具体取决于 routing policy 和绑定规则。
以为清 workspace 就清会话
workspace 是文件空间,session 是对话历史,两者不同。
以为删 ~/.openclaw 最省事
这会把配置、凭证、sessions、workspace 都清掉。除非你明确要重置全部,否则不要这么做。
下一篇看什么
下一篇看 Cron。