scheduled-job-runnerlisted
Install: claude install-skill TechNickAI/hermes-skills
# Scheduled Job Runner
## When to use
Creating, fixing, migrating, or reviewing ANY scheduled job on the fleet — Hermes cron
`script:` jobs, `no_agent` watchdogs, shell wrappers around Python, or a job that is
noisy, silently failing, delivering nowhere, overlapping itself, or missing
dependencies. Trigger phrases: "this job is noisy", "the cron failed silently", "job
output went to the wrong place", "wrap this script for cron", "why did this job not
run", "add a scheduled job", "should this use uv".
## Overview
One execution adapter for every scheduled job. Hermes cron remains the **scheduler**;
`jobrun.py` is the **runner** the job's `script:` field points at. It exists because
scheduled jobs tend to each re-implement the same handful of concerns, badly and
inconsistently, once a setup grows past a few of them.
**Do not build another scheduler.** Do not adopt `cronic` — it exits 0 after a child
failure, which blinds the Hermes failure alert.
### Install the runner first
The runner ships with this skill at `scripts/jobrun.py`. Nothing installs it for
you -- copy it to where your scheduler will find it, then prove it works before
wiring a single job to it:
```bash
mkdir -p "$HERMES_HOME/scripts"
cp scripts/jobrun.py "$HERMES_HOME/scripts/jobrun.py"
chmod +x "$HERMES_HOME/scripts/jobrun.py"
python3 "$HERMES_HOME/scripts/jobrun.py" --selftest # 26 checks, real processes
```
The self-test spawns real processes and asserts real exit codes; it is the gate,
not a smoke