v0.2.0
Everything a stranger hits in the first ten minutes, every state a person could be stuck in,
and what the app was missing to stand on its own.
Added
pitboard logshows what pitboard has changed and when, from the record it was already
keeping. The log now names which front end asked.pitboard uninstalldeletes every parked login and then pitboard's own files, in that
order, because the account list is the only index of those keychain items.pitboard abandongives up on an interrupted switch that cannot be finished, keeping
every login. The way out when recovery cannot reach Anthropic.pitboard status --offlineanswers from what was last measured, without asking Anthropic
or touching a login. Milliseconds instead of seconds, and it works with no network.forgetasks before deleting a parked login, unless--yesor--json.- Each usage row in
--jsoncarriesseverity, Anthropic's own grade for that limit. A
field added to the v1 envelope; nothing was removed or renamed. - The app: each account's email, when each limit resets, when a parked login stops working,
doctor's checks on demand, its own version, a mark in the menu bar, and VoiceOver labels.
It can record the account in use, drop an account, and run Claude Code's own sign-in for
a new one, showing what that sign-in says rather than borrowing a terminal. cargo binstall pitboardfetches the built binary instead of compiling the tree.
Fixed
pitboard statuslinetyped at a prompt waited for input that was never coming. It reads
stdin only when something is piping into it.- Offline, the account in use rendered as one with nothing parked, advising a sign-in it did
not need. - A switch that failed before installing anything left its journal behind, so the next
command announced a recovery for something that never happened. enroll --sign-inchecked what could refuse the enrolment only after the browser sign-in.- The status line showed
?·?for every account but the one in use until someone ran
pitboardby hand. It now keeps the numbers Claude Code hands it. - doctor and forget read pitboard's record of its last switch rather than who is signed in,
so a sign-in made with Claude Code's own/loginmade both wrong. - Three ways a parked login could be left in the keychain with nothing naming it.
- A renewal that could not be written left the account with a login already spent.
- The keychain ceiling has its own error, saying the size, the limit, and what to do. A
login with MCP server tokens in it is past that limit, which is not theory. ANTHROPIC_API_KEY,ANTHROPIC_AUTH_TOKENandCLAUDE_CODE_OAUTH_TOKENraise a warning
on every change: Claude Code signs in with those, not with the login pitboard moved.- Columns line up in what a terminal draws, so a label in Chinese or Japanese no longer
pushes everything after it out of line. - One state file serves every credential slot, and what was switched to in one slot is no
longer claimed in another. - The menu bar showed the largest percentage of any limit, so a row scoped to one model
read as though everything had stopped. - Windows gets one sentence instead of a screen of type errors.
Internal
- MSRV is 1.91, measured by building it, and CI builds at whatever the manifest claims.
- The state file can be read forwards, and says which half to upgrade when it cannot.
- A release is guarded, re-runnable, and carries build provenance; the macOS command line
binaries are signed and notarised like the app. A tag likev0.2.0-rc1is a pre-release:
no crates.io, no update feed. - The app can be tested without a keychain, and is.