Argus

Getting started

Install Argus, run it once, and read the dashboard footer.

Argus reads the transcripts Claude Code and Codex already write, keeps them in a local SQLite archive, and serves a dashboard on localhost. Nothing is uploaded and nothing is sent anywhere.

What you need

  • Python 3.11 or newer.
  • Data from at least one supported agent: a ~/.claude/ directory, which exists once you have used Claude Code, or a Codex home with a sessions/ or archived_sessions/ folder, which exists once you have used Codex. You need only one; Argus reads whichever it finds.

For Claude Code, Argus reads three things under ~/.claude/ and never writes there:

PathWhat it is
~/.claude/projects/<project>/<session-id>.jsonlOne transcript file per session
~/.claude/projects/<project>/<session-id>/subagents/…Transcripts of sub-agents that session spawned
~/.claude/history.jsonlEvery prompt you have typed, across projects

The Claude Code location is fixed at ~/.claude. There is no flag or environment variable to point Argus somewhere else.

For Codex, Argus reads $CODEX_HOME, or ~/.codex when that variable is not set, and opens only the rollout files under its sessions/ and archived_sessions/ folders. Supported agents has the per-agent details.

Install and run

pip install argus-code        # or: uv tool install argus-code
argus start

argus start prints a few lines, then opens your browser at http://127.0.0.1:4242:

LineMeaning
Detected adapters: claude_code, codexWhich agents it found: claude_code for ~/.claude/, codex for a Codex home. You see only the ones present
Argus: ingesting recent sessions...Transcripts modified in the last 30 days are being read now, before the dashboard opens
Argus: foreground ingest complete (412/1183 files), starting watcher...Recent files done, older ones continue in the background, and a file watcher now picks up new activity as it happens
Loaded 3 detectors: ['cache_hit_drop', 'cost_spike', 'tool_error_rate_spike']The alert detectors are scheduled
Argus running at http://127.0.0.1:4242The dashboard is up

Press Ctrl+C to stop. Argus prints Argus stopped. and shuts down cleanly.

If it exits immediately

No agent data found. Argus reads Claude Code from ~/.claude/ and Codex from $CODEX_HOME or ~/.codex/ -- run one of them first. means Argus found neither a ~/.claude/ directory nor a Codex home with a sessions/ or archived_sessions/ folder. Run Claude Code or Codex once, then try again. If the message mentions FTS5, your Python's SQLite was built without full-text search; use the official CPython build.

The first run

Argus splits your transcripts by file age. Files modified in the last 30 days are read in the foreground, and the browser opens only when they are done. The README quotes 5 to 10 seconds for a typical install. Everything older is read afterwards in a background thread while you already use the dashboard.

The background pass also re-reads sessions that are missing derived data, for example tool calls or search segments. That pass is capped at 200 sessions per run, so a large archive converges over a few starts rather than one. If some older session looks incomplete, restart Argus once or twice.

The bottom of the dashboard sidebar has three monospace lines:

  1. ingesting 412/1183 while transcripts are being read, then tracking 180 sessions. Before the first response it says connecting….
  2. pricing 2026-10-04: the version of the price table used for cost estimates.
  3. foreground watcher when this argus start is doing the ingestion, or argusd daemon when the background daemon owns it.

The dot next to the ARGUS wordmark is green when idle and amber and pulsing while ingesting.

The Overview page after a first run: four tiles, tokens per day, models, and activity heatmaps
The Overview page after a first run: four tiles, tokens per day, models, and activity heatmaps

Where Argus keeps its data

Everything lives in ~/.argus/:

FilePurpose
argus.db (plus -wal, -shm)The SQLite archive: sessions, turns, tool calls, alerts, and the optional search index
argusd.pidPresent only while the background daemon runs
argusd.log (plus .1 to .3)Daemon log, rotated at 1 MB
pricing/<date>.jsonPrice tables downloaded by argus pricing refresh, if you ever ran it
templates/<name>/Templates you saved with argus claude template create

Every command accepts --data-dir <path> to use a different directory. Argus has no config file and no environment variables of its own (the only one it reads is Codex's CODEX_HOME, to find Codex data); the only persisted setting, transcript indexing, is a row inside the database.

Argus never deletes sessions from its archive. Claude Code rotates its own transcripts after a while, but a session Argus has already ingested stays in argus.db until you run argus wipe.

Next steps

Verified against argus-code 0.7.0.

On this page