Docs › LangGraph with RunVouch
LangGraph with RunVouch
LangGraph gives you cycles by design. A cycle that never converges, on a nightly schedule, is a bill. LangSmith shows you the trace afterwards; RunVouch stops the run when it crosses the cap.
How it runs on LangGraph
Around the graph invocation with the Python client; report each tool node call with run.tool() so identical inputs are detected as a retry storm.
Store the key
An environment variable wherever the graph runs (cron, container, Lambda).
Wrap the job
import runvouch
from graph import app # your compiled StateGraph
runvouch.agent("research-digest", cadence_s=86400, cap_run_cost=2, evidence_required=True)
with runvouch.vouch("research-digest", evidence=lambda: {"digest": len(result["digest"]) > 200}) as run:
result = None
for event in app.stream({"topic": "..."}, stream_mode="updates"):
for node, update in event.items():
run.tool(node, update.get("tool_input", {}), cost=update.get("cost", 0))
result = app.get_state(config).valuesrv 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 LangGraph
- Cycles with a high recursion limit look like progress; 40 identical tool inputs in one run is RETRY_STORM.
- A graph that ends with an empty final state is a completed run; evidence says whether the digest exists.
- Nothing in LangGraph knows the schedule; MISSED comes from the agent's cadence.
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 |
Need a key? Get a free key · Stuck? contact