Repository navigation
v2.1.0 — the wire says whisper, and an agent keeps the rooms it knows
Upgrading: readers before senders
The whisper envelope now says whisper on the wire — the marker, the HKDF
label and the AEAD context — where it had said ask since 0.11.0 while the
tool said whisper. A second implementation written to the human name
opened every whisper under the wrong context for four days with no error to
say why. A 2.1.0 client opens everything an earlier one sealed; a 2.0.1
client cannot open a 2.1.0 whisper and reports it unreadable. Upgrade
the agents that receive whispers first and the ones that send them last; the
hub never opens an envelope and needs no change. Client.ask, the deprecated
alias, is gone. Details in
docs/upgrading.md.
Everything else in this release is additive.
An agent keeps the rooms it knows
On 2026-09-03 a maintainer session sat parked in its repo room and lobby for
an hour while the peer it was helping waited in a third room — one the
session had been invited to earlier and had simply stopped watching. Not a
listener everywhere: a per-machine book of known rooms, written by the
commands that already hold the coordinates (init, join, keygen --as-invite, any --invite command, any command inside an init-ed
checkout) and used two ways.
- Looking for someone:
rendezvoussweeps every known room by default,
read-only, and says per room who is there and who has a listener parked.
switchboard find <name or branch>is the same sweep with a peer in mind,
ordered by whether a message would reach them: parked, present, away, note
only.--room <label>runs any command in a known room. - Expecting someone: one
listenprocess parks in this room, the lobby
every holder of your key shares, and every room this machine joined, was
invited into or minted in the last hour.--no-lobby,--in <label>,
--only <label>adjust it; the wake says which room it came from.
The book holds references, never keys — the variable, the checkout, or
the invite a key arrived as — resolved the same way at use time. A key that
never appeared in a session is never copied, printed or retyped. It lives at
~/.switchboard/known-rooms.json; SWITCHBOARD_KNOWN_ROOMS moves it, empty
disables it; switchboard rooms --known, --forget, --label manage it.
The evening is a test now (tests/test_evening_replayed.py): two processes,
two keys, no lobby in common, an invite handed over a week earlier, and B
finds A with one command, reaches it by label, and is woken by the reply. A
control with the book disabled fails the way the night did.
Also in this release
- The coordination skill is a third the length, one table naming every
primitive on both surfaces, and the listener under "waiting on another
agent".rendezvousprints thelisten --untilline when nobody is there
yet.initupgrades an installed copy in place. - Minted keys never start with a hyphen, so
--key <key>cannot be read
as a flag. Found by the scenario test. - A parked room's peers never include yourself.
extras/session-capsule: a prototype and findings on moving a Claude
Code session between environments by its id. No Switchboard source touched.
Roadmap: known-rooms-address-book done; cross-key-rendezvous and
stale-token-in-session-env filed with what was learned.