存储实体 · 读写触发机制 · 内容规范 · 架构设计哲学
核心原则:内置 Provider 和外部 Provider 共享同一套 MemoryProvider 接口,MemoryManager 统一编排。内置永远激活;外部同一时刻只允许一个。
HERMES_HOME/memories/MEMORY.md 和 USER.md§ 分隔;原子写入(tempfile + os.fsync + atomic_replace)读写触发机制
快照模式核心逻辑
memory_entries + 持久化磁盘_system_prompt_snapshot → System Prompt 全程稳定
安全扫描(每次写入前)
_MEMORY_THREAT_PATTERNS 在写入时执行扫描,而非注入前临时检查:内容规范
'Project uses pytest with xdist' OK — 'Run tests with pytest -n 4' BAD
HERMES_HOME/state.db(SQLite WAL 模式)读写触发机制
数据库 Schema
sessions — session 元数据(source, parent_session_id 链)messages — 完整对话历史(role, content)messages_fts — FTS5 虚拟表,trigram tokenizer(CJK 原生支持)schema_version — 版本追踪state — 全局键值状态
HERMES_HOME/skills/*.md(用户安装)HERMES_HOME/optional-skills/(内置包)读写触发机制
Skill vs Memory vs session_search 分工
| MemoryStore | Skills | session_search | |
|---|---|---|---|
| 内容 | 跨会话稳定事实 | 可复用工作流/流程 | 临时任务细节/历史会话 |
| 格式 | 陈述句 | 步骤+命令+验证 | 原始对话内容 |
| 触发 | 每轮自动注入 | 按 skill 条件加载 | 用户引用/主动召回 |
| 生命周期 | 长期稳定 | 积累/更新/归档 | 会话结束仍可查 |
HERMES_HOME/sessions/session_<id>.jsonl格式:每行一条 JSON,存储 user/assistant 消息对象。已在代码中标记为 deprecated,state.db 承担全部新负载。
.hermes.md 或 HERMES.md读写触发机制
安全扫描(与 MEMORY.md 相同的模式)
_CONTEXT_THREAT_PATTERNS 在文件读取时执行扫描:MemoryProvider(ABC),定义在 agent/memory_provider.pymemory.provider in config.yaml已实现的 Provider
honchomem0hindsightsupermemoryretaindbholographicbyteroveropenvikingMemoryProvider 核心生命周期
is_available() 就绪检查 · initialize() 连接建表 · get_tool_schemas() 注册工具system_prompt_block() 静态提示块 · prefetch(query) 每轮前召回 · sync_turn(user, asst) 每轮后持久化on_turn_start() · on_session_end() · on_session_switch() · on_pre_compress() · on_memory_write() · on_delegation()
读写触发机制
会话中途写入 → 立即持久化磁盘,但不修改已注入的 System Prompt。保护 prefix cache 全程稳定。
内置 + 外部 Provider 共用 MemoryProvider 接口,MemoryManager 统一编排。插件接入无需改核心代码。
内容扫描在写入时执行,不在注入前临时检查。防止多次小写入绕过检测的攻击向量。
每个 Provider 调用都 try/except 包裹。一个 Provider 故障不导致其他 Provider 或主 agent 崩溃。
Provider 不是被动存储,而是有状态的 Observer——知道 turn 开始/结束、context 压缩、session 切换。
三层机制互补不重叠:MemoryStore 管事实,Skills 管流程,session_search 管历史。各自有明确的容量和触发规则。
| 存储实体 | 路径 | 记忆类型 | 写入触发 | 读取触发 | 容量 |
|---|---|---|---|---|---|
| MEMORY.md | memories/ |
跨会话事实(环境/约定/习惯) | memory_tool add | 会话启动快照 | 2200 chars |
| USER.md | memories/ |
用户画像(偏好/风格) | memory_tool add | 会话启动快照 | 1375 chars |
| state.db | 根目录 | 会话历史 + FTS5 全文索引 | 每轮对话结束 | session_search 工具 | 无上限 |
| skills/ | 根目录 | 可复用工作流/错误修复 | skill_manage create | skill_view / 条件触发 | 无上限 |
| sessions/*.jsonl | sessions/ |
早期会话记录(遗留) | 已废弃 | 回退兼容 | 无上限 |
| .hermes.md | 项目仓库根 | 项目级上下文碎片 | 用户编辑文件 | System Prompt 组装 | 无上限 |
| External Provider | Provider 自定义 | 可插拔记忆后端 | sync_turn / on_memory_write | prefetch 每轮前召回 | Provider 决定 |