The JSON

Part of team status — --json: the same reading as one document, for a script to read.

--json prints the same reading as one document, format 1:

{
  "format": 1,
  "project": "beacon",
  "session": "beacon",
  "rows": [{ "name": "claude-keeper", "state": "missing", "model": "Claude Opus 5.5", "pane": "-" }],
  "notes": [],
  "differences": [{ "what": "claude-keeper is in the file and is not running", "repair": "team add claude-keeper" }],
  "notice": null
}

rows, notes and differences hold what the table, the notes and the repairs hold; each seat in rows has name, state, model, pane, and, when recorded at workspace creation by a migrated launch, start_cwd. notice is the line a normal run prints above the table, or null when there is none. budgets is present only when the budgets table would be printed, one object per row (account, window, left, used, resetsIn, seat, age, source, fallback, state, inside, reserve). inside is true when a subscription's left figure is at or inside its reserve, fallback when the figure did not come from the first source the account names, and reserve the reserve that row was read against — the same figure the table's line names, null when the account has none. The exit code is the same as without --json, and the file's warnings still go to stderr.

A --json run

--json prints that reading as one document, for a script to read instead of the table:

Terminal
 team status --json ; echo "exit $?"
team status: warning, line 3: `coordinator:` is now `leads: true` on the lead's seat, and is still read
{
  "format": 1,
  "project": "beacon",
  "session": "beacon",
  "rows": [
    {
      "name": "claude-keeper",
      "state": "missing",
      "model": "Claude Opus 5.5",
      "pane": "-"
    },
    {
      "name": "claude-beacon",
      "state": "working",
      "model": "Claude Opus 5.5",
      "pane": "w1:p1"
    }
  ],
  "notes": [
    "approval #1 (2026-10-04), key fe21ef6293de"
  ],
  "differences": [
    {
      "what": "claude-keeper is in the file and is not running",
      "repair": "team add claude-keeper"
    }
  ],
  "notice": null,
  "budgets": [
    {
      "account": "openai",
      "window": "session",
      "left": 40,
      "used": 60,
      "resetsIn": "44m",
      "seat": null,
      "age": "2m",
      "source": "check",
      "fallback": false,
      "state": "fresh",
      "inside": false,
      "reserve": 20
    },
    {
      "account": "openai",
      "window": "daily",
      "left": 70,
      "used": 30,
      "resetsIn": null,
      "seat": "claude-beacon",
      "age": "40m",
      "source": "status_line",
      "fallback": true,
      "state": "stale",
      "inside": false,
      "reserve": 20
    },
    {
      "account": "openai",
      "window": "weekly",
      "left": 5,
      "used": 95,
      "resetsIn": "44m",
      "seat": "claude-beacon",
      "age": "2m",
      "source": "status_line",
      "fallback": true,
      "state": "fresh",
      "inside": true,
      "reserve": 20
    }
  ]
}
exit 1