Specification: signalbox settings

Open from the menu bar (Settings…), or from the jumplist with , or its footer cog.
Note: the mockup below is the living specification for the signalbox settings window, a plain macOS preferences window.
Signalbox Settings
Menu bar icon: Beacon
A colored dot appears on the icon when sessions wait: amber = needs your input, blue = output updated, red = failed.
Sessions
Claude Code /clear removes the session from the board
Unchecked, a /clear keeps the old session listed (marked ready) until you hide or remove it - the exchange stays reviewable.
Rename session on Claude Code /rename
On, a Claude /rename shows on the board as the session name. Off keeps the folder name. Your own ⌃R rename always wins either way.
Codex clear removes the session from the board
Rename session on Codex /rename
The Codex pair of the two toggles above. Agent settings stay flat until a third agent needs toggles, then they move to per-agent tabs.
Jumplist shortcut: ⌃⌥J - override with defaults write com.dwmkerr.signalbox hotkey "cmd+shift+space"
Hub
Allow other devices to connect (requires token)
Devices reach this Mac at 192.168.1.24:8377. The token is created automatically.
Additional filters
#tag or name
Always applied to the jumplist and menu bar. #tag matches a tag, plain text matches the session name or its last message, ! excludes - e.g. #work !project shows work and hides anything named or tagged project. Blank shows all.

What this is

The app's settings window, a plain macOS preferences window:

Keep it small; new settings are new rows.

Additional filters

The filter field narrows the board everywhere. The jumplist and the menu bar dropdown share it, so the two stay in sync.

The field applies live as you type (no Save button) and persists across restarts (tagFilter below). Set it at launch too: open Signalbox.app --args --filter demo restarts straight into a filtered view, and --filter with no value clears it back to all.

The jumplist shortcut

The shortcut shows as a caption: ⌃⌥J by default, overridden with defaults write com.dwmkerr.signalbox hotkey "cmd+shift+space". If another app holds the combo, signalbox falls back and notifies.

macOS has a standard control for this: a recorder well, as in System Settings under Keyboard Shortcuts. Click the well, it focuses; press a combination, it captures it and shows a clear button. The KeyboardShortcuts Swift package provides the recorder control, persistence, and the global listener in one, replacing the Carbon code and the defaults-write override.

Where settings are stored

StoreWhatWhy
UserDefaultsmenu bar icon (menuBarIcon), jumplist shortcut (hotkey), board tag filter (tagFilter), jumplist zoom (uiScale, 0.8-1.6, set with ⌘+/⌘−/⌘0), login-item one-shot (didRegisterLoginItem - the app registers itself as a login item once, on first launch from /Applications, and never re-adds it if you remove it in System Settings)only the app needs these; the filter and zoom are local view preferences, not shared config
~/.config/signalbox/settings.jsontoggles the CLI hooks must also see, currently claudeClearEnds, claudeRenameTitle, codexClearEnds and codexRenameTitle; plus a hub section for how the hub binds: hub.bind (a keyword or a literal - the keywords loopback (127.0.0.1) and lan (the 0.0.0.0 wildcard) still resolve, and any literal like 0.0.0.0 or an explicit IP is honored verbatim; default loopback, this Mac only) and hub.token (the bearer token; default empty). The Hub "Allow other devices" checkbox writes the literal 0.0.0.0, and off writes 127.0.0.1.the app writes the file and the hook path reads it on every fire, so a change applies immediately with no IPC; the hub reads hub.bind/hub.token at start so the app-spawned hub (which passes no flags) can serve other devices on the network

Writes to the shared file merge key by key, so unknown keys survive. A missing or broken file falls back to defaults and keeps the hook path working.

Hub network access

The Allow other devices to connect checkbox controls who can reach the hub. Off (the default), the hub answers only this Mac; on, it answers other devices on the network too. The checkbox reflects hub.bind in the settings file, read live each time the window opens so it stays right even when Connect Phone changed it. Toggling it rewrites that value and restarts the hub (the same restart Connect Phone uses) so the new bind takes effect. The grey caption beneath shows the address a phone dials, this Mac's LAN IP and the hub port, and notes the token is created automatically.

The hub section is the persistent, file-backed equivalent of signalbox hub's --bind flag and SIGNALBOX_TOKEN. It exists so the hub the app spawns - which passes only --port - can come up reachable with a token, with no flags and no env.

Full resolution order, auth, and the auto-token are in the CLI spec and the data model.

The /clear toggle

Claude Code fires SessionEnd with reason clear when you type /clear.

For scripting, SIGNALBOX_CLEAR_ENDS=0|1 overrides the file.