Hermes Agent on a budget: which model for chat, cron and side tasks
Where Hermes Agent spends tokens, how to put a cheap model on cron jobs, side tasks and subagents, and what OpenRouter, Anthropic or OpenAI cost per month.
· ranx.cloud

This is for anyone running Hermes Agent on their own API key who wants the bill to stay predictable. You end up with a strong model where judgment matters (your conversations), cheap models everywhere else (scheduled jobs, context compression, background reviews, subagents), a fallback for outages, and a way to check what each part costs. All settings are on the dashboard's Models, Config and Cron pages.
Settings and defaults are from Hermes Agent v0.22.7. Prices are list prices as of November 2026.
Where the tokens go
Hermes makes model calls from more places than the chat window:
| Consumer | What it does | Default model |
|---|---|---|
| Main model | every chat turn and tool loop | what you pick in Models |
| Cron jobs | scheduled prompts, each a fresh session | the main model, at the moment the job fires |
| Auxiliary tasks | compression, vision, approval scoring, title generation, MCP routing, curator, and more | auto = the main model |
| Background review | after turns, saves memory and patches skills | the main model |
| Subagents | delegate_task children |
inherit the parent |
Everything defaults to the main model. So if you pick a premium model for chat and change nothing else, every summary, title, and scheduled job runs on it too. The rest of this guide moves those to cheaper models one by one.
Step 1: Pick a provider and add the key
Keys go on the Keys page. Hermes calls the provider directly with your key, and you pay the provider.
| Provider | Where to get the key | Variable on the Keys page |
|---|---|---|
| OpenRouter | openrouter.ai/keys | OPENROUTER_API_KEY |
| Anthropic | Claude Console (platform.claude.com) → API Keys | ANTHROPIC_API_KEY |
| OpenAI | platform.openai.com/api-keys | OPENAI_API_KEY |
How to choose:
- OpenRouter: one key, hundreds of models from many vendors, prepaid credits. Easiest if you want to mix vendors (a Claude main model, a DeepSeek or Qwen model for cheap jobs). Hermes also supports OpenRouter's provider routing, for example cheapest host first.
- Anthropic direct: Claude only, but with Anthropic's own prompt-cache pricing, which matters for an agent because the long system prompt and tool list repeat on every call. On Opus 5.5 and Sonnet 5.5 a cache hit costs 5% of the input price.
- OpenAI direct: GPT models only. The small models are very cheap.
You can add several keys. The model picker only lists providers that have a credential.
Reference prices per million tokens, input / output, as of November 2026:
| Model | Input | Output | Source |
|---|---|---|---|
| Claude Sonnet 5.5 | $2.00 | $10.00 | Claude pricing |
| Claude Haiku 5.5 (prompts ≤ 100K tokens) | $0.10 | $0.50 | same |
| GPT-6 Luna | $0.10 | $0.50 | OpenAI pricing |
| DeepSeek V4.1 Flash (OpenRouter) | $0.045 | $0.50 | OpenRouter models |
| Qwen 3.8 Flash (OpenRouter) | $0.15 | $0.47 | same |
Note the Haiku 5.5 condition: a single request whose prompt exceeds 100,000 tokens is billed at $0.50 / $2.50. A long agent session can cross that, which is one more reason to start fresh sessions with /new.
Step 2: Set the main model
Open Models, press Change next to Main model, pick the provider and model, and press Switch. This applies to new sessions; an open chat keeps its model until you use /model inside it.
Use the strongest model you're willing to pay for here. Tool calling quality matters more than benchmark scores: weak tool-callers announce "saved to memory" without calling the tool, or loop on a failed command.
Switch early in a conversation, not in the middle of a long one. The prompt cache is tied to the model, so after a switch the next message re-reads the whole conversation at full input price. Hermes asks for confirmation when the live context is over 100,000 tokens (model.switch_context_confirm_tokens).
Step 3: Move auxiliary tasks to a cheap model
On Models, click Show auxiliary. Each side task is its own slot showing auto (use main model). Either press Change on individual slots, or use the shortcut: find a cheap model's card on the same page, open its Use as menu, and choose All auxiliary tasks.
The slots that matter most:
- Compression summarizes long conversations. It doesn't need reasoning, and on a premium main model it's pure waste.
- Approval decides whether a low-risk command can run without asking you (for the
smartapproval mode). A small model is the right tool. - Title generation names sessions. Use the cheapest model you have.
- Vision only if your main model can't read images.
- Curator reviews agent-written skills and can run for minutes on reasoning models.
Step 4: Give scheduled jobs their own model
Unpinned cron jobs run on whatever the main model is when they fire. Decouple them in Config (search cron, or edit in YAML mode):
cron:
model: "deepseek/deepseek-v4.1-flash"
model_provider: "openrouter"
Every job without its own model now runs on that, and changing your chat model no longer moves your scheduled jobs.
For one job that needs more (a weekly analysis), open it on the Cron page, expand Advanced fields, and set Provider and Model. Resolution order at fire time is: per-job setting, then cron.model, then the main model.
Two more settings on the same form cut cost per run:
- enabled_toolsets: give a news job only
web. Every enabled tool adds its schema to every call. - Script: a pre-run script can print
{"wakeAgent": false}to skip the model call entirely when there's nothing new.
Step 5: Background review and subagents
Neither has a slot on the Models page in v0.22.7. Set them in Config, YAML mode:
auxiliary:
background_review:
provider: openrouter
model: anthropic/claude-haiku-5.5
max_input_tokens: 48000
delegation:
provider: openrouter
model: deepseek/deepseek-v4.1-flash
The background review replays the conversation to decide what to save. On the main model it reuses the warm prompt cache; on a different model it replays a compact digest instead, which Hermes's docs put at 3 to 5 times cheaper. max_input_tokens caps one review's total replayed input.
delegation.model applies to every subagent. If you delegate research fan-outs ("search these five topics in parallel"), this is where most of those tokens go.
Step 6: Add a fallback
If your main provider rate-limits or goes down, Hermes can switch to a backup for the rest of the turn. In Config, YAML mode:
fallback_providers:
- provider: openrouter
model: anthropic/claude-sonnet-5.5
Unpinned cron jobs inherit this chain. A job pinned to its own provider and model does not: if that route fails, the run fails.
If you're on OpenRouter and want the cheapest host for each model:
provider_routing:
sort: "price"
This only affects OpenRouter requests.
What it adds up to
Two worked examples. The token counts are assumptions; replace them with your own numbers from the Analytics page after a week.
Chat: 30 turns a day; each turn makes 3 model calls with a 20,000-token prompt and writes 800 tokens. That's 60,000 input tokens per turn. Assume 80% of the input is prompt-cache hits (the system prompt and earlier turns repeat) and ignore the small cache-write premium:
- Claude Sonnet 5.5: 12,000 × $2/M + 48,000 × $0.10/M + 800 × $10/M = $0.024 + $0.0048 + $0.008 = $0.037 per turn, about $33 a month.
- Claude Haiku 5.5: 12,000 × $0.10/M + 48,000 × $0.01/M + 800 × $0.50/M = $0.0012 + $0.0005 + $0.0004 = $0.0021 per turn, about $1.90 a month.
Scheduled jobs: one daily brief (300,000 input, 4,000 output tokens) plus a check every 2 hours that usually finds nothing (45,000 input, 600 output), with no caching:
- On Sonnet 5.5: 30 × $0.64 + 360 × $0.096 ≈ $54 a month.
- On DeepSeek V4.1 Flash via
cron.model: 30 × (0.3 × $0.045 + 0.004 × $0.50) + 360 × (0.045 × $0.045 + 0.0006 × $0.50) ≈ 30 × $0.016 + 360 × $0.0023 ≈ $1.30 a month.
The scheduled side is where a default setup most often overspends, because it runs whether or not you're looking.
Watching spend
- Analytics shows tokens, cache hit rate, and estimated cost per day and per model for 7, 30, or 90 days. The Models page ranks the models you've used by tokens and cost.
/usagein chat shows token usage for the current session.- The System page can show a breakdown of your system prompt's size (under Operations). Large skill indexes, context files, and MCP tool lists all land there, on every call.
- Hermes's cost figures are estimates and can be wrong or missing for some routes. There are open issues where provider-reported cost is dropped and a session shows $0.00 or "unknown" (#105215, #136583). Treat the provider's own billing page as the source of truth, and set a spending limit there.
What goes wrong
Everything stops when credits run out. A "402 insufficient balance" from the provider is treated as terminal, and there's an open report that fallback providers aren't consulted in that case (#143148). Keep prepaid balances topped up, or turn on auto-recharge on the provider side, if scheduled jobs matter to you.
A cheap model breaks tool use. Symptoms: the agent says it did something it didn't (memory saves, file writes), repeats the same tool call, or answers without searching. Move that consumer back up a tier. Cheap models are fine for compression, titles, and well-specified cron prompts; they're weaker as the main conversational model.
A cron job runs on an expensive model you didn't expect. It's unpinned and follows the main model, and you switched the main model. Set cron.model.
A cron job fails while chat works. The job is pinned to a provider whose key is missing or out of credit, and pinned jobs don't fall back. The job shows blocked_config when the key doesn't resolve; Hermes sends one alert and makes no model call.
A discounted -contributor model fails in cron. These tiers allow the vendor to train on your data, so Hermes asks for confirmation interactively and refuses them in unattended runs unless you set security.allow_data_training_tiers_noninteractive: true. Read the vendor's data policy before you do.
Costs jump after a model switch. The first message after switching re-reads the whole conversation without cache. Switch at the start of a session.
The bill grows with time on Telegram. A messaging chat is one session that can run for weeks, and compression keeps re-summarizing it. Send /new at natural breaks.
On ranx.cloud the instance size doesn't change model spend: model calls go to your provider, so the Hobby plan and the Power plan cost the same per token. Pick the plan for CPU and memory (browser tools and many parallel jobs need more), and the model for the bill.


