ARGUS · Case file 58c376
Newargus check fails CI on silent failures

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.

Get started
16VCFounder FellowOpen-source core
DEPLOY← CIPRODUCTION →exit 1DEPLOY BLOCKEDingest_query✓ 0 msplan_subqueries✓ 2987 msfetch_sources✓ 1641 mssummarize_a✓ 1715 mssummarize_b✓ 3422 mssummarize_c✓ 1864 msmerge_summaries✓ 0 ms⚠ silent failuresynthesize_report✕ KeyErrorverify_citations○ skipped{}raised KeyErrorARGUSROOT CAUSEmerge_summaries returned {}synthesize_report crashed reading it · 100%

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.

Exhibit A
research_agent/nodes.pymerge_summaries()
167if not collected:
168return {}
169
170return {"merged_summaries": collected}
  1. 01 / No exception

    merge_summaries exits cleanly with an empty update. Nothing raises, so the run looks fine.

  2. 02 / Wrong suspect

    Downstream, synthesize_report crashes on the missing field. That’s the node every trace points at.

  3. 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.

Exhibit B · agent.py
  1. 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.

  2. 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.

  3. argus check exits 1 in CI. Fix the node, then argus replay reruns from it with every upstream output frozen.

Built for how agents break

Less digging. More shipping.

ArgusRecorder(consumers={
"merged_summaries": ["synthesize_report"],
}).attach(graph)

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.

$ argus fix last
Edit this file: nodes.py — merge_summaries
## Why this file and not the crash site
Do not edit synthesize_report.

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.

recorded outputs reusedrerun

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.

$ argus key set --provider anthropic
  • 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.

Design partner

“The crash annotation is the best thing in the project. Exact source line plus the upstream null beats most observability tooling I’ve used.”

Nikhil Jha·Software engineer, Pune

FAQ

Questions, answered.

Anything else? Read the docs or ask in Discord.

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.

Ship agents you can trust.

Catch the silent failure in CI, not in your users’ inbox.

Get started