Skip to main content

Silent watcher for LangGraph multiagent pipelines — detects silent failures, captures full state, enables step-level replay.

Project description


PyPI version Python 3.9+ Beta

Your LangGraph pipeline runs. No exception. But three nodes later something crashes with a KeyError. The node that crashed didn't cause it — some node upstream returned a dict with a missing field, and nothing caught it.

ARGUS sits between your nodes and tells you exactly where it went wrong.


Install

pip install argus-agents

Setup

from argus import ArgusWatcher

watcher = ArgusWatcher()
watcher.watch(graph)       # before graph.compile()
app = graph.compile()
app.invoke(initial_state)
watcher.finalize()

No changes to your node functions.


What it catches

Silent failures — a node returns {} or drops a required field. No exception, pipeline keeps running. ARGUS compares each node's output against the next node's type annotations and flags it before the crash happens downstream.

Semantic failures — structure is fine but the value is wrong. Pass a validator:

watcher = ArgusWatcher(validators={
    "classify": lambda o: (o.get("label") in ["yes", "no"], "unexpected label"),
    "*":        lambda o: ("error" not in o, "error key present"),
})

"*" runs on every node.

Crashes — full traceback captured per node, with a one-line root cause:

└─  KeyError: 'score'
└─  at pipeline.py:47  →  result = state["score"] * weight
└─  Field 'score' was absent from the incoming state

Strict mode — additional patterns: nested error keys, rate limit responses, empty required lists, list[int] vs list[str] type mismatches. Use in staging/CI:

watcher = ArgusWatcher(strict=True)

Output

argus  run-abc12345  ·  2024-04-05 12:30  ·  1243 ms
status  ●  silent_failure

   1  fetch       43 ms    ✓  pass
   2  validate    12 ms    ⚠  silent failure
      └─  Field "score" is missing
      └─  process received bad state
   3  process    891 ms    ✗  crashed
      └─  KeyError: 'score'
      └─  Field 'score' was absent from the incoming state

root cause   validate

Parallel nodes shown as a grouped panel. Cyclic graphs show each iteration separately. Human interrupt chains stitched into one trace on resume.


Replay

A 10-node pipeline fails at node 7. You fix the bug. Instead of re-running nodes 1–6 and burning API credits:

argus replay <run-id> node_7 --app my_module:build_graph

ARGUS restores the exact state at node 7 from disk and runs from there. build_graph is a zero-arg function that returns your graph — compiled or uncompiled, both work.

From the web UI — hover any step, click ↺ replay from here. After replay, the diff view opens automatically.

argus diff <replay-id>    # compare replay vs original

CLI

argus list                                            # all runs
argus show last                                       # most recent run
argus show run <id>                                   # by full id or 8-char prefix
argus replay <id> <node> --app my_module:build_graph  # re-run from a node
argus inspect <id> --step <node>                      # raw input/output for a node
argus diff <id>                                       # replay vs original
argus diff <id-a> <id-b>                              # any two runs
argus ui                                              # open web dashboard
argus login                                           # sync runs to cloud

Web UI

argus ui

Opens at http://localhost:7842. Serves runs from .argus/runs/ in your current directory — no account needed.

Run detail, replay tree, side-by-side diff, LLM cost per node, AI root cause investigation.


Node statuses

pass
~ pass with warnings (empty optional fields)
silent failure (missing required fields)
semantic fail (validator returned False)
interrupted (human-in-the-loop pause)
crashed

Without LangGraph

from argus import ArgusSession

session = ArgusSession()
session.set_edges({"fetch": ["classify"], "classify": ["process"]})

fetch    = session.wrap("fetch",    fetch_fn)
classify = session.wrap("classify", classify_fn)
process  = session.wrap("process",  process_fn)

state = fetch(initial_state)
state = classify(state)
state = process(state)
session.finalize()

Works with Prefect, Temporal, or plain Python functions.


Requires Python 3.9+. LangGraph 0.2+ only needed for ArgusWatcher.

v0.4.4changelog

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

argus_agents-0.4.5.tar.gz (6.5 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

argus_agents-0.4.5-py3-none-any.whl (2.0 MB view details)

Uploaded Python 3

File details

Details for the file argus_agents-0.4.5.tar.gz.

File metadata

  • Download URL: argus_agents-0.4.5.tar.gz
  • Upload date:
  • Size: 6.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for argus_agents-0.4.5.tar.gz
Algorithm Hash digest
SHA256 89ed78b84cf0c74b649d50b2604e92d280c81950c9a05a731af8314b9b3f95fa
MD5 37235ff13e06341bc2fbd6f8539c197c
BLAKE2b-256 e5e8ab189bf7f3af898b75ef2718fb4fd12f54d4ea7a29e63b6c9a4dd59df6d5

See more details on using hashes here.

Provenance

The following attestation bundles were made for argus_agents-0.4.5.tar.gz:

Publisher: publish.yml on VaradDurge/ARGUS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file argus_agents-0.4.5-py3-none-any.whl.

File metadata

  • Download URL: argus_agents-0.4.5-py3-none-any.whl
  • Upload date:
  • Size: 2.0 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for argus_agents-0.4.5-py3-none-any.whl
Algorithm Hash digest
SHA256 53e04522048ff6d713f04b1b49a58914cdf31ee2b065d257a777e28a853c7407
MD5 f18fc2c1e4ef99788ed52c733457b71f
BLAKE2b-256 89f26f3d2ed36b9ad8d0b6fe85de007083df164be456d7ca9c2335ec6859c6a2

See more details on using hashes here.

Provenance

The following attestation bundles were made for argus_agents-0.4.5-py3-none-any.whl:

Publisher: publish.yml on VaradDurge/ARGUS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page