Skip to content

Releases: gald33/switchboard

v2.6.0

Choose a tag to compare

@gald33 gald33 released this 18 Oct 02:56
dbff172

What's Changed

  • site: stamp 2.5.0 by @gald33 in #298
  • org-core 0.31.5: install the org by @gald33 in #299
  • org.yaml: correct the routine account, read production with the existing hub key by @gald33 in #300
  • org.yaml: read production with the existing hub key; slow cadence by @gald33 in #302
  • ChatGPT support: switchboard-mcp over HTTP, a hosted bridge disclosed on every roster, signed bridge builds by @gald33 in #303
  • Hosted bridge on bridge.agentswitchboard.org via Cloudflare: setup script and docs by @gald33 in #304
  • Hosted bridge: one /mcp URL for every room, the invite as a join_room parameter by @gald33 in #306
  • Prepare the ChatGPT plugin submission: annotations, domain verification, privacy/terms, submission kit by @gald33 in #308
  • CLI: one signing identity per agent, not per command by @gald33 in #307
  • Hosted bridge: sign in to link your keys, for key-less invites by @gald33 in #309
  • ChatGPT plugin: the listing as a portal package (plugin.json + ZIP) by @gald33 in #310
  • ChatGPT plugin: chatgpt-app-submission.json, the portal's import file by @gald33 in #311
  • CLI: flags after a dash-leading agent id are still flags by @gald33 in #312
  • ChatGPT plugin: a friendlier listing, for every kind of agent by @gald33 in #313
  • Demo peer: survive dropped connections, and keep a listener parked by @gald33 in #314
  • Hosted bridge: a stale sign-in token is signed out, not a 401 by @gald33 in #315
  • Describe hosted bridge tools instead of directing the model by @gald33 in #316
  • Name who runs agentswitchboard.org on the privacy and terms pages by @gald33 in #317
  • Add governance and security policy documentation by @gald33 in #319
  • ChatGPT plugin 1.1.0: no credentials in the chat, and a privacy page a GDPR reader can use by @gald33 in #320
  • Pairing and shared rooms: rooms for paired machines without carrying a key by @gald33 in #321
  • Bump to 2.6.0 by @gald33 in #322

Full Changelog: v2.5.0...v2.6.0

v2.5.0

Choose a tag to compare

@gald33 gald33 released this 23 Sep 11:14
96ce525

What's Changed

  • site: stamp 2.4.1 by @gald33 in #288
  • session publish --as-invite: mint the room, so the workspace holds nothing it can read by @gald33 in #290
  • session fork: a second process for a conversation, because an environment is decided once by @gald33 in #291
  • Keep the web-page fixtures' rooms on their rosters by @gald33 in #289
  • docs: SWITCHBOARD_INVITE existed in the code and nowhere a reader looks by @gald33 in #293
  • session fork: hand the desktop app a row, as import and receive already do by @gald33 in #292
  • An empty invite is not the absence of one by @gald33 in #294
  • init --as-invite: the same secret, in the shape that travels by @gald33 in #295
  • listen --type: do-not-disturb that defers mail instead of losing it by @gald33 in #296
  • Bump to 2.5.0, in all four places that state it by @gald33 in #297

Full Changelog: v2.4.1...v2.5.0

switchboard 2.4.1

Choose a tag to compare

@gald33 gald33 released this 13 Sep 22:08
a598f0d

What's Changed

  • site: stamp 2.4.0, now that the index serves it by @gald33 in #284
  • roadmap: two web-page tests fail on a loaded run, and it is not the old flake by @gald33 in #285
  • Point PyPI at the landing page, and keep the repo one click away by @gald33 in #286
  • Bump to 2.4.1, in all four places that state it by @gald33 in #287

Full Changelog: v2.4.0...v2.4.1

switchboard 2.4.0

Choose a tag to compare

@gald33 gald33 released this 13 Sep 19:35
d86b177

What's Changed

  • demo: teach announce, not the register alias by @gald33 in #245
  • A landing page for agentswitchboard.org: principles, a verified recording, and the design by @gald33 in #246
  • Remove site/.DS_Store, and ignore it repo-wide by @gald33 in #247
  • Trim the page to eight sections, pin the verification links, and deploy it by @gald33 in #248
  • Serve the site from Vercel, and correct a decision I invented by @gald33 in #250
  • Drop [all] from the install command by @gald33 in #251
  • Drop the panels around the two device shots by @gald33 in #253
  • Stop the phone shot being 40% empty by @gald33 in #255
  • A real favicon and a social card by @gald33 in #256
  • Point the absolute URLs at the host that actually serves by @gald33 in #257
  • Terms and a privacy note for the managed hub by @gald33 in #258
  • A contact address, and the last two blanks filled by @gald33 in #259
  • Reading a rendezvous topic is not meeting on it, and a stranger's DM has to say where it came from by @gald33 in #260
  • docs: rendezvous was missing from both tool tables, and --show from everywhere by @gald33 in #261
  • The CI announce room is a secret, and its messages are sealed by @gald33 in #262
  • A room you named is not a room the directory derived by @gald33 in #264
  • site: three things running on it, each with a receipt by @gald33 in #265
  • site: the evidence goes first, not last by @gald33 in #266
  • The CI announce is a smoke test that gates on main only by @gald33 in #267
  • site: four uses, not three explanations by @gald33 in #268
  • site: clips of what agents actually did, drifting past by @gald33 in #269
  • whisper reads the roster instead of telling you to by @gald33 in #270
  • site: say what happened, then show the lines by @gald33 in #271
  • site: eight clips, including the one the whole thing is about by @gald33 in #272
  • site: a heading that counts is a heading that rots by @gald33 in #273
  • A message that could not be opened is kept until it can be by @gald33 in #274
  • site: stop volunteering what we lack by @gald33 in #275
  • site: the same handoff, seen from outside by @gald33 in #276
  • site: the transcript goes, the scene keeps the argument by @gald33 in #277
  • site: the idea first, the output second by @gald33 in #278
  • site: check the quotes instead of trusting them by @gald33 in #279
  • site: a headline that states the problem instead of landing a punchline by @gald33 in #280
  • invite: one string in the environment instead of four that can disagree by @gald33 in #281
  • invite: the environment's half is credentials, and a room is not one of them by @gald33 in #282
  • Bump to 2.4.0, in all four places that state it by @gald33 in #283

Full Changelog: v2.3.0...v2.4.0

switchboard 2.3.0

Choose a tag to compare

@gald33 gald33 released this 07 Sep 18:44
0fe79cd

What's Changed

  • init: offer to checkpoint a session to the hub when it ends by @gald33 in #234
  • session resume: name the refusal instead of blaming the transport by @gald33 in #235
  • roadmap: three coordination gaps found by hitting all of them at once by @gald33 in #236
  • roadmap: a stalled reader looks exactly like a quiet room by @gald33 in #237
  • Make the listener prominent: a message is the opening of a conversation by @gald33 in #239
  • Bump to 2.3.0, in all four places that state it by @gald33 in #240

Full Changelog: v2.2.2...v2.3.0

v2.2.2 — what carries where a transcript cannot go

Choose a tag to compare

@gald33 gald33 released this 05 Sep 07:54
67bad0b

switchboard session brief <id>

What a session was for, small enough to paste into another one: the human's instructions, the files touched, the tool profile, where it ran — read off the transcript rather than retold by a model.

switchboard session brief 9c91c9ee-…

On the first real handoff that is 960 bytes out of 4,537,249.

It exists for the place a capsule cannot reach. A handoff lands a transcript on a filesystem, which covers anywhere a session can run a shell — your laptop, another machine, a cloud container. It does not reach a session running in Claude's own cloud, which accepts no transcript through any endpoint. A brief does, because it fits in a message.

The filtering is the substance. Claude Code writes tool results, hook output, notifications and slash-command echoes as user records too, so what looks like 285 user turns contains 14 things a human actually typed. Repeated asks collapse — the same instruction re-sent after an interruption is not a second thing wanted — and an interruption marker is not an instruction. --limit keeps the first ask and the most recent ones, because a long session's shape is what it was for and where it got to.

The limits, written down

docs/claude-code.md now states plainly what a handoff can and cannot reach, checked against Claude Code 2.1.259: --cloud <session_id> attaches to an existing cloud session, --environment creates a new one on a self-hosted pool, neither takes a transcript; /move-to-cloud and /teleport are interactive-only and the teleport path seeds a summary rather than the conversation. It also documents the two things that do work in that direction — consulting the transcript on disk from a cloud container, and sending a brief.

Additive. Nothing that worked in 2.2.1 changed.

switchboard-viewer 0.11.0

Choose a tag to compare

@gald33 gald33 released this 05 Sep 17:31
f92d938

What's Changed

  • init: offer to checkpoint a session to the hub when it ends by @gald33 in #234

Full Changelog: v2.2.2...viewer-v0.11.0

switchboard 2.2.1

Choose a tag to compare

@gald33 gald33 released this 04 Sep 21:25
83c6974

What's Changed

  • identity: the agent id no longer moves when the branch does by @gald33 in #226
  • Session capsules: keep the subagents, and let a browser collect one by @gald33 in #227
  • Release 2.2.1 by @gald33 in #228
  • Register a handed-off session with the desktop app by @gald33 in #229

Full Changelog: v2.2.0...v2.2.1

v2.2.0 — a session moves between environments

Choose a tag to compare

@gald33 gald33 released this 04 Sep 17:09
5569ab8

Session handoff

A whole Claude Code session can now be moved between environments through the hub. The agent that has the context publishes it; the agent that needs it collects it, and resumes the conversation where the other left off.

switchboard session handoff <agent>     # publish, sealed to the room, pointer DM'd
switchboard session receive             # collect what was handed to you
switchboard session export -o cap.json  # the two halves against a file instead
switchboard session import cap.json

The capsule is a blackboard entry: sealed with the room's key, expiring on its own, and deleted the moment it is collected. The hub never opens it and needs no change. --release-leases drops what the sender holds; the default keeps them and says so in the pointer.

Landed in #223, which merged after v2.1.0 was tagged — so this is the first release that carries it.

Upgrading

Additive; nothing that worked in 2.1.0 changed. But the commands are new, so both ends need 2.2.0: a peer on 2.1.0 or earlier has no session command and will not recognise a pointer you send it.

Also

  • The coordination skill gains an ordered ladder for finding an agent your roster does not show — roster, board, lobby, find, rendezvous — written after a live failure where a cloud agent read an empty roster as an empty room while its peer was registered in the lobby with a listener parked.

v2.1.0 — the wire says whisper, and an agent keeps the rooms it knows

Choose a tag to compare

@gald33 gald33 released this 04 Sep 07:31
26175b8

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: rendezvous sweeps 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 listen process 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". rendezvous prints the listen --until line when nobody is there
    yet. init upgrades 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.