OpenClaw 突然"失忆"?排查思路与解决方案
> 有时候你会发现,昨天的对话今天全没了,像是被格式化了一样。这不是幻觉,是 OpenClaw 的默认配置行为。
一、问题现象
使用 OpenClaw 一段时间后,可能会遇到以下情况:
- 早上醒来,昨天的对话记录不见了
- 想回看之前的上下文,
sessions_history返回空 - 新 session 启动后,之前的记忆"清零"了
这种感觉就像突然失忆——明明昨天聊了很多,今天却什么都不记得了。
二、原因分析
2.1 默认每日重置
OpenClaw 默认在每天凌晨 4:00 自动创建新的 session。这是设计行为,不是 bug。
配置项:{
"session": {
"reset": {
"mode": "daily"
}
}
}
- 每天 4:00 强制重置
- 之前的对话上下文直接切断
- 新 session 从零开始
2.2 维护模式主动清理
默认配置下,session 维护会主动清理旧数据:
{
"session": {
"maintenance": {
"mode": "enforce",
"maxEntries": 500,
"pruneAfter": "30d"
}
}
}
- 超过 30 天的记录被清理
- 超过 500 条记录后主动删除
- 磁盘空间超过上限时强制清理
2.3 Session Visibility 限制
{
"sessions": {
"visibility": "tree"
}
}
- 只能看到当前 session 树下的子 session
- 跨 session 的历史被隐藏
sessions_history可能返回 "forbidden"
2.4 Memory 文件未正确维护
OpenClaw 有两种记忆机制:
| 类型 | 存储位置 | 持久性 |
|---|---|---|
| Session 历史 | ~/.openclaw/agents/main/sessions/ | 受配置限制,可能被清理 |
| Memory 文件 | MEMORY.md + memory/YYYY-MM-DD.md | 手动写入,永久保存 |
- 重要信息只存在于 session 历史中
- 没有写入 MEMORY.md
- session 被清理后,信息永久丢失
三、排查步骤
3.1 查看当前状态
openclaw status
Sessions: 活跃 session 数量Memory: 是否启用Visibility: 可见性模式
3.2 查看 Session 配置
openclaw gateway config get session
| 配置项 | 默认值 | 说明 |
|---|---|---|
session.reset.mode | daily | 默认每天凌晨 4 点重置 |
session.reset.idleMinutes | 无 | 空闲重置阈值 |
session.maintenance.mode | enforce | 主动清理旧数据 |
session.maintenance.maxEntries | 500 | 最大保留条目数 |
session.maintenance.pruneAfter | 30d | 30 天后清理 |
3.3 查看配置 Schema
openclaw gateway config.schema.lookup session
四、解决方案
4.1 禁用每日重置
将reset.mode 从 daily 改为 idle,并设置空闲阈值:
{
"session": {
"reset": {
"mode": "idle",
"idleMinutes": 10080
}
}
}
| 参数 | 值 | 含义 |
|---|---|---|
mode | idle | 禁用每日强制重置 |
idleMinutes | 10080 | 7 天(168 小时)无活动才重置 |
4.2 调整维护模式
将maintenance.mode 从 enforce 改为 warn:
{
"session": {
"maintenance": {
"mode": "warn",
"maxEntries": 2000,
"pruneAfter": "90d"
}
}
}
| 参数 | 值 | 含义 |
|---|---|---|
mode | warn | 只报告,不主动清理 |
maxEntries | 2000 | 最多保留 2000 条记录 |
pruneAfter | 90d | 90 天后才考虑清理 |
4.3 完整配置示例
{
"session": {
"reset": {
"mode": "idle",
"idleMinutes": 10080
},
"maintenance": {
"mode": "warn",
"maxEntries": 2000,
"pruneAfter": "90d",
"maxDiskBytes": "5gb"
}
}
}
4.4 应用配置
# 修改配置
openclaw gateway config patch --path session --patch '{"reset":{"mode":"idle","idleMinutes":10080},"maintenance":{"mode":"warn","maxEntries":2000,"pruneAfter":"90d"}}'
重启 gateway 生效
openclaw gateway restart
五、配置对比
| 配置项 | 默认值 | 推荐值 | 说明 |
|---|---|---|---|
session.reset.mode | daily | idle | 禁用每日重置 |
session.reset.idleMinutes | 无 | 10080 | 7 天无活动才重置 |
session.maintenance.mode | enforce | warn | 只警告不清理 |
session.maintenance.maxEntries | 500 | 2000 | 最多保留 2000 条 |
session.maintenance.pruneAfter | 30d | 90d | 90 天后才清理 |
六、注意事项
6.1 磁盘空间
warn 模式不会主动清理,如果磁盘空间紧张,可以改回 enforce:
{
"session": {
"maintenance": {
"mode": "enforce"
}
}
}
6.2 Memory 文件 ≠ Session 历史
重要区分:| 类型 | 存储位置 | 持久性 |
|---|---|---|
| Session 历史 | ~/.openclaw/agents/main/sessions/ | 受配置限制,可能被清理 |
| Memory 文件 | MEMORY.md + memory/YYYY-MM-DD.md | 手动写入,永久保存 |
- 重要信息写入
MEMORY.md(长期记忆) - 每日笔记写入
memory/YYYY-MM-DD.md - 定期检查并更新 Memory 文件
6.3 恢复默认配置
{
"session": {
"reset": {
"mode": "daily"
},
"maintenance": {
"mode": "enforce",
"maxEntries": 500,
"pruneAfter": "30d"
}
}
}
七、排查命令汇总
# 查看当前状态
openclaw status
查看 session 配置
openclaw gateway config get session
修改配置
openclaw gateway config patch --path session.reset --value '{"mode":"idle","idleMinutes":10080}'
重启 gateway
openclaw gateway restart
查看配置 schema
openclaw gateway config.schema.lookup session
八、总结
OpenClaw 的"失忆"不是 bug,而是默认配置行为。核心原因有三个:- 每日重置:凌晨 4 点强制创建新 session
- 维护清理:超过 30 天或 500 条记录会被删除
- Visibility 限制:跨 session 历史不可见
session.reset.mode 和 session.maintenance 配置,可以有效延长 session 保留时间,减少"失忆"体验。
但要注意:session 历史 ≠ 长期记忆。重要信息仍需写入 MEMORY.md 和 memory/YYYY-MM-DD.md 文件,这些文件不受 session 配置影响,是真正的持久化存储。
本文记录了完整的排查过程和配置修改,可供后续参考。
最后说一句:技术工具用久了,难免会遇到各种"诡异"行为。很多时候不是工具坏了,而是我们对它的默认行为不够了解。多看看文档,多查查配置,很多"失忆"问题都能找到答案。
评论区