Hermes Agent 升级后,如果你在 Matrix、Telegram 或飞书里一发消息就看到:
Sorry, I encountered an error (ImportError).
cannot import name 'cfg_get' from 'hermes_cli.config'
Try again or use /reset to start a fresh session.
很多人第一反应会去查 Matrix 配置、Element 客户端、E2EE、Bot Token,甚至怀疑模型 API 不可用。但 NousResearch/hermes-agent issue #17648 里的讨论显示:这个问题更像是 Gateway 升级后仍运行旧代码/旧 import 状态,所以 /new、/reset 不解决,真正有效的是重启 Gateway。
典型现象:/reset 没用,重启 Gateway 有用
issue 原始报告来自 Matrix:
Sorry, I encountered an error (ImportError).
cannot import name 'cfg_get' from 'hermes_cli.config'
(/Users/assistant/.hermes/hermes-agent/hermes_cli/config.py)
Try again or use /reset to start a fresh session.
复现路径很短:
1. 用 Matrix / Element / Element X 给 Hermes 发消息; 2. Hermes 立即返回 ImportError: cannot import name 'cfg_get'; 3. /reset 或 /new 不解决; 4. 之后同样错误继续出现。
评论里进一步确认:
- 有人 Telegram 也遇到同样错误;
- 有人多个 profile 中只有部分 profile 报错;
- 有人飞书升级后也遇到;
- 多个用户反馈
hermes gateway restart或按 profile 重启后恢复。
这说明它不是 Matrix 专属问题,而是 Gateway 运行态问题。
为什么错误信息会误导你去查 Matrix?
因为原始 issue 标了 Matrix,错误也发生在 Matrix 聊天里。但关键错误是:
cannot import name 'cfg_get' from 'hermes_cli.config'
这是 Python import 层的问题,不是 Matrix 协议层的问题。
如果是 Matrix 房间、E2EE、access token 或 homeserver 错误,常见表现会是:
- bot 收不到消息;
- 加密消息无法解密;
- 发送事件失败;
- 认证/权限错误;
- room join 失败。
而这里是 Gateway 收到了消息,并且尝试执行业务逻辑时,在导入 Hermes 内部配置函数时崩了。
根因判断:升级后的代码与运行中的 Gateway 不一致
cfg_get 这种 import error 往往出现在代码结构变更后:
- 新代码移动/删除/重命名了函数;
- 某些模块仍按旧路径 import;
- Gateway 进程没有完整重启;
- 多 profile 或 system service 中部分进程仍引用旧 checkout / 旧 venv / 旧模块缓存。
所以 /new 和 /reset 没用很正常。
它们通常处理的是会话历史、上下文状态,不会让 Python 进程重新加载模块,也不会替换正在运行的 Gateway 代码。
为什么 hermes gateway restart 能解决?
评论里多个 workaround 都指向重启:
hermes gateway restart
如果是 system service:
sudo $(which hermes) gateway restart --system
如果只影响某个 profile:
hermes gateway restart -p <profile>
重启的意义是:
- 停掉仍在运行的旧 Gateway 进程;
- 让新进程从当前安装目录重新 import 模块;
- 清掉旧模块缓存和旧 runtime 状态;
- 让 profile 对应的 gateway runner 重新初始化。
这和 /reset 完全不是一层。
排查步骤:先分清“会话状态”还是“进程代码状态”
遇到 cannot import name 'cfg_get' 时,可以按这个顺序查。
1. 确认错误是否每次消息都复现
如果每条消息都立刻返回 ImportError,大概率不是模型请求失败,而是消息处理链路启动时就崩。
2. 试 /new 和 /reset
如果 /new / /reset 返回正常提示,但下一条消息仍 ImportError,说明历史上下文不是根因。
3. 重启对应 Gateway
单用户/单 profile 场景:
hermes gateway restart -p <profile>
system service 场景:
sudo $(which hermes) gateway restart --system
普通场景:
hermes gateway restart
4. 确认运行中的 hermes 路径
升级后尤其要确认:
which hermes
hermes --version
如果系统里有多个 Python/venv/pipx/Homebrew 路径,可能出现 CLI 是新版本、service 仍跑旧版本的情况。
5. 多 profile 分开验证
评论中有人反馈“三个 profile,一个正常、两个报错”。这类情况说明不能只看全局版本,还要确认每个 profile 对应 gateway 是否真的重启。
这个问题为什么会扩散到 Telegram / 飞书?
因为错误不在 Matrix adapter 的协议细节,而在 Gateway 共享代码路径。
只要平台消息进入同一段 Python 业务逻辑,并触发了旧 import,就可能在不同平台出现同样错误。
所以文章标题虽然可以写 Matrix,但实际排查时应把它视为:
Hermes Gateway after-update stale code / stale import problem
而不是:
Matrix homeserver 配置错误
后续修复:stale-code self-check 与消息不丢失
issue 评论里还提到后续 PR #19238,用于处理 stale-code restart class 的一个边界:
> 对 polling/event 平台,触发重启的那条 update 可能已经被消费;PR 会把授权用户消息保存进 transcript,并标记 resume_pending=stale_code_restart,避免 Telegram/Discord 等平台 ACK 后丢掉用户真实请求。
这说明维护者后来不仅关注“发现旧代码后重启”,还关注“重启过程中不要吞掉触发消息”。
对于 Gateway 平台来说,这很重要:
- Telegram/Discord/飞书等消息一旦 ACK,用户以为已经处理;
- 如果 Gateway 只是重启但没保存触发消息,任务就会无声丢失;
- 正确做法是保存消息,重启后继续处理或明确告知用户。
和 DeepAI API 中转站的关系
如果你在 Hermes 中配置 DeepAI API 中转站,常见配置是:
Base URL: https://api.deepai.wang/v1
API Key: 你的 DeepAI Key
Model: 以 DeepAI 控制台为准
但 cannot import name 'cfg_get' 发生在 Hermes Python 代码导入阶段,通常还没走到模型 API 请求。
因此 DeepAI API 中转站不能直接修复这个 ImportError。它能做的是提供稳定的 OpenAI-compatible 模型调用入口;而 Gateway 升级、进程重启、模块加载一致性,仍要在 Hermes 本地运行环境里处理。
排查时建议分层:
- ImportError:先查 Hermes 安装/升级/Gateway 进程;
- HTTP 401/403/429/5xx:再查 DeepAI 或上游模型 API;
- 平台收不到消息:再查 Matrix/Telegram/飞书 adapter。
FAQ
/reset 为什么不解决?
/reset 通常清会话历史,不会重启 Python 进程,也不会重新加载 Hermes 模块。
这是 Matrix 专属问题吗?
不是。issue 原始报告来自 Matrix,但评论里 Telegram、飞书也有人复现。
最快恢复方法是什么?
执行 hermes gateway restart;如果是 system service,用 sudo $(which hermes) gateway restart --system;如果是特定 profile,用 hermes gateway restart -p <profile>。
为什么有些 profile 正常,有些不正常?
可能不同 profile 的 Gateway 进程生命周期不同,部分进程仍在跑升级前的代码或旧 import 状态。
DeepAI API 中转站会导致这个错误吗?
通常不会。这个错误是 Hermes 本地 import 问题,不是模型 API 返回错误。
总结
Hermes Gateway 升级后出现:
ImportError: cannot import name 'cfg_get' from 'hermes_cli.config'
不要只盯着 Matrix、Telegram 或模型 API。更可能的原因是 Gateway 进程还在运行旧代码或旧模块状态。
一句话处理:/new 和 /reset 解决不了 import 状态;先重启对应 Gateway,再检查多 profile / system service 是否真的加载了新 Hermes。