Cross-component diagnosis Independent guide
Hermes Agent troubleshooting
Isolate which component failed, run the check that proves it, verify recovery, and escalate with a reproducible report.
Diagnose by component, not by guesswork. Capture the exact error text and your version first, run hermes doctor,
then use the symptom table below to identify which layer failed — installation, provider, configuration, tools,
gateway, or platform — and test only that layer. Reinstalling before you have isolated the failure destroys the
evidence and usually changes nothing.
Checked against Hermes Agent v0.20.5 on . Re-check when documented error messages, diagnostic commands, or log locations change in a release.
Diagnose Hermes Agent by component
Work top to bottom. Each row tells you what to suspect and which check settles it.
| Symptom | Suspect component | Check | Expected result | If it still fails |
|---|---|---|---|---|
| hermes: command not found | Shell PATH, not the installation | Open a new terminal, or run source ~/.bashrc (or ~/.zshrc) | hermes --version prints a version | Reinstall from the installation guide |
| The agent starts but every request errors | Provider authentication or model identifier | hermes doctor, then hermes model | The provider authenticates and a model list appears | Rotate or re-enter the credential at the provider |
| A setting you changed has no effect | Configuration precedence | hermes config get <key> | The resolved value matches what you set | Find the higher-priority source that is overriding it |
| The model answers but never calls a tool | Toolsets, or tool calling on the endpoint | hermes tools, and confirm tool-calling flags on a self-hosted server | The needed tool is enabled and tool activity appears | Switch to a model documented to support tool calling |
| Commands are refused or blocked | Approval mode and deny rules | Read the refusal text; check approvals.mode and approvals.deny | The block is explained by a rule you set | Narrow the deny pattern, or approve the specific command |
| The bot does not respond in a chat platform | Gateway process or user authorization | hermes gateway status, then read ~/.hermes/logs/gateway.log | The gateway is running and the sender is authorised | Add the user to an allowlist or approve a pairing code |
| It worked yesterday and not today | A release change or an expired credential | hermes --version against the release notes; re-check provider status | Either the version changed or the credential expired | Roll back to the previous release, or renew the credential |
Source: Nous Research FAQ and Troubleshooting and CLI reference, checked 25 August 2026 against v0.20.5.
Capture version, environment, and exact error
Do this before changing anything. Without it you cannot tell whether a change helped.
hermes doctorExpected result: A full diagnostic report covering configuration, dependencies, provider authentication, and backend availability.
Source: Nous Research FAQ and CLI reference, checked 25 August 2026
hermes dumpExpected result: A copy-pasteable setup summary suitable for a support thread or issue report.
Review the output before sharing it. Redact anything environment-specific you did not intend to publish.
Source: Nous Research CLI reference, checked 25 August 2026
hermes logsExpected result: Recent agent, gateway, and error log entries.
Source: Nous Research CLI reference, checked 25 August 2026
Record four things every time: the exact error string, whether it reproduces, what changed immediately before it started, and your Hermes Agent version.
Installation failures
Documented symptoms and their causes:
hermes: command not found— the shell has not reloadedPATH. Open a new terminal or re-source your shell profile. This is not a failed install.- Python version too old — Python 3.11 or newer is required. Check with
python3 --version. node: command not foundeven though Node is installed — a login shell that does not source the file where your version manager registers itself. The documented fix is to list the relevant files underterminal.shell_init_filesinconfig.yaml.uv: command not found— the Python package manager is not installed; install it, then re-run the installer.- Permission denied during install — do not reach for
sudo; re-run the standard per-user installer.
If the installer itself will not complete, or you need to change method entirely, go to reinstall or repair installation.
Provider and authentication failures
- API key not working — re-run
hermes model, or set the key explicitly withhermes config set. - Model not found or not available — the identifier does not match what the provider serves; list what is
available with
hermes model. - 429 rate limiting — wait, switch model or provider, or raise the plan limit.
- Context length exceeded — compress the session, start a fresh one, or set
context_lengthexplicitly for endpoints that misreport it. Error 400on the first run — usually a model-name mismatch or a key without access to that model. Verify the resolved configuration, then re-run the provider picker.- Only one provider appears under
/model— you can only switch between providers already configured; exit and runhermes modelfrom the terminal to add one.
The setup steps behind each of these belong to provider authentication checks.
Configuration failures
Resolve in this order:
hermes config get <key>— what value actually won?- Which source set it: a command-line flag,
config.yaml,.env, or a default? hermes config check— is anything missing after an upgrade?hermes config migrate— add newly introduced options interactively.
If a file edit did not take effect, the usual cause is precedence rather than syntax. The full precedence table and the safe-editing procedure are in validate configuration.
Tool, sandbox, and terminal failures
- A tool is not available at all — it is not in an enabled toolset. Check with
hermes tools. - Commands are blocked — approval mode or a deny rule refused them. Read the refusal, and remember that the hardline blocklist applies regardless of mode.
- The Docker backend will not connect — the daemon is not running or your user lacks permission. Confirm with
docker info. sudodoes not work through a messaging gateway — the gateway has no interactive terminal, so a password prompt cannot be answered.- MCP server not connecting — the binary or endpoint is unreachable, or the runtime is missing. Verify the server runs standalone first.
- MCP tools missing after connecting — discovery failed or your include/exclude filters removed them; reload with
/reload-mcp.
Dashboard and gateway failures
- Gateway will not start — missing optional dependencies, a port conflict, or a misconfigured token. Check the
port and read
~/.hermes/logs/gateway.log. - Bot not responding — confirm the gateway is running with
hermes gateway status, then confirm the sender is authorised. With no allowlist configured, every user is denied by design. - Messages not delivering — expired platform token, network path, or webhook misconfiguration.
- Gateway keeps dropping under WSL2 — documented as systemd unreliability in WSL; run it in the foreground or under a terminal multiplexer instead.
- macOS: Node.js or ffmpeg not found when run by the gateway — the service captured a minimal
PATH; re-run the gateway install so it re-snapshots the environment.
Windows and Docker failures
Platform-specific paths, kept short because their owners carry the detail:
- Windows —
WinError 193means a Node tool needs its.cmdshim; encoding artefacts point at the console host; a stalled browser tool usually means Chromium provisioning failed. - Docker — configuration that resets between runs means the volume is not mounted at
/opt/data; a crashing browser tool means shared memory or container RAM is too low; corrupted state usually means two gateways shared one data directory. - Docker updates —
hermes updateis not supported in a container; pull a new image and recreate the container.
Verify recovery
A fix is not confirmed until all four pass:
-
hermes doctorcompletes without the original error. - The exact failing action now succeeds — the same command, not a simpler one.
- A tool-using task shows real tool activity.
- The result survives a restart, and a fresh session behaves the same way.
Create a reproducible issue report
If it still fails, make it easy for someone else to reproduce:
- Hermes Agent version (
hermes --version) and how you installed it. - Operating system and version; note WSL2 or a container if relevant.
- Python version (
python3 --version). - The exact error string, copied rather than paraphrased.
- Minimal steps to reproduce, starting from a fresh session.
- What you already tried and what changed.
- Relevant log excerpts from
~/.hermes/logs/, with secrets removed.
hermes dump assembles most of that for you; hermes debug packages logs and system information. Review both for
sensitive values before posting, then file the report on the project's issue tracker.