Skip to content

会话管理

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:30

browse — 交互式浏览

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 text

JSONL 格式示例(每行一条消息):

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 mno456pqr

prune — 批量清理

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-run

stats — 统计信息

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 KB

rename — 重命名会话

bash
# 重命名会话(让历史更易于检索)
hermes sessions rename abc123def "Go 代码审查 - 2025年4月"

会话恢复

继续上次会话

bash
# 继续最近的会话
hermes --continue
hermes -c

恢复指定会话

bash
# 通过会话 ID 恢复
hermes --resume abc123def

# 通过会话名称恢复(模糊匹配)
hermes --resume "Go 代码审查"

自动压缩

工作原理

当会话 Token 数量达到阈值时,Hermes 自动触发压缩:

  1. 调用 LLM 对早期对话生成摘要
  2. 用摘要替换早期的详细消息
  3. 保留最近 N 轮对话的完整内容
  4. 压缩后的会话继续正常使用

配置压缩阈值

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

基于 MIT 许可发布 | 由 Nous Research 开发