乐于分享
好东西不私藏

OpenClaw 突然失忆?排查思路与解决方案

OpenClaw 突然失忆?排查思路与解决方案

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 配置影响,是真正的持久化存储。  

本文记录了完整的排查过程和配置修改,可供后续参考。

最后说一句:技术工具用久了,难免会遇到各种”诡异”行为。很多时候不是工具坏了,而是我们对它的默认行为不够了解。多看看文档,多查查配置,很多”失忆”问题都能找到答案。