🐝 Hermes 日报 — 2026-05-13
📊 版本状态
- 当前版本:Hermes Agent v0.13.0 (2026.5.7)
- 落后上游:226 commits behind origin/main
- Python:3.11.15 | OpenAI SDK:2.32.0
- ⚠️ 建议尽快
hermes update,落后了整整 226 个提交
🔄 更新摘要(精简版)
统计:418 个文件变更,+59,378 / -4,982 行
🚀 新功能(亮点密集)
- LSP 语义诊断(#24168):
write_file和patch现在自动运行 26 种语言服务器(pyright、gopls、rust-analyzer 等),只显示你编辑引入的新错误,过滤掉已有问题。这是代码质量的质的飞跃。 - LINE 消息平台(#23197):新增 LINE Messaging API 平台支持。
- Clarify 工具 gateway 化(#24199):gateway 模式下 agent 终于可以反问用户了,Telegram 上以行内键盘按钮呈现。
- 跨会话 Prompt 缓存(#23828):Claude 模型在 Anthropic/OpenRouter/Nous Portal 上的 1 小时前缀缓存。
- 文件变更验证(#24498):每轮自动展示 agent 修改了哪些文件。
- 供应链安全扫描(#24220):分级安装回退 + 安全公告检查框架。
🐛 Bug 修复
- gateway systemd 重启延迟从 60 秒降到 5 秒(#24654)
- CLI 响应框 CJK 字符宽度修复(#24626)
- TUI tmux 滚动缓冲区泄漏修复(#24625)
- Telegram 取消处理时清除 👀 反应(#24628)
- LSP TypeScript SDK 自动安装修复(#24630)
- 大量并发 TOCTOU 竞态修复(transport、Google 模块、browser 等)
🔧 改进优化
- Camofox 浏览器外部会话支持
- TUI markdown 链接解析优化
- Dashboard 配置路径显示修复
🌐 社区动态与深度玩法
⚠️ 注:今日 Reddit/博客渠道因网络限制无法访问,以下内容主要来自 GitHub Issues/PRs 深度挖掘。
1. 🎯 LSP 语义诊断:写代码时实时报错
来源:GitHub PR · #24168
这是 v0.14 最重磅的功能。Hermes 的 write_file 和 patch 现在会在写完代码后自动运行语言服务器的诊断——不再是简单的语法检查,而是真正的类型错误、未定义变量、缺失导入等语义级别诊断。
为什么重要:以前 Hermes 写代码只能靠模型自己判断对错,经常出现变量名拼错、import 缺失等问题要到运行时才发现。现在支持 26 种语言:Python(pyright)、Go(gopls)、Rust(rust-analyzer)、TypeScript(typescript-language-server)、C/C++(clangd)、Bash、Vue、Svelte、PHP、Lua、Dockerfile、Terraform、Dart、Haskell、Julia、Clojure、Nix、Zig、Gleam、Elixir、Prisma、Kotlin、Java 等。
实操价值:Hermes 在写代码时会先记录已有错误基线,编辑后只展示新引入的诊断,不会淹没在已有问题中。如果你日常用 Hermes 写 Python/TS/Rust,这个功能能拦截大量低级错误。
2. 💬 Clarify 工具在 gateway 上终于能用了
来源:GitHub PR · #24199
之前 gateway 模式(Telegram/Discord 等)下 agent 调用 clarify 工具会直接失败,返回 “not available in this execution context”。原因是 gateway/run.py 从未把 clarify_callback 传给 AIAgent。
修复后:Telegram 上 clarify 以行内键盘按钮呈现,用户可以直接点击选项回答 agent 的反问,不需要手动打字。
实操价值:如果你在 Telegram 上用 Hermes 做复杂任务(比如写代码时 agent 想问”用 SQLAlchemy 还是 raw SQL?”),现在终于能收到提问并一键回答了。这大大提升了 gateway 模式的交互体验。
3. 🔍 session_search 的隐患:你的历史对话可能搜不到
来源:GitHub Issue · #24680
一个容易被忽视但影响深远的问题:session_search 实际上只搜索 LLM 生成的会话摘要,而不是原始对话文本。
两个失效场景:
- 当前活跃会话不可搜索——Telegram 会话在关闭前不会被索引,意味着你正在进行的对话搜不到。
- 摘要超时的会话永久丢失——很多会话显示
[Raw preview — summarization unavailable],LLM 摘要器超时或跳过后,该会话对 session_search 来说就不存在。
实操建议:如果你依赖 session_search 做跨会话记忆回溯,目前阶段不要完全信任它的召回率。重要的信息建议用 memory 工具显式存储,或用 Obsidian 手动记录关键结论。
4. 💰 DeepSeek 用户的省钱机会:Prompt Caching 还未开启
来源:GitHub Issue · #24617
DeepSeek V4 Pro 在 OpenCode Go 上的定价已经显示缓存支持(cache read $0.01/M tokens),但 Hermes 从未对 DeepSeek 模型发送 cache_control 标记。
现状:prompt_caching 只对 Anthropic/Qwen 模型生效。DeepSeek 用户每次请求都在重复发送完整的 system prompt 和工具定义,白白浪费 token。
实操价值:如果你用 DeepSeek + OpenCode Go 做高频任务(比如 cron job),关注这个 issue。一旦修复,system prompt 的重复成本能省下一大截。目前可以手动在 issue 下 +1 加速优先级。
5. 🖥️ 本地模型用户注意:上下文窗口检测有 Bug
来源:GitHub Issue · #24640
用户用 oMLX v0.3.8 在本地网络托管 MiniMax-M2.7-4bit-mxfp4 时,Hermes 错误地将上下文窗口检测为 256K(实际只有 120K),导致 API 调用返回 400 错误。
背景:这和 #5089、#8620、#10213 可能同源——Hermes 对 custom provider 的 context_length 自动检测不够鲁棒。
实操建议:如果你用本地模型(llama.cpp、oMLX、MLX 等),建议在 config.yaml 中显式设置 model.context_length 而不是依赖自动检测。示例:
model:
default: your-local-model
provider: custom
context_length: 131072 # 显式指定
6. 🎛️ 平台通用交互按钮:7 条评论的长期需求
来源:GitHub Issue · #15311
这是社区讨论最热烈的 feature request 之一(7 条评论),请求添加平台无关的交互按钮 API。目前 Telegram 内联键盘只用于内置流程(模型选择、命令审批),但 agent 生成的消息或定时任务无法添加按钮。
讨论亮点:Slack 用户提出审批按钮(Allow/Deny)比打字回复更直观。这个需求和刚合并的 clarify 按钮 PR(#24199)有直接关联——底层机制已经在搭建。
实操价值:如果你做自动化工作流,想象一下:cron job 执行完毕后发送一条带「查看详情」「重新执行」「忽略」按钮的消息——这个需求正在路上。
🛠️ 玩机技巧:Cron 高级用法
本周主题:Cron Job 的正确创建和调试流程
Hermes 的 cron 系统可以做定时任务,但创建之后的调试常被忽视。以下是完整流程:
创建定时任务
# 每 30 分钟执行一次
hermes cron create 30m
# 每天上午 9 点(Cron 表达式)
hermes cron create "0 9 * * *"
# 每隔 2 小时
hermes cron create "every 2h"
查看和调试
# 列出所有任务(含 --all 显示禁用的)
hermes cron list --all
# 查看任务状态
hermes cron status
常见失败排查
# 1. 检查输出文件:最新文件以 "(No response generated)" 结尾 = agent 崩溃
ls -lt ~/.hermes/cron/output/<job_id>/
# 2. 检查 agent 日志
grep "cron_<job_id>" ~/.hermes/logs/agent.log | tail -20
# 3. 常见原因:主模型失败 → fallback 模型有兼容性问题
# 解决:修改 config.yaml 中的 fallback_providers,或给 cron 指定模型
hermes cron edit <job_id> # 修改任务配置
# 4. 修复后手动触发
hermes cron run <job_id>
Cron 输出目录结构
~/.hermes/cron/output/<job_id>/
├── 20260513_090000.md # 正常输出
├── 20260513_093000.md # (No response generated) ← 失败
└── ...
关键提示:如果 cron job 持续失败,先检查 fallback_providers 链中的模型兼容性。比如 DeepSeek 的 thinking mode 需要 reasoning_content 来回传,如果 fallback 链中混入了不兼容的模型就会 400。
📝 完整报告已保存至 Obsidian:
Skyebee/Hermes Daily/2026-05-13.md