Catch silent failures before you deploy.
Your agent finishes, but one node quietly returned nothing. ARGUS finds that node and fails the build before it ships.
Fits the stack you already ship
- LangGraph
- LangChain
- OpenAI
- Anthropic
- Gemini
- pytest --argus
- GitHub Actions
- Cursor
- Claude Code
The problem
Your agent didn’t crash. It just returned nothing.
A node can return an empty dict, drop a field or swallow a tool error and still exit cleanly. The crash, if one comes, lands somewhere else.
01 / No exception
merge_summariesexits cleanly with an empty update. Nothing raises, so the run looks fine.02 / Wrong suspect
Downstream,
synthesize_reportcrashes on the missing field. That’s the node every trace points at.03 / It ships
The real bug sits one hop upstream, and nothing in your CI knows to look there.
How it works
Attach once. Get the root cause on every run.
ARGUS judges every run before it ships, and stops the deploy when one goes wrong.
Wrap your compiled graph with
ArgusRecorder().attach(graph). Nothing in it is patched: ARGUS listens to LangGraph’s own callbacks and keeps the update every node returned.When a run goes wrong, ARGUS walks back from the crash to the node that caused it and shows the evidence: the empty update, the missing field, the confidence.
argus checkexits 1 in CI. Fix the node, thenargus replayreruns from it with every upstream output frozen.
Built for how agents break
Less digging. More shipping.
Field contracts
Declare who reads what. A field that’s never written, written empty or dropped fails on the node responsible, not on the one that tripped over it.
A fix prompt, not a stack trace
argus fix writes a paste-ready prompt for Claude Code, Cursor or any coding agent. It targets the origin, cites the source line and runs offline.
Replay without the rerun
Rerun from the node you fixed. Everything upstream comes from the recording, so the LLM calls before it don’t run, or bill, again.
- OpenAI
- Anthropic
- Gemini
- No key · heuristics
Local-first. Your keys.
Runs are written to .argus/ in your project. The LLM judge uses your own key, and with none, ARGUS falls back to heuristics.
“The crash annotation is the best thing in the project. Exact source line plus the upstream null beats most observability tooling I’ve used.”
What is a silent failure?
A node finishes without raising, but what it returned is wrong: an empty update, a dropped field, a swallowed tool error, placeholder text. The damage shows up later, usually on a different node.
How is this different from tracing tools?
Tracing shows you what happened, span by span, usually after it shipped. ARGUS judges each run: it decides whether the run was clean, names the node where it went wrong, and fails your CI when it wasn't.
Does it only work with LangGraph?
LangGraph is first-class: ARGUS rides its callback stream without patching your graph. Plain Python pipelines and custom DAGs work too. The docs show the entry point that fits yours.
Does anything leave my machine?
No. Runs are saved to .argus/ in your project. The LLM judge is optional and calls OpenAI, Anthropic or Gemini with your own key. Without one, ARGUS runs on heuristics alone.
What does it cost?
The core is open source under Apache-2.0. Hosted plans are free while ARGUS is in beta.