会话管理
Hermes Agent 使用 SQLite 数据库持久化存储所有会话数据,提供完整的会话生命周期管理能力,包括浏览、搜索、导出、压缩和清理。
存储架构
数据库位置
所有会话数据存储在单一 SQLite 数据库文件中:
~/.hermes/state.db数据库结构
sql
-- 会话表
CREATE TABLE sessions (
id TEXT PRIMARY KEY,
name TEXT,
created_at DATETIME,
updated_at DATETIME,
profile TEXT,
model TEXT,
token_count INTEGER,
compressed BOOLEAN
);
-- 消息表
CREATE TABLE messages (
id TEXT PRIMARY KEY,
session_id TEXT REFERENCES sessions(id),
role TEXT, -- user / assistant / system
content TEXT,
timestamp DATETIME,
token_count INTEGER
);
-- FTS5 全文检索索引
CREATE VIRTUAL TABLE messages_fts USING fts5(
content,
session_id UNINDEXED,
role UNINDEXED,
timestamp UNINDEXED,
content='messages',
content_rowid='rowid'
);FTS5(Full-Text Search 5)索引使跨会话全文检索极其高效,无论历史会话有多少都能毫秒级响应。
hermes sessions 命令
list — 列出会话
bash
# 列出最近 20 个会话
hermes sessions list
# 列出最近 50 个会话
hermes sessions list --limit 50
# 列出指定 profile 的会话
hermes sessions list --profile work
# 按时间范围过滤
hermes sessions list --since "2025-04-01" --until "2025-04-07"输出示例:
ID NAME MODEL MESSAGES TOKENS UPDATED
----------- --------------------- --------------------- -------- ------- -------------------
abc123def Go 代码审查 claude-opus-4-5 45 12,340 2025-04-07 15:23
xyz789ghi API 设计讨论 claude-sonnet-4-5 23 6,789 2025-04-07 11:05
mno456pqr 数据库迁移方案 claude-opus-4-5 67 23,456 2025-04-06 18:30browse — 交互式浏览
bash
# 进入交互式会话浏览器
hermes sessions browse交互式浏览器支持:
- 方向键导航会话列表
- 回车键查看会话详情
/键实时搜索e键导出选中会话d键删除选中会话q键退出
bash
# 带搜索词启动浏览器
hermes sessions browse --search "PostgreSQL"export — 导出会话
bash
# 导出单个会话为 JSONL 格式
hermes sessions export abc123def
# 导出到指定文件
hermes sessions export abc123def --output ~/backups/session-abc123.jsonl
# 导出所有会话
hermes sessions export --all --output ~/backups/all-sessions.jsonl
# 导出为 Markdown 格式(便于阅读)
hermes sessions export abc123def --format markdown --output session.md
# 导出为纯文本格式
hermes sessions export abc123def --format textJSONL 格式示例(每行一条消息):
jsonl
{"session_id":"abc123def","role":"user","content":"帮我审查这段 Go 代码","timestamp":"2025-04-07T15:00:00Z"}
{"session_id":"abc123def","role":"assistant","content":"我来分析这段代码...","timestamp":"2025-04-07T15:00:05Z"}delete — 删除会话
bash
# 删除单个会话(需确认)
hermes sessions delete abc123def
# 强制删除(不确认)
hermes sessions delete abc123def --force
# 删除多个会话
hermes sessions delete abc123def xyz789ghi mno456pqrprune — 批量清理
bash
# 删除 30 天前的会话
hermes sessions prune --older-than 30d
# 删除 90 天前的会话(不确认)
hermes sessions prune --older-than 90d --force
# 只保留最近 100 个会话
hermes sessions prune --keep-latest 100
# 删除 token 数少于 100 的短会话(可能是测试)
hermes sessions prune --min-tokens 100
# 干运行:显示将要删除的内容但不实际删除
hermes sessions prune --older-than 30d --dry-runstats — 统计信息
bash
hermes sessions stats输出:
会话统计
═══════════════════════════════════════
总会话数: 1,234
总消息数: 45,678
总 Token 用量: 12,345,678
按模型分布:
claude-opus-4-5 456 会话 (37%)
claude-sonnet-4-5 678 会话 (55%)
其他 100 会话 (8%)
按时间分布:
今天: 3 会话
本周: 23 会话
本月: 89 会话
更早: 1,119 会话
存储使用:
state.db 大小: 234 MB
平均会话大小: 194 KBrename — 重命名会话
bash
# 重命名会话(让历史更易于检索)
hermes sessions rename abc123def "Go 代码审查 - 2025年4月"会话恢复
继续上次会话
bash
# 继续最近的会话
hermes --continue
hermes -c恢复指定会话
bash
# 通过会话 ID 恢复
hermes --resume abc123def
# 通过会话名称恢复(模糊匹配)
hermes --resume "Go 代码审查"自动压缩
工作原理
当会话 Token 数量达到阈值时,Hermes 自动触发压缩:
- 调用 LLM 对早期对话生成摘要
- 用摘要替换早期的详细消息
- 保留最近 N 轮对话的完整内容
- 压缩后的会话继续正常使用
配置压缩阈值
yaml
# ~/.hermes/config.yaml
session:
auto_compress: true
compress_threshold: 0.5 # 达到上下文窗口 50% 时触发(默认)
compress_keep_recent: 20 # 保留最近 20 轮对话不压缩
compress_model: claude-haiku-4-5 # 用更快的模型生成摘要手动触发压缩
bash
# 压缩当前会话
/compress
# 压缩指定会话
hermes sessions compress abc123def会话搜索
利用 FTS5 全文检索引擎跨所有历史会话搜索:
bash
# 命令行搜索
hermes sessions browse --search "PostgreSQL 迁移"
# 在对话中使用 session_search 工具在对话中直接调用:
搜索我们之前讨论过的关于 Docker 部署的内容搜索结果按相关性排序,显示匹配片段和所属会话信息。
数据备份与迁移
备份
bash
# 备份整个数据库
cp ~/.hermes/state.db ~/backup/hermes-state-$(date +%Y%m%d).db
# 导出所有会话为 JSONL(跨平台格式)
hermes sessions export --all --output ~/backup/sessions-$(date +%Y%m%d).jsonl迁移到新机器
bash
# 在旧机器上
hermes sessions export --all --output sessions-backup.jsonl
scp sessions-backup.jsonl newmachine:~/
# 在新机器上
hermes sessions import sessions-backup.jsonl数据库维护
bash
# 压缩数据库(释放已删除会话的空间)
hermes sessions vacuum
# 验证数据库完整性
hermes sessions check