Usage and audit

Two admin commands for org-wide visibility: a live usage rollup, and a tamper-evident audit trail of everything that's happened.

Org usage

$ adj org usage
QUOTA
  max per user:  3
  max per org:   30
  active in org: 14

USERS
EMAIL             NAME        ROLE   STATUS  ACTIVE  TOTAL
[email protected]   Alex Park   admin  active  1       4
[email protected]     Dana Lin    user   active  2       9

GOLDENS
NAME        LATEST  SHARED  ACTIVE  TOTAL
prod-pg16   3       true    11      40

CLUSTERS
NAME  HEALTH     LAST_SEEN  ACTIVE_INSTANCES
prod  connected  6s ago     14

POOLS
  prod-pg16: 5/5 warm

IMPORTS
  total:            3
  succeeded:        3
  failed:           0
  last finished at: 2026-07-18T22:10:04Z

One command, six sections:

-o json (or -o yaml) emits the same data as a single structured document — useful for feeding a dashboard or a scripted check instead of reading the table.

Audit log

$ adj org audit --limit 3
SEQ  TS                           ACTOR            ACTION           RESOURCE
102  2026-07-18T22:10:04.812345Z  [email protected]  import.start     5b9d7c31-2e4f-4a6b-8c0d-1e2f3a4b5c6d
101  2026-07-18T21:02:11.204819Z  [email protected]    instance.launch  7a1e9c3d-5b2f-4c8a-9d0e-2f3a4b5c6d7e
100  2026-07-18T20:58:40.573062Z  [email protected]  invite.create    1f2e3d4c-5b6a-4978-8c9d-0e1f2a3b4c5d

Every state-changing action in the org — logins, invites, instance launches, deletes, quota changes, cluster registration, and more — is recorded as a sequenced event with an actor, a dotted action name (e.g. instance.launch, snapshot.share, invite.create, cluster.register), and the affected resource's id (a UUID). --limit caps how many events come back (server default if omitted); --before takes an RFC3339 timestamp as a pagination cursor to page further back in history.

Tamper-evident verification

$ adj org audit --verify
...
audit chain OK (23 events verified)

Each audit event is hash-chained to the one before it — the same shape as a blockchain's block-linking, without the distributed-consensus part. --verify re-derives the chain from the stored events and confirms nothing was altered or deleted out from under you. If verification fails, the command exits non-zero with the specific failure:

$ adj org audit --verify
Error: audit chain BROKEN: <reason>

That should never happen in normal operation — treat it as a signal to investigate the control plane's audit store directly, and loop in Adjoint support.

Exporting

$ adj org audit --limit 500 -o json > audit-export.json

-o json is the export path: no separate export command, just the audit list in structured form. Combine with --before to page through the full history in batches if you're pulling more than one page's worth.

Next