--json, every command prints one line of JSON on standard output, whether it succeeds or fails. pitboard watch prints one per event.
The envelope
integer
required
The envelope’s version,
1. Pitboard adds fields and codes without changing it. A release that renames or removes a field or a value says so in the changelog, in an entry marked Breaking.string | null
required
The command that ran, such as
rename. pitboard alone gives status, the three schedule commands give schedule, vault and its commands give vault, watch install, status and uninstall give watch, and completions and manpage give generate.boolean
required
true when the command succeeded and exits with status 0. Exit codes lists the other statuses.object | null
required
What the command found or did, as Data by command lists.
null when the command failed. doctor and generate keep it when they fail.object[]
required
One object per warning, with
code and message, or an empty array. A change that failed still lists the warnings it found first. Warning codes lists the codes.object | null
required
Set when
ok is false, and null otherwise.
In the last two rows,
error has no cause field.
Every byte is ASCII. Pitboard writes a character outside ASCII as a \u escape: the label Đạt comes out as \u0110\u1ea1t. A character beyond U+FFFF becomes its UTF-16 surrogate pair.
Times are Unix times in seconds, such as 1790474400. In log entries, at is a local time instead, such as 2026-09-22T01:01:00+07:00.
Only
doctor --json hides email addresses and account ids, behind placeholders such as <email 1a2b3c4d>. Email addresses appear in the output of status, enroll, forget, rename and watch, and in error messages such as label_taken. status also prints account ids. repair prints parked login names, and each name holds an account id.Data by command
In the order ofpitboard --help:
A Claude Desktop account has no email address, so
email is empty wherever one of its accounts appears.
adoption says how each tool takes up a switch, as Open sessions explains:
Moves given up
Each object in themoves_given_up of abandon:
Doctor environment
Theenvironment of doctor. It is {} where a variable naming a folder is empty or relative.
Status data
For Codex and Claude Desktop, the account in use is the object in
accounts with that provider and signed_in set to true.
Each object in accounts:
Which expiries
parked gives depends on the tool. A time is null where it is unknown.
source is live when Pitboard asked the service this time. It is remembered for the last reading Pitboard recorded, from the command line, the app or a Claude Code status line.
Each object in windows is one limit:
Each object in
awaiting:
Watch events
Each event’s envelope hascommand set to watch. With --once, watch prints one event. The data of every event has event. Every event but the warm-up ones also has threshold, the share it switches at, such as 95. With --no-switch, threshold is null.
The other fields:
For
switched, reason is limit, where a limit of from reached the share, or resets_first, where to comes first by its week before the share.
For skipped and not_watching, Automatic switching lists the codes.
For warm_up_held, reason is one of these:
For
warm_up_halted, reason is one of these:
When it holds back says when each ends.
A warm-up that came to nothing prints an envelope with
ok set to false and its error, once for each reason until that account warms up.
An error prints an envelope with ok set to false, and watch goes on. An error that ends watch prints the same, and watch exits with its status. watch says which errors end it, and what it prints only once.
A switch prints this on one line: