"Hermes talks a lot but doesn't do anything" is a real and annoying problem. The agent responds. It sounds confident, sometimes even promises to run a command. Then nothing happens. No file gets created, no shell command runs, no API gets called. You ask why, it apologises and promises again. Still nothing.
This has 5 or 6 common causes. Below is the order I check them.
Cause 1: Tools are not enabled in the active profile
The most basic and most overlooked cause. The agent literally has no tools to use. List what's enabled:
hermes tools list
If the list is empty or only contains a few read-only tools, that's your problem. Enable what you need:
hermes tools enable shell
hermes tools enable filesystem
hermes tools enable web_browse
Restart your chat session with /new so the tool list refreshes inside the model context. About a third of the cases I see come down to this.
Cause 2: Approval mode is blocking the tool call silently
Hermes has an approval system. Destructive commands need your confirmation before they run. Good safety feature. Problematic when the messaging gateway you're using doesn't surface the approval prompt clearly.
Why this looks like "doing nothing"
The agent invokes the tool. Hermes pauses for approval. The user sees a reply that says "I'll handle this for you now". The user doesn't see any approval prompt because Telegram or Discord rendered it as a normal message. The agent waits forever for the yes that never arrives.
How to check
hermes config get approval_mode
The fix options
If you're using a gateway that can't render approvals well (Telegram is the worst for this), either switch the channel to one that handles approvals (Slack threads work much better) or change approval mode to a less strict setting for that channel. I run strict on my Work profile and a more permissive mode on my Personal one.
Don't disable approvals across the board. The Hermes production hardening guide covers sensible defaults per profile.
Cause 3: Tool is sandboxed or scoped outside the request
The shell tool can be locked to a working directory. The filesystem tool can be read-only by default. The browse tool can have an SSRF guard active. In all these cases the agent will refuse to act but won't always tell you clearly why.
Inspect the tool settings
hermes tools show shell
hermes tools show filesystem
Look at working_directory, allowed_commands, sandbox and similar fields. If your request falls outside the configured scope, the agent describes what it would have done rather than telling you it was blocked. Confusing UX behavior.
The Docker sandbox specific case
If the agent uses Docker as terminal backend and the Docker daemon isn't running on the host (or your user isn't in the docker group), every shell call fails immediately with a generic error. The agent reports "I tried, but it didn't work" without naming the daemon as the cause. Our Hermes Docker sandbox setup covers the daemon, group and socket permissions.
Cause 4: Model is too small to emit tool calls reliably
Smaller models talk about tool use without emitting the structured function call format that Hermes is watching for. The model says something like "I'll run ls /tmp now" as plain text. The text reaches the user. The structured tool call never gets emitted. The tool was never invoked.
Models I've seen this with
- Qwen 7B variants (especially older builds)
- Llama 3.x 8B
- Some MoE models around the 7-14B range
Quick comparison test
hermes chat -q "list files in /tmp" --model anthropic/claude-haiku-4-5
hermes chat -q "list files in /tmp" --model openrouter/qwen2.5-7b-instruct
If the big model runs the tool but the small one just chats about it, you found the issue. Either switch to a larger local model, route tool-heavy work to a hosted provider or accept the tradeoff. Token cost considerations are in our Hermes token costs guide.
Cause 5: SOUL.md is overriding tool behaviour
SOUL.md defines persona. If your SOUL.md tells the agent to "always explain before acting" or "never run destructive commands without explicit confirmation", the model interprets this broadly. Benign tools get refused too. The agent talks instead of acting because that's what its persona told it to do.
How to spot the issue
Read your SOUL.md critically. Anything that sounds like blanket caution gets applied generously. People sometimes write a SOUL.md to make the agent more careful and accidentally make it useless.
For the right way to write SOUL.md and what belongs in AGENTS.md or USER.md instead, see our Hermes memory files guide.
Cause 6: Trailing-message bug in older Hermes
Pre-v0.14 versions had a bug where assistant messages got dropped from state.db before the tool calls inside them were processed. User saw the reply, agent saw a fresh session without context, tool never ran. Symptoms include "I told it to do X yesterday and it still doesn't remember the conversation".
hermes --version
hermes upgrade
If tools start working after the upgrade, that was your bug. Tracked at the Hermes issue tracker.
How I diagnose this when it happens to me
Roughly this order:
- Confirm tools are enabled:
hermes tools list - Run the simplest possible tool test: "create empty file at /tmp/test.txt"
- If step 2 fails, check approval mode and tool scope
- If step 2 succeeds, the issue is prompt-specific, not config
- Try with a different (larger) model to rule out tool-call emission
- Read SOUL.md for over-cautious instructions
- Check Hermes version against the current release
Six checks. Usually one or two of them catches the cause within minutes.
Where messaging gateway issues fit
If the agent works fine in the CLI but appears silent on Telegram, Discord or Slack, the issue is the gateway, not the agent. Check:
hermes gateway status
tail -50 ~/.hermes/logs/gateway.log
Common gateway causes: service stopped, user not on allowlist, token wrong, provider failing behind the agent. Each one has its own fix. See Telegram setup and multi-platform gateway tutorials for the details.
The LumaDock template defaults
If you set up Hermes from scratch and want sensible tool defaults out of the box without picking through every config knob, the LumaDock Hermes Agent template comes with shell, filesystem, web_browse and a few other tools enabled and approval mode set to a reasonable default. Unmetered bandwidth and no setup fees. See the Hermes Agent complete guide for the full template workflow.

