← Back to blog

The SILENT Pattern: Cut Hermes Cron Costs by Routing Empty Cycles to Zero Tokens

hermescroncost-optimizationsilent-patternmodel-routing
The SILENT Pattern: Cut Hermes Cron Costs by Routing Empty Cycles to Zero Tokens

Running Hermes Agent as a 24/7 operator -- with cron jobs that scan repos, monitor feeds, summarize inboxes, and self-heal across projects -- means the agent is awake even when there is nothing to do. Every hour, every tick, the same routine: load context, check state, determine nothing changed, generate a "nothing happened" response that costs real tokens.

Community builders running 8+ cron jobs report that more than 90% of ticks generate no meaningful output. On those empty cycles, the agent is essentially paying a frontier reasoning model to yawn.

The [SILENT] pattern is a lightweight protocol for routing idle cycles to zero-token exits. Combined with tiered model routing, users have reported ~60% cost reductions on their cron fleets, according to production notes shared by @Gromykoss and @IBuzovskyi.

The problem: paying for silence

A typical cron agent prompt looks like this:

Check the repository for new commits. If there are changes, summarize them. If not, report that everything is quiet.

The agent checks, finds nothing, and responds:

No new commits detected. The repository is up to date. All monitored branches are stable.

That response is 20-30 output tokens. The input context -- system prompt, memory, tool schemas, conversation history -- is 3,000-8,000 tokens. Every hour, across 8 cron jobs, that adds up fast.

At DeepSeek V4 pricing ($0.27/1M input, $1.10/1M output), a single idle tick costs roughly $0.002. Eight jobs per hour means ~$0.38/day just for silence. With a more expensive model like Claude Opus ($15/1M input), that same idle fleet costs ~$28/day.

The [SILENT] pattern eliminates this entirely.

How the SILENT pattern works

The agent is given an explicit instruction: if no action is required, respond with exactly [SILENT] and nothing else. Tools like hermes send and the cron runner intercept this -- when stdout is [SILENT], the delivery layer suppresses the message. No notification, no stored output, and the model call still happens but the blast radius of a non-action shrinks to a single output token.

Prompt template:

You are running as a scheduled cron job.

Context: {state_summary}
Delta since last run: {recent_changes}

Rules:
- If no meaningful action, decision, or output is required: respond with exactly "[SILENT]"
- Only act on clear deltas that match your responsibilities
- If action is needed: output structured results

Current responsibilities: {owned_tasks}

This reduces idle-cycle output from 20-30 tokens to 1. But the input context is still burned. The input is the larger half of the cost for most models.

Tiered routing: stop burning reasoning tokens for checks

The real leverage comes from splitting the workload across models of different capability and cost.

Instead of asking a single powerful model to do everything -- including deciding whether anything needs doing -- route the cheap "should I wake up?" check to a fast, inexpensive model. Only escalate to the expensive model when real work is found.

@Gromykoss describes a three-tier routing system:

Tier 0 (free): A bash or Python pre-check script. Check file modification times, git diffs, unread counts, HTTP status. If nothing changed, exit with [SILENT] before any LLM is invoked.

Tier 1 (cheap): A flash model -- Gemini Flash, DeepSeek Flash, or Claude Haiku. Run the [SILENT] prompt. If the response is [SILENT], stop. Cost: negligible input tokens, 1 output token.

Tier 2 (capable): The full reasoning model. Only invoked when Tier 1 returns a non-silent response indicating real work. This is where planning, multi-step reasoning, and tool calls happen.

Tier Model Input $/1M Output $/1M When used
0 Bash/Python script $0.00 $0.00 Every tick (change detection)
1 Gemini Flash / DeepSeek Flash $0.04-$0.15 $0.15-$0.60 Tier 0 detects change (SILENT check)
2 DeepSeek V4 / Claude Sonnet $0.27-$3.00 $1.10-$15.00 Tier 1 confirms real work
Savings Tier 0-1 routes idle cycles ~60% fewer tokens 90%+ of ticks

The math: what 60% actually means

Take a cron fleet of 8 jobs running hourly on DeepSeek V4, with 90% of ticks being idle:

Before SILENT + tiered routing:

  • Per idle tick: ~5,000 input + ~25 output = 5,025 tokens
  • Per work tick: ~8,000 input + ~500 output = 8,500 tokens
  • Daily: (172 idle x 5,025) + (19 work x 8,500) = 864,300 + 161,500 = 1,025,800 tokens
  • Cost at DeepSeek V4: ~$1.73/day

After SILENT + tiered routing (Tier 1 handles idle checks):

  • Per idle tick (Tier 1 flash model): ~2,000 input + 1 output = 2,001 tokens
  • Per work tick (Tier 1 + Tier 2): flash check (~2,000 + 1) + full reasoning (~8,000 + 500) = 10,501 tokens
  • Daily: (172 x 2,001 x flash pricing) + (19 x 10,501 x V4 pricing)
  • Cost: ~$0.68/day -- a 61% reduction

For Claude Opus users running the same fleet, the savings are more dramatic: from $28/day to about $3/day for idle cycles, an 89% reduction on idle costs.

These calculations assume no Tier 0 pre-checks. Adding bash-level change detection eliminates the model call entirely on cycles where literally nothing has changed -- even the flash model stays asleep.

Five common cron mistakes

@IBuzovskyi catalogued five patterns that inflate cron costs by 5-10x:

1. No wake-agent gate. Every cron tick invokes an LLM, even when a simple file mtime check would show nothing changed. Fix: add a pre-run script that outputs {"wakeAgent": false} on no change. Hermes skips the LLM entirely.

2. Using LLMs for deterministic checks. Checking whether a file changed, an HTTP endpoint is up, or a number exceeds a threshold does not require an LLM. Use --no-agent mode with bash one-liners. Empty stdout = silent, non-empty = deliver.

3. Vague prompts. "Check for updates" is an invitation to generate a paragraph. Be specific: "If file X has changed since timestamp Y, output the diff. Otherwise respond with exactly [SILENT]."

4. Premium models on routine cron. Create a dedicated cron-worker profile that defaults to a cheap flash model. Escalate only when the flash model determines real work exists.

5. No max_turns cap. A confused background agent can burn dozens of full-context turns. Set max_turns: 10-20 per cron job.

Production hardening

The [SILENT] pattern is one piece of a broader production discipline emerging in the Hermes community. @aiedge_ has written about treating Hermes as a long-running operator with persistent memory, scheduled jobs, and a factory controller layer.

Key production practices alongside [SILENT]:

  • Container isolation. Run Hermes in Docker or dedicated VMs. Never give root/sudo. Mount only necessary volumes. One reported incident involved an automation mistake causing a 5-day search shadowban from an external API -- isolation limits the blast radius.

  • Cost guards. Hard limits on actions per hour, token budgets, session time, and spend. Automatic throttling when limits are approached.

  • Self-healing scanner. A meta-cron job that monitors the other cron jobs. If a job fails three times in an hour, demote it, mark it stale, and alert on next successful recovery -- no manual intervention.

  • Audit trail. Log every command, tool call, and decision. Keep git history and snapshots for rollback.

None of this requires changes to Hermes internals. It is all prompt engineering + shell scripts + config.

[^1]: @Gromykoss. "Hermes Agent Production Deployment Thread." X. July 22, 2026. [^2]: @IBuzovskyi. "5 Common Cron Mistakes." X. July 22, 2026. [^3]: @aiedge_. "Hermes Production Patterns." X. July 22, 2026.

Termagotchi
_

Ryan Underdown

Autodidact. Rarely listens to advice.

Follow on X @catamarammed or GitHub @underdown