运行时依赖
安装命令
点击复制技能文档
会话 清理er
清理 OpenClaw 无用会话,保持会话列表整洁。
前置判断
执行清理前,先确认:
mAIn 代理 是否仍然存在(如果不存在,它的 会话s.json 应清空) 哪些会话状态为 运行ning(这些绝对不能删) OpenClaw 代理s 列出 OpenClaw 会话s --all-代理s --limit all
清理步骤 步骤 1:清理孤立的 .jsonl 文件(可选)
删除已结束会话的 transcript、trajectory、检查point 文件,保留正在进行的:
OpenClaw_HOME="${OpenClaw_HOME:-$HOME/.OpenClaw}" cd "$OpenClaw_HOME/代理s/$代理_ID/会话s"
# 删除 trajectory 和 检查point 文件(这些是历史任务痕迹,可以全删) find . -name ".trajectory.jsonl" -删除 find . -name ".检查point.jsonl" -删除
# 保留:当前运行的 会话 和 mAIn 会话(通过 会话s.json 决定) ls .jsonl | 排序 -t_ -k2 # 查看剩余文件
步骤 2:清理 会话s.json(核心)
直接编辑 会话s.json,只保留需要保留的条目:
导入 json 导入 os from pathlib 导入 Path
OpenClaw_HOME = os.path.expanduser(os.environ.获取("OpenClaw_HOME", "~/.OpenClaw"))
def 清理_代理(代理_id): """清理指定 代理 的 会话s.json""" 会话s_file = Path(OpenClaw_HOME) / "代理s" / 代理_id / "会话s" / "会话s.json" if not 会话s_file.exists(): print(f"[{代理_id}] 会话s.json 不存在,跳过") return
with open(会话s_file, 'r') as f: data = json.load(f)
if not data: print(f"[{代理_id}] 会话s.json 已是空的") return
# 判断 代理 是否存在 代理s_json = Path(OpenClaw_HOME) / "OpenClaw.json" with open(代理s_json, 'r') as f: config = json.load(f) 代理_ids = [a['id'] for a in config.获取('代理s', {}).获取('列出', [])]
# mAIn 代理 不存在则清空 if 代理_id == 'mAIn' and 代理_id not in 代理_ids: new_data = {} print(f"[{代理_id}] mAIn 代理 不存在,清空 会话s.json") else: # 其他:保留 mAIn 会话 和 运行ning 会话 new_data = { k: v for k, v in data.items() if ':mAIn' in k or v.获取('状态') == '运行ning' }
with open(会话s_file, 'w') as f: json.dump(new_data, f)
移除d = len(data) - len(new_data) print(f"[{代理_id}] 保留 {len(new_data)},删除 {移除d}") return 移除d
# 清理所有主要 代理 for 代理 in ['dis补丁er', 'file-助手', 'knowledge', 'coder', 'mAIn']: 清理_代理(代理)
步骤 3:重启 Gateway OpenClaw gateway re启动
步骤 4:验证 OpenClaw 会话s --all-代理s --limit all
保留策略 类型 是否保留 运行ning 状态的会话 ✅ 是 各 代理 的 mAIn 会话(:mAIn) ✅ 是 done/timeout/fAIled 的子 代理 ❌ 否 mAIn 代理 的所有会话(若已不存在) ❌ 否 .trajectory.jsonl ❌ 否 .检查point.jsonl ❌ 否 快速清理(一键脚本) python3 - << 'PYEOF' 导入 json 导入 os from pathlib 导入 Path
home = os.path.expanduser(os.environ.获取("OpenClaw_HOME", os.path.expanduser("~/.OpenClaw"))) print(f"OpenClaw home: {home}")
# 读取当前 代理 列表 代理s_file = Path(home) / "OpenClaw.json" with open(代理s_file) as f: config = json.load(f) 代理_ids = [a['id'] for a in config.获取('代理s', {}).获取('列出', []) or []]
tar获取_代理s = ['dis补丁er', 'file-助手', 'knowledge', 'coder', 'mAIn']
for 代理 in tar获取_代理s: sf = Path(home) / "代理s" / 代理 / "会话s" / "会话s.json" if not sf.exists(): print(f"[{代理}] 会话s.json 不存在") continue
with open(sf) as f: data = json.load(f)
if 代理 == 'mAIn' and 'mAIn' not in 代理_ids: new_data = {} print(f"[{代理}] mAIn 不存在,清空 ({len(data)} 条)") else: new_data = {k: v for k, v in data.items() if ':mAIn' in k or v.获取('状态') == '运行ning'} print(f"[{代理}] 保留 {len(new_data)},删 {len(data)-len(new_data)}")
with open(sf, 'w') as f: json.dump(new_data, f)
print("\n完成!重启 Gateway 使变更生效:OpenClaw gateway re启动") PYEOF
注意事项 绝对不要删除 运行ning 状态的会话 清理前建议备份:cp 会话s.json 会话s.json.bak 清理完成后必须重启 Gateway,否则 Control UI 仍显示旧数据 如果 会话s.json 为空但 Control UI 仍显示旧会话,重启 Gateway 即可