{
  "markdown": "<p align=\"center\"><img src=\"https://runvouch.com/logo-400.png\" width=\"96\" alt=\"RunVouch\"></p>\n<h1 align=\"center\">RunVouch</h1>\n<p align=\"center\"><b>The watchdog for unattended AI agents: proof they did the job, and an alert the moment they don't (or start spending), with a tamper-evident proof per run.</b><br>Claude Code Routines · headless <code>claude -p</code> · OpenClaw · n8n · cron</p>\n<p align=\"center\"><a href=\"https://runvouch.com\">Website</a> · <a href=\"https://runvouch.com/docs/\">Docs</a> · <a href=\"https://runvouch.com/blog/\">Field notes</a> · <a href=\"https://registry.modelcontextprotocol.io/v0.1/servers?search=runvouch\">MCP Registry</a> · <a href=\"https://www.producthunt.com/products/runvouch\">Product Hunt</a></p>\n<p align=\"center\"><a href=\"https://pypi.org/project/runvouch/\"><img src=\"https://img.shields.io/pypi/v/runvouch?label=pypi\" alt=\"PyPI\"></a> <a href=\"https://www.npmjs.com/package/runvouch\"><img src=\"https://img.shields.io/npm/v/runvouch?label=npm\" alt=\"npm\"></a> <a href=\"https://github.com/runvouch/vouch-action\"><img src=\"https://img.shields.io/badge/GitHub%20Action-vouch--action%40v1-2ea44f\" alt=\"GitHub Action\"></a> <a href=\"https://registry.modelcontextprotocol.io/?search=runvouch\"><img src=\"https://img.shields.io/badge/MCP%20Registry-com.runvouch%2Frunvouch-4c8dff\" alt=\"MCP Registry\"></a> <a href=\"https://smithery.ai/servers/runvouch/runvouch\"><img src=\"https://img.shields.io/badge/Smithery-runvouch%2Frunvouch-orange\" alt=\"Smithery\"></a> <a href=\"LICENSE\"><img src=\"https://img.shields.io/badge/license-MIT-blue\" alt=\"License: MIT\"></a></p>\n\nA green run means the scheduler worked, not that the task got done. RunVouch alerts within minutes when a scheduled agent is missing, failed, looping, over budget, drifting, or reported success without evidence.\n\n```\npip install runvouch     # or: npm install -g runvouch  (zero-dependency client + rv CLI)\nrv agent nightly-report --cadence 24h --cap-run-cost 2 --evidence\nrv run nightly-report --evidence-file out/report.html -- claude -p \"build tonight's report\"\n```\n\n## Verifiable runs\nEvery finished run gets a sha256 record, every UTC day a Merkle root chained to the previous day and stamped in Bitcoin with OpenTimestamps. The day files are public at https://api.runvouch.com/proof/ and `templates/verify_proof.py` (stdlib only) checks a proof without our code. On every plan, Free included.\n```\nrv proof RUN_ID --verify     # recomputes leaf + Merkle path against the public day file, exit 0 or 1\n```\nMechanism and limits: https://runvouch.com/docs/proof · who needs it: https://runvouch.com/verifiable-agent-runs\n\n## Detectors\n\n| Alert | Meaning |\n|---|---|\n| `MISSED` | expected run never started (dead scheduler, expired auth, crash before first line) |\n| `FAILED` | run ended non-zero / status=fail |\n| `NO_EVIDENCE` | run said ok but required proof (file written, URL 200, assertion) is missing, *green ≠ done* |\n| `RETRY_STORM` | same tool + identical input ≥ N times in one run (the invisible loop that costs $437) |\n| `BUDGET_RUN` / `BUDGET_DAY` | cost or tokens over the cap you set |\n| `DRIFT` | duration / output size off its 7-run baseline (robust MAD), silently doing something else |\n| `STALLED` | started, no end and no heartbeat past max runtime |\n\nAlerts go to e-mail, Telegram, Slack, any JSON webhook, PagerDuty (Team) and the dashboard.\n\n## Layout\n```\nrunvouch/server.py            FastAPI + SQLite, all detectors, dashboard at /\nrunvouch/cli.py               `aw`, stdlib-only client: rv agent / rv run -- CMD / rv status / rv alerts\nintegrations/claude-code-plugin Claude Code plugin: SessionStart/PostToolUse/Stop hooks → RunVouch\nintegrations/mcp                MCP server (stdio): runvouch_status/alerts/ack/runs/run_start/run_end\nsite/index.html                 landing page\ntests/                          7 detector tests (pytest)\ndocs/SELF_HOSTING.md            run it yourself: Docker or venv, what differs from hosted\n```\n\n## Self-hosting\nOne process, one SQLite file, Docker or a venv. Full guide in [docs/SELF_HOSTING.md](docs/SELF_HOSTING.md) (ten minutes, what differs from the hosted service, how to move later).\n```\ncp .env.example .env && docker compose up -d          # or: pip install -r requirements.txt && ./run.sh\ncurl -X POST \"localhost:8787/admin/accounts?name=me&plan=team\" -H \"X-Admin-Token: $RUNVOUCH_ADMIN_TOKEN\"   # -> api_key\n```\n\n## Use\n```\nexport RUNVOUCH_KEY=rv_... RUNVOUCH_URL=http://localhost:8787\nrv agent nightly-report --cadence 24h --cap-run-cost 2 --evidence\nrv run nightly-report --evidence-file out/report.html -- claude -p \"build tonight's report\"\nrv status ; rv alerts\n```\nClaude Code plugin: see `integrations/claude-code-plugin/README.md`.\nMCP: `claude mcp add runvouch -e RUNVOUCH_KEY=... -- python3 integrations/mcp/runvouch_mcp.py`\n\n## Test and contribute\n```\n.venv/bin/pip install -r requirements-dev.txt && .venv/bin/python -m pytest -q tests\n```\nSee [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## Hosted vs self-host\nHosted at [runvouch.com](https://runvouch.com): free for 3 agents, $9 Solo, $29 Team, alerts, dashboard, backups, EU hosting. Self-host: this repo, MIT. Same code.\n\n## Compare\n[vs Healthchecks.io](https://runvouch.com/vs/healthchecks) · [vs Cronitor](https://runvouch.com/vs/cronitor) · [vs Langfuse](https://runvouch.com/vs/langfuse)\n\n## License\nMIT.\n",
  "bytes": 5335,
  "sha": "0d08682fb908d11f298c2f9246d0e86d052ba0d14d387517cc7126a1edc401ef",
  "repo_slug": "runvouch/runvouch",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_com_runvouch_runvouch_ea8023c3/readme"
}