<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Pitboard releases</title><description>Each Pitboard release, with what it added, changed and fixed.</description><link>https://usepitboard.com</link><item><title>Pitboard 0.14.0</title><link>https://usepitboard.com/changelog#v0.14.0</link><guid isPermaLink="true">https://usepitboard.com/changelog#v0.14.0</guid><pubDate>Tue, 13 Oct 2026 17:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Pitboard switches &lt;a href=&quot;https://docs.usepitboard.com/guides/claude-desktop&quot;&gt;Claude Desktop&lt;/a&gt; accounts on macOS with &lt;code class=&quot;long&quot;&gt;pitboard use desktop/&lt;wbr&gt;&amp;lt;label&amp;gt;&lt;/code&gt;, while Claude is closed.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;long&quot;&gt;pitboard enroll desktop/&lt;wbr&gt;&amp;lt;label&amp;gt;&lt;/code&gt; adds the account Claude is signed in to.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;long&quot;&gt;pitboard enroll desktop/&lt;wbr&gt;&amp;lt;label&amp;gt; --sign-in&lt;/code&gt; parks the account Claude is signed in to and adds the one you sign in to inside Claude.&lt;/li&gt;&lt;li&gt;The app adds, switches and signs in again to Claude Desktop accounts, and asks before it quits Claude.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard status&lt;/code&gt; says when Pitboard last read a Claude Desktop account in use, and when a parked one&apos;s sign-in may lapse.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard doctor&lt;/code&gt; checks Claude Desktop under a heading of its own.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard abandon&lt;/code&gt; gives up an interrupted Claude Desktop move.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard repair&lt;/code&gt; gives a Claude Desktop account back its parked login.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard adopt&lt;/code&gt; sets aside a Claude Desktop login parked on another Mac.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Copy Link&lt;/strong&gt; in the sign-in dialog copies the sign-in page&apos;s address, to paste into another browser or browser profile.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Changed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Breaking:&lt;/strong&gt; The public API of &lt;code&gt;pitboard-core&lt;/code&gt; changes; &lt;a href=&quot;https://docs.rs/pitboard-core/0.14.0/pitboard_core/&quot;&gt;its documentation&lt;/a&gt; shows the new one.&lt;/li&gt;&lt;li&gt;The account index is schema 8, which earlier versions cannot read, so update the command line and the app together.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard uninstall&lt;/code&gt; refuses while Claude is signed out and a Claude Desktop login is parked or set aside.&lt;/li&gt;&lt;li&gt;With no account enrolled, &lt;code&gt;pitboard status&lt;/code&gt; says it found no Claude Code login, not that nothing is signed in.&lt;/li&gt;&lt;li&gt;With no account enrolled, &lt;code&gt;pitboard status&lt;/code&gt; says how to enrol a Codex account and, on macOS, a Claude Desktop one.&lt;/li&gt;&lt;li&gt;A switch that quits the ChatGPT app waits until the &lt;code&gt;codex&lt;/code&gt; running inside it has quit too.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Open Sign-In Page&lt;/strong&gt; in the sign-in dialog is renamed &lt;strong&gt;Open&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;The &lt;code&gt;pitboard&lt;/code&gt; cask&apos;s caveats link &lt;a href=&quot;https://docs.usepitboard.com/install/upgrade-from-0-3-0&quot;&gt;Upgrade from 0.3.0 or earlier&lt;/a&gt; in place of the commands that remove 0.3.0&apos;s formula.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;The &lt;a href=&quot;https://docs.usepitboard.com/guides/status-line&quot;&gt;status line&lt;/a&gt; shows a Team seat&apos;s five-hour limit alone, where it printed &lt;code&gt;?&lt;/code&gt; for a weekly limit the seat does not have.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard uninstall&lt;/code&gt;&apos;s question says the other accounts need signing in again, not a browser sign-in.&lt;/li&gt;&lt;li&gt;A refused change says the interrupted switch it finished or undid before the refusal, not after it.&lt;/li&gt;&lt;li&gt;While &lt;code class=&quot;long&quot;&gt;CLAUDE_&lt;wbr&gt;CODE_&lt;wbr&gt;CUSTOM_&lt;wbr&gt;OAUTH_&lt;wbr&gt;URL&lt;/code&gt; is set, &lt;code&gt;pitboard abandon&lt;/code&gt; refuses only where a Claude Code switch is interrupted.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Pitboard 0.13.0</title><link>https://usepitboard.com/changelog#v0.13.0</link><guid isPermaLink="true">https://usepitboard.com/changelog#v0.13.0</guid><pubDate>Mon, 12 Oct 2026 17:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Pitboard can &lt;a href=&quot;https://docs.usepitboard.com/guides/warm-up&quot;&gt;warm up&lt;/a&gt; a Claude Code account: once its five-hour limit resets, Claude Code sends one short message so the next window starts at once.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard warm on &amp;lt;account&amp;gt;&lt;/code&gt; and &lt;strong&gt;Settings&lt;/strong&gt; &amp;gt; &lt;strong&gt;Limits&lt;/strong&gt; turn warm-ups on.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Changed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Breaking:&lt;/strong&gt; The public API of &lt;code&gt;pitboard-core&lt;/code&gt; changes; &lt;a href=&quot;https://docs.rs/pitboard-core/0.13.0/pitboard_core/&quot;&gt;its documentation&lt;/a&gt; shows the new one.&lt;/li&gt;&lt;li&gt;The automatic switch and the offer when an account runs out prefer an account with no weekly limit for all models, such as a Team seat.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Settings&lt;/strong&gt; has a &lt;strong&gt;Limits&lt;/strong&gt; pane, with the automatic switch and warm-ups that were under &lt;strong&gt;General&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Settings&lt;/strong&gt; has a &lt;strong&gt;Renewal&lt;/strong&gt; pane, with daily renewal and &lt;strong&gt;Renew Now&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;The app&apos;s icon and menu bar mark are a pit board with its top row lit, replacing three bars and a speedometer.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Settings&lt;/strong&gt; fits on screens as small as 1024 x 768: it opens at the top of the screen, and a long pane scrolls.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Pitboard 0.12.0</title><link>https://usepitboard.com/changelog#v0.12.0</link><guid isPermaLink="true">https://usepitboard.com/changelog#v0.12.0</guid><pubDate>Sun, 11 Oct 2026 17:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Each account shows its plan, such as &lt;code&gt;Max 20x&lt;/code&gt; or &lt;code&gt;Pro&lt;/code&gt;, in the app, the menu and &lt;code&gt;pitboard status&lt;/code&gt;, and as &lt;code&gt;plan&lt;/code&gt; in &lt;code&gt;--json&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;An &lt;a href=&quot;https://docs.usepitboard.com/install&quot;&gt;install script&lt;/a&gt;, &lt;code class=&quot;long&quot;&gt;curl -fsSL https://&lt;wbr&gt;usepitboard&lt;wbr&gt;.com/&lt;wbr&gt;install&lt;wbr&gt;.sh | sh&lt;/code&gt;, puts &lt;code&gt;pitboard&lt;/code&gt; in &lt;code&gt;~/.local/bin&lt;/code&gt; on macOS and Linux and edits no shell profile.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Pitboard 0.11.0</title><link>https://usepitboard.com/changelog#v0.11.0</link><guid isPermaLink="true">https://usepitboard.com/changelog#v0.11.0</guid><pubDate>Fri, 09 Oct 2026 17:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;Changed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Breaking:&lt;/strong&gt; &lt;code&gt;pitboard forget&lt;/code&gt;, &lt;code&gt;stow&lt;/code&gt; and &lt;code&gt;uninstall&lt;/code&gt; stop with &lt;code&gt;confirmation_needed&lt;/code&gt; where they cannot ask, such as from a script, unless given &lt;code&gt;--yes&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Breaking:&lt;/strong&gt; &lt;code&gt;--json&lt;/code&gt; no longer implies &lt;code&gt;--yes&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;The account index is schema 7, which earlier versions cannot read, so update the command line and the app together.&lt;/li&gt;&lt;li&gt;When Anthropic no longer accepts the Claude Code login in use, Pitboard marks the account &lt;code&gt;login_refused&lt;/code&gt; and says to sign in again with &lt;code&gt;claude&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;A switch, &lt;code&gt;pitboard stow&lt;/code&gt; and the automatic switch no longer stop on an expired Claude Code access token, and renew it as Claude Code would.&lt;/li&gt;&lt;li&gt;An interrupted &lt;code&gt;pitboard stow&lt;/code&gt; no longer loses a login it renewed.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Pitboard 0.10.0</title><link>https://usepitboard.com/changelog#v0.10.0</link><guid isPermaLink="true">https://usepitboard.com/changelog#v0.10.0</guid><pubDate>Fri, 09 Oct 2026 17:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;On macOS, &lt;code&gt;pitboard stow&lt;/code&gt; and &lt;strong&gt;Put Away&lt;/strong&gt; put away a Claude Code login left in &lt;code class=&quot;long&quot;&gt;~/&lt;wbr&gt;.claude/&lt;wbr&gt;.credentials&lt;wbr&gt;.json&lt;/code&gt;, parking it if Pitboard has none.&lt;/li&gt;&lt;li&gt;Pitboard warns with &lt;code&gt;config_names_another&lt;/code&gt; when Claude Code&apos;s config names another account than the one whose login is stored.&lt;/li&gt;&lt;li&gt;Pitboard warns with &lt;code&gt;in_use_unconfirmed&lt;/code&gt; when Claude Code&apos;s config has named another account since Anthropic last identified the stored login.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard doctor&lt;/code&gt; has an &lt;code&gt;in use&lt;/code&gt; check.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard use&lt;/code&gt; on the account in use, and &lt;strong&gt;Update Claude Code&apos;s Config&lt;/strong&gt; in the app, write that account into Claude Code&apos;s config.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard log&lt;/code&gt; records why the automatic switch did not switch, as &lt;code&gt;auto-stay&lt;/code&gt;, which &lt;strong&gt;Activity&lt;/strong&gt; shows as &lt;strong&gt;Automatic switch not made&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard watch --json&lt;/code&gt; has the event &lt;code&gt;waiting&lt;/code&gt;, and more fields on &lt;code&gt;idle&lt;/code&gt;, &lt;code&gt;no_room&lt;/code&gt; and &lt;code&gt;skipped&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Changed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Breaking:&lt;/strong&gt; The public API of &lt;code&gt;pitboard-core&lt;/code&gt; changes; &lt;a href=&quot;https://docs.rs/pitboard-core/0.10.0/pitboard_core/&quot;&gt;its documentation&lt;/a&gt; shows the new one.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Breaking:&lt;/strong&gt; &lt;code&gt;pitboard watch --json&lt;/code&gt; reports &lt;code&gt;switch_interrupted&lt;/code&gt; and &lt;code&gt;custom_oauth_endpoint&lt;/code&gt; with the new event &lt;code&gt;not_watching&lt;/code&gt;, not with &lt;code&gt;skipped&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;The account index is schema 6, which earlier versions cannot read, so update the command line and the app together.&lt;/li&gt;&lt;li&gt;While &lt;code class=&quot;long&quot;&gt;~/&lt;wbr&gt;.claude/&lt;wbr&gt;.credentials&lt;wbr&gt;.json&lt;/code&gt; is behind the keychain on macOS, every read warns with &lt;code&gt;fallback_login&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;While &lt;code class=&quot;long&quot;&gt;~/&lt;wbr&gt;.claude/&lt;wbr&gt;.credentials&lt;wbr&gt;.json&lt;/code&gt; is behind the keychain on macOS, a switch says running sessions keep their account until they renew their login or restart.&lt;/li&gt;&lt;li&gt;The app and &lt;code&gt;pitboard watch&lt;/code&gt; say once why Pitboard is not switching.&lt;/li&gt;&lt;li&gt;The app decides whether to switch every 30 seconds, as &lt;code&gt;pitboard watch&lt;/code&gt; does.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Switch when a limit reaches&lt;/strong&gt; shows which account the automatic switch watches.&lt;/li&gt;&lt;li&gt;After a failed switch, the automatic switch waits a minute, doubling up to 15 minutes, before it tries again.&lt;/li&gt;&lt;li&gt;The status line labels a session&apos;s usage &lt;code&gt;work?&lt;/code&gt; or &lt;code&gt;?&lt;/code&gt; while it cannot be sure whose it is.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Removed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Breaking:&lt;/strong&gt; &lt;code&gt;pitboard status --json&lt;/code&gt; no longer gives &lt;code class=&quot;long&quot;&gt;&quot;source&quot;: &quot;claude_&lt;wbr&gt;code_&lt;wbr&gt;cache&quot;&lt;/code&gt;, since Pitboard no longer reads Claude Code&apos;s usage cache.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Breaking:&lt;/strong&gt; &lt;code&gt;pitboard doctor&lt;/code&gt; no longer has the &lt;code&gt;usage_cache&lt;/code&gt; check.&lt;/li&gt;&lt;li&gt;Pitboard no longer has the error code &lt;code&gt;switch_overtaken&lt;/code&gt;, which it never printed.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;A sign-in outside Pitboard that replaces the login of the account in use shows as &lt;code class=&quot;long&quot;&gt;login replaced outside Pitboard&lt;/code&gt;, not &lt;code&gt;nothing parked&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;An account just switched to no longer shows the previous account&apos;s usage.&lt;/li&gt;&lt;li&gt;Numbers filed under the wrong Claude Code account go at that account&apos;s next answer from Anthropic.&lt;/li&gt;&lt;li&gt;The status line files a session&apos;s usage under the account the numbers belong to.&lt;/li&gt;&lt;li&gt;The app no longer offers an account whose reading may leave out a limit the account in use has.&lt;/li&gt;&lt;li&gt;The automatic switch and the app&apos;s offer can choose an account with fewer limits, such as a Team seat.&lt;/li&gt;&lt;li&gt;The automatic switch switches at the share the menu shows, so 95% shown counts as 95%.&lt;/li&gt;&lt;li&gt;Every front end rounds a half up and changes colour at 70% and 90%.&lt;/li&gt;&lt;li&gt;Pitboard takes the account in use from what Anthropic last said of the stored login, not from Claude Code&apos;s config.&lt;/li&gt;&lt;li&gt;The automatic switch identifies the stored login before it decides, and when it cannot tell, it decides nothing and says so.&lt;/li&gt;&lt;li&gt;The automatic switch judges every limit of the account in use.&lt;/li&gt;&lt;li&gt;The automatic switch says and records each reason it does not switch once.&lt;/li&gt;&lt;li&gt;A Claude Code switch no longer leaves the account switched from with a refused login when a session renews it at the same moment.&lt;/li&gt;&lt;li&gt;The app and &lt;code&gt;pitboard watch&lt;/code&gt; see a change made in the same second as the last one, such as a &lt;code&gt;pitboard use&lt;/code&gt; in a terminal.&lt;/li&gt;&lt;li&gt;The app and &lt;code&gt;pitboard watch&lt;/code&gt; no longer report a switch that another &lt;code&gt;pitboard&lt;/code&gt; is making as interrupted.&lt;/li&gt;&lt;li&gt;A login too large to pass without the argument line, under &lt;code&gt;PITBOARD_NO_ARGV&lt;/code&gt;, counts as one of the automatic switch&apos;s three attempts.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Pitboard 0.9.0</title><link>https://usepitboard.com/changelog#v0.9.0</link><guid isPermaLink="true">https://usepitboard.com/changelog#v0.9.0</guid><pubDate>Wed, 07 Oct 2026 17:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;On macOS, &lt;code&gt;pitboard doctor&lt;/code&gt; and each Claude Code change warn with &lt;code&gt;fallback_login&lt;/code&gt; when &lt;code class=&quot;long&quot;&gt;~/&lt;wbr&gt;.claude/&lt;wbr&gt;.credentials&lt;wbr&gt;.json&lt;/code&gt; holds a login besides the keychain&apos;s, which &lt;a href=&quot;https://docs.usepitboard.com/troubleshooting#claude-code-over-ssh-uses-another-account&quot;&gt;Claude Code over SSH&lt;/a&gt; uses.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard status&lt;/code&gt;, the app and, as &lt;code&gt;▲&lt;/code&gt; or &lt;code&gt;▼&lt;/code&gt;, the status line compare each limit&apos;s use with an even &lt;a href=&quot;https://docs.usepitboard.com/concepts/usage#pace&quot;&gt;pace&lt;/a&gt; to its reset, such as &lt;code&gt;27% over pace&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;code&gt;--json&lt;/code&gt; gives each limit&apos;s &lt;code&gt;pace&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard status --json&lt;/code&gt; gives each account&apos;s &lt;code&gt;organization_uuid&lt;/code&gt;, the Claude organisation its login belongs to.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Changed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Breaking:&lt;/strong&gt; A keychain locked where it cannot ask for its password stops a command with &lt;code&gt;credential_store_locked&lt;/code&gt;, not &lt;code class=&quot;long&quot;&gt;credential_&lt;wbr&gt;store_&lt;wbr&gt;unreadable&lt;/code&gt;. A script that checks for the old code should check for both.&lt;/li&gt;&lt;li&gt;The account index is schema 5, which earlier versions cannot read, so update the command line and the app together.&lt;/li&gt;&lt;li&gt;How long the account in use lasts follows its limits&apos; paces, as in &lt;code class=&quot;long&quot;&gt;weekly limit runs out in 11h 05m at this pace&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;Accounts not in use no longer say how long they last.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Removed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Pitboard no longer keeps &lt;code&gt;readings/&lt;/code&gt; in its directory, and deletes the files it wrote there.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;pitboard doctor&lt;/code&gt; and &lt;strong&gt;This Mac&lt;/strong&gt; report a locked keychain once, as a failed &lt;code&gt;credential&lt;/code&gt; check, not as parked logins that need a new sign-in.&lt;/li&gt;&lt;li&gt;While the login in use cannot be read, the account Pitboard last switched to shows &lt;code&gt;login could not be read&lt;/code&gt;, not &lt;strong&gt;Needs signing in again&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;Pitboard enrols one person&apos;s Claude accounts in two organisations, such as a claude.ai plan and a Team plan, as two accounts, where it refused the second.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Pitboard 0.8.0</title><link>https://usepitboard.com/changelog#v0.8.0</link><guid isPermaLink="true">https://usepitboard.com/changelog#v0.8.0</guid><pubDate>Wed, 07 Oct 2026 17:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Pitboard can &lt;a href=&quot;https://docs.usepitboard.com/guides/automatic-switching&quot;&gt;switch Claude Code automatically&lt;/a&gt; once any limit of the account in use reaches a share you choose.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard watch&lt;/code&gt; switches Claude Code automatically while it runs in a terminal, whatever the app&apos;s setting.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard watch&lt;/code&gt; takes &lt;code&gt;--at&lt;/code&gt; for the share it switches at, &lt;code&gt;--once&lt;/code&gt; to decide once and exit, and &lt;code&gt;--json&lt;/code&gt; for one event per line.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Settings&lt;/strong&gt; &amp;gt; &lt;strong&gt;General&lt;/strong&gt; has &lt;strong&gt;Switch Claude Code automatically&lt;/strong&gt;, off by default, with the share it switches at; the app switches only while open.&lt;/li&gt;&lt;li&gt;The app posts a notification for each automatic switch and for what stops one.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard doctor&lt;/code&gt; and &lt;strong&gt;This Mac&lt;/strong&gt; have a &lt;code&gt;network&lt;/code&gt; check that names the proxy Pitboard&apos;s requests go through, and warns about a SOCKS proxy or a proxy variable it cannot read.&lt;/li&gt;&lt;li&gt;The daily renewal schedule goes through the proxy of the Pitboard that installed it.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard doctor&lt;/code&gt;&apos;s &lt;code&gt;schedule_proxy&lt;/code&gt; check warns when the schedule&apos;s proxy differs from yours.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Changed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Breaking:&lt;/strong&gt; The public API of &lt;code&gt;pitboard-core&lt;/code&gt; changes; &lt;a href=&quot;https://docs.rs/pitboard-core/0.8.0/pitboard_core/&quot;&gt;its documentation&lt;/a&gt; shows the new one.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Breaking:&lt;/strong&gt; On macOS and Linux, Pitboard &lt;a href=&quot;https://docs.usepitboard.com/troubleshooting#pitboard-changes-nothing-as-root&quot;&gt;changes nothing as root&lt;/a&gt; or with &lt;code&gt;sudo&lt;/code&gt; and stops with &lt;code&gt;elevated&lt;/code&gt;, though &lt;code&gt;pitboard status&lt;/code&gt; still answers as with &lt;code&gt;--offline&lt;/code&gt;. Run it as yourself.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Breaking:&lt;/strong&gt; Pitboard refuses SOCKS proxies: while &lt;code&gt;ALL_PROXY&lt;/code&gt;, &lt;code&gt;HTTPS_PROXY&lt;/code&gt; or &lt;code&gt;HTTP_PROXY&lt;/code&gt; names one, requests fail as &lt;code&gt;unreachable&lt;/code&gt; unless &lt;code&gt;NO_PROXY&lt;/code&gt; names their host.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Breaking:&lt;/strong&gt; &lt;code&gt;pitboard schedule install&lt;/code&gt; and &lt;strong&gt;Renew parked logins daily&lt;/strong&gt; refuse with &lt;code&gt;schedule_not_default_home&lt;/code&gt; while &lt;code&gt;PITBOARD_HOME&lt;/code&gt; names a directory other than &lt;code&gt;~/.pitboard&lt;/code&gt;. Unset &lt;code&gt;PITBOARD_HOME&lt;/code&gt; to turn it on.&lt;/li&gt;&lt;li&gt;On Windows, &lt;code&gt;pitboard&lt;/code&gt; builds and refuses every command but &lt;code&gt;--version&lt;/code&gt;, &lt;code&gt;--help&lt;/code&gt;, &lt;code&gt;completions&lt;/code&gt; and &lt;code&gt;manpage&lt;/code&gt; with &lt;code&gt;windows_not_released&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;The product is called Pitboard, with a capital P, and the &lt;code&gt;pitboard&lt;/code&gt; command and every key it reads or prints stay the same.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard status&lt;/code&gt; names a limit that is not a whole number of hours by its minutes or seconds, such as &lt;code&gt;90m&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;The app writes spans as &lt;code&gt;pitboard status&lt;/code&gt; does, such as &lt;strong&gt;resets in 2h 05m&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;The app says &lt;strong&gt;resetting now&lt;/strong&gt; once a reset is due.&lt;/li&gt;&lt;li&gt;Under a minute, &lt;code&gt;pitboard status&lt;/code&gt; says &lt;code&gt;about to run out&lt;/code&gt; or &lt;code&gt;resets any moment&lt;/code&gt;, as the app does.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard doctor&lt;/code&gt; sums up in the same words as &lt;strong&gt;This Mac&lt;/strong&gt;, and &lt;code&gt;pitboard renew&lt;/code&gt; as &lt;strong&gt;Renew Now&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;The command line runs the &lt;code&gt;claude&lt;/code&gt; or &lt;code&gt;codex&lt;/code&gt; that &lt;code&gt;PITBOARD_CLAUDE&lt;/code&gt; or &lt;code&gt;PITBOARD_CODEX&lt;/code&gt; names, as the app does.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard doctor&lt;/code&gt; reports the build of the &lt;code&gt;claude&lt;/code&gt; or &lt;code&gt;codex&lt;/code&gt; that &lt;code&gt;PITBOARD_CLAUDE&lt;/code&gt; or &lt;code&gt;PITBOARD_CODEX&lt;/code&gt; names.&lt;/li&gt;&lt;li&gt;An empty &lt;code&gt;PITBOARD_CLAUDE&lt;/code&gt; or &lt;code&gt;PITBOARD_CODEX&lt;/code&gt; names nothing.&lt;/li&gt;&lt;li&gt;Pitboard reads a few rare shared links differently, such as &lt;code&gt;ｃ%EF%BD%8Caude.ai&lt;/code&gt;, which it now takes for claude.ai.&lt;/li&gt;&lt;li&gt;The app&apos;s preferences, such as the tools you said &lt;strong&gt;Not Now&lt;/strong&gt; to, follow &lt;code&gt;PITBOARD_HOME&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;The app posts that the account in use has run out once per reset, even across relaunches.&lt;/li&gt;&lt;li&gt;The app updates text that depends only on the time, such as &lt;strong&gt;used up until 14:05&lt;/strong&gt;, once a minute.&lt;/li&gt;&lt;li&gt;The app&apos;s settings update what they offer each time they are shown.&lt;/li&gt;&lt;li&gt;The &lt;strong&gt;Activity&lt;/strong&gt; list names a switch &lt;strong&gt;Switch&lt;/strong&gt;, where it said &lt;strong&gt;Use&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;When the app cannot read its record of the account windows, it deletes no window&apos;s data and never writes over the record.&lt;/li&gt;&lt;li&gt;&lt;code&gt;--json&lt;/code&gt; output is ASCII only, with other characters as &lt;code&gt;\u&lt;/code&gt; escapes that a JSON parser reads as before.&lt;/li&gt;&lt;li&gt;Pitboard&apos;s own Codex sign-ins keep the new login in &lt;code&gt;auth.json&lt;/code&gt;, even when a Codex config chooses the keychain.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard doctor&lt;/code&gt; and &lt;strong&gt;This Mac&lt;/strong&gt; say which setting chose Codex&apos;s login store, such as &lt;code&gt;file (Codex&apos;s default)&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Breaking:&lt;/strong&gt; With &lt;code&gt;HOME&lt;/code&gt;, &lt;code&gt;PITBOARD_HOME&lt;/code&gt; or &lt;code&gt;CLAUDE_CONFIG_DIR&lt;/code&gt; empty or relative, or &lt;code&gt;CODEX_HOME&lt;/code&gt; relative, Pitboard refuses every command but &lt;code&gt;completions&lt;/code&gt;, &lt;code&gt;manpage&lt;/code&gt; and &lt;code&gt;doctor&lt;/code&gt; with &lt;code&gt;home_not_absolute&lt;/code&gt;. Set a full path or unset the variable.&lt;/li&gt;&lt;li&gt;When the account in use runs out, the app offers only an account with room in every limit.&lt;/li&gt;&lt;li&gt;Where Pitboard cannot list running processes, a Codex switch, or a sign-in that puts a new login in use, warns with &lt;code&gt;sessions_unknown&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;Pitboard reads Codex&apos;s login store from every config layer Codex reads, such as &lt;code&gt;/etc/codex&lt;/code&gt; and managed preferences.&lt;/li&gt;&lt;li&gt;Codex changes stop with &lt;code&gt;live_store_unsupported&lt;/code&gt; where a Codex config layer chooses a store other than the file.&lt;/li&gt;&lt;li&gt;Codex changes stop with &lt;code&gt;live_store_unsupported&lt;/code&gt; where a Codex config layer cannot be read, names an unknown store or has an unmatched &lt;code&gt;profile&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;Pitboard no longer refuses a Codex account where &lt;code&gt;config.toml&lt;/code&gt; chooses another store but a managed setting or a requirement chooses the file.&lt;/li&gt;&lt;li&gt;An account&apos;s window opens again on the page before a sign-in page, or on the site&apos;s home, not on the sign-in page.&lt;/li&gt;&lt;li&gt;After Claude Code refuses a pasted code, the sign-in sheet asks for the code again.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Sign In&lt;/strong&gt; pressed right after &lt;strong&gt;Cancel&lt;/strong&gt; no longer says another sign-in is already waiting.&lt;/li&gt;&lt;li&gt;The app reads again right after you add, rename or forget an account, give up on a switch or press &lt;strong&gt;Renew Now&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;The window says when a sign-in fails, or a name cannot be saved, after its sheet has closed.&lt;/li&gt;&lt;li&gt;Quitting Pitboard stops a sign-in under way, and the tool&apos;s own sign-in with it.&lt;/li&gt;&lt;li&gt;The window shows two warnings with the same words as two notices.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;This Mac&lt;/strong&gt; gives each account&apos;s parked login check its own row.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;This Mac&lt;/strong&gt; says it is checking until the last check is in, not &lt;strong&gt;Checked at&lt;/strong&gt; beside checks still running.&lt;/li&gt;&lt;li&gt;After an interrupted switch Pitboard cannot finish, the app shows &lt;strong&gt;An interrupted switch is waiting&lt;/strong&gt;, with &lt;strong&gt;Give Up&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;After an interrupted switch Pitboard cannot finish, &lt;code&gt;pitboard status&lt;/code&gt; warns with &lt;code&gt;recovery_undetermined&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard abandon&lt;/code&gt; and &lt;strong&gt;Give Up&lt;/strong&gt; give up on an interrupted Codex switch while &lt;code class=&quot;long&quot;&gt;CLAUDE_&lt;wbr&gt;CODE_&lt;wbr&gt;CUSTOM_&lt;wbr&gt;OAUTH_&lt;wbr&gt;URL&lt;/code&gt; is set.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard doctor&lt;/code&gt; and the app&apos;s checks no longer warn that a parked login could not be read after a switch, an enrolment or a renewal.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard doctor&lt;/code&gt;&apos;s advice about a login others can read is one sentence again.&lt;/li&gt;&lt;li&gt;The note under the sign-in sheet&apos;s &lt;strong&gt;Code&lt;/strong&gt; field says Claude Code takes the code shown after you sign in.&lt;/li&gt;&lt;li&gt;The sign-in sheet links the right address when Claude Code prints it as a terminal hyperlink.&lt;/li&gt;&lt;li&gt;With &lt;code&gt;HOME&lt;/code&gt; unset, the command line uses your account&apos;s home directory, as the app does.&lt;/li&gt;&lt;li&gt;The daily renewal schedule renews &lt;code&gt;~/.pitboard&lt;/code&gt;, even when &lt;code&gt;PITBOARD_HOME&lt;/code&gt; reaches it through &lt;code&gt;launchctl setenv&lt;/code&gt; or systemd&apos;s user environment.&lt;/li&gt;&lt;li&gt;On Linux, the daily renewal timer runs &lt;code&gt;pitboard renew --scheduled&lt;/code&gt; once &lt;code&gt;pitboard schedule install&lt;/code&gt; rewrites it.&lt;/li&gt;&lt;li&gt;The command line and the app take a &lt;code&gt;claude&lt;/code&gt; or &lt;code&gt;codex&lt;/code&gt; only when it is a regular file you may run.&lt;/li&gt;&lt;li&gt;The app honours the environment it was started with, such as &lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt;, though opened from Finder it sees only what &lt;code&gt;launchctl setenv&lt;/code&gt; sets.&lt;/li&gt;&lt;li&gt;The &lt;strong&gt;Open Link&lt;/strong&gt; window and the Share sheet name claude.ai and chatgpt.com in English, whatever the Mac&apos;s language.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Security&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Breaking:&lt;/strong&gt; Pitboard refuses any folder in &lt;code&gt;~/Library/CloudStorage&lt;/code&gt; or &lt;code&gt;~/Library/Mobile Documents&lt;/code&gt; as its directory, with &lt;code&gt;state_on_synced_drive&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Breaking:&lt;/strong&gt; Pitboard refuses a &lt;code&gt;~/.pitboard&lt;/code&gt; with a sync client&apos;s folder name, such as &lt;code&gt;Dropbox&lt;/code&gt; or &lt;code&gt;Sync&lt;/code&gt;, anywhere in its path, in any case. Set &lt;code&gt;PITBOARD_HOME&lt;/code&gt; to a folder outside it.&lt;/li&gt;&lt;li&gt;Pitboard writes the daily renewal schedule&apos;s files so only you can read them, since they can hold a proxy&apos;s password.&lt;/li&gt;&lt;li&gt;Pitboard refuses a site&apos;s sign-in link, or a link with a &lt;code&gt;.&lt;/code&gt; or &lt;code&gt;..&lt;/code&gt; path segment, however the rest of its path is written.&lt;/li&gt;&lt;li&gt;Pitboard refuses a link that names a user or a port, and a &lt;code&gt;pitboard://&lt;/code&gt; link with a user, a port or a path.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Pitboard 0.7.0</title><link>https://usepitboard.com/changelog#v0.7.0</link><guid isPermaLink="true">https://usepitboard.com/changelog#v0.7.0</guid><pubDate>Sat, 03 Oct 2026 17:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;The app gives each account a &lt;a href=&quot;https://docs.usepitboard.com/guides/account-windows&quot;&gt;window on its tool&apos;s site&lt;/a&gt;, claude.ai or chatgpt.com, so every account stays signed in side by side.&lt;/li&gt;&lt;li&gt;An account&apos;s window has Back, Forward, Reload, zoom and &lt;strong&gt;Find&lt;/strong&gt;, with Safari&apos;s shortcuts.&lt;/li&gt;&lt;li&gt;An account&apos;s window opens at the last page it showed.&lt;/li&gt;&lt;li&gt;When an account&apos;s window first opens, a note says how to sign in, since Google&apos;s sign-in does not work inside apps.&lt;/li&gt;&lt;li&gt;An account&apos;s window opens other web pages in your default browser.&lt;/li&gt;&lt;li&gt;An account&apos;s window saves downloads to your Downloads folder without replacing a file.&lt;/li&gt;&lt;li&gt;An account&apos;s window asks before a download that an artifact or another site starts.&lt;/li&gt;&lt;li&gt;The &lt;strong&gt;Downloads&lt;/strong&gt; button lists an account window&apos;s downloads.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;File&lt;/strong&gt; &amp;gt; &lt;strong&gt;Remove Website Data&lt;/strong&gt; signs an account&apos;s window out on this Mac only.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Pitboard&lt;/strong&gt; in a browser&apos;s Share menu opens a claude.ai or chatgpt.com page as the account you pick.&lt;/li&gt;&lt;li&gt;While any of its windows is open, Pitboard has a Dock icon, is in Command-Tab and shows its menus in the menu bar.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Changed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;View&lt;/strong&gt; &amp;gt; &lt;strong&gt;Refresh&lt;/strong&gt; (Command-R) works in every window, and reloads the page in an account&apos;s window.&lt;/li&gt;&lt;li&gt;Forgetting an account also deletes everything its window keeps on this Mac, its sign-in included.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;long&quot;&gt;brew uninstall --zap --cask pitboard-app&lt;/code&gt; also removes the account windows&apos; data.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Pitboard 0.6.0</title><link>https://usepitboard.com/changelog#v0.6.0</link><guid isPermaLink="true">https://usepitboard.com/changelog#v0.6.0</guid><pubDate>Wed, 30 Sep 2026 17:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Switching Codex in the app while the ChatGPT app is open offers &lt;strong&gt;Quit ChatGPT and Switch&lt;/strong&gt;, which quits ChatGPT, switches and opens it again; the command line never quits an app.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Changed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Breaking:&lt;/strong&gt; The public API of &lt;code&gt;pitboard-core&lt;/code&gt; changes; &lt;a href=&quot;https://docs.rs/pitboard-core/0.6.0/pitboard_core/&quot;&gt;its documentation&lt;/a&gt; shows the new one.&lt;/li&gt;&lt;li&gt;After a Codex switch, Pitboard names each program still running the old login and how to make it take the new one.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard doctor&lt;/code&gt;&apos;s &lt;code&gt;codex_running&lt;/code&gt; check lists the programs still running the old Codex login.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;A switch counts only your own &lt;code&gt;codex&lt;/code&gt; processes, not every user&apos;s.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Pitboard 0.5.2</title><link>https://usepitboard.com/changelog#v0.5.2</link><guid isPermaLink="true">https://usepitboard.com/changelog#v0.5.2</guid><pubDate>Mon, 28 Sep 2026 17:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;After a banked reset on claude.ai, Pitboard shows the account&apos;s lower weekly share at its next read, not 100% until the old reset.&lt;/li&gt;&lt;li&gt;Pitboard shows the right weekly share after a plan upgrade mid-window.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Pitboard 0.5.1</title><link>https://usepitboard.com/changelog#v0.5.1</link><guid isPermaLink="true">https://usepitboard.com/changelog#v0.5.1</guid><pubDate>Mon, 28 Sep 2026 17:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;pitboard status --fresh&lt;/code&gt; and the app&apos;s &lt;strong&gt;Refresh&lt;/strong&gt; no longer ask again during a wait the service asked for with &lt;code&gt;Retry-After&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;An account whose service never answered and then could not be reached no longer shows as rate limited.&lt;/li&gt;&lt;li&gt;With &lt;code&gt;PITBOARD_NO_ARGV=1&lt;/code&gt;, renewing a parked login too large for &lt;code&gt;security&lt;/code&gt;&apos;s standard input no longer loses it.&lt;/li&gt;&lt;li&gt;A switch whose login could not be read back names the &lt;code&gt;pitboard use&lt;/code&gt; that finishes or undoes it.&lt;/li&gt;&lt;li&gt;With Codex&apos;s &lt;code&gt;auth.json&lt;/code&gt; missing, &lt;code&gt;pitboard doctor&lt;/code&gt; says to run &lt;code&gt;codex login&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;The man page covers every command on its one page, instead of naming pages that were never installed.&lt;/li&gt;&lt;li&gt;The app says Claude Code is not installed when it finds neither &lt;code&gt;claude&lt;/code&gt; nor &lt;code&gt;codex&lt;/code&gt;, and no login or enrolled account.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Security&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;The app, and a renewal schedule installed while &lt;code&gt;PITBOARD_NO_ARGV&lt;/code&gt; is set, honour it, so a large login never reaches &lt;code&gt;security&lt;/code&gt; as an argument another process running as you could read.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Pitboard 0.5.0</title><link>https://usepitboard.com/changelog#v0.5.0</link><guid isPermaLink="true">https://usepitboard.com/changelog#v0.5.0</guid><pubDate>Sun, 27 Sep 2026 17:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;The window&apos;s account list can rename an account.&lt;/li&gt;&lt;li&gt;Double-click or Return in the window&apos;s account list switches to that account.&lt;/li&gt;&lt;li&gt;Delete in the window&apos;s account list forgets the account.&lt;/li&gt;&lt;li&gt;Each account&apos;s menu in the window has &lt;strong&gt;Copy Email Address&lt;/strong&gt; and &lt;strong&gt;Sign In Again&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;The menu has &lt;strong&gt;About Pitboard&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Settings&lt;/strong&gt; has a &lt;strong&gt;Command Line&lt;/strong&gt; tab.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Menu bar shows&lt;/strong&gt; in &lt;strong&gt;Settings&lt;/strong&gt; picks the account and usage, the usage alone or the icon alone.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Changed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;The menu bar item opens a menu, not a panel, with each account under its tool, and choosing one switches to it.&lt;/li&gt;&lt;li&gt;Adding an account, signing in again and renaming are sheets over Pitboard&apos;s window.&lt;/li&gt;&lt;li&gt;A sheet stays open while your browser is in front.&lt;/li&gt;&lt;li&gt;A failed switch, rename or forget says why in an alert, and a failed sign-in says so in its sheet.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Open Pitboard at login&lt;/strong&gt; says when macOS waits for your approval in Login Items.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;The menu shows when it last read, not &quot;updated just now&quot;.&lt;/li&gt;&lt;li&gt;The window&apos;s reset times stay current while it is open.&lt;/li&gt;&lt;li&gt;Giving up on an interrupted switch shows as a note, not as a failure.&lt;/li&gt;&lt;li&gt;A failure to change daily renewal or &lt;strong&gt;Open Pitboard at login&lt;/strong&gt; shows in Settings.&lt;/li&gt;&lt;li&gt;Switching one tool&apos;s account no longer hides advice about another tool&apos;s account that ran out.&lt;/li&gt;&lt;li&gt;Advice to switch no longer offers an account that was forgotten, expired or ran out since.&lt;/li&gt;&lt;li&gt;A read in flight when you switch no longer lands after the switch and shows the account before it.&lt;/li&gt;&lt;li&gt;The window says why any account&apos;s numbers are not new, the one in use included.&lt;/li&gt;&lt;li&gt;The menu and the window describe each account the same way.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Pitboard 0.4.1</title><link>https://usepitboard.com/changelog#v0.4.1</link><guid isPermaLink="true">https://usepitboard.com/changelog#v0.4.1</guid><pubDate>Fri, 25 Sep 2026 17:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;Changed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Pitboard keeps one usage reading per account that only moves forward, so a session&apos;s older numbers no longer replace newer ones.&lt;/li&gt;&lt;li&gt;The app&apos;s &lt;strong&gt;Documentation&lt;/strong&gt; item opens docs.usepitboard.com.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Every session on one account, &lt;code&gt;pitboard status&lt;/code&gt; and the menu bar show the same, newest numbers, and idle sessions follow with &lt;code&gt;&quot;refreshInterval&quot;: 10&lt;/code&gt; in the status line settings.&lt;/li&gt;&lt;li&gt;A session still holding the previous account&apos;s numbers after a switch or a &lt;code&gt;/login&lt;/code&gt; no longer records them as the new account&apos;s.&lt;/li&gt;&lt;li&gt;The advice to switch stays for as long as the account in use is out, not only until the app&apos;s next read.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Pitboard 0.4.0</title><link>https://usepitboard.com/changelog#v0.4.0</link><guid isPermaLink="true">https://usepitboard.com/changelog#v0.4.0</guid><pubDate>Thu, 24 Sep 2026 17:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Settings&lt;/strong&gt; &amp;gt; &lt;strong&gt;Advanced&lt;/strong&gt; shows which &lt;code&gt;pitboard&lt;/code&gt; a terminal runs.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Install command line tool…&lt;/strong&gt; in &lt;strong&gt;Settings&lt;/strong&gt; &amp;gt; &lt;strong&gt;Advanced&lt;/strong&gt; links &lt;code&gt;/usr/local/bin/pitboard&lt;/code&gt; to the app&apos;s own, and never replaces a &lt;code&gt;pitboard&lt;/code&gt; someone else installed.&lt;/li&gt;&lt;li&gt;An account whose parked login has expired has a &lt;strong&gt;Sign in again&lt;/strong&gt; button in its row.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Changed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Breaking:&lt;/strong&gt; In the tap, &lt;code&gt;pitboard&lt;/code&gt; is the command line&apos;s cask and the app&apos;s cask is &lt;code&gt;pitboard-app&lt;/code&gt;. &lt;a href=&quot;https://docs.usepitboard.com/install/upgrade-from-0-3-0&quot;&gt;Upgrade from 0.3.0 or earlier&lt;/a&gt; has the commands to move.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Breaking:&lt;/strong&gt; The public API of &lt;code&gt;pitboard-core&lt;/code&gt; changes; &lt;a href=&quot;https://docs.rs/pitboard-core/0.4.0/pitboard_core/&quot;&gt;its documentation&lt;/a&gt; shows the new one.&lt;/li&gt;&lt;li&gt;The app carries the command line inside it, so an update moves both.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;long&quot;&gt;brew install datlechin/&lt;wbr&gt;tap/&lt;wbr&gt;pitboard&lt;/code&gt; installs the release&apos;s own command line as a cask, on macOS and Linux, without compiling.&lt;/li&gt;&lt;li&gt;From the old formula, &lt;code&gt;brew update&lt;/code&gt; leaves Pitboard at 0.3.0, so uninstall the formula before you install the cask.&lt;/li&gt;&lt;li&gt;From the old app cask, &lt;code&gt;brew update&lt;/code&gt; replaces the app with the command line once, and keeps your settings and &lt;code&gt;~/.pitboard&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;Removing the old app cask with &lt;code&gt;--zap&lt;/code&gt; moves &lt;code&gt;~/.pitboard&lt;/code&gt; to the Trash, so leave &lt;code&gt;--zap&lt;/code&gt; out.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Removed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Releases no longer publish a source tarball; the source is on crates.io and in the tag.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Daily renewal turned on from the app runs the command line inside the app, instead of starting a second copy of the app every day.&lt;/li&gt;&lt;li&gt;Opening the app points a 0.3.0 renewal schedule at the command line inside it.&lt;/li&gt;&lt;li&gt;The app no longer turns daily renewal on from the temporary copy macOS runs before the app is in Applications.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard doctor&lt;/code&gt; and &lt;strong&gt;Check this machine&lt;/strong&gt; fail when the renewal schedule runs a &lt;code&gt;pitboard&lt;/code&gt; that is gone or is an app.&lt;/li&gt;&lt;li&gt;On Linux, a renewal schedule turned on from the command line keeps working after &lt;code&gt;brew upgrade&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard uninstall&lt;/code&gt; removes the renewal schedule first, as &lt;code&gt;schedule_removed&lt;/code&gt; in &lt;code&gt;--json&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;Both casks remove the renewal schedule only on &lt;code&gt;brew uninstall --zap&lt;/code&gt;, and neither touches &lt;code&gt;~/.pitboard&lt;/code&gt;, so run &lt;code&gt;pitboard uninstall&lt;/code&gt; before removing Pitboard.&lt;/li&gt;&lt;li&gt;Advice about upgrading or removing Pitboard no longer assumes Homebrew.&lt;/li&gt;&lt;li&gt;On Homebrew 6 and later, the app&apos;s cask installs without the formula installed first.&lt;/li&gt;&lt;li&gt;&lt;code&gt;cargo binstall pitboard&lt;/code&gt; no longer falls back to a third party&apos;s build when it cannot fetch the release&apos;s.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Pitboard 0.3.0</title><link>https://usepitboard.com/changelog#v0.3.0</link><guid isPermaLink="true">https://usepitboard.com/changelog#v0.3.0</guid><pubDate>Wed, 23 Sep 2026 17:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Pitboard switches Codex accounts too, with &lt;code class=&quot;long&quot;&gt;pitboard enroll codex/&lt;wbr&gt;&amp;lt;label&amp;gt;&lt;/code&gt; and &lt;code&gt;pitboard use codex/&amp;lt;label&amp;gt;&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;long&quot;&gt;pitboard enroll codex/&lt;wbr&gt;&amp;lt;label&amp;gt; --sign-in&lt;/code&gt; runs &lt;code&gt;codex login&lt;/code&gt; in a private &lt;code&gt;CODEX_HOME&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard&lt;/code&gt; shows each Codex account&apos;s five-hour and weekly limits.&lt;/li&gt;&lt;li&gt;Pitboard handles Codex&apos;s &lt;code&gt;auth.json&lt;/code&gt; store, and refuses Codex&apos;s keychain stores with a reason.&lt;/li&gt;&lt;li&gt;Until a Codex account is enrolled, Pitboard reads nothing of Codex&apos;s and asks OpenAI nothing.&lt;/li&gt;&lt;li&gt;A Codex switch says that running &lt;code&gt;codex&lt;/code&gt; sessions keep the old account until restarted, and how many it found.&lt;/li&gt;&lt;li&gt;A Codex switch warns that signing out in a running &lt;code&gt;codex&lt;/code&gt; would revoke the login just parked.&lt;/li&gt;&lt;li&gt;A Codex switch writes nothing over a login that a running &lt;code&gt;codex&lt;/code&gt; renewed meanwhile.&lt;/li&gt;&lt;li&gt;A Codex switch refuses to park a login that names two accounts.&lt;/li&gt;&lt;li&gt;The app&apos;s panel groups accounts by tool.&lt;/li&gt;&lt;li&gt;The menu bar follows the signed-in account closest to running out, of either tool.&lt;/li&gt;&lt;li&gt;When an account runs out, the app offers only an account of the same tool.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Add another account&lt;/strong&gt; asks which tool when both are installed.&lt;/li&gt;&lt;li&gt;A Codex sign-in in the app shows the address &lt;code&gt;codex login&lt;/code&gt; printed.&lt;/li&gt;&lt;li&gt;Labels belong to a tool: &lt;code&gt;work&lt;/code&gt; can name a Claude Code and a Codex account, and &lt;code&gt;codex/work&lt;/code&gt; says which.&lt;/li&gt;&lt;li&gt;A bare label means Claude Code for a new account, and is refused as &lt;code&gt;label_ambiguous&lt;/code&gt; where it matches both tools.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard adopt&lt;/code&gt; takes over a &lt;code&gt;~/.pitboard&lt;/code&gt; written on another computer, keeping each account&apos;s label, email and usage and dropping every parked login.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard repair&lt;/code&gt; finds every parked login in the keychain or vault, and gives it back to its account, deletes it or reports it.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard repair&lt;/code&gt; deletes only logins this Pitboard recorded.&lt;/li&gt;&lt;li&gt;On macOS, a login &lt;code&gt;pitboard repair&lt;/code&gt; gave back that this Pitboard never recorded is deleted only once Pitboard has used it.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard uninstall&lt;/code&gt; says how many parked logins it left that this Pitboard never recorded, as &lt;code&gt;parks_left&lt;/code&gt; in &lt;code&gt;--json&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;A failed request to Anthropic carries a cause beside its code, such as &lt;code&gt;unreachable&lt;/code&gt;, &lt;code&gt;rate_limited&lt;/code&gt; or &lt;code&gt;login_refused&lt;/code&gt;, in &lt;code&gt;--json&lt;/code&gt; and the app.&lt;/li&gt;&lt;li&gt;A failed request to Anthropic says whether asking again can help, and &lt;code&gt;pitboard status&lt;/code&gt; tells the causes apart.&lt;/li&gt;&lt;li&gt;The app has a window with each account&apos;s usage history, the full change log and what &lt;code&gt;doctor&lt;/code&gt; found.&lt;/li&gt;&lt;li&gt;The app has a &lt;strong&gt;Settings&lt;/strong&gt; window, opened with Command-comma, that can turn on scheduled renewal.&lt;/li&gt;&lt;li&gt;On a first run, the app says what state the machine is in and offers the next step.&lt;/li&gt;&lt;li&gt;The app&apos;s first launch opens its window.&lt;/li&gt;&lt;li&gt;The app can give up on an interrupted switch that recovery cannot finish.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard doctor&lt;/code&gt; fails when anyone but the owner can read a stored login.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard doctor&lt;/code&gt; lists what fills a login too large to store, largest first.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard doctor&lt;/code&gt; says when an account has gone unused longer than its refresh token lasts.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard doctor&lt;/code&gt; reports Claude Code&apos;s supervisor daemon, which also writes the login.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard doctor&lt;/code&gt; shows the installed Claude Code version, beside the version Pitboard&apos;s facts about it were checked against.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard doctor&lt;/code&gt; has &lt;code&gt;environment.codex&lt;/code&gt;, and Codex checks whose codes start &lt;code&gt;codex_&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard doctor&lt;/code&gt; fails or warns about a Codex keychain store or API key login only where it stands in the way of enrolled Codex accounts.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard doctor&lt;/code&gt; says what Pitboard holds back from asking Anthropic.&lt;/li&gt;&lt;li&gt;Pitboard keeps two weeks of each account&apos;s usage, and says how long the account lasts at its recent rate.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard status&lt;/code&gt; names the credential slot it reports on, which &lt;code&gt;CLAUDE_CONFIG_DIR&lt;/code&gt; selects.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard renew&lt;/code&gt; renews every parked login that is due.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard status --fresh&lt;/code&gt; and the app&apos;s &lt;strong&gt;Refresh&lt;/strong&gt; ask at once, but never during a wait the service asked for with &lt;code&gt;Retry-After&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard schedule install&lt;/code&gt; runs &lt;code&gt;pitboard renew&lt;/code&gt; on a schedule, through a LaunchAgent on macOS or a systemd user timer on Linux.&lt;/li&gt;&lt;li&gt;Pitboard warns when Claude Code&apos;s settings set an &lt;code&gt;env&lt;/code&gt; block, an &lt;code&gt;apiKeyHelper&lt;/code&gt; or a third-party provider that makes sessions ignore the login it switches.&lt;/li&gt;&lt;li&gt;A custom OAuth endpoint set in Claude Code&apos;s settings refuses a switch.&lt;/li&gt;&lt;li&gt;&lt;code&gt;PITBOARD_NO_ARGV=1&lt;/code&gt; refuses a login too large for &lt;code&gt;security&lt;/code&gt;&apos;s standard input, instead of passing it as an argument.&lt;/li&gt;&lt;li&gt;What Pitboard removes from Claude Code&apos;s config goes into &lt;code&gt;pitboard log&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;In &lt;code&gt;--json&lt;/code&gt;, &lt;code&gt;use&lt;/code&gt;, enrolments and renewals give &lt;code&gt;provider&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard use --json&lt;/code&gt; gives &lt;code&gt;adoption&lt;/code&gt;, which says whether running sessions follow on their own or need restarting.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard status --json&lt;/code&gt; gives each account &lt;code&gt;provider&lt;/code&gt; and &lt;code&gt;qualified&lt;/code&gt;, such as &lt;code&gt;codex/work&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard status --json&lt;/code&gt; gives &lt;code&gt;login_unreadable&lt;/code&gt; for a login Pitboard cannot read, and &lt;code&gt;login_unusable&lt;/code&gt; for one it cannot switch, such as an API key.&lt;/li&gt;&lt;li&gt;Each limit in &lt;code&gt;--json&lt;/code&gt; gives &lt;code&gt;length_seconds&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;Each release artefact comes with a CycloneDX bill of materials.&lt;/li&gt;&lt;li&gt;The bills of materials, &lt;code&gt;SHA256SUMS&lt;/code&gt; and &lt;code&gt;appcast.xml&lt;/code&gt; are attested like the artefacts.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Changed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Breaking:&lt;/strong&gt; A Claude Code credential with no account, as &lt;code&gt;/logout&lt;/code&gt; leaves, makes &lt;code&gt;use&lt;/code&gt; and &lt;code&gt;enroll&lt;/code&gt; exit 1 with &lt;code&gt;live_credential_absent&lt;/code&gt;, not 3 with &lt;code class=&quot;long&quot;&gt;live_&lt;wbr&gt;credential_&lt;wbr&gt;shape_&lt;wbr&gt;unexpected&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Breaking:&lt;/strong&gt; The public API of &lt;code&gt;pitboard-core&lt;/code&gt; changes; &lt;a href=&quot;https://docs.rs/pitboard-core/0.3.0/pitboard_core/&quot;&gt;its documentation&lt;/a&gt; shows the new one.&lt;/li&gt;&lt;li&gt;The account index is schema 4, which earlier versions cannot read; they say which of the command line and the app to update.&lt;/li&gt;&lt;li&gt;Pitboard brings a schema 3 account index forward on first read.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard doctor&lt;/code&gt; warns, instead of failing, when Claude Code&apos;s credential holds no account.&lt;/li&gt;&lt;li&gt;Messages name the tool, service and sign-in command of the account they are about.&lt;/li&gt;&lt;li&gt;Messages qualify a label to type, such as &lt;code&gt;claude/work&lt;/code&gt;, where a bare one would be ambiguous.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;long&quot;&gt;CLAUDE_&lt;wbr&gt;CODE_&lt;wbr&gt;CUSTOM_&lt;wbr&gt;OAUTH_&lt;wbr&gt;URL&lt;/code&gt; refuses changes to Claude Code accounts only, not to Codex ones.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard doctor&lt;/code&gt; warns about the storage v5 flag only when it is on and the login is in the fallback store.&lt;/li&gt;&lt;li&gt;Pitboard asks Anthropic about an account again only once its tightest limit could have moved by a percentage point.&lt;/li&gt;&lt;li&gt;Every front end waits out a refusal for as long as &lt;code&gt;Retry-After&lt;/code&gt; says.&lt;/li&gt;&lt;li&gt;An interrupted switch is recovered without a network in most cases.&lt;/li&gt;&lt;li&gt;The app shows the last measured numbers when Anthropic cannot be reached, not an empty panel.&lt;/li&gt;&lt;li&gt;Text in the app grows with the system text size without clipping.&lt;/li&gt;&lt;li&gt;VoiceOver reads each account row as one item, and says whether each check passed.&lt;/li&gt;&lt;li&gt;A login too large for &lt;code&gt;security&lt;/code&gt;&apos;s standard input is passed as an argument, as Claude Code does, and the switch says so.&lt;/li&gt;&lt;li&gt;Homebrew serves each release as it is published, not up to a day later.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;The app follows a switch made elsewhere on the machine, such as in a terminal, within seconds, not up to five minutes later.&lt;/li&gt;&lt;li&gt;A run killed while parking a login no longer leaves a live login that nothing names, and &lt;code&gt;pitboard doctor&lt;/code&gt; reports any left.&lt;/li&gt;&lt;li&gt;A parked Claude Code login keeps the account&apos;s other credential keys, such as its device token, and a switch back restores them.&lt;/li&gt;&lt;li&gt;Cancelling a sign-in no longer holds the app.&lt;/li&gt;&lt;li&gt;The app shows every warning, not only the first.&lt;/li&gt;&lt;li&gt;A failed read in the app shows its own warnings, not those of the last read that worked.&lt;/li&gt;&lt;li&gt;VoiceOver no longer calls the status item &quot;speedometer&quot;.&lt;/li&gt;&lt;li&gt;The app finds &lt;code&gt;claude&lt;/code&gt; and &lt;code&gt;codex&lt;/code&gt; installed through a Node version manager such as nvm or volta, or a custom npm prefix.&lt;/li&gt;&lt;li&gt;&lt;code class=&quot;long&quot;&gt;pitboard enroll &amp;lt;label&amp;gt; --sign-in&lt;/code&gt; for the account in use puts the new login in use, where it parked it.&lt;/li&gt;&lt;li&gt;When Pitboard cannot confirm a new sign-in is in use, it parks the login rather than lose it, and says why.&lt;/li&gt;&lt;li&gt;A renewal interrupted after writing the fresh login no longer loses that login on the next run.&lt;/li&gt;&lt;li&gt;Recovering an interrupted switch from another &lt;code&gt;CODEX_HOME&lt;/code&gt; or &lt;code&gt;CLAUDE_CONFIG_DIR&lt;/code&gt; stops with &lt;code&gt;recovery_elsewhere&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;A command refused over a mistyped name still finishes or undoes an interrupted switch, and reports it.&lt;/li&gt;&lt;li&gt;Labels written by 0.1.x that contain a slash can be switched to, forgotten, renamed and signed in to again.&lt;/li&gt;&lt;li&gt;Pitboard no longer asks about an account as often as once a minute over limit kinds it did not know, such as &lt;code&gt;session&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;Changing Claude Code&apos;s config no longer loses what Claude Code wrote to it meanwhile, such as project history.&lt;/li&gt;&lt;li&gt;A renewed login&apos;s expiry follows Anthropic&apos;s clock, not this machine&apos;s.&lt;/li&gt;&lt;li&gt;When Claude Code&apos;s config names a signed-in account whose login no store Pitboard reads holds, Pitboard refuses with &lt;code&gt;live_credential_elsewhere&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;A switch checks the incoming login with Anthropic first, and drops a refused login and stops.&lt;/li&gt;&lt;li&gt;A switch refuses an incoming login filed under the wrong account.&lt;/li&gt;&lt;li&gt;A switch renews an incoming login&apos;s expired access token.&lt;/li&gt;&lt;li&gt;A switch undone by a Claude Code &lt;code&gt;/logout&lt;/code&gt; at the same moment fails with &lt;code&gt;switch_did_not_hold&lt;/code&gt;, not with success.&lt;/li&gt;&lt;li&gt;A switch notices when the machine slept long enough for Claude Code to take back the credential lock, and stops.&lt;/li&gt;&lt;li&gt;A locked keychain no longer reads as a lost login: the switch keeps every copy and fails with &lt;code&gt;switch_unverified&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Security&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;pitboard doctor --json&lt;/code&gt; no longer prints the signed-in email, organisation uuid, login name, a value derived from the refresh token or home paths with the username.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Pitboard 0.2.0</title><link>https://usepitboard.com/changelog#v0.2.0</link><guid isPermaLink="true">https://usepitboard.com/changelog#v0.2.0</guid><pubDate>Mon, 21 Sep 2026 17:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;pitboard log&lt;/code&gt; shows what Pitboard has changed and when, and which front end asked.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard uninstall&lt;/code&gt; deletes every parked login, then Pitboard&apos;s own files.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard abandon&lt;/code&gt; gives up on an interrupted switch that cannot be finished, keeping every login.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard status --offline&lt;/code&gt; answers from the last measured numbers, without asking Anthropic or touching a login.&lt;/li&gt;&lt;li&gt;Each usage row in &lt;code&gt;--json&lt;/code&gt; carries &lt;code&gt;severity&lt;/code&gt;, Anthropic&apos;s own grade for that limit.&lt;/li&gt;&lt;li&gt;&lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt;, &lt;code&gt;ANTHROPIC_AUTH_TOKEN&lt;/code&gt; and &lt;code&gt;CLAUDE_CODE_OAUTH_TOKEN&lt;/code&gt; raise a warning on every change, since Claude Code signs in with them instead.&lt;/li&gt;&lt;li&gt;The app shows each account&apos;s email, and when each limit resets.&lt;/li&gt;&lt;li&gt;The app shows when a parked login stops working.&lt;/li&gt;&lt;li&gt;The app runs &lt;code&gt;doctor&lt;/code&gt;&apos;s checks on demand.&lt;/li&gt;&lt;li&gt;The app shows its own version, and a mark in the menu bar.&lt;/li&gt;&lt;li&gt;The app has VoiceOver labels.&lt;/li&gt;&lt;li&gt;The app can record the account in use.&lt;/li&gt;&lt;li&gt;The app can drop an account.&lt;/li&gt;&lt;li&gt;The app can add an account through Claude Code&apos;s sign-in, showing what that sign-in says.&lt;/li&gt;&lt;li&gt;&lt;code&gt;cargo binstall pitboard&lt;/code&gt; fetches the built binary instead of compiling.&lt;/li&gt;&lt;li&gt;The macOS command line binaries are signed and notarised like the app.&lt;/li&gt;&lt;li&gt;Each release carries build provenance.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Changed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;pitboard forget&lt;/code&gt; asks before deleting a parked login, unless given &lt;code&gt;--yes&lt;/code&gt; or &lt;code&gt;--json&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;The minimum supported Rust version is 1.91.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;A state file from a newer version makes Pitboard say whether to update the command line or the app, not offer to delete the accounts.&lt;/li&gt;&lt;li&gt;&lt;code&gt;pitboard statusline&lt;/code&gt; typed at a prompt no longer waits for input.&lt;/li&gt;&lt;li&gt;Offline, the account in use no longer shows as one with nothing parked.&lt;/li&gt;&lt;li&gt;A switch that failed before installing anything no longer makes the next command announce a recovery.&lt;/li&gt;&lt;li&gt;&lt;code&gt;enroll --sign-in&lt;/code&gt; checks what could refuse the enrolment before the browser sign-in, not after.&lt;/li&gt;&lt;li&gt;The status line shows numbers for every account, not question marks for all but the account in use.&lt;/li&gt;&lt;li&gt;&lt;code&gt;doctor&lt;/code&gt; and &lt;code&gt;forget&lt;/code&gt; go by who is signed in, not by Pitboard&apos;s record of its last switch.&lt;/li&gt;&lt;li&gt;Three ways a parked login could be left in the keychain with nothing naming it are closed.&lt;/li&gt;&lt;li&gt;A renewal that could not be written no longer leaves the account with a login already spent.&lt;/li&gt;&lt;li&gt;A login past the keychain&apos;s size limit gets its own error, giving the size, the limit and what to do.&lt;/li&gt;&lt;li&gt;Columns line up in a terminal when a label is in Chinese or Japanese.&lt;/li&gt;&lt;li&gt;One state file serves every credential slot, and an account switched to in one slot is no longer claimed in another.&lt;/li&gt;&lt;li&gt;A limit scoped to one model no longer makes the menu bar read as though everything had stopped.&lt;/li&gt;&lt;li&gt;Building on Windows stops with one sentence instead of a screen of type errors.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Pitboard 0.1.4</title><link>https://usepitboard.com/changelog#v0.1.4</link><guid isPermaLink="true">https://usepitboard.com/changelog#v0.1.4</guid><pubDate>Mon, 21 Sep 2026 17:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Renewing a parked login whose answer has no refresh-token lifetime keeps the deadline it had, as Claude Code does.&lt;/li&gt;&lt;li&gt;Pitboard refuses to act while &lt;code class=&quot;long&quot;&gt;CLAUDE_&lt;wbr&gt;CODE_&lt;wbr&gt;CUSTOM_&lt;wbr&gt;OAUTH_&lt;wbr&gt;URL&lt;/code&gt; is set, where a switch would restore into an item nobody reads.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Security&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;A switch no longer leaves the outgoing account&apos;s &lt;code&gt;trustedDeviceToken&lt;/code&gt;, &lt;code&gt;organizationUuid&lt;/code&gt;, &lt;code&gt;enterpriseGateway&lt;/code&gt; or &lt;code&gt;designOauth&lt;/code&gt; for the incoming account to present as its own.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Pitboard 0.1.3</title><link>https://usepitboard.com/changelog#v0.1.3</link><guid isPermaLink="true">https://usepitboard.com/changelog#v0.1.3</guid><pubDate>Mon, 21 Sep 2026 17:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;The menu bar panel says when an account has run out and which has the most left, whether or not notifications are allowed.&lt;/li&gt;&lt;li&gt;After a switch, the panel counts down until sessions already open follow.&lt;/li&gt;&lt;li&gt;A Homebrew tap installs the command line with &lt;code class=&quot;long&quot;&gt;brew install datlechin/&lt;wbr&gt;tap/&lt;wbr&gt;pitboard&lt;/code&gt;, and the app with &lt;code&gt;--cask&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Changed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;The app asks for permission to post notifications only when it has something to say.&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Pitboard run without &lt;code&gt;USER&lt;/code&gt; set, as from launchd, cron or an app opened from Finder, reads the same keychain item as Claude Code.&lt;/li&gt;&lt;li&gt;A parked login issued to another client is renewed as that client, not as the first-party one.&lt;/li&gt;&lt;li&gt;The app&apos;s build number counts up with its version, where 0.1.2 shipped a number Sparkle would read as newer than the next release.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Pitboard 0.1.2</title><link>https://usepitboard.com/changelog#v0.1.2</link><guid isPermaLink="true">https://usepitboard.com/changelog#v0.1.2</guid><pubDate>Mon, 21 Sep 2026 17:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;A macOS menu bar app shows the account in use and its tightest limit in the menu bar, and every account&apos;s limits in its panel.&lt;/li&gt;&lt;li&gt;The app switches accounts in one click.&lt;/li&gt;&lt;li&gt;The app posts a notification when an account runs out.&lt;/li&gt;&lt;li&gt;The app can open at login.&lt;/li&gt;&lt;li&gt;&lt;code&gt;status&lt;/code&gt; renews a parked login whose access token has expired, so parked logins no longer lapse.&lt;/li&gt;&lt;li&gt;&lt;code&gt;status&lt;/code&gt; drops a login Anthropic refuses, and names the command that signs in to it again.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Pitboard 0.1.1</title><link>https://usepitboard.com/changelog#v0.1.1</link><guid isPermaLink="true">https://usepitboard.com/changelog#v0.1.1</guid><pubDate>Sun, 20 Sep 2026 17:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;Fixed&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;enroll --sign-in&lt;/code&gt; no longer holds Pitboard&apos;s lock while the browser sign-in waits, so &lt;code&gt;use&lt;/code&gt;, &lt;code&gt;forget&lt;/code&gt; and &lt;code&gt;rename&lt;/code&gt; work meanwhile.&lt;/li&gt;&lt;li&gt;A second &lt;code&gt;enroll --sign-in&lt;/code&gt; is refused while one waits.&lt;/li&gt;&lt;li&gt;&lt;code&gt;enroll --sign-in --json&lt;/code&gt; prints exactly one JSON line, with Claude Code&apos;s sign-in output on stderr.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item><item><title>Pitboard 0.1.0</title><link>https://usepitboard.com/changelog#v0.1.0</link><guid isPermaLink="true">https://usepitboard.com/changelog#v0.1.0</guid><pubDate>Sun, 20 Sep 2026 17:00:00 GMT</pubDate><content:encoded>&lt;h3&gt;Added&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Pitboard has the commands &lt;code&gt;enroll&lt;/code&gt;, &lt;code&gt;use&lt;/code&gt;, &lt;code&gt;forget&lt;/code&gt;, &lt;code&gt;status&lt;/code&gt;, &lt;code&gt;doctor&lt;/code&gt; and &lt;code&gt;statusline&lt;/code&gt;.&lt;/li&gt;&lt;li&gt;&lt;code&gt;status&lt;/code&gt; shows live usage for every enrolled account, which accounts can be switched to, and until when.&lt;/li&gt;&lt;li&gt;&lt;code&gt;enroll &amp;lt;label&amp;gt; --sign-in&lt;/code&gt; on an enrolled label renews its parked login.&lt;/li&gt;&lt;li&gt;&lt;code&gt;rename&lt;/code&gt; changes an account&apos;s label.&lt;/li&gt;&lt;li&gt;A switch refuses a parked login that has expired.&lt;/li&gt;&lt;li&gt;&lt;code&gt;doctor&lt;/code&gt; checks every parked login and reports an interrupted switch.&lt;/li&gt;&lt;li&gt;Every command takes &lt;code&gt;--json&lt;/code&gt;, with a versioned envelope and stable error codes, even for a mistyped command line.&lt;/li&gt;&lt;li&gt;Pitboard has shell completions and a man page.&lt;/li&gt;&lt;li&gt;Pitboard runs on Linux, with parked logins in a file vault, not yet tried against a signed-in Claude Code there.&lt;/li&gt;&lt;li&gt;Pitboard keeps an audit log of every change it makes.&lt;/li&gt;&lt;li&gt;The account index is schema 3, with one parked login per account and its expiry.&lt;/li&gt;&lt;/ul&gt;</content:encoded></item></channel></rss>