Overview
ARGUS stores all run data locally in .argus/runs/ inside your project directory. No external database required, no cloud dependency for core functionality.
What Gets Stored
Each pipeline execution creates a run record containing:
- Node inputs and outputs at each step
- Timing data per node
- Detection results from all four layers
- Forensic analysis (root cause, causal chain)
- Recorded HTTP calls (when
record_http=True)
Controlling Storage
Storage is on by default. To disable it for ephemeral monitoring:
watcher = ArgusWatcher(graph, persist_state=False)Replay requires persist_state
persist_state=True (the default). Without stored state, ARGUS doesn't have the intermediate data needed to replay from a specific node.HTTP Recording
All external HTTP calls (OpenAI, search tools, databases) are recorded by default. Every API response is saved to disk alongside the run. During replay, the recorded responses are served back — same data, zero extra cost, fully reproducible.
# Disable HTTP recording for lightweight monitoring
watcher = ArgusWatcher(graph, record_http=False)Redaction
ARGUS captures full state at every step. Use redact_keys to scrub sensitive fields from stored outputs:
watcher = ArgusWatcher(
graph,
redact_keys={"api_key", "token", "password", "authorization"},
)Security
redact_keys before using ARGUS with production credentials.Viewing Runs
Access stored runs through the CLI or the web dashboard:
# List all runs
argus list
# View the most recent run
argus show last
# View a specific run by ID (or 8-char prefix)
argus show run abc12345
# Inspect raw input/output for a specific node
argus inspect <id> --step <node>
# Launch the web dashboard
argus uiThe web dashboard at http://localhost:7842 serves runs from .argus/runs/ in your current directory — no account needed.
Programmatic Access
Access trace data directly from Python:
trace = watcher.get_trace()
trace.id # unique trace identifier
trace.status # "ok" | "warning" | "failed"
trace.duration_ms # total execution time
trace.steps # list[TraceStep]
trace.detections # list[Detection]
trace.forensics # Forensics | None
trace.summary # human-readable summary