CLI reference
Every argus command, flag and default, and what each touches on disk.
Running argus with no arguments prints this tree. There is no --version flag; check the installed version with pip show argus-code or uv tool list.
argus
├─ start watcher + ingester + dashboard server
├─ wipe delete all local Argus data
├─ pricing
│ └─ refresh pull latest model prices from LiteLLM
├─ indexing manage transcript indexing (powers full-text search)
│ ├─ status
│ ├─ enable
│ ├─ disable
│ └─ clear
├─ claude scaffold and manage .claude/ project setups
│ ├─ init
│ └─ template
│ ├─ list
│ └─ create
└─ daemon background ingestion + detector daemon (argusd)
├─ start / stop / restart
├─ status
└─ logsEvery command except pricing refresh accepts --data-dir <path> (default ~/.argus). --help works at every level. argus search still works as a hidden alias for argus indexing and prints a rename note.
argus start
argus start [-p|--port INTEGER] [--host TEXT] [--data-dir PATH] [--quiet] [--verbose]| Flag | Default | Effect |
|---|---|---|
--port, -p | 4242 | Dashboard port |
--host | 127.0.0.1 | Bind address. Loopback only by default |
--data-dir | ~/.argus | Where the database lives |
--quiet | off | Log warnings only |
--verbose | off | Debug logging |
What it does, in order: opens or creates the database and applies migrations, checks that SQLite has FTS5, loads the newest price table, reads transcripts modified in the last 30 days, starts the file watcher and the detector scheduler, opens your browser, and serves. There is no flag to suppress the browser.
If the daemon is running, argus start logs argusd <pid> active — dashboard is read-only. and serves as a viewer only: no ingestion, no detectors, and any change you try to make in Settings is refused.
--host 0.0.0.0
Binding to all interfaces logs this warning: ⚠ WARNING: bound to all network interfaces. Anyone on your LAN can read your prompt history, transcripts, and project paths. It also switches off the loopback Host-header guard, because you are now reaching the dashboard by LAN address. There is no authentication. See Search & privacy.
Errors you may see:
No adapter data found. Argus expects ~/.claude/ (Claude Code) to be present at minimum.on stderr, exit code 1. Run Claude Code once first.Your Python's sqlite3 was built without FTS5 (ENABLE_FTS5). …Use the official CPython distribution.- A port-in-use error comes straight from the web server. Pick another port with
--port.
argus indexing
Transcript indexing powers full-text search and the sub-agent "Task given" text. It is off by default. The Search & privacy page explains what gets stored.
| Command | What it does |
|---|---|
argus indexing status | Prints Status: ENABLED or disabled, plus Indexed: 12,345 segments across 678 sessions |
argus indexing enable | Turns the flag on. Prints Enabled. Run argus start to backfill — historical sessions will index in the background. New sessions are indexed automatically. |
argus indexing disable | Turns the flag off. Existing segments stay on disk but are hidden from search |
argus indexing clear [-y] | Deletes every indexed segment, compacts the database, and reports the space freed. Asks Delete 12,345 indexed segments? [y/N] unless you pass -y |
clear always leaves indexing disabled afterwards, even if it was on. Re-enable it if you cleared only to reclaim space. Also, every indexing command opens the database read-write, so running one on a fresh machine creates ~/.argus/argus.db.
The CLI enable only flips the flag. Historical sessions are indexed on the next argus start or argus daemon restart, 200 sessions per run. The Enable indexing button in the dashboard starts that backfill immediately instead.
argus pricing refresh
argus pricing refreshNo flags. This is the only command that ever touches the network. It fetches one file over HTTPS with a 30-second timeout:
https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.jsonIt converts the per-token prices to dollars per million tokens, prints a summary like Added: 12, Removed: 3, Changed: 41, Unchanged: 900 followed by one line per changed model, then asks Apply? [y/N]. If nothing differs it prints Nothing to update. and stops without asking. On yes, it writes a file named after today's date into the installed package's pricing/ directory, and that file becomes the active table.
You never have to run it. A bundled table ships with each release. A model missing from the table is priced at zero until a table that knows it is loaded, at which point the affected sessions are re-priced on the next start.
On a read-only install, for example some pipx or uv tool layouts, the final write fails with a Python traceback rather than a friendly message. Refreshing twice on the same day overwrites that day's file.
argus claude init
argus claude init [PATH] [--template TEXT] [--force] [--data-dir PATH]Copies a template into a project: CLAUDE.md to the project root, everything else under .claude/. PATH defaults to the current directory, --template to default. It is a plain file copy with no variable substitution. Each file prints as + path when created or - path (exists) when skipped, then a tree of the result and a summary like 2 created, 1 skipped.
| Situation | Result |
|---|---|
File exists, no --force | Skipped |
File exists, --force | Overwritten |
CLAUDE.md exists, with or without --force | Never overwritten |
| Target resolves outside the project, for example through a symlink | Skipped |
The bundled default template ships twelve files: a skeleton CLAUDE.md, .claude/settings.json with a permissions policy, two agents (code-reviewer, security-auditor), five commands (commit, deploy, fix-issue, pr, review), three rules (api-conventions, code-style, testing), and an example skill. The settings allow common npm, node and safe git commands and deny rm -rf, git push --force, git reset --hard, chmod 777, and piping curl or wget into a shell.
argus claude template
argus claude template list
argus claude template create NAME [--path PATH] [--all] [--data-dir PATH]list prints every template name, bundled and yours, one per line. Your templates live in ~/.argus/templates/<name>/ and shadow a bundled template of the same name.
create snapshots a project's .claude/ into a new user template. The name default is reserved. It asks Include agents/? [Y/n] for each subfolder unless you pass --all. It deliberately leaves out history.jsonl, any *.local.json, and anything that looks like a credential (.env*, credentials.json, names containing secret, password, api-key, or ending in -token or _key), and tells you so:
Left out of the template (looks like credentials): .credentials.json, .env
Templates get copied into every project you scaffold, so secrets are never snapshotted.There is no delete command. Remove a template by deleting its folder under ~/.argus/templates/.
argus wipe
argus wipe [--data-dir PATH] [-y|--yes]Deletes the entire data directory after asking Delete C:\Users\you\.argus? [y/N]. That removes the archive of every session, the search index, alerts, the daemon's log, and every template you saved with template create.
Stop the daemon first with argus daemon stop. Nothing prevents a wipe while argusd is running, and the daemon would keep writing into a directory that no longer exists.
argus daemon
start, stop, restart, status and logs manage argusd, the background process that keeps ingesting when no dashboard is open. They have their own page: Daemon (argusd).
Verified against argus-code 0.5.2.