Know your agents did the job
before the bill tells you they didn't.
A green run means the scheduler worked, not that the task got done. RunVouch watches agents that run while you sleep and tells you when a run is missed, fails quietly, loops, or blows its budget. Works with Claude Code Routines, headless claude -p, OpenClaw, n8n and cron. When it went right, you get a record you can verify without us.
- 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
"It ran" is the wrong question
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.
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 ($1,800+ in two days) · "I let my AI agent run overnight, it cost $437". 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, Discord, Teams or any webhook within minutes. Ask your MCP client "are my agents healthy?"
rv status nightly-report ok $0.41 0 alerts
Prove what your agent did, to anyone
An alert tells you tonight. A proof tells an auditor, a customer or your future self next year. Every finished run gets one, on every plan, Free included.
A record per run
When a run ends, its facts (agent, start, end, status, cost, tokens, tool calls, evidence verdicts) become one JSON object and a sha256 leaf. Written once, never updated.
A public daily chain
Every UTC day the leaves of all runs form a Merkle root, chained to the previous day. The day file is public at api.runvouch.com/proof/, no login.
A Bitcoin anchor
Each day file is stamped with OpenTimestamps, so its existence is committed in a Bitcoin block. Check it with ots verify; no RunVouch code involved.
rv proof RUN_ID --verify # recomputes the leaf and the Merkle path against the public day file, exit 0 or 1
Verify a real run in your browser, no account: recompute the hashes and edit a field to watch it break. Who needs this: verifiable agent runs · the mechanism, byte for byte: docs/proof
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
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 recent baseline, and outside the range this job has actually produced. 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.
PROOF
Not a detector but a receipt: one hashed record per run, written once, that an auditor can check with a standalone script. Verify it yourself.
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.
Nothing to watch yet? Start from a ready-made agent on official data: a nightly 13F digest, Form D raises in your sector, or a weekly competitor hiring watch, each with evidence built in.
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 | threshold alerts, 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 · $19 · $99 |
Detailed comparisons: Healthchecks.io · Cronitor · Langfuse
The alert is free. The brake is $19.
Free
- 3 agents
- All 8 detectors
- Email, Telegram, Slack, Discord, Teams & webhook alerts
- A cost cap alerts you, the agent keeps running
- 7-day history
- Verifiable proof per run
Solo
- A cost cap that refuses the next run
- 50 agents
- 90-day history
- Weekly cost report
- MISSED and FAILED alerts sent every time, no 10-minute cooldown
- Verifiable proof per run
Team
- 1000 agents
- 90-day history
- API export (CSV / JSON) for audits
- Read-only dashboard for teammates (viewer keys)
- PagerDuty incidents
- Verifiable proof per run
Running these jobs for clients instead of yourself? What an agency shows the client.
Get your key
Only used to identify your account and match a future subscription. No newsletter, no card. Prices in USD, VAT handled at checkout by Polar; 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.
What does $19 buy that Free does not have?
The brake. On every plan a cost cap alerts you the moment a run crosses it. On Solo and Team the next run is refused as well, so a loop that bills by the token stops instead of running until morning. Free is three agents, all eight detectors and every alert channel, so you can see what RunVouch does before you pay for it.
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.