Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 16 additions & 15 deletions docs/argus-hub.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,9 +106,10 @@ when Hub starts, it generates a key for the Default organization and prints it t
Only use `HUB_INSECURE_COOKIE_HOSTS` for hostnames reachable through a private network. Never list
a hostname that is reachable from the public internet.

To rotate a key, disable or remove the old key in the Hub database, then restart Hub. If no enabled
key remains, Hub generates a new one on startup. A disabled key is rejected before Hub reads the
upload body.
To rotate a key, delete the old key's row from the Hub database, then restart Hub. Hub only
generates a new key when the `api_keys` table is empty, so disabling a key with `is_enabled = 0`
does not trigger this: rotation requires removing the row outright, not just disabling it. A
disabled key is rejected before Hub reads the upload body.

## Run Hub continuously

Expand Down Expand Up @@ -193,8 +194,7 @@ for the complete plist, including log paths and restart behavior.

## Use the dashboard

Open the Hub URL in a browser. The dashboard uses the same views as `argus serve`, with a user
dimension added:
Open the Hub URL in a browser. The dashboard groups organization-wide usage into these views:

<div class="screenshot">

Expand All @@ -205,15 +205,14 @@ dimension added:
| View | What you can see |
|---|---|
| Activity | Usage and cost for the whole organization or one person |
| Sessions | Sessions filtered to the whole organization or one person |
| Projects | Project activity across the organization or for one person |
| Tasks | Extracted tasks, including outcomes, frustration and interrupted rates, and top failure signals |
| Tools | Tool and MCP server usage across the organization or for one person |
| Health | Health signals for the selected scope |
| Users | Per-user sessions, tokens, estimated cost and last-sync time |
| Team | Per-user sessions, tokens, estimated cost and last-sync time |
| Export | Download the full dataset as a Snowflake-ready zip |

The user picker appears after at least one client syncs. Leave it on **All users** for an
organization-wide view, or choose one person to scope the views. The Users table can be sorted by
any column.
The user/group picker appears after at least one client syncs. Leave it on **All** for an
organization-wide view, or choose one person or group to scope Activity, Tasks and Tools. The
Team table can be sorted by any column, and clicking a row opens that person's own activity view.

## Query Hub from an agent

Expand All @@ -229,9 +228,11 @@ HTTPS without a subprocess or a session.
| `query_tool_usage` | Which tools and MCP servers people use |
| `query_users` | User IDs, display names, emails, last-sync time, sessions, tokens and cost |

The first four query tools accept `since`, `until`, `project`, `source` and `user` filters. The
`source` filter accepts `claude`, `codex`, `gemini` or `cowork`. `query_users` takes no arguments
and can help you find a `userId` before scoping another query.
The first four query tools accept `since`, `until`, `project`, `source`, `user` and `group`
filters. The `source` filter accepts `claude`, `codex`, `gemini` or `cowork`. The `group` filter
takes a groupId, or `__none__` for users with no group assigned. `query_users` accepts an
optional `group` filter (matching a groupId or groupName) and can help you find a `userId` before
scoping another query.

Authenticate with the Hub admin password:

Expand Down