Skip to content

0.51.0

Released 2026-11-01.

  • The first pi session after the update restarts the sb server. The control socket speaks a new protocol (below), and a server of the earlier protocol cannot take it, so a newer session ends that server by signal and starts a new one. The GUI drops for a few seconds and its token changes; /boss gui gives the new address.
  • A net sidecar of an earlier version is ended by join the same way. Until then it answers the new commands with “no net sidecar”.
  • While server.json names a process that runs and does not answer, no session starts a second sb server and none marks it stopped: pi leaves it, says so once, and names the command that ends it (taskkill /F /PID n on Windows; kill n, then kill -9 n, elsewhere).
  • The control socket of the sb server and of the net sidecar never carries the secret. Both sides prove they know it with a mutual challenge bound to both nonces and to the direction, and the client sends its request only after the server has proved itself.
  • A program that takes the socket’s name while the real server is down receives only the opening hello: no secret and no request. Before the peer has proved itself, nothing it sends is echoed into an error.
  • A mismatched version fails closed in both directions; nothing falls back to the old hello.
  • A close or timeout after the request was written is reported as “may still be carried out”, not as “no sidecar”.
  • server.json gains proto.

Tower runs: a tool list and a closed state folder

Section titled “Tower runs: a tool list and a closed state folder”
  • A local tower run gets only the file tools it needs and no shell. Its file tools cannot read the sb server’s state folder (server.json, memory.json, the GUI and pairing secrets, the Straw Link key, pi’s auth.json), however the path is written: file:// URLs, ~, the Windows forms /c/, /mnt/c/, /cygdrive/c/, and ~\, upper case, or a symlinked parent. Windows network paths are refused.
  • A hand run (a tower run in the boss’s standing pi) keeps every tool in the turns the boss’s own typing starts. A turn that a main’s, a peer’s, or the board’s event starts gets the local run’s tool list.
  • An ally run gets the same state-folder denial at every trust level. At dispatch it keeps its shell, which can still read those files: dispatch gives the peer this computer’s user authority, the sb server’s boss credentials included.
  • Geek view, set per device; /boss gui view sets the server’s default view, which a device that follows the server shows. Only the pi command changes the server’s default.
  • Phone layout: the log takes the screen, Quit and Leave/New move into ⋯ menus.
  • A settings page replaces the settings popover and the Phone, Teams, and Server tiles.
  • Fixes from the acceptance pass: the Wi-Fi off state keeps its full warning above the turn-on button; a persistent specialist on a new task shows working; the question card scrolls with a cue; forced colors, 360 px layouts, and the dialog hints.

Typed twins of actions that were only on the page:

  • /boss close <name>, /boss close all <workspace>, /boss stash --workspace <ws>, /boss dismiss;
  • /boss gui devices, /boss gui unpair <id>|all, /boss server logs;
  • /boss open base <dir> [label], /boss open member [dir], /boss open main <dir> [prompt];
  • /boss link [status] and /boss link decide <id> approve|refuse (approving compares the safety words in pi).

They are refused in tower and ally runs.

A paired device’s composer, and the first message of a session it opens, refuse the commands that manage pairing, remote access, Wi-Fi, the server, the default view, and join decisions, nested /boss open prompts included. Those commands’ dialogs, when relayed to the GUI, can be seen but not answered from a paired device. This is a guard against slips, not a boundary: a paired device with the terminal’s key pad types like the boss’s own keyboard, ! shell commands included.

  • cli.mjs up --timeout is documented with its bound; a denied start-time read clears its timer; setup says “not set up” instead of “ask again”; the Windows profile requirement is documented.
  • Tests fail when a run leaves a new entry at the top of the checkout or a ~ there.