Hermes Cron Cost · read-only CLI

See what each Hermes cron job actually costs

Hermes Cron Cost reads the records your Hermes Agent already keeps and prints, for every cron job: how many times it ran, how many runs failed, input and output tokens, average tokens and cost per run, and total cost. Hermes's own /usage and /insights report per session and overall; neither breaks spend down by scheduled job.

Run in a terminal on the machine where Hermes runs
bash
$npx @hermesagentai/cron-cost
  • Cost and tokens per cron job, not per session
  • One local command, no install step with npx
  • Read-only: never writes Hermes files or runs jobs
  • No account, no network calls, no telemetry
  • Never reads prompts, responses, or memory
  • Honest coverage: says which runs it could not analyze

Checked against official Nous Research sources on September 26, 2026 (Hermes Agent v0.21.5).

What the report looks like

Illustrative output — generated from test fixtures, not a real installation
text
Hermes Cron Cost
Profile default · ~/.hermes
Last 30 days (Aug 27, 2026 – Sep 26, 2026)
Analyzed 117 / 119 observed cron runs (98.3% had attributable usage data)
JOB RUNS OK FAIL INPUT OUTPUT AVG TOKENS AVG COST TOTAL COST
Morning AI Brief 29 28 1 870k 61k 42,110 ~$0.19 ~$5.51
GitHub Monitor 89 85 4 679k 44k 8,304 ~$0.04 ~$3.36*
Weekly Research 1 1 0 100k 11k 111,402 included included
RUNS = finished executions or surviving sessions, whichever is larger (they are not paired per run).
AVG columns use only runs with usage (tokens) or fully known cost (cost).
Measured cost: ~$8.87* (~ = Hermes estimate from its pricing data)
1 run used subscription-included routes (no per-call invoice; those calls count as $0).
2 runs could not be analyzed:
- 2 had an execution record but no surviving Hermes session
* 3 analyzed runs had tokens Hermes could not price; their tokens are counted, their cost is not.

The numbers above are sample data. Your report reads only your own Hermes records. In this sample, GitHub Monitor has 89 finished executions but only 87 surviving sessions, so its token and cost averages come from those 87 runs, and the 2 runs without a session are listed under “could not be analyzed” instead of being filled in with guesses.

Reading the report

ColumnMeaning
RUNSObserved finished cron runs in the window (see below).
OK / FAILCompleted and failed executions from Hermes's execution log (cron/executions.db).
INPUT / OUTPUTInput and output tokens, from runs that have usage accounting.
AVG TOKENSAverage total tokens (input + output + cache read + cache write) per run with usage data.
AVG COSTAverage cost per run whose cost is fully known.
TOTAL COSTSum of known costs, marked with its cost type. A trailing * means some runs had tokens Hermes could not price, so the total is a floor.

What RUNS means

Hermes writes two separate records for a cron run: an execution entry (job ID, status, time) and an agent session with the token and cost accounting. It does not store a link between the two, so Hermes Cron Cost does not pretend to pair them. RUNS is the larger of the job's finished executions and its surviving attributed sessions in the window. Sessions are matched to jobs only through the cron_<job_id>_<timestamp> session ID that Hermes's scheduler assigns. Compression continuations and delegated subagents are counted as part of the same run through Hermes's own parent-session links. Sessions it cannot map are counted as unattributed, not guessed.

What coverage means

Coverage = runs with usage accounting ÷ observed runs. It tells you how much of the run population the token and cost figures actually describe. The report names each gap:

  • No surviving Hermes session: the execution is recorded but its session is gone or never existed (script-only or blocked runs, pruned sessions, runs that started just outside the window).
  • Session but no usage accounting: the run left a session, but Hermes recorded no token usage for it.
  • Unrecognized session ID: a cron session whose ID does not match the scheduler's pattern.

Missing runs are never extrapolated. At 50% coverage, the totals describe half the runs. Do not read them as a projection for the rest.

Actual, estimated, included, and unknown cost

Hermes Cron Cost has no pricing engine of its own. It reports the cost Hermes already stored and keeps each kind distinct:

TypeShown asWhat it means
Actual$0.42A real billed cost reported for the call.
Estimated~$0.42Hermes calculated the cost from its own pricing data. The ~ is the same marker Hermes uses.
IncludedincludedA subscription-included route with no per-call invoice. It counts as $0 in totals and is labeled so it is not mistaken for free API usage.
UnknownunknownHermes has no usable pricing for the call. Tokens are counted, cost is not, and it is never shown as $0.

A job whose runs mix billed and estimated costs shows its total with ~. A run counts toward AVG COST only if every call in it has a known cost.

What it reads, and what it never touches

Hermes fileUsed for
state.dbCron sessions, their parent-session links, and token and cost columns
cron/executions.dbJob ID, status, and time of each execution: run, success, and failure counts
cron/jobs.jsonJob ID and name only
  • Never reads message text, prompts, system prompts, responses, error text, session titles, or memory. It does not read API keys or environment-variable values.
  • Read-only: SQLite files are opened read-only with PRAGMA query_only. It never writes Hermes files and never runs Hermes, a cron job, or a model.
  • Nothing leaves the machine: no network calls, no telemetry, no account.

It analyzes ~/.hermes for the default profile and ~/.hermes/profiles/<name> for a named one. It honors HERMES_HOME and picks the active profile the same way Hermes does.

Options

hermes-cron-cost options
bash
$npx @hermesagentai/cron-cost # last 30 days, active profile
$npx @hermesagentai/cron-cost --days 7 # different analysis window
$npx @hermesagentai/cron-cost --profile work # a named Hermes profile
$npx @hermesagentai/cron-cost --json # full report as JSON

--json prints the same report with every population count (observedRuns, sessionRuns, runsWithUsage, runsWithCompleteCost), the coverage gaps, the cost basis, and the status of each data source. Unknown cost is null, never 0. A run belongs to the window if its session started inside it.

Validated against real Hermes cron history

The acceptance test ran a small canary cron job on Hermes v0.21.5 (build v0.21.5+2961.g436b904) and compared every reported number with Hermes's persisted records. They all matched:

MeasureResult
Observed runs4 (2 completed, 2 failed)
Surviving cron sessions3
Runs with usage accounting2 (50% coverage)
Measured tokens (2 successful runs)36,875
Cost typeIncluded (subscription route)
Not analyzed1 failed execution with no surviving session; 1 failed run with a session but no usage accounting

SHA-256 hashes of the relevant Hermes files were identical before and after the analysis. The only exception was SQLite's shared-memory file, which any read-only reader touches while Hermes has a live write-ahead log.

Not tested by this site: Four runs of one canary job prove correctness, not typical cost. They are not a pricing benchmark. Your job's cost depends on its model, prompt, tools, and schedule.

Compatibility and limitations

  • Node.js 22.18 or newer is required. The CLI uses the built-in node:sqlite and has no runtime dependencies.
  • Tested schema: Hermes v0.21.5. On older schemas without the usage or cost tables, the report degrades and prints a warning instead of failing.
  • Run it where the Hermes data lives. On a VPS, run it there. With the official Docker setup, the host's mounted ~/.hermes works. Managed hosting without shell access to the Hermes home cannot be analyzed.
  • Execution history is finite. Hermes keeps the most recent finished executions (about 1,000), so long windows on very busy installs can undercount OK and FAIL.
  • Real billed dollar costs have not been validated on a live install yet. Actual and estimated handling is covered by automated fixtures and data written by Hermes's own code.
  • Not yet seen in the live acceptance test: compression continuation sessions, delegated subagent sessions, and a gateway firing the job on schedule. Fixtures cover the first two.
  • If you resume a cron session and keep chatting in it, those later tokens land in the same session and are counted too.

Use it from an AI agent

A Hermes Cron Cost Agent Skill is published on this site. It teaches Hermes, Claude Code, Codex, and other agents to answer “what are my cron jobs costing?” from --json output. It keeps actual, estimated, included, and unknown costs apart, reports coverage gaps instead of extrapolating, and does not open transcripts, prompts, memory, or keys.

Install the skill
bash
$npx skills add https://www.hermesagentai.org --skill hermes-cron-cost

Read it first: SKILL.md (listed in the skills index).

Common questions

How much does a Hermes cron job cost?

It depends on the model, how much context the prompt and tools pull in, and how often the job runs. Each agent run is a fresh Hermes session, so a job that fires every hour pays for 24 full agent turns a day. Script-only (--no-agent) jobs use no tokens. The reliable answer is to measure your own jobs, which is what this tool does.

Does Hermes show token usage per cron job?

Not as a per-job report. /usage covers the current session and /insights summarizes recent usage overall. The official cron docs do not document a per-job cost view. Hermes does store what is needed, and Hermes Cron Cost connects it to each job.

Why is a cost “unknown” instead of $0?

Because Hermes had no price for that model or route. Showing $0 would understate your spend. Check the provider's own usage dashboard for those calls.

Why doesn't RUNS equal OK + FAIL?

RUNS can be higher when more sessions survive than finished execution records (for example, after execution history rotated). OK and FAIL come only from execution records. See what RUNS means.

How do I make an expensive job cheaper?

Measure first, then decide. The common levers are on the Hermes cron page: a cheaper cron.model or per-job model pin, a pre-run script that skips the model when nothing changed, a script-only job, or a less frequent schedule. Models and Hermes cost cover provider pricing.

Is this an official Nous Research tool?

No. Hermes Cron Cost is an independent Hermes ecosystem utility from HermesAgentAI.org. It is not made, endorsed, or supported by Nous Research.

Package and source

Status
npm package@hermesagentai/cron-cost
Sourcegithub.com/fiz-is/hermes-cron-cost
Commandhermes-cron-cost
RequiresNode.js 22.18+, a local Hermes Agent home

Primary sources

HermesAgentAI.org is an independent educational documentation resource and community guide. It is not affiliated with, sponsored by, or endorsed by Nous Research or FlyHermes. Hermes Agent is released under the MIT License by Nous Research.

Where to go next