v3.4.2 - Accounts and terminal appearance
You run more than one Claude subscription, and Dispatch only knew about one of them. Every session launched on whatever login sat in ~/.claude, and the only way to see how much of a plan you had left was to leave the board and ask the CLI. v3.4.2 puts the accounts and their usage where you already look: the header shows the active account's tightest window, one click switches accounts for the next session, and Settings gains an Accounts tab. The same release makes the embedded terminal yours to style, with a translucent near-black default that no longer depends on a terminal emulator you may not have.
See it
Higher-quality video: dispatch-v3.4.2-accounts-terminal.mp4
Usage in the header, accounts one click away
A chip in the sync strip names the active account and shows the window that bites first: the percent used and when it resets. Click it and the popover lists every account with its session, weekly, and per-model windows, a refresh button, and a Switch button on the others. Below 1024 px the chip shrinks to the percent and the popover spans the viewport. When usage cannot be read, the chip says so in words: stale after a rejected token, unavailable for an account that has never signed in, rate limited when the endpoint pushes back.
Usage is polled every 15 minutes, because the endpoint rate-limits tighter polling, and a manual refresh is limited to one per 30 seconds per account. A rejected token shows the last known windows as stale. Dispatch never refreshes a token itself.
Add an account without leaving Dispatch
Settings, Accounts lists the Default account (your own ~/.claude login) and every added account with its organization, plan, last sign-in, and usage line. Add account runs the Claude CLI's own sign-in: the modal shows the real sign-in link, the page opens in your browser, and you paste the code back. A wrong code ends in a clear error with a retry. Re-login repairs an account in place. Remove signs the account out, deletes its config directory, and leaves sessions already running on it alone.
Each account keeps its own Claude config
Every added account gets its own config directory under Dispatch's data directory and launches with CLAUDE_CONFIG_DIR pointing at it. That directory links everything from ~/.claude that is safe to share (skills, projects, settings) and keeps credentials, sessions, history, and caches per account. Claude Code owns the tokens and their refresh. Dispatch never copies a credential between accounts, which is the mechanism behind the re-login and token-wipe bugs in the reference implementation this feature replaces.
Sessions record the account they launched on. Switching the active account changes the next session only. A resume relaunches on the recorded account, and if that account is gone the card says so instead of guessing.
A terminal that looks like the app
The embedded terminal opened with a hard bluish background borrowed from a Ghostty config that many machines never had. It now ships a translucent near-black default (#111111 at 0.93 opacity, #e8e9ea text) that shows the app panel through it. Settings, Terminal lets you set the background color and opacity, text and cursor color, font family from a short allowlist, and font size. Save applies to every open terminal at once, without a reload, and survives a restart. An invalid value never blocks boot: the app falls back to the defaults and the Save button names the field it refuses.
The Ghostty resolver is gone. Nothing reads an external terminal config at runtime, so the look is the same on every machine.
Underneath
DISPATCH_DIRnow relocates every data path through one resolver, so a second instance boots fully isolated from the live one.- The config writer shares one atomic, mode 0600 helper across all flat settings.
- Modal dialogs claim Escape in the capture phase, so pressing Escape inside a dialog no longer also closes the Settings screen behind it.
- No credential value reaches a log, a file Dispatch writes, or an API response. Every account route was grepped for token substrings against a live instance, with zero hits.
Limits, stated plainly
A real second-account sign-in was never completed on the test machine, because the code paste needs a human. Everything up to that point is proven against the real CLI, and the keychain naming rule for added accounts comes from the reference implementation. If that rule ever differs, launches still work and the account's usage reads unavailable until it is corrected. The Settings sidebar still has no narrow layout, so at 390 px every Settings tab, the new Accounts tab included, is squeezed. This predates v3.4.2 and stays on the backlog. Automatic switching on rate limit and usage history are out of scope.
Full changelog: v3.4.1...v3.4.2
Requires Node ≥ 22.22, tmux, ttyd, git, and the Claude Code CLI. Setup is in the README.
