Hermes Auxiliary Models: Stop Paying Opus Prices for Summaries

Hermes Agent runs 11 background tasks that don't need a reasoning model: context compression, image analysis, web page summarization, session title generation, command approval classification, MCP tool routing, skill search, and several others. By default, every one of these uses your main model -- the same model that handles your actual conversations and reasoning.
If you pay for Claude Opus, MiniMax M2.7, or another expensive reasoning model, this means your context-compression summaries burn the same cost-per-token as your most demanding analytical work.
The fix is already in your ~/.hermes/config.yaml. It's the auxiliary block.
What gets offloaded
Hermes defines 11 auxiliary task slots. Each one can be configured independently with its own provider, model, timeout, fallback chain, and reasoning effort.
| Task | What it does | Default behavior |
|---|---|---|
| compression | Summarizes old messages when context fills up | Main model |
| vision | Analyzes images from vision_analyze and browser screenshots | Main model |
| web_extract | Summarizes web pages fetched by web_extract | Main model |
| title_generation | Auto-generates session titles | Gemini Flash (already overridden by default) |
| approval | Classifies command risk for smart approval mode | Main model |
| skills_hub | Semantic skill matching and search | Main model |
| mcp | Routes tool calls to MCP servers | Main model |
| triage_specifier | Expands one-liner Kanban tasks into specs | Main model |
| kanban_decomposer | Breaks down Kanban tasks into subtasks | Main model |
| tts_audio_tags | Inserts Gemini 3.1 TTS hidden audio tags | Main model |
| profile_describer | Generates profile descriptions for messaging | Main model |
The Hermes docs are explicit about when to override:
"Compression -- When you're burning reasoning tokens on Opus/M2.7 just to summarize context. A fast chat model does the job at 1/50th the cost."
A typical Claude Opus 4.7 request costs roughly 50x what a Gemini Flash request costs per token. Summarizing a long conversation for context compression involves processing tens of thousands of tokens. That difference compounds across every session.
Configuration
Two approaches. The interactive method:
hermes model
# Select "Configure auxiliary models"
# Check the tasks you want to override
# Pick a model -- Gemini Flash, GPT-4o-mini, Haiku
Or edit ~/.hermes/config.yaml directly:
auxiliary:
compression:
provider: openrouter
model: google/gemini-3-flash-preview
vision:
provider: openrouter
model: google/gemini-2.5-flash
web_extract:
provider: openrouter
model: google/gemini-3-flash-preview
approval:
provider: openrouter
model: anthropic/claude-3.5-haiku
To assign one flash model to every auxiliary slot at once:
curl -X POST \
-H "Content-Type: application/json" \
-H "X-Hermes-Session-Token: $TOKEN" \
-d '{"scope":"auxiliary","task":"","provider":"openrouter","model":"google/gemini-3-flash-preview"}' \
http://localhost:PORT/api/model/set
Per-task reasoning effort
Each auxiliary slot accepts a reasoning_effort parameter independent of your main model's setting. If you run Opus with reasoning_effort: high, your compression and vision tasks inherit that -- unless you override:
auxiliary:
compression:
provider: openrouter
model: google/gemini-3-flash-preview
reasoning_effort: none
vision:
provider: openrouter
model: google/gemini-2.5-flash
reasoning_effort: low
Setting none or low for summarization tasks avoids burning reasoning tokens on jobs that output one or two paragraphs.
Fallback chains
Each auxiliary task supports its own fallback chain. If the primary model rate-limits or fails, Hermes walks the chain:
auxiliary:
compression:
provider: openrouter
model: openai/gpt-4o-mini
fallback_chain:
- provider: nous
model: deepseek/deepseek-chat
- provider: openrouter
model: google/gemini-3-flash-preview
When auto is the provider, Hermes uses the main model but falls back through the top-level fallback_providers chain, then a built-in auxiliary discovery chain. Adding an explicit fallback_chain to a specific task overrides that sequence for that task only.
When the main model makes sense
Not every task benefits from a cheaper model. If your main model is already a flash-tier model (Gemini Flash, GPT-4o-mini, DeepSeek Chat), the savings from overriding auxiliary slots are marginal. The Hermes docs specifically flag approval as a case where a cheap model is always the right call -- it does binary classification and doesn't need reasoning depth -- but a $0.10/M flash main model negates the need for overrides on most auxiliary slots.
The largest savings come when your main model is an expensive reasoning model and your agent runs long sessions with frequent compression, heavy web extract usage, or many vision calls.
Where this fits
This isn't a new feature -- the auxiliary model system has been in Hermes for multiple releases. The recent discussion on X reflects a shift in community understanding: power users moving from "everything on Opus" to deliberately routing side tasks. The token-diet CLI (covered yesterday) addresses the "how much context am I burning" question. Auxiliary model configuration addresses the "how much am I paying per context" question. Together they form a two-layer cost optimization: reduce the tokens sent, then reduce the cost of the tokens that remain.
[^1]: Hermes Agent. "Configuring Models." Hermes Agent Documentation. [^2]: Hermes Agent. "Web Search & Extract." Hermes Agent Documentation. [^3]: Hermes Agent. "Configuration." Hermes Agent Documentation.