Hermes Doctor — 故障诊断与抢救流程
何时触发本 skill
任一信号即触发:
HTTP 401: Authentication Fails(尤其是 your api key: ****xxx is invalid)
Authorization: Bearer no-key-required 之类字面占位符出现在请求 header(用 request_dump 看)
hermes setup 不弹 API key 输入步骤,只显示绿色 ✓
/model 切换 provider 后立刻 401/404
hermes doctor 报红/黄
gateway already running 启动失败
- WAL 文件 > 100MB
不要等用户描述清楚 — 看到上面任一症状立即载入 references/auth-troubleshooting.md。
第一原则:先确认 HERMES_HOME 在哪
Windows 上最容易踩的坑:HERMES_HOME 可能被 HKCU\Environment 重定向到非默认位置(比如 C:\Users\<u>\AppData\Local\hermes),而不是 ~/.hermes。诊断和修复必须先确认真路径,否则你改的是无效文件:
echo "$HERMES_HOME" # shell 当前值
reg query "HKCU\Environment" /v HERMES_HOME # 持久化值
hermes dump --redact | head -20 # hermes 自己认的路径
三处不一致就以 hermes dump 输出的为准。Windows 上的常见场景:U-Hermes 等打包发行版会把 HERMES_HOME 写到 %LOCALAPPDATA%\hermes(即 C:\Users\<USER>\AppData\Local\hermes),让默认的 ~/.hermes 变成空壳。如果你只改 ~/.hermes 下的文件而 hermes 没反应,八成就是这种情况。
黄金 5 步排查
详见 templates/triage-checklist.md。摘要:
- 定位真 HERMES_HOME(上一节)
- 跑
hermes dump --redact — 看运行时 provider/key/active_profile/请求 URL/Authorization 的真实样子。这一步常常一眼定位问题。
- 看最新 request_dump —
<HERMES_HOME>/sessions/request_dump_*.json 里的 request.headers.Authorization 和 request.url 是不是符合预期。如果 Authorization 是 Bearer no-key-required 或 Bearer <字面单词>,说明 key 注入失败,不是 key 本身的问题。
- 排查 4 处残留点(顺序很重要,从隐蔽到显眼):
- HKCU\Environment 的
HERMES_HOME、*_API_KEY(reg query "HKCU\Environment")
- shell 进程环境(
echo "$DEEPSEEK_API_KEY" 等)
<HERMES_HOME>/auth.json 的 credential_pool.<provider> 数组(最容易缺)
<HERMES_HOME>/.env 和 <HERMES_HOME>/config.yaml(顶层 model.api_key + model_profiles.*.api_key)
- 备份后修复(详见 references/auth-troubleshooting.md):
- 永远先
cp <file> <file>.broken-$(date +%Y%m%d-%H%M%S)
- 修完跑
hermes doctor 验证,启动 hermes 发 ping
常见症状速查表
| 症状 |
大概率根因 |
跳到 |
your api key: ****ired is invalid |
key 是字面 expired 或 no-key-required 占位符,没注入到 header |
references/auth-troubleshooting.md |
Authorization: Bearer no-key-required |
credential_pool 缺该 provider 条目 |
references/auth-troubleshooting.md §"占位符注入" |
hermes setup 不弹 key 输入 |
issue #16394:.env 里有该 KEY 行就静默跳过 |
references/auth-troubleshooting.md §"setup 静默跳过" |
/model 切完 404 |
issue #3685:api_mode 残留 |
references/provider-switch.md |
gateway already running |
lock 文件残留 |
references/doctor-and-dump.md §gateway |
| WAL 巨大 |
response_store/state 数据库未 checkpoint |
hermes doctor --fix |
| 跨机迁移后全报错 |
API key 没在新机重新填,base_url 错 |
references/backup-and-migrate.md |
危险动作清单(执行前必须明确得到用户授权)
只要你打算做下面任一操作,先把动作和影响告诉用户、等他点头,再做:
- 删
<HERMES_HOME>/.env 任一行
- 改
<HERMES_HOME>/auth.json 的 credential_pool(可能会让另一些 provider 失联)
- 删 HKCU\Environment 的环境变量(影响所有应用,不只 hermes)
- 跑
hermes doctor --fix(会自动改 config 和 symlink)
- 删 sessions/ 或 state.db(无法恢复历史)
- 重新装 hermes-agent(venv 重建)
何时升级到人工
hermes dump 显示运行时 key 与 4 处残留点都对不上 → venv 损坏的可能性 > 90%,建议:
- 备份整个 HERMES_HOME 到 zip
- 卸载并重装 hermes-agent (
pipx reinstall hermes-agent 或对应安装方式)
- 重新跑
hermes setup
- 把备份的 sessions/ memories/ skills/ 复制回新 HERMES_HOME
排查时优先翻这些地方
- 真 HERMES_HOME(用
hermes dump --redact 或 reg query "HKCU\Environment" /v HERMES_HOME 确认)
- Hermes Python 源码 — 诊断时直接读最准:
- 标准 pip 安装:
<venv>/Lib/site-packages/hermes_cli/(Win)或 <venv>/lib/python*/site-packages/hermes_cli/
- 打包发行版(如 U-Hermes):
<install-root>/hermes-agent/hermes_cli/
- 关键文件:
auth.py(provider 解析、PROVIDER_REGISTRY、_resolve_api_key_provider_secret)、doctor.py(run_doctor)、setup.py(setup wizard)、env_loader.py、runtime_provider.py
- Hermes CLI 二进制:venv 的
Scripts/hermes.exe(Win)或 bin/hermes(Mac/Linux)
修复手段优先级
故障定位后,优先用安全程度高的手段:
hermes auth 子命令(v2026.4.3+,推荐) — hermes auth add/remove/list/reset,见 references/credential-pool-and-rotation.md。先 hermes auth --help 看你装的版本支不支持
hermes doctor --fix — 修 stale config / WAL / symlink,不动 key
- 手工 edit
.env + auth.json — hermes auth 不可用或版本太旧时(参 references/auth-troubleshooting.md)。关键:目前主流版本(0.10.x 及之前)的 _resolve_api_key_provider_secret() 只读 env,不读 credential_pool(issue #15914),所以 .env 和 auth.json 通常需要双写才稳定
hermes setup — 重跑全量 wizard,但 issue #16394 让它在 .env 已有 KEY 行时静默跳过,所以先删 .env 那行再跑
- 重装 venv — 升级到人工
详细资料
references/auth-troubleshooting.md — 401/key 注入失败/setup 静默跳过的全套排查
references/credential-pool-and-rotation.md — hermes auth 子命令、4 种 rotation 策略、池子坑(#15914/#5561/#6907/#7863)
references/fallback-and-rate-limit.md — fallback_providers 链、429 cooldown、模型路由解析链(#15914/#16677)
references/doctor-and-dump.md — hermes doctor 检查项 + hermes dump 用法
references/config-and-paths.md — HERMES_HOME 解析、<home>/ 下每个文件作用
references/provider-switch.md — /model 切换、api_mode 陷阱、profile 配置
references/backup-and-migrate.md — 备份恢复 HERMES_HOME,跨机迁移
templates/triage-checklist.md — 出问题时按这张表逐条排
assets/known-issues.json — 16 条已知 GitHub issues 结构化清单 + 6 个相关 release 摘要
1---2name: hermes-doctor3description: 诊断与抢救 Hermes Agent (NousResearch) 故障 — 401/Authentication Fails、provider 切换后 key 没注入、credential_pool 缺条目、HERMES_HOME 被环境变量重定向、gateway lock、stale config、备份恢复。Windows 优先。覆盖 .env / auth.json / HKCU\Environment / config.yaml profile 四处残留点排查、hermes auth 子命令族(v2026.4.3+)、credential_pool 4 种 rotation 策略、已知 issues4license: MIT5---67# Hermes Doctor — 故障诊断与抢救流程89## 何时触发本 skill1011任一信号即触发:1213- `HTTP 401: Authentication Fails`(尤其是 `your api key: ****xxx is invalid`)14- `Authorization: Bearer no-key-required` 之类**字面占位符**出现在请求 header(用 request_dump 看)15- `hermes setup` 不弹 API key 输入步骤,只显示绿色 ✓16- `/model` 切换 provider 后立刻 401/40417- `hermes doctor` 报红/黄18- `gateway already running` 启动失败19- WAL 文件 > 100MB2021不要等用户描述清楚 — 看到上面任一症状立即载入 references/auth-troubleshooting.md。2223## 第一原则:先确认 HERMES_HOME 在哪2425**Windows 上最容易踩的坑**:`HERMES_HOME` 可能被 HKCU\Environment 重定向到非默认位置(比如 `C:\Users\<u>\AppData\Local\hermes`),而不是 `~/.hermes`。诊断和修复必须先确认真路径,否则你改的是无效文件:2627```bash28echo "$HERMES_HOME" # shell 当前值29reg query "HKCU\Environment" /v HERMES_HOME # 持久化值30hermes dump --redact | head -20 # hermes 自己认的路径31```3233三处不一致就以 hermes dump 输出的为准。Windows 上的常见场景:U-Hermes 等打包发行版会把 HERMES_HOME 写到 `%LOCALAPPDATA%\hermes`(即 `C:\Users\<USER>\AppData\Local\hermes`),让默认的 `~/.hermes` 变成空壳。如果你只改 `~/.hermes` 下的文件而 hermes 没反应,八成就是这种情况。3435## 黄金 5 步排查3637详见 templates/triage-checklist.md。摘要:38391. **定位真 HERMES_HOME**(上一节)402. **跑 `hermes dump --redact`** — 看运行时 provider/key/active_profile/请求 URL/Authorization 的真实样子。这一步常常一眼定位问题。413. **看最新 request_dump** — `<HERMES_HOME>/sessions/request_dump_*.json` 里的 `request.headers.Authorization` 和 `request.url` 是不是符合预期。如果 Authorization 是 `Bearer no-key-required` 或 `Bearer <字面单词>`,说明 key 注入失败,不是 key 本身的问题。424. **排查 4 处残留点**(顺序很重要,从隐蔽到显眼):43 - HKCU\Environment 的 `HERMES_HOME`、`*_API_KEY`(`reg query "HKCU\Environment"`)44 - shell 进程环境(`echo "$DEEPSEEK_API_KEY"` 等)45 - `<HERMES_HOME>/auth.json` 的 `credential_pool.<provider>` 数组(**最容易缺**)46 - `<HERMES_HOME>/.env` 和 `<HERMES_HOME>/config.yaml`(顶层 model.api_key + model_profiles.*.api_key)475. **备份后修复**(详见 references/auth-troubleshooting.md):48 - 永远先 `cp <file> <file>.broken-$(date +%Y%m%d-%H%M%S)`49 - 修完跑 `hermes doctor` 验证,启动 hermes 发 ping5051## 常见症状速查表5253| 症状 | 大概率根因 | 跳到 |54|---|---|---|55| `your api key: ****ired is invalid` | key 是字面 `expired` 或 `no-key-required` 占位符,没注入到 header | references/auth-troubleshooting.md |56| `Authorization: Bearer no-key-required` | credential_pool 缺该 provider 条目 | references/auth-troubleshooting.md §"占位符注入" |57| `hermes setup` 不弹 key 输入 | issue #16394:.env 里有该 KEY 行就静默跳过 | references/auth-troubleshooting.md §"setup 静默跳过" |58| `/model` 切完 404 | issue #3685:api_mode 残留 | references/provider-switch.md |59| `gateway already running` | lock 文件残留 | references/doctor-and-dump.md §gateway |60| WAL 巨大 | response_store/state 数据库未 checkpoint | `hermes doctor --fix` |61| 跨机迁移后全报错 | API key 没在新机重新填,base_url 错 | references/backup-and-migrate.md |6263## 危险动作清单(执行前必须明确得到用户授权)6465只要你打算做下面任一操作,先把动作和影响告诉用户、等他点头,再做:6667- 删 `<HERMES_HOME>/.env` 任一行68- 改 `<HERMES_HOME>/auth.json` 的 credential_pool(可能会让另一些 provider 失联)69- 删 HKCU\Environment 的环境变量(影响所有应用,不只 hermes)70- 跑 `hermes doctor --fix`(会自动改 config 和 symlink)71- 删 sessions/ 或 state.db(无法恢复历史)72- 重新装 hermes-agent(venv 重建)7374## 何时升级到人工7576`hermes dump` 显示运行时 key 与 4 处残留点都对不上 → venv 损坏的可能性 > 90%,建议:77781. 备份整个 HERMES_HOME 到 zip792. 卸载并重装 hermes-agent (`pipx reinstall hermes-agent` 或对应安装方式)803. 重新跑 `hermes setup`814. 把备份的 sessions/ memories/ skills/ 复制回新 HERMES_HOME8283## 排查时优先翻这些地方8485- 真 HERMES_HOME(用 `hermes dump --redact` 或 `reg query "HKCU\Environment" /v HERMES_HOME` 确认)86- Hermes Python 源码 — 诊断时直接读最准:87 - 标准 pip 安装:`<venv>/Lib/site-packages/hermes_cli/`(Win)或 `<venv>/lib/python*/site-packages/hermes_cli/`88 - 打包发行版(如 U-Hermes):`<install-root>/hermes-agent/hermes_cli/`89 - 关键文件:`auth.py`(provider 解析、PROVIDER_REGISTRY、`_resolve_api_key_provider_secret`)、`doctor.py`(`run_doctor`)、`setup.py`(setup wizard)、`env_loader.py`、`runtime_provider.py`90- Hermes CLI 二进制:venv 的 `Scripts/hermes.exe`(Win)或 `bin/hermes`(Mac/Linux)9192## 修复手段优先级9394故障定位后,优先用安全程度高的手段:95961. **`hermes auth` 子命令**(v2026.4.3+,推荐) — `hermes auth add/remove/list/reset`,见 references/credential-pool-and-rotation.md。先 `hermes auth --help` 看你装的版本支不支持972. **`hermes doctor --fix`** — 修 stale config / WAL / symlink,不动 key983. **手工 edit `.env` + `auth.json`** — `hermes auth` 不可用或版本太旧时(参 references/auth-troubleshooting.md)。**关键**:目前主流版本(0.10.x 及之前)的 `_resolve_api_key_provider_secret()` 只读 env,不读 credential_pool(issue #15914),所以 .env 和 auth.json 通常需要**双写**才稳定994. **`hermes setup`** — 重跑全量 wizard,但 issue #16394 让它在 .env 已有 KEY 行时静默跳过,所以先删 .env 那行再跑1005. **重装 venv** — 升级到人工101102## 详细资料103104- `references/auth-troubleshooting.md` — 401/key 注入失败/setup 静默跳过的全套排查105- `references/credential-pool-and-rotation.md` — `hermes auth` 子命令、4 种 rotation 策略、池子坑(#15914/#5561/#6907/#7863)106- `references/fallback-and-rate-limit.md` — fallback_providers 链、429 cooldown、模型路由解析链(#15914/#16677)107- `references/doctor-and-dump.md` — `hermes doctor` 检查项 + `hermes dump` 用法108- `references/config-and-paths.md` — HERMES_HOME 解析、`<home>/` 下每个文件作用109- `references/provider-switch.md` — `/model` 切换、api_mode 陷阱、profile 配置110- `references/backup-and-migrate.md` — 备份恢复 HERMES_HOME,跨机迁移111- `templates/triage-checklist.md` — 出问题时按这张表逐条排112- `assets/known-issues.json` — 16 条已知 GitHub issues 结构化清单 + 6 个相关 release 摘要