Releases: windaddict/switchboard-streamdeck
Release list
Switchboard v1.3.2
The Claude keys now catch every kind of busy.
Fixed
- 'Brewed … · N shells still running' reads as working. When a turn ends while a backgrounded shell keeps running, Claude's title flips to idle — the keys now detect the live shell tool directly (it runs as a child of the claude process) and stay amber until it finishes.
- Long background shells no longer flip to waiting mid-run — an unanswered tool call in the session transcript keeps non-tmux hosts honest through quiet stretches.
- A foreground shell tool can't hide a working Claude — the pane matcher accepts a working-format title even while the tool momentarily owns the terminal, without ever adopting stale idle titles from dead panes.
Detection stack, in order: active title → live shell child → idle title → pending tool call → transcript freshness. 435 tests. Same signed & notarized native helpers.
Switchboard v1.3.1
The Claude working-state actually works on the device now.
Fixed
- Working sessions never showed amber on the hardware. Stream Deck launches plugins with a minimal environment (no LANG/LC_ALL), so tmux clients spawned by the plugin ran in the C locale — and tmux transliterated the Claude title markers (braille spinner, ✳) to underscores. Every session read as 'waiting' on-device while looking correct in any terminal. All plugin subprocesses now run with a UTF-8 locale.
- The working spark's spin was invisible by construction — the spark's 6-fold symmetry collapsed its rotation to a two-frame wobble. Working keys now show a small amber dot orbiting the spark, advancing each poll tick: unmistakable motion while Claude works, stillness when it's waiting.
- Explicit key repaints (after hold-to-capture or a press) can no longer be dropped when they collide with an in-flight poll tick.
419 tests. Same signed & notarized native helpers.
Switchboard v1.3.0
The Claude release: watch your Claude Code sessions from the deck, wherever they run.
New
- Claude Project key (twelfth action). A live face per Claude Code project — tmux, plain iTerm2, or Terminal.app: the spark shows working (amber, turning) vs waiting for your input (white, still), the bar lights when your keystrokes would land in that session, pressing raises the hosting window, and holding captures the frontmost session's project. Detection pairs Claude Code's own terminal-title signal with transcript freshness, so long tool calls don't read as idle. The keys observe and focus — they never drive Claude itself.
Fixed
- Live key faces no longer show a stale focus indicator after a hold-to-capture or press — an explicit repaint colliding with an in-flight poll was silently dropped; repaints now coalesce and always run.
- The host label no longer collides with the Claude spark on Terminal-hosted keys.
Docs
- README, property inspectors, and every marketing surface (plugin description, Homebrew cask, hero) brought up to date with the actual capabilities — including a repaired intro paragraph and a new Claude Project states figure. Audited against the code and independently reviewed.
416 tests. Same signed & notarized native helpers.
Switchboard v1.2.2
Reliability release: a four-pass adversarial code review (Claude + OpenAI Codex as independent reviewers) of the whole plugin, with every finding verified and fixed.
Fixed
- Open File could freeze every key and dial. Its directory scan ran synchronously on the plugin's single event loop (and polls every 10s); a large or slow directory stalled the whole deck. Now fully async with bounded batches, and
/usr/bin/opengets a timeout. - Fast dial spins lost steps and could double-place windows. Rotations arriving as one multi-tick event were collapsed to a single step, and overlapping async handlers could interleave their cursor read/writes. Every state-changing dial gesture is now serialized per action and consumes the full tick count.
- Arrange Window no longer pretends a window moved when there was no focused window/screen — the helper's failure reports are now honored, and the position only persists after a confirmed move. Scroll logs helper failures.
- tmux windows named with a
|parsed wrong — formats reordered so names are parsed intact. - Private-window Safari targets failed silently when the new window matched the old tab's URL; creation is now detected by window count and a timeout raises a visible error.
- Focus tmux Window no longer shows ✓ on hard failures (blocked automation, failed window switch), and hold-to-capture always probes the frontmost window fresh.
- Subprocess timeouts everywhere; Window Ring polling can no longer stack up; failed probes keep the last known key image instead of painting false state.
377 tests (+18). Same signed & notarized native helpers.
Switchboard v1.2.1
Documentation release. The README now shows the live surfaces: the five states of a live tmux key face (including the Claude Code spark — amber and turning while Claude works, still and white when it's waiting for your input), an animated spark, and the family-colored dial touchscreens. Plugin behavior is unchanged from v1.2.0; the Stream Deck app now reports version 1.2.1.
Switchboard v1.2.0
The interaction-grammar release: every control now follows one language — rotate browses, press escapes, tap flips the mode, hold captures — plus live tmux key faces and a unified visual identity.
New
- Live tmux key faces. Focus tmux Window keys render as mini tmux panes: the status bar lights up in the session's color — with a block cursor — exactly when that window would receive your keystrokes. A corner spark tracks Claude Code inside the window: amber and turning while it works, still and white when it's waiting for your input.
- Teach the button. Hold a go-to key for half a second to capture what you're looking at: Safari Tab Jump grabs the front tab, Open/Switch App the frontmost app, Focus tmux Window the current tmux window.
- Modal dials. Cycle App Windows flips between cycling windows and cycling apps (press or tap); Switch tmux Pane flips between panes and windows (persisted across restarts); Cycle tmux Window widens to ALL sessions (tap); Arrange Window toggles between two configured arrangements (tap) with rotation retracing the same style; Scroll's tap toggles speed; BBEdit's press jumps to the previous document.
- tmux dials drive the terminal you're looking at — commands are scoped to the session in the frontmost macOS window and do nothing when iTerm2 isn't frontmost. No more background terminals moving.
- One icon system. All 22 key faces and list icons regenerated from a single token set: family colors by what the action drives (green tmux, blue windows/apps/web, amber BBEdit, teal files) and a jack-line at every key's foot.
Improved
- Apps-mode switching via NSWorkspace: ~0.12s per detent (was ~0.7s).
- Windows-mode cycling: strip readback debounced — 2.5× faster per detent.
- All six dials share one touchscreen layout with family-colored, unambiguous mode lines ('tmux Panes ⇄' vs 'App Windows ⇄').
Fixed
- Jump to Tab no longer breaks when Safari holds an unloaded session-restored tab.
- Dead Title fields hidden on plugin-rendered keys and dials.
359 tests. Same signed & notarized native helpers as v1.1.0.
Switchboard v1.1.1
Fixed
- Jump to Tab buttons stopped working when Safari had an unloaded tab. Safari returns
missing value(without raising an AppleScript error) for the URL/name of a suspended, session-restored tab; that value crashed the tab-matching scan with error -1728, so a single stale tab anywhere broke every Jump to Tab button. The scan now coercesmissing valueto an empty string and skips such tabs.
No changes to the native helpers — same signed & notarized binaries as v1.1.0.
Switchboard v1.1.0
Eleven actions now, and the native helpers are Developer ID signed + notarized by Apple — so a downloaded install no longer gets blocked by Gatekeeper.
New
- Arrange Window (dial) — tile the frontmost window through halves/thirds/quarters (columns or rows) or a 2×2/2×3/2×4 grid. Clockwise steps the clockwise arrangement forward; counter-clockwise steps the counter-clockwise one in reverse, so the window follows the dial. Press to maximize. Includes an Invert dial direction toggle.
- Live Accessibility warning in each action's settings screen — shows a
⚠️ with the exact System Settings path (and a Re-check button) when Stream Deck lacks the grant, instead of a key that silently does nothing.
Fixed / improved
- Native helpers are now universal (Apple Silicon + Intel) and Developer ID signed + notarized.
- Every action's settings screen states what it does and its requirements (required app + permission).
Install
- Double-click
com.movingavg.switchboard.streamDeckPluginbelow, or - Homebrew:
brew install --cask windaddict/switchboard/switchboard, or - see the README.
Requires macOS 12+ and the Stream Deck app 6.5+. 245 passing tests.
Independent project — not affiliated with or endorsed by Elgato/Corsair. Stream Deck is a trademark of Corsair Memory, Inc.
Switchboard v1.0.0
First public release of Switchboard — a macOS Stream Deck plugin for fast context-switching across Safari tabs, app/tmux/iTerm2 windows, BBEdit documents, and files.
Install
- Double-click installer (easiest): download
com.movingavg.switchboard.streamDeckPluginbelow and double-click it — Stream Deck installs it for you. - Homebrew:
brew install --cask windaddict/switchboard/switchboard(requires the tap). - Finder / Terminal: see the README.
Requires macOS 12+ and the Stream Deck app 6.5+. Quit and relaunch Stream Deck after installing.
Actions
Safari Tab Jump · Open / Switch App · Cycle App Windows · Scroll Window · Window Ring · Focus tmux Window · Switch tmux Pane · Cycle tmux Window · BBEdit Documents · Open File.
220 passing tests; streamdeck validate runs in the build.
Independent project — not affiliated with or endorsed by Elgato/Corsair. Stream Deck is a trademark of Corsair Memory, Inc.