These are good questions, and ones we had come across. We evaluated about a dozen or so different harnesses before landing on Hermes. It wasn’t the most feature-rich, but because it can learn over time, we thought if we invested the initial time, it would eventually learn how to run our workflows.
Turned out to be true (but certainly not without it’s faults). Hermes runs in several of our production environments, including the DGX Spark. Several things we had to do to mitigate some of the problems with Hermes:
Almost never update – Yes. we don’t need every new feature, we want a working production system. Once a system runs exactly the way we want it to, it’s pretty much locked into to that version, unless it’s a complete revamp (like on the DGX).
MoA – We run MoA on demand, thus only activating it if it’s needed in a conversation, and then we exit back to a single model. For us, that give us the best of both speed and intelligence. Since MoA activates both models as advisors, the judge (Flash-Next) takes in both responses in parallel.
Endless loops – we hit this exactly: a model + MTP speculative decoding combo can fall into a tool-call attractor (one of my agents burned 176 identical calls in 28 min; MTP’s high acceptance rate on boilerplate text locks the repetition in). It’s a model/server-level behavior, not the framework’s fault, meaning it would reproduce on any client. The fix is a client-side hard stop on repeated calls (Hermes has tool_loop_guardrails.hard_stop_enabled: true — we recently enabled to block at 5 identical calls instead of only warning).
Hallucinating – Models get overconfident, that is actually by design funny enough. Even Flash-Next will hallucinate sometimes because technically it’s only 6 billion active parameters at any given moment. You need something like the 27B dense or more, and then, the hallucinates drops off.
The other is the harness and how it’s managed. For examples, Hermes won’t come out of the gate working exactly as expected, but learns over time. While we cannot eliminate hallucinations entirely, with these steps, I have pretty much eliminated 100% of all hallucination problems.
-
- Edit SOUL.md and place how you want the harness to behave (not what you want it to do). Limit it to no more than 1-2 sentences. Here’s mine:
Hermes Agent Persona
You are a professional, smart expert assistant, always willing to learn and better yourself. Be direct, accurate, and efficient in all responses. Prioritize facts, truth and clarity. Always think before you act, and respect boundaries of your scope and when to seek permission.
-
- The other is MEMORY.md, where you say “Always remember…never to/to ask/to verify/to check”, and it will trigger it’s memory to remember. These are valuable lessons for the harness to learn when something goes wrong.
-
- I also created a MIDMEMORY.md. MEMORY.md has a size limit. I found a way to extend the harness memory with this one line in MEMORY.md:
MIDMEMORY.md (~/.hermes/memories/) = overflow tier. DO NOT ERASE. If MEMORY.md full, move secondary items there (write_file — memory tool can't touch it). Read it (read_file) when info not in MEMORY.md. Not auto-loaded.
-
- Ask to verify. When we’re creating workflows, anything Hermes does, we ask it to verify it’s work when it says it’s done.
Hanging – with local llama.cpp backends, this is almost always slot exhaustion or context overflow: the member request errors/waits server-side while the orchestrator blocks forever. Per-member timeouts + treating a timed-out member as “no contribution” fixes 95% of it. In another words, having Hermes do too much while the model’s engine (llama.cpp) couldn’t keep up.
Hangs require more investigation into how Hermes is used. For example, for us we worked out 96K per context, but cut system prompt and tool definitions by 50% so that each call becomes faster/less tokens used per turn.
Model: Qwen3.8-Flash-Next
Window: 98,304 tokens
In use: 58,179 / 98,304 (59%)
██████████████░░░░░░░░░░
Headroom to limit: 40,125 tokens
Auto-compresses at: 73,728 (75%) — 15,549 to go
Compressions this session: 0
Session totals (cumulative across 1 API calls)
Input 58,179 · Output 717 · Reasoning 0
Total billed: 58,896
Throughput, not context size — each call re-sends the window above.
Estimated usage by category
■ System prompt 7,858 tokens 8.0%
▣ Tool definitions 11,049 tokens 11.2%
▦ Subagent definitions 938 tokens 1.0%
▧ Memory 895 tokens 0.9%
▨ Conversation 30,903 tokens 31.4%
· Free space 46,661 tokens 47.5%
Context window: 58,179 / 98,304 tokens (59%)
Use /context all for per-skill and per-toolset costs.