Docs › OpenClaw cron job monitoring with RunVouch
OpenClaw cron job monitoring with RunVouch
OpenClaw cron job monitoring from outside the gateway: openclaw automations create "0 7 * * *" (the openclaw cron alias still works) runs an agent turn on a schedule, in the main session or an isolated one. When the gateway is down at fire time, or the job has been auto-disabled after ten failures, the schedule is a line in a list that nobody reads.
How it runs on OpenClaw automations and heartbeat
Two layers. A host cron line wraps a health probe of the gateway so the whole instance has a heartbeat. Per job, the RunVouch skill makes the agent report start, tool calls and end with evidence; for a task that runs a script, the verified-run skill wraps it with the output file as evidence.
Store the key
RUNVOUCH_KEY in the OpenClaw gateway environment (the skill reads it there) and in the host crontab environment for the heartbeat line.
Wrap the job
# 1. the instance: a heartbeat every 15 minutes from host cron (MISSED if the gateway stops answering)
rv agent openclaw-gateway --cadence 15m --grace 5m --cap-day-cost 10
*/15 * * * * rv run openclaw-gateway -- curl -fsS http://127.0.0.1:18789/health
# 2. a scheduled job, isolated session, announced to the chat
openclaw automations create "0 7 * * *" --name "Morning inbox triage" --session isolated --announce \
--message "Triage overnight mail per SKILL.md runvouch: report start, each tool call and the end with evidence."
rv agent openclaw-inbox --cadence 24h --grace 1h --evidence --cap-run-cost 1
# the skill makes the agent do this itself
curl -s -X POST https://api.runvouch.com/v1/runs/start -H "X-API-Key: $RUNVOUCH_KEY" -H "content-type: application/json" \
-d '{"agent":"openclaw-inbox","source":"openclaw"}'
curl -s -X POST https://api.runvouch.com/v1/runs/end -H "X-API-Key: $RUNVOUCH_KEY" -H "content-type: application/json" \
-d '{"run_id":"...","status":"ok","cost":0.21,"evidence":{"replied":true}}'
# 3. check what OpenClaw itself recorded
openclaw automations runs --id <jobId> --limit 20rv fails open: if RunVouch is unreachable the job still runs and you get one warning line.
Register the cadence and caps
rv agent nightly-report --cadence 24h --grace 30m --max-runtime 1h --evidence --cap-run-cost 2
Register the agent once, from anywhere with the key. Cadence is what turns a schedule that stopped into an alert; --evidence makes a run without evidence a failure; the caps pause the agent when it overspends.
What goes silent on OpenClaw automations and heartbeat
- A time-based recurring job is auto-disabled after 10 consecutive execution failures; the disable notification goes to the configured channel once. MISSED keeps firing until the job runs again.
- A job that fires while the gateway is restarting has no run record;
openclaw automations runsshows nothing for that slot. - An agent that polls a tool in a loop inside one turn is RETRY_STORM once the skill reports tool calls, and BUDGET_DAY when the daily cap is crossed; OpenClaw has per-script tool budgets (
--script-tool-budget) but no money cap. - The reply it announced to the chat is not evidence; the reply that was actually sent (
{"replied": true}from the tool result) is.
What OpenClaw automations and heartbeat does not tell you
OpenClaw keeps a run history per job (openclaw automations runs --id) and disables a recurring job after ten consecutive failures with one notification. It does not notify when a job fired into a gateway that was down, when a disabled job stays disabled, or when the agent finished its turn without doing what the prompt asked. openclaw system heartbeat last shows the last heartbeat time to whoever runs it; nothing calls you when that time stops moving.
What RunVouch detects
| Alert | What it means here |
|---|---|
| MISSED | cadence plus grace passed and no run started |
| FAILED | non-zero exit or a reported failure, with the stderr excerpt |
| NO_EVIDENCE | the run said ok but the file, URL or assertion you required is missing |
| STALLED | a run started and never ended within max runtime |
| RETRY_STORM | the same tool called with identical input many times in one run |
| BUDGET_RUN / BUDGET_DAY | cost cap crossed; the agent is paused until you resume it |
| DRIFT | duration or output size far off its 7-run baseline |
Set up in two minutes
- Get a free key (3 agents, no card) and store it where this page says.
- wrap the job: copy the snippet above into the scheduled job.
- Register the cadence once:
rv agent nightly-report --cadence 24h --grace 30m --evidence, or let the first run create the agent and set the cadence on the dashboard. - Send one test alert:
curl -X POST https://api.runvouch.com/v1/settings/test-alert -H "X-API-Key: $RUNVOUCH_KEY". The next missed, failed or empty run reaches the same channels.
Also running schedulers?
GitHub Actions schedule. Kubernetes CronJob. systemd timers. GitLab CI scheduled pipelines. The full list of runtimes is on integrations, and the same agent can report from several of them: one job, one cadence, wherever it happens to run.
Need a key? Get a free key · Stuck? contact