适用对象:正在用 Hermes Agent(Nous Research)接入飞书、又想把飞书平台上的全部会话历史一键清空的朋友。下面这张图可以帮你快速了解整个流程的切入点。

一、背景
Hermes 这家伙把所有会话都存在一个 SQLite 数据库里,路径是 ~/.hermes/state.db。而且它用的是 WAL 模式,所以旁边还会跟着两个伴生文件:state.db-wal 和 state.db-shm,删的时候别忘了它们。
数据库里主要有三张表跟清理相关:
sessions表:记录会话元数据,每条会话通过source字段标记来源平台,比如cli、telegram、discord、飞书等等。messages表:每个会话的完整消息历史,数据量通常比较大。messages_fts等:FTS5 全文索引虚拟表,靠触发器自动跟随messages表变化,删除消息时索引会自动清理,不用手动操心。
所以,“清除飞书所有会话”这件事,本质上就是:删掉 source 为飞书的那批 session 以及它们对应的 messages。
动手之前,有两个限制必须心里有数:
source的具体值得先确认。大概率是feishu,但也可能是lark(取决于你接入时的配置)。删之前务必核对,别手滑删错了平台。- CLI 自带的
prune命令只删“已结束”的会话。那些正在进行中、或者非正常结束的会话,它不会动。要彻底清干净,要么先停掉 gateway 让所有会话自然结束,要么直接用 SQL 动手。
另外强调一点:会话(session)不等于记忆(memory)。本指南只清理对话历史,不会影响 Hermes 沉淀在 ~/.hermes/memory/ 下的长期记忆(比如 MEMORY.md、USER.md 这些文件)。所以放心操作,记忆不会丢。
二、操作前必做
1. 停掉 gateway
避免在运行过程中修改数据库产生锁冲突,同时也能让正在跑的飞书会话安全结束:
hermes gateway stop
2. 备份数据库(三个文件一起拷)
cp ~/.hermes/state.db ~/.hermes/state.db.bak cp ~/.hermes/state.db-wal ~/.hermes/state.db-wal.bak 2>/dev/null cp ~/.hermes/state.db-shm ~/.hermes/state.db-shm.bak 2>/dev/null
或者偷个懒,直接用 hermes backup --quick 做一次快照式备份,效果一样。
三、第一步:确认飞书的 source 值
sqlite3 ~/.hermes/state.db "SELECT source, COUNT(*) FROM sessions GROUP BY source;"
这条命令会列出所有平台及其对应的会话数量。看清楚飞书那行的 source 字段值,以及条数。下文命令里凡是出现 feishu 的地方,都替换成你实际看到的值。
四、第二步:选一种清理方式
方式 A:CLI 命令(推荐,最简单)
hermes sessions prune 支持按平台过滤。注意 --older-than 默认是 90 天,只删 90 天前的会话;要清全部飞书会话(包括今天的),必须设成 0。
先不加 --yes,让它显示“将删除 N 条”再核对:
hermes sessions prune --source feishu --older-than 0
条数和 source 都确认无误后,正式执行:
hermes sessions prune --source feishu --older-than 0 --yes
prune 命令的参数说明:
| 参数 | 含义 |
|---|---|
--source SOURCE | 只清理该来源的会话 |
--older-than N | 删除 N 天前的会话(默认 90;填 0 表示包含今天,即全部) |
--yes / -y | 跳过确认 |
局限:只能删“已结束”的会话。如果还有残留的未结束会话,那就改用方式 B。
方式 B:直接 SQL(最彻底,能删未结束的会话)
注意删除顺序:先删 messages,再删 sessions(因为 messages 表外键引用了 sessions)。FTS 索引会随 messages 删除自动清理,不用管。
sqlite3 ~/.hermes/state.db <<'SQL' DELETE FROM messages WHERE session_id IN (SELECT id FROM sessions WHERE source='feishu'); DELETE FROM sessions WHERE source='feishu'; SQL
五、第三步:重启 gateway
hermes gateway start
六、完整流程速查(推荐路径)
# 0. 停网关 + 备份 hermes gateway stop cp ~/.hermes/state.db ~/.hermes/state.db.bak # 1. 确认飞书 source 值与条数 sqlite3 ~/.hermes/state.db "SELECT source, COUNT(*) FROM sessions GROUP BY source;" # 2. 预览将删除多少条(先不加 --yes) hermes sessions prune --source feishu --older-than 0 # 3. 条数无误后正式删除 hermes sessions prune --source feishu --older-than 0 --yes # 4.(可选)若有未结束会话残留,用 SQL 彻底清 sqlite3 ~/.hermes/state.db <<'SQL' DELETE FROM messages WHERE session_id IN (SELECT id FROM sessions WHERE source='feishu'); DELETE FROM sessions WHERE source='feishu'; SQL # 5. 重启网关 hermes gateway start
七、附:其他相关命令
hermes sessions list # 列出最近会话 hermes sessions browse # 交互式选择器,可搜索、手动挑删 hermes sessions delete# 删单个会话 hermes sessions stats # 会话存储统计 hermes dashboard # 网页版管理界面,可视化管理会话
特殊情况:如果飞书是这台机器上唯一接入的平台、而且你想彻底重置,最省事的方式是直接删掉整个 state.db(连带 -wal、-shm),下次启动 Hermes 时会自动重建空库。但这会清掉所有平台的会话,确认没有其他平台数据要保留时才这么做。
hermes gateway stop rm ~/.hermes/state.db ~/.hermes/state.db-wal ~/.hermes/state.db-shm hermes gateway start
八、误删恢复
万一删错了,用之前备份的文件还原即可:
hermes gateway stop cp ~/.hermes/state.db.bak ~/.hermes/state.db rm -f ~/.hermes/state.db-wal ~/.hermes/state.db-shm # 清掉可能不一致的伴随文件 hermes gateway start
