Hermes Agent 自动化日记系统搭建全记录

2026-07-08

从记事本开始

最开始的需求很简单:让 Hermes Agent 每天凌晨把我前一天的工作整理成日记。

第一版确实也做到了——凌晨 2:00 跑个 cron,读聊天记录、写 Obsidian 日记、保存几个知识点、微信通知。功能完整,但用了一周发现一个根本问题:它只记录,不行动。

用户教它的事情(比如”以后遇到这种情况应该这样做”),记在日记里就结束了,下次还会踩同样的坑。日记成了流水账,没有变成改进的动力。

于是开始了三轮架构迭代。

阶段 1:并行分析为什么失败了

第一个改造思路很直觉—把分析拆成 5 个维度,用子 agent 并行跑:

  • 维度 A:流程脚本化
  • 维度 B:反馈闭环审计
  • 维度 C:错误纠正与自动修复
  • 维度 D:技能更新
  • 维度 E:空白发现

然后每个子 agent 独立分析同一批会话,最后汇总。

上线当天就发现问题了:

  1. 同源数据重复读:5 个子 agent 各读一遍会话内容,token 消耗直接翻 5 倍
  2. 洞察割裂:用户一条”这个命令用错了,应该用新脚本”的纠正,同时命中「脚本化」和「技能更新」两个维度,但被拆分到两个子 agent 里,各看到一半
  3. 优先级无法传导:维度 A 发现了一个严重 bug,维度 B 也在发现小问题,但汇总时没有机制说”先修 bug 再管别的”

子 agent 本身也有静默丢失的问题——接近 max_iterations 时来不及保存骨架 JSON,整个分析就丢了。主 agent 不知道它失败了,以为在等结果。

第二天我就废弃了这个方案。

阶段 2:串行 + 六维 + 三级分流

重新设计的核心决策很简单:以 session 为原子单元,串行分析,不拆分。 一个 session 完整看完,一次性打 6 个维度的标签,再执行改进。

六维分析框架

维度 看什么
流程脚本化 命令能不能写成可复用脚本?
反馈闭环 用户纠正后我改了没有?还会再犯吗?
错误修复 报错修了没?修复方式对不对?
技能更新 有没有值得做成技能的知识点?
空白发现 有没有应该做但还没做的事?
流程优化 有没有绕弯路、选错工具的情况?

三级分流

所有发现不急着改。先分级:

  • 🟢 立即行动:错误纠正、脚本化机会、工具优化 — 当天执行
  • 🟡 观察:潜在优化点、功能建议 — 需”3天出现2次”才升级
  • ⚪ 跳过:一次性异常、噪声 — 直接丢弃

这个分级机制解决了之前”什么都想改但什么都改不完”的问题。

决策门

日常要分析的 session 通常是 8-12 个。≤12 个时主 agent 直接分析(保持上下文完整);13+ 个时用子 agent 委派,但加了一个保障——子 agent 必须先写出骨架 JSON 再填充,保证即使超时也有部分结果返回。

核心组件

work-overview.yaml

这是系统的”持久记忆”。一个 YAML 文件记录了 16 个工作域的当前状态:

自我进化引擎:
  status: active
  triggered_by: ["cron-daily-diary"]
  scripts: ["~/tools/..."]
  known_issues: []
  last_update: 2026-07-08

9Router AI 网关:
  status: active
  triggered_by: ["user-chat", "weixin"]
  known_issues:
    - "gl model sometimes 429 on burst requests"
  last_update: 2026-07-08

每天分析完 session 后自动更新 known_issueslast_update。下次分析时拿着这份”体检报告”去检查问题是否已解决。

查询层

query_state_db.py 直接从 state.db(SQLite)查会话元数据,不需要读全量对话内容,速度快:

python3 query_state_db.py 20260707 --limit 300

返回昨天所有 session 的 ID、来源、消息数、时间范围。然后根据来源过滤——排除 cron 自身的 session(source != 'cron'),只分析用户交互 session。

输出层

分析完成后:

  1. 写 Obsidian 日记 Daily/YYYY-MM-DD.md
  2. 知识入库到 GBrain(临时文件法写入)
  3. 🟢 项批量执行改进
  4. 自检问题登记到 Vikunja 项目 7
  5. 微信通知推送摘要

踩坑记录

1. 子 agent 静默丢失

现象:delegate_task 返回成功但实际分析文件为空。

根因:sub agent 在接近 max_iterations 时没来得及写骨架 JSON 就退出了,且主 agent 无法感知。

解决:≤12 session 用主 agent 直接分析,不再委派。

2. cron 会话过滤漏洞

WHERE id NOT LIKE 'cron%' 漏过滤了一批 cron 产生的 session——因为有些 cron session 的 ID 生成的格式不以 cron 开头。

解决:加 source != 'cron' 条件双保险。

3. 噪声过滤不足

最初看到异常就想修,结果很多是一次性的环境波动(网络超时、API 限流等)。修了白修。

解决:引入”连续 2 天出现才修复”规则,减少无效改进。

当前运行状态

  • 触发时间:每天凌晨 02:00
  • 分析量:日常 8-12 个 session,最多 21 个
  • 工作域:16 个(从 AI 网关到智能家居全覆盖)
  • 知识点入库:每次 2-6 个
  • 自检登记:发现系统性问题自动写 Vikunja

几条经验

  1. 先记录,再行动。 日记系统不想写流水账,就需要一个”从听到做”的执行链路。
  2. 串行比并行好。 直觉上并行更快,但分析类任务上下文割裂的代价远超速度收益。
  3. 持久状态很重要。 不带”上次检查结果”的审计每次都从零开始。work-overview.yaml 让分析有了历史参照。
  4. 分级比全收好。 不是所有发现都值得当天处理。三级分流机制解决了”什么都要改”的冲动。

从凌晨 2 点写记事本的简单 cron,到一个会自动发现 6 类改进机会并执行它们的闭环系统——整个迭代过程最有价值的不是代码量,而是对”什么是值得自动化的”这个问题的理解。