Skip to main content

hermes-cron

❖ Communityv1.2.0★ 5

Operating skill for Hermes cron: lifecycle rules (pause vs disable vs remove, `in 30m` vs `30m`), four ways to avoid needless LLM runs (no_agent, wakeAgent pre-check, monitor, [SILENT]), verify-after-change, a layered runbook and a read-only doctor that complements `hermes cron doctor` and reports one error across several jobs as one scheduler fault. Portable Agent Plugins v1 package (plugin.json + skills/); no tools, hooks, middleware or env vars.

Open in Hermes Desktop
hermes plugins install hermes-cron

Screenshots

README

From the reviewed commit b57e15f ↗; it updates when the author re-pins.

hermes-cron

hermes-cron — safe cron jobs for Hermes Agent

A skill that teaches Hermes Agent to run its cron scheduler like a careful operator: pick the right lifecycle action, keep jobs cheap and quiet, verify every change and find the broken layer when a reminder does not arrive. It ships with a read-only doctor script that complements the built-in hermes cron doctor.

Why

Cron failures in an agent look like success. The tool answers success: true, the record says paused, last_status is ok — and the messages keep coming, or never arrive. Typical causes:

  • a bare 30m was meant as "in 30 minutes" but schedules a job every 30 minutes;
  • the prompt says "send a summary", so the agent sends it and the scheduler delivers it again;
  • deliver: origin points at the chat where the job was created, not at the person it is for;
  • a record with enabled: true and a pause marker never fires, yet the list shows it as scheduled;
  • a pinned model ignores hermes model and skips the fallback chain when its provider is down.

The skill turns each of these into a rule the agent follows, and the doctor makes them visible.

What you get

Part What it does
SKILL.md When to use, lifecycle table, cheap modes, procedure, pitfalls, verification
scripts/cron-doctor.py Read-only health check: scheduler, jobs, delivery, incidents
references/reference.md CLI, cronjob tool fields, schedules, statuses, markers, cron: settings
references/troubleshooting.md Symptom runbook: missed, late, duplicated, misrouted, silent jobs

Wake the model only when needed

Four ways a cron job avoids a needless LLM run

Situation Mode How it stays silent
Text is known in advance; alert watchdog no_agent: true + script empty stdout or {"wakeAgent": false}
Fresh data needed, real work is rare script pre-check last line {"wakeAgent": false}
"Tell me when this changes" monitor (script or URL) unchanged output skips the agent run
The model decides, but not always reports LLM job reply exactly [SILENT]

Debug by layers

Check the scheduler, the job record, the execution, the delivery and other writers in that order

When a job misbehaves, the skill walks the layers top to bottom instead of rewriting the schedule: is the scheduler ticking, is the record consistent, was there an attempt, was the result delivered, and did a sync or deployment overwrite the change.

Install

Pick one. Option 1 is the usual choice: the skill lands in ~/.hermes/skills/ and the agent picks it up from its description.

1. As a regular skill (recommended)

hermes skills install itpartypattaya/hermes-cron/skills/hermes-cron

2. As a portable plugin (Agent Plugins v1 package: plugin.json + skills/)

hermes plugins install itpartypattaya/hermes-cron --no-enable
hermes plugins enable hermes-cron

Plugin skills are read-only and namespaced. They are not listed in the system prompt; the agent finds them through skills_list and loads them with skill_view.

3. Manually

git clone https://github.com/itpartypattaya/hermes-cron.git
cp -r hermes-cron/skills/hermes-cron ~/.hermes/skills/

Use it

Ask the agent in plain words; the skill covers the rest.

  • "Remind me in 30 minutes to call the bank." → a one-shot in 30m, verified, with the exact time.
  • "Pause the morning digest until Monday." → pause, plus who resumes it on Monday — Hermes has no scheduled resume for recurring jobs — and no new duplicate job.
  • "Ping me only if the disk is over 90 %." → a script-only watchdog, tested for silence and for alert.
  • "Why didn't the 9 am report arrive?" → doctor first, then the layer that broke, then the fix.

The doctor

python3 ~/.hermes/skills/hermes-cron/scripts/cron-doctor.py              # all jobs
python3 ~/.hermes/skills/hermes-cron/scripts/cron-doctor.py --job <id>   # one job + recent runs
python3 ~/.hermes/skills/hermes-cron/scripts/cron-doctor.py --json       # for automation
python3 ~/.hermes/skills/hermes-cron/scripts/cron-doctor.py --no-builtin # skip `hermes cron doctor`

Inside the skill the path is "${HERMES_SKILL_DIR}/scripts/cron-doctor.py", so it works wherever the skill is installed. The doctor runs the built-in hermes cron doctor when the CLI is found (PATH, ~/.local/bin or HERMES_BIN) and adds what it does not check:

  • ticker heartbeat and last successful tick, with the PID that wrote the stamp;
  • a one-line count of jobs by state (summary in --json);
  • disabled, paused and half-paused jobs — the built-in check looks at active jobs only;
  • duplicate ids, malformed entries, unknown schedule kinds, no_agent without a script, failure streaks;
  • the delivery outcome of each job's latest completed run and open failure incidents from executions.db (ordered by the real instant, not by timestamp text);
  • the same error in three or more jobs within 24 hours, reported once as a scheduler or host fault (shared_failures in --json). Per-job fields hide it: they reset on the next good run, and a failed dispatch may open no incident at all. Run ids, timestamps and PIDs are masked before grouping; interruptions by a gateway restart are not counted;
  • pinned models and thread-less delivery into chats that use threads.

Without the CLI it performs the basic checks itself. Exit codes: 0 healthy, 1 findings (--job included), 2 unreadable runtime state, 3 invalid arguments or an unknown job; with --json, errors are JSON too.

== Scheduler ==
  heartbeat: 12 s ago, PID 41873
  successful tick: 12 s ago

== Built-in hermes cron doctor ==
  ✓ Cron doctor found no issues
    Checked 5 active job(s).

== Jobs ==
  7 total · 4 enabled · 1 half-paused · 1 paused · 1 completed
  …

== Findings ==
  🔴 3f2a9c1d7e44 "Weekly report": enabled=true with a pause marker — Hermes will not run it,
     yet `cron list` shows it as scheduled; pause or resume it properly

== Notes ==
  ℹ️ 8b1e6d0a2f93 "Nightly digest": pinned model (model-x · provider-y) — does not follow
     `hermes model` and does not use the global fallback chain

Safety and privacy

  • Read-only. The doctor never ticks, runs, edits or removes a job.
  • No network access and no API keys. The only subprocess is the local hermes cron doctor, started as an argument list without a shell. Hermes' own job loader, like every scheduler tick, may repair malformed entries in jobs.json.
  • It reads ~/.hermes/cron/jobs.json, the ticker stamps and executions.db (opened read-only). It writes nothing.
  • The skill registers no tools, hooks or middleware and needs no environment variables.

Compatibility

Written and tested against Hermes Agent 0.21.5:

  • in 30m is one-shot; 30m and every 30m repeat; every monday 9am and weekdays at 9am become cron expressions;
  • jobs follow the main model at fire time unless pinned;
  • a job runs only when enabled is true and it carries no pause marker;
  • the ticker heartbeat is <epoch> <pid> (older <epoch> stamps are still read).

On an older Hermes, check flags with hermes cron create --help before following the examples.

Scope

The skill covers the standard Hermes cron contract and assumes no repository, user, chat, timezone or delivery target. GitOps snapshots, three-way merges, persistent configuration and organization-specific alert routing are out of scope; keep them in a separate local skill loaded alongside this one.

Repository layout

plugin.json                      # Agent Plugins v1 manifest
skills/hermes-cron/
  SKILL.md
  scripts/cron-doctor.py
  references/reference.md
  references/troubleshooting.md
tests/test_cron_doctor.py        # stdlib unittest, no network
docs/                            # images used by this README

Development

python3 -m unittest discover -s tests -v

Issues and pull requests are welcome.

Author

Anton Vaskov — Telegram @passone, GitHub itpartypattaya.

License

MIT

hermes-dreaming❖ Community★ 4

Nightly deterministic memory consolidation ("dreaming"): corroborates candidate facts with what humans actually said on distinct days, proposes the few worth keeping with a verbatim edit anchor, asks whether stale memory entries still hold, and wakes the agent only when there is work — including a memory file close to its char limit. Fact sources: the holographic store, a SQLite or JSONL export, or none. Portable Agent Plugins v1 package (plugin.json + skills/); no tools, hooks, middleware or env vars. Disclosure — scripts make no network or LLM calls and read state.db and the fact store read-only; the user-run installer copies two gate scripts into $HERMES_HOME/scripts, seeds $HERMES_HOME/dreaming.json and creates (or with --rebind re-points) two Hermes cron jobs bound to this plugin's own skill, whose agent runs send recent human messages (up to 200 / 40k chars) and fact snippets to your configured model; state goes to $HERMES_HOME/cache and a diary to $HERMES_HOME/memories/DREAMS.md; memory is changed by the agent through the regular memory tool.

Memory
hermes-field-notes❖ Community★ 1

Field notes for a Hermes install: search known pitfalls before debugging and record new ones with root cause; register every local core edit as a patch note with a declarative checks file, then verify read-only after each hermes update (OK / MISSING / UPSTREAMED / N/A / UNKNOWN with reason) and list core files changed outside the registry. Ships 41 pitfalls and 10 patch recipes verified against 0.21.5. Optional pinned Telegram dashboard edited in place by an hourly no_agent cron job. Portable Agent Plugins v1 package (plugin.json + skills/); no tools, hooks, middleware or env vars; never edits the core or runs patch scripts. Disclosure — its scripts only read the Hermes core (pyproject.toml, read-only git status/diff) and never edit it or run patch scripts; the skill does walk the agent through hand-editing core files from its patch recipes and re-running the owner's re-apply scripts, each only after the user says yes. Network: Telegram Bot API only when the dashboard is enabled (reuses the agent's TELEGRAM_BOT_TOKEN from env or ~/.hermes/.env), and the public GitHub API without credentials (latest release plus compare against the installed commit SHA, cached 12 h; upstream.check=false disables). Writes: the notes store (~/.hermes/field-notes), ~/.hermes/field-notes.json, state and lock files in ~/.hermes/cache, a copy of the cron script in ~/.hermes/scripts when install.py runs (the skill runs it on first use), and one hourly no_agent cron job only when the user runs install_cron.py.

Tools

← Back to the catalog · catalog built Oct 8, 2026