Beyond one window
Sessions on another machine
An always-on box over ssh, heard through a tunnel this app opens, with its own row and its own limits.
A session running over ssh used to be invisible, and for four reasons at once: no hook is registered there, the hook posts to loopback, the panel's server listens on loopback, and a row needs a local editor window to claim its folder.
Reading the machine over ssh was the first answer, and it gave rows that never changed colour and that a click could not open. So now the machine's hooks reach this Mac instead.
Setting it up
Open Settings › Other Macs, add the machine under the name ssh knows it by, and press Connect…. Or from a terminal:
lampboard remote add node a name ssh understands; key login only
lampboard remote install node two ssh round trips, nothing else installed
lampboard remote check node python, curl, hooks, and whether the tunnel answers
Installing writes the hook script over there and registers it in that machine's own configuration, with a dated backup, an atomic write, and a refusal if the file changed in between. Then the app keeps a reverse ssh tunnel open, so that a loopback port belonging to your user on that machine is this app.
The port is derived from your user id, and it is checked after every connect to be bound to loopback and nothing else.
Kept current by the panel
The hooks over there are not yours to maintain. Every time the panel connects to a machine it reads what is registered there and, when the hooks carry no token or were written under the project's previous name, rewrites them: the same dated backup and the same refusal to write over a changed file as an install, and only when they post to your own tunnel port over there. A machine that was asleep when the panel started is checked when its tunnel comes up.
lampboard remote check node says what the panel will find, and changes nothing.
What the machine needs
Key login, because no password prompt is possible. Then python3 and curl.
The tunnel restarts with backoff when the machine sleeps or a VPN drops. Settings › Other Macs shows its state and the outcome of every operation, and Disconnect takes the hooks out over there.
With the helper on here and Claude Code 2.1.287 or later over there, connecting puts the helper on that machine too, and since 1.4 the launch puts it beside the hooks of a machine connected before it could go there. Its sessions then report their context, cost and limits through the tunnel, their permissions come to this panel like a local session's, and @name in the bar reaches them.
What a remote row does
It gets its row when it speaks, meaning its first hook arrives through the tunnel, or, since 1.3.1, as soon as the machine's own check finds it resting in a terminal there with a conversation in it, so a restart of LampBoard does not hide it. The row carries a small R before its name. Its folder is the editor window open on that machine whose folder contains the session's working directory, read from the machine's own lock files, the way a local row is read from this Mac's. A session's working directory follows every cd it makes; the window's folder does not, and that is the name the click has to find. Which machine it is on is written out in the row's card, where there is room for it: the name of the host used to sit on the row itself, and on a machine with a long name it left nothing of the project's own name to read.
The probe is kept for one question the hooks cannot answer, which is whether a process is still alive. A remote row is confirmed by the probe and never created by it: an agent left running in a tmux over there is real, and it is not something you opened.
Clicking the row raises the Remote-SSH window for that folder here, if one is open. Otherwise the menu says where the session is. Open in the Hub opens it there for every remote row: its own terminal where it runs in tmux, and its transcript read over ssh otherwise.
The Hub reads a remote transcript over ssh where LampBoard has no terminal into the session, read only, and the folder glyph does not appear on a remote row.