Your agents don't crash.
They go quiet — and keep spending.
A green run means the scheduler worked, not that the task got done. RunVouch is the dead man's switch, cost cap and outcome check for Claude Code Routines, headless claude -p, OpenClaw, n8n and cron.
- 02:00 nightly-reportMissed. Expected 02:00, nothing by 02:15missed
- 03:00 inbox-triageExit 0, but no evidence:
digest.htmlunchangedunproven - 03:30 repo-janitorRetry storm:
cat CHANGELOG.md×41 in 4 minloop - 04:00 price-scraper$0.41 · 12 tool calls · output 118 KBvouched
- 05:00 lead-enricher$7.90 this run · daily cap $5 hitbudget
Why "it ran" is the wrong question
$1,800 in two nights
A Max subscriber scheduled overnight Claude Code runs. Nobody noticed until the bill. A per-run cost cap stops this at $2.
$437 for 14,000 identical calls
An agent got stuck on a missing file. Every single call looked normal in the logs; the pattern only exists across calls. That's a retry storm — RunVouch counts them and alerts at 8.
Green run, empty report
The routine "succeeded". The report it was supposed to publish never changed. Ping monitors can't see that. Evidence checks can.
Sources: Claude Code issue #37686, community incident reports 2026. Read the write-ups →
Two lines around any job. Eight detectors behind it.
Register the agent
Name it, set how often it should run, what it may cost, and what proof counts as "done".
rv agent nightly-report \ --cadence 24h --cap-run-cost 2 --evidence
Wrap the run
Cron, systemd, GitHub Actions, a Routine — anything. Exit code, duration, output and evidence are captured automatically.
rv run nightly-report \ --evidence-file out/report.html \ -- claude -p "build tonight's report"
Get told, not surprised
Missed, failed, unproven, looping, over budget, drifting or stalled → Telegram, Slack or any webhook within minutes. Ask your MCP client "are my agents healthy?"
rv status nightly-report ok $0.41 0 alerts
Why a Routine alone isn't enough
"A green status means the routine ran — it does not mean the task in your prompt succeeded." — Claude Code documentation, scheduled tasks
Platforms schedule your agent. None of them tell you it silently produced nothing, looped on a missing file, or crossed a daily budget. That is the whole job of RunVouch — and it works the same for Claude Code, OpenClaw, n8n and plain cron:
Claude Code
RUNVOUCH_AGENT=nightly \ claude -p "build the report"
Plugin hooks report start, tools, cost, stop.
OpenClaw / n8n
rv run inbox-agent --cap-day-cost 10 \ -- openclaw task run inbox
Or two HTTP calls from any workflow.
cron / scripts
0 2 * * * rv run etl \ --evidence-file out.parquet -- python3 etl.py
Zero dependencies. Fails open.
What RunVouch catches vouched
MISSED
Expected run never started. Dead scheduler, expired token, crash before the first line.
FAILED
Non-zero exit or explicit failure, with the last stderr lines in the alert.
NO_EVIDENCE
Run says ok, but the file didn't change, the URL 404s, the assertion is false. Green ≠ done.
RETRY_STORM
Same tool, identical input, N times in one run. The invisible loop that burns money.
BUDGET
Per-run and per-day cost or token caps. Alert, then pause the agent.
DRIFT
Duration or output size off its 7-run baseline. The agent is quietly doing something else.
STALLED
Started, no end, no heartbeat past the max runtime. Hung on a prompt nobody will answer.
COST
Tokens and dollars per run, read straight from Claude Code transcripts. Weekly cost report per agent.
What the alert looks like
no run started for 16 min (cadence 24h + grace). Scheduler dead, auth expired, or agent crashed before first ping.
Works with what you already run
Native Claude Code plugin (hooks report start, every tool call and stop), an MCP server so agents can check on each other, and a zero-dependency CLI for everything else.
Why not Healthchecks, Cronitor or Langfuse?
| Ping monitors Healthchecks · Cronitor | Trace platforms Langfuse · LangSmith · Arize | RunVouch | |
|---|---|---|---|
| Knows the job ran on time | yes | no | yes |
| Knows the job actually did something (evidence) | no | no | yes |
| Detects retry storms across tool calls | no | manual, in traces | automatic |
| Hard cost cap per run / per day | no | dashboards, no cap | yes + pause |
| Setup | 1 URL | SDK in your code | 2 lines or a plugin |
| Built for | ops teams, cron | ML teams debugging prompts | people running agents unattended |
| Price | $0–85/mo | per seat / per million spans | €0 · €9 · €29 |
Detailed comparisons: Healthchecks.io · Cronitor · Langfuse
Pricing
Get your key
Only used to identify your account and match a future subscription. No newsletter, no card. Prices in euro, VAT handled at checkout by Lemon Squeezy; upgrade with the same email you sign up with.
Questions
Why do you need my email for a free key?
Because the key is the account. If you upgrade later, the payment is matched to the same email; if you lose the key, we can rotate it. We don't send marketing mail.
Why 3 agents on the free plan?
Most solo builders run one to three scheduled agents. Free covers that completely, forever. Paid plans are for people who run more — that's the only difference besides history and reports.
Does RunVouch see my prompts or data?
No. It receives what your job reports: start/end, exit status, tool names and a hash of their input (for loop detection), cost/tokens, output size, and true/false evidence results. Evidence checks on files run on your machine; only the verdict is sent.
What if RunVouch is down?
rv run fails open: your job still runs unmonitored and prints a warning. Monitoring must never break the thing it monitors.
Can I self-host?
Yes — the server is a single MIT-licensed Python file with SQLite. The hosted version is the same code plus alerts, backups and the dashboard.
Where does it run?
EU (Netherlands) infrastructure behind Cloudflare. Data stays in the EU.