Repository navigation
Releases: wsp-labs/wsp
Release list
wsp 0.3.7
What changed since v0.3.6
Renamed in 0.3
A thread runs in your project's folder on one of your computers, and wsp --help names computers, projects and threads. A verb takes a project or a thread right after it. Nothing answers to the old lines, so here they are, once.
| was | is |
|---|---|
wsp thread new --in <workspace> "<task>" |
wsp run <project> "<message>" |
the MCP tool thread_new |
the MCP tool run |
wsp threads --in <workspace> |
wsp threads <project> |
wsp new --local [name], wsp import <folder> --to <workspace> |
wsp add <folder>, a project on this computer |
wsp new --ssh <user@host> |
wsp add user@host (or an alias from your ssh config), a computer |
wsp places |
wsp computers |
wsp stop <thread> --task <id> |
wsp stop <thread> --subagent <id>, the id in the SUBAGENT column of wsp threads |
wsp pair, wsp devices |
wsp host pair, wsp host devices |
wsp connect <url> |
wsp login: a host on your account needs no code |
wsp disconnect |
nothing: a line goes to your account's one host, --host names another, and wsp logout drops them |
wsp relay link, wsp relay unlink |
wsp host link, wsp host unlink |
wsp relay hosts, wsp host linked, wsp host list |
wsp hosts, the hosts on your account |
wsp relay clients, wsp host clients |
wsp login, and wsp logout <id> to sign one out |
A new thread in the folder another thread works in is wsp run --beside <thread> "<message>". wsp commit, wsp discard, wsp update, wsp exec, wsp merge and wsp fix take a thread and act in the folder it works in. wsp computers set <computer> renames a computer and wsp remove <computer> takes one out. Plain wsp prints the help, the first line that needs a host starts one, and wsp up is still there for a host you want to watch in a terminal or one that serves beyond this computer.
Agents on this computer get the new skill the first time the new host starts; a project folder whose AGENTS.md carries the old section gets the new one at the next wsp mcp install there.
- fix: a builder kept at an added place is stopped at that place
- fix: a background image build says it is ready and Computers reads it
- fix(runtime): wsp image build --force builds where the copy is current
- fix: a cloud thread no longer offers a sign-in for a server off there
- fix(runtime): a brokered Terminal pane carries a turn's git variables
- fix: a woken sub-thread keeps its name over wsp's own preamble
- fix: a cloud machine lists a server needing your sign-in as off
- test(pipe): run the answered-as-a-link case on a fake clock
- fix(sub): count a sub-thread's start commit as on the remote
- fix: drop goldens' owned lists, and keep 600 chars of a row's opening
- fix(daemon): serve a cloud machine's sockets from /run, not /root
- fix(places): put wsp on a joined box's login PATH for wsp leave
- fix(web): relink daemon channels to the client a host restart binds
- fix: a cloud image build writes no agent config on this computer
- fix: cut a cloud machine off before every delete, across restarts
- fix(sub): a resumed sub-thread's new machine is woken, so pipes dial it
- fix: a slate on this computer sends Claude Code's own MCP sign-in
- fix(web): a cloud's key saved in the dialog lets its image build
- fix: a Codex turn on a brokered machine runs on the host's login
- fix: read folders in a child so a guarded folder cannot hold the host
- feat: switch the credential broker on, with setup at a provider
- feat(web): add a cloud provider in the Add a computer dialog
- feat(daemon): serve the pipe and the two doors on a cloud machine
- feat(runtime): keep 4 pipes dialled to each brokered machine's daemon
- fix(runtime): a thread's fork stands under its lead before its stages
- feat: the host's sign-ins for cloud machines in settings and verbs
- feat(runtime): op and terminal tokens for a machine the host brokers
- feat(runtime): a brokered turn carries the turn token, not the vault
- fix: keep sign-ins out of images sealed or copied at a provider
- fix: refuse a daemon note no version takes, and give paste its stdin
- site: the compare table leaves the home page for tool cards
- feat(host): the Anthropic service adds the credential to model calls
- feat: a thread says how long its turn waited for your computer
- feat(codex): a brokered turn runs on a placeholder login at the door
- feat(claude): a brokered launch carries placeholders, not credentials
- feat(host): cloud threads borrow the person's own Codex login
- feat: a cloud thread's git starts on its branch of record
- feat(host): the broker core that cloud machines' calls go through
- feat(host): the git road pushes only a thread's branch of record
- fix(web): a thread held by its thread cap says so above the composer
- feat(host): refuse a cloud push that changes .github/
- feat(host): the ChatGPT and OpenAI services for brokered Codex
- feat(host): the gh road judges gh's calls from a cloud machine
- feat: the contracts for credentials the host keeps for a cloud
- fix(seed): keep value files and keys off provider places
- fix: keep logins out of provider naps and project snapshots
- fix: a thread reads its computers and names its project beside --on
- fix(runtime): a sub-thread's record stands under its lead first
- fix(host): blank secret values in configs copied to a cloud machine
- feat: a sub-thread on a cloud starts from any pushed ref with --from
- fix(runtime): a fork's terminal opens in the thread's folder
- test(web): open the right panel before the launcher case waits on it
- fix(activity): an agent outside this host's threads reads as its agent
Downloads
wsp-0.3.7-mac.dmg: macOS on Apple silicon and on Intel, one disk image for both.wsp-0.3.7.AppImage: Linux on x64.- The command line:
npm i -g @wsp-labs/wsp@0.3.7.
macOS may ask again for permissions you gave wsp, since each update is signed on its own.
Opening a downloaded bundle
Open the macOS disk image and drag wsp onto the Applications folder it shows. One image holds both Apple silicon and Intel.
The bundles are not signed yet, so macOS refuses the first open of wsp.app. Open it once, dismiss the refusal, then in System Settings under Privacy & Security find the line saying wsp was blocked and pick Open Anyway. Or from a terminal: xattr -dr com.apple.quarantine /Applications/wsp.app. Every open after that is a double click.
Start the Linux AppImage from a terminal in the folder it downloaded to: chmod +x wsp-*.AppImage && ./wsp-*.AppImage. A double-click on its icon on Ubuntu's desktop does not start it: the desktop hands an AppImage to Disk Image Mounter, which mounts it and runs nothing. There, set the run bit, then right-click the icon and pick Run as a program. It needs no FUSE 2. It mounts itself with fusermount3 from the fuse3 package, which Ubuntu, Fedora and Arch desktops already have. If it says it cannot mount the AppImage, install fuse3, or start it with --appimage-extract-and-run.
wsp 0.3.6
What changed since v0.3.5
Renamed in 0.3
A thread runs in your project's folder on one of your computers, and wsp --help names computers, projects and threads. A verb takes a project or a thread right after it. Nothing answers to the old lines, so here they are, once.
| was | is |
|---|---|
wsp thread new --in <workspace> "<task>" |
wsp run <project> "<message>" |
the MCP tool thread_new |
the MCP tool run |
wsp threads --in <workspace> |
wsp threads <project> |
wsp new --local [name], wsp import <folder> --to <workspace> |
wsp add <folder>, a project on this computer |
wsp new --ssh <user@host> |
wsp add user@host (or an alias from your ssh config), a computer |
wsp places |
wsp computers |
wsp stop <thread> --task <id> |
wsp stop <thread> --subagent <id>, the id in the SUBAGENT column of wsp threads |
wsp pair, wsp devices |
wsp host pair, wsp host devices |
wsp connect <url> |
wsp login: a host on your account needs no code |
wsp disconnect |
nothing: a line goes to your account's one host, --host names another, and wsp logout drops them |
wsp relay link, wsp relay unlink |
wsp host link, wsp host unlink |
wsp relay hosts, wsp host linked, wsp host list |
wsp hosts, the hosts on your account |
wsp relay clients, wsp host clients |
wsp login, and wsp logout <id> to sign one out |
A new thread in the folder another thread works in is wsp run --beside <thread> "<message>". wsp commit, wsp discard, wsp update, wsp exec, wsp merge and wsp fix take a thread and act in the folder it works in. wsp computers set <computer> renames a computer and wsp remove <computer> takes one out. Plain wsp prints the help, the first line that needs a host starts one, and wsp up is still there for a host you want to watch in a terminal or one that serves beyond this computer.
Agents on this computer get the new skill the first time the new host starts; a project folder whose AGENTS.md carries the old section gets the new one at the next wsp mcp install there.
- fix(host): carry login-shell keys to threads as a fallback sign-in
- fix: offer a new thread the models its own Claude Code runs
- fix(browser): a box thread's pane lists ports on a daemon behind
- fix(resume): show old messages at the time they were written
- feat(slate): a tool run asks exactly when the thread's agent would
- fix(desktop): Cmd+W closes the right panel's tab, not the window
- feat(activity): wsp activity reads like the Activity page
- fix(web): seat a draft's banner on the composer, not 16 px above
- fix(test): end a kept run's whole group when its case ends
- test: ten cases that fail or race on a Mac pass there
- fix(activity): a thread's shells, tabs and slates sit under it
- fix(codex): keep a thread loaded while its background command runs
- fix(runtime): a kept run's input pump writes its own pids
- fix(slates): ask a box thread's http MCP server from that computer
- fix(runtime): offer a disk move off the disk the box reads
- fix(place): load the overlay module before a join refuses a box
- fix(slates): start a box thread's tool runs on its own computer
- feat(web): draw sub-threads on Boat and Boat's limits in the app
- fix(runtime): keep a box thread's agent up between its turns
- fix(runtime): read the sign-in of agents a box's setup installed
- fix(setup): Use an API key and Copy the keys act on their own row
- feat(resume): a picker with search, scopes and a preview
- fix(runtime): count a silent turn's whole process tree as its work
- fix(runtime): a local turn's work reading counts its whole tree
- feat(boat): watch a Boat machine's disk and move it a size up
- fix(web): say a closed setup goes on, and say once how it ended
- feat(activity): every thread's processes, memory and CPU in one page
- fix(web): a read asked after an event never shares an older one
- test: pin the slot and the clock three flaky cases rested on
- fix(threads): a held thread shows its message and says why it started
- fix(setup): run one row again, and fold an ended setup's log
- fix(doctor): load the overlay module before refusing a box
- fix(desktop): reload a window whose renderer died, three times a minute
- fix(auth): a missed auth deadline is no refused token
- fix(release): strip comments from the public bundles
- fix(runtime): a long thread keeps its newest words for search
- fix(settings): a remove that went through says so in its title
- test(runtime): count what a folder start asks, not how long it takes
- fix(desktop): wait on a host that holds the lock and has not answered
- fix(runtime): a deleted workspace's shell tags and placements go
- docs(skill): teach sub-threads on Boat and price Boat in the costs
- feat(sub): a send after the delete resumes on a new machine
- feat(sub): results back to the lead, merged off the record
- feat(run): a spawn past Boat's machines or starts waits its turn
- feat(sub): a done sub-thread naps, its machine deleted after the delay
- fix(sub): say an out-of-memory kill on a sub-machine as one
- feat(computers): Boat's size and delete delay, its plan and starts
- feat(run): run --on boat starts a sub-thread on a machine of its own
- fix(places): removing Boat deletes its machines and forgets the key
- feat(boat): wsp add boat takes the key, a seal on Boat forks nothing
- fix(engine): read Boat's limits off /limits and 429s by their code
- feat(projects): wsp projects seed picks a sub-thread's files
- test(engine): a Boat canary that sends every body wsp sends
- feat(cloud): Boat ships in the public build, Solari stays gated
Downloads
wsp-0.3.6-mac.dmg: macOS on Apple silicon and on Intel, one disk image for both.wsp-0.3.6.AppImage: Linux on x64.- The command line:
npm i -g @wsp-labs/wsp@0.3.6.
macOS may ask again for permissions you gave wsp, since each update is signed on its own.
Opening a downloaded bundle
Open the macOS disk image and drag wsp onto the Applications folder it shows. One image holds both Apple silicon and Intel.
The bundles are not signed yet, so macOS refuses the first open of wsp.app. Open it once, dismiss the refusal, then in System Settings under Privacy & Security find the line saying wsp was blocked and pick Open Anyway. Or from a terminal: xattr -dr com.apple.quarantine /Applications/wsp.app. Every open after that is a double click.
Start the Linux AppImage from a terminal in the folder it downloaded to: chmod +x wsp-*.AppImage && ./wsp-*.AppImage. A double-click on its icon on Ubuntu's desktop does not start it: the desktop hands an AppImage to Disk Image Mounter, which mounts it and runs nothing. There, set the run bit, then right-click the icon and pick Run as a program. It needs no FUSE 2. It mounts itself with fusermount3 from the fuse3 package, which Ubuntu, Fedora and Arch desktops already have. If it says it cannot mount the AppImage, install fuse3, or start it with --appimage-extract-and-run.
wsp 0.3.5
What changed since v0.3.4
Renamed in 0.3
A thread runs in your project's folder on one of your computers, and wsp --help names computers, projects and threads. A verb takes a project or a thread right after it. Nothing answers to the old lines, so here they are, once.
| was | is |
|---|---|
wsp thread new --in <workspace> "<task>" |
wsp run <project> "<message>" |
the MCP tool thread_new |
the MCP tool run |
wsp threads --in <workspace> |
wsp threads <project> |
wsp new --local [name], wsp import <folder> --to <workspace> |
wsp add <folder>, a project on this computer |
wsp new --ssh <user@host> |
wsp add user@host (or an alias from your ssh config), a computer |
wsp places |
wsp computers |
wsp stop <thread> --task <id> |
wsp stop <thread> --subagent <id>, the id in the SUBAGENT column of wsp threads |
wsp pair, wsp devices |
wsp host pair, wsp host devices |
wsp connect <url> |
wsp login: a host on your account needs no code |
wsp disconnect |
nothing: a line goes to your account's one host, --host names another, and wsp logout drops them |
wsp relay link, wsp relay unlink |
wsp host link, wsp host unlink |
wsp relay hosts, wsp host linked, wsp host list |
wsp hosts, the hosts on your account |
wsp relay clients, wsp host clients |
wsp login, and wsp logout <id> to sign one out |
A new thread in the folder another thread works in is wsp run --beside <thread> "<message>". wsp commit, wsp discard, wsp update, wsp exec, wsp merge and wsp fix take a thread and act in the folder it works in. wsp computers set <computer> renames a computer and wsp remove <computer> takes one out. Plain wsp prints the help, the first line that needs a host starts one, and wsp up is still there for a host you want to watch in a terminal or one that serves beyond this computer.
Agents on this computer get the new skill the first time the new host starts; a project folder whose AGENTS.md carries the old section gets the new one at the next wsp mcp install there.
- fix(runtime): session rows and transcript caps count per thread
- fix: thread state in a shared folder stays with its thread
- fix(web): a thread's composer and running turn are its own
- fix(boat): a create whose answer is lost leaves no box behind
- fix(threads): diffs, drafts, deletes and PRs act on their own thread
- fix(web): the right pane belongs to the thread on screen
- fix(web): a project's image draws as a smoothed app icon tile
- fix(sidebar): a working tile shows its running time again
- feat(web): find in thread, Cmd+F over the whole transcript
- fix(conversations): read every Claude Code folder, say when it cannot
- feat(web): New thread is mod+t alone, and Settings offers none
- fix(engine): a failed box backstop waits a backoff before the next
- feat(threads): fork a thread from any finished turn
- fix(slate): a script wsp cannot pin asks every time, never Always
- fix(conversations): keep a project's list instead of re-reading it
- fix: a Mac's daemon reads processes and ports through libproc
- fix(threads): typing in a new thread's composer keeps its warm agent
- feat(sidebar): pin and rearrange trees by drag, menu and keys
- feat(web): New thread is a labelled row and a header glyph everywhere
- feat(threads): resume a Claude Code or Codex conversation as a thread
- test(desktop): the smoke proves the worker rule in the browser guest
- fix(web): dialog foots hold their buttons only, no Esc keycap
- fix(start): host answers before its provider; app waits on a live host
- fix(slate): Always on a box command pins its script by the box's hash
- feat(agents): plugins get their own tab, with an on and off switch
- feat(projects): a project can wear an image of its own
- feat(threads): start a new thread's agent when its composer takes focus
- feat(transcript): command blocks and edit diffs in a turn's calls
- fix(servers): setup rows say what landed; a check starts no sign-in
- test(runtime): let go of a closed host's runs in the restart tests
- feat(transcript): tool results keep exit code, duration, bytes, hunks
- feat(browser): the desktop tab opens any website in its own guest
- fix: New thread shows the branch its project's folder is on
- fix(runtime): never nap a machine whose turn a restart could not reach
- fix(test): end a test run's whole group and bound every gate loop
- fix: Codex's sandbox for non-root users on a box, logins read each time
- fix(mcp): the binary's servers tool reads a box's launch row
- fix(editor): open Zed with --classic, under the person's environment
- feat(threads): continue a Claude Code thread in a terminal
- fix(web): put the picked theme back as the pointer leaves each card
- fix(places): forget a computer that will never answer its link
- fix(sidebar): a settled child stays in its live lead's Finished fold
- fix(chat): draw Claude Code insight blocks as a quiet note
- fix(release): Check for updates on the Version row, no stale Up to date
- fix(add): a repo cloned by link lands inside the folder picked
- fix(usage): one name and ink per account, live limits, a Source split
- fix(web): Ask for one reaches a composer the person can see
- fix(install): a download bar and size, and a Linux app menu entry
Downloads
wsp-0.3.5-mac.dmg: macOS on Apple silicon and on Intel, one disk image for both.wsp-0.3.5.AppImage: Linux on x64.- The command line:
npm i -g @wsp-labs/wsp@0.3.5.
macOS may ask again for permissions you gave wsp, since each update is signed on its own.
Opening a downloaded bundle
Open the macOS disk image and drag wsp onto the Applications folder it shows. One image holds both Apple silicon and Intel.
The bundles are not signed yet, so macOS refuses the first open of wsp.app. Open it once, dismiss the refusal, then in System Settings under Privacy & Security find the line saying wsp was blocked and pick Open Anyway. Or from a terminal: xattr -dr com.apple.quarantine /Applications/wsp.app. Every open after that is a double click.
Start the Linux AppImage from a terminal in the folder it downloaded to: chmod +x wsp-*.AppImage && ./wsp-*.AppImage. A double-click on its icon on Ubuntu's desktop does not start it: the desktop hands an AppImage to Disk Image Mounter, which mounts it and runs nothing. There, set the run bit, then right-click the icon and pick Run as a program. It needs no FUSE 2. It mounts itself with fusermount3 from the fuse3 package, which Ubuntu, Fedora and Arch desktops already have. If it says it cannot mount the AppImage, install fuse3, or start it with --appimage-extract-and-run.
wsp 0.3.4
What changed since v0.3.3
Renamed in 0.3
A thread runs in your project's folder on one of your computers, and wsp --help names computers, projects and threads. A verb takes a project or a thread right after it. Nothing answers to the old lines, so here they are, once.
| was | is |
|---|---|
wsp thread new --in <workspace> "<task>" |
wsp run <project> "<message>" |
the MCP tool thread_new |
the MCP tool run |
wsp threads --in <workspace> |
wsp threads <project> |
wsp new --local [name], wsp import <folder> --to <workspace> |
wsp add <folder>, a project on this computer |
wsp new --ssh <user@host> |
wsp add user@host (or an alias from your ssh config), a computer |
wsp places |
wsp computers |
wsp stop <thread> --task <id> |
wsp stop <thread> --subagent <id>, the id in the SUBAGENT column of wsp threads |
wsp pair, wsp devices |
wsp host pair, wsp host devices |
wsp connect <url> |
wsp login: a host on your account needs no code |
wsp disconnect |
nothing: a line goes to your account's one host, --host names another, and wsp logout drops them |
wsp relay link, wsp relay unlink |
wsp host link, wsp host unlink |
wsp relay hosts, wsp host linked, wsp host list |
wsp hosts, the hosts on your account |
wsp relay clients, wsp host clients |
wsp login, and wsp logout <id> to sign one out |
A new thread in the folder another thread works in is wsp run --beside <thread> "<message>". wsp commit, wsp discard, wsp update, wsp exec, wsp merge and wsp fix take a thread and act in the folder it works in. wsp computers set <computer> renames a computer and wsp remove <computer> takes one out. Plain wsp prints the help, the first line that needs a host starts one, and wsp up is still there for a host you want to watch in a terminal or one that serves beyond this computer.
Agents on this computer get the new skill the first time the new host starts; a project folder whose AGENTS.md carries the old section gets the new one at the next wsp mcp install there.
- feat: carry a project's tool servers to a box, read by one resolver
- fix(places): Claude Code's box sign-in offers token, key or login there
- fix(add): one copy question for server keys, plugins in the store home
- fix(desktop): a failed update download logs its cause
- fix: agent commands on a box run with the store their turns read
- fix(web): a preview tab on a box port reconnects after a restart
- fix(slate): say a run's script goes in a , never the project
- site: the compare pages drop their read-on lines
- fix: stop and steer reach a Codex thread's running turn
- fix(host): mcp install writes no instruction files outside a project
- fix(slate): no Always for a command that names a file on a box
- fix: box setup reads Codex's login where turns do, adds bubblewrap
- feat(desktop): an app log and local crash dumps under ~/.wsp/logs
- fix(catalog): brew runs from a project folder linuxbrew cannot reach
- fix(engine): a failed setup row names what is missing, not its shell
- feat(web): a newer release is a card at the sidebar's foot, not a toast
- fix: the update road waits 30 s to connect and tries twice more
- www: the app pictures again, from today's app
- docs: quieter code blocks, wrapped shell lines, capped pictures
- brand: the raised tilde on the site, the docs and their favicons
- docs: the leads page shows the lead's tree, not the whole sidebar
- docs: the pictures again, glass off and in the app's own Tungsten
- docs: room around pictures, tables and code, short install line
- docs: README renames block in the words wsp --help uses today
- fix: a held reply's line says its work still runs, and its end follows
- docs: the selected header key keeps its dark label
- docs: the app's Tungsten theme, and shorter install pages
Downloads
wsp-0.3.4-mac.dmg: macOS on Apple silicon and on Intel, one disk image for both.wsp-0.3.4.AppImage: Linux on x64.- The command line:
npm i -g @wsp-labs/wsp@0.3.4.
macOS may ask again for permissions you gave wsp, since each update is signed on its own.
Opening a downloaded bundle
Open the macOS disk image and drag wsp onto the Applications folder it shows. One image holds both Apple silicon and Intel.
The bundles are not signed yet, so macOS refuses the first open of wsp.app. Open it once, dismiss the refusal, then in System Settings under Privacy & Security find the line saying wsp was blocked and pick Open Anyway. Or from a terminal: xattr -dr com.apple.quarantine /Applications/wsp.app. Every open after that is a double click.
Start the Linux AppImage from a terminal in the folder it downloaded to: chmod +x wsp-*.AppImage && ./wsp-*.AppImage. A double-click on its icon on Ubuntu's desktop does not start it: the desktop hands an AppImage to Disk Image Mounter, which mounts it and runs nothing. There, set the run bit, then right-click the icon and pick Run as a program. It needs no FUSE 2. It mounts itself with fusermount3 from the fuse3 package, which Ubuntu, Fedora and Arch desktops already have. If it says it cannot mount the AppImage, install fuse3, or start it with --appimage-extract-and-run.
wsp 0.3.3
What changed since v0.3.2
Renamed in 0.3.0
The front page of wsp --help is sixteen words on five nouns: image, place, workspace, thread, project. Every command is wsp <verb> <workspace> ..., the workspace first. Nothing answers to the old words, so here they are, once.
| was | is |
|---|---|
wsp thread new --in <workspace> "<task>" |
wsp run <workspace> "<task>" |
the MCP tool thread_new |
the MCP tool run |
wsp import <folder> --to <workspace> |
wsp import <workspace> <folder> |
wsp threads --in <workspace> |
wsp threads <workspace> |
wsp new --local [name] |
wsp new <name> --on <place>, naming the computer you are at |
wsp new --ssh <user@host> |
wsp add user@host (or an alias from your ssh config), then wsp new <name> --on <that place> |
wsp init --provider <id> |
wsp add <id> |
wsp pair, wsp devices |
wsp host pair, wsp host devices |
wsp connect <url> |
wsp login: a host on your account needs no code |
wsp hosts default, wsp disconnect |
nothing: a line goes to your account's one host, --host names another, and wsp logout drops them |
wsp relay link, wsp relay unlink |
wsp host link, wsp host unlink |
wsp relay hosts, wsp host linked, wsp host list |
wsp hosts, the hosts on your account |
wsp relay clients, wsp host clients |
wsp login, and wsp logout <id> to sign one out |
wsp up to get going |
nothing: the first command that needs a host starts one, and wsp down stops it |
plain wsp serving |
plain wsp prints the help |
This computer and every computer or provider you add are places, and wsp places lists them; --on <place> on wsp new is the one flag you meet, and only once you have more than one. wsp add is the one way a place joins: wsp add user@host for a computer over ssh (an alias from your ~/.ssh/config works as well), wsp add <provider> for a provider, wsp add alone for the line another computer types. wsp up is still there for a host you want to watch in a terminal or one that serves beyond this computer.
Agents on this computer get the new skill the first time the new host starts; a project folder whose AGENTS.md carries the old section gets the new one at the next wsp mcp install there.
- fix: a box removes in one run and leaves no wsp files behind
- fix: setup keeps a newer agent, and Claude Code is pinned at 2.1.296
- fix: box setup writes over empty dotfiles and copies Codex's login
Downloads
wsp-0.3.3-mac.dmg: macOS on Apple silicon and on Intel, one disk image for both.wsp-0.3.3.AppImage: Linux on x64.- The command line:
npm i -g @wsp-labs/wsp@0.3.3.
macOS may ask again for permissions you gave wsp, since each update is signed on its own.
Opening a downloaded bundle
Open the macOS disk image and drag wsp onto the Applications folder it shows. One image holds both Apple silicon and Intel.
The bundles are not signed yet, so macOS refuses the first open of wsp.app. Open it once, dismiss the refusal, then in System Settings under Privacy & Security find the line saying wsp was blocked and pick Open Anyway. Or from a terminal: xattr -dr com.apple.quarantine /Applications/wsp.app. Every open after that is a double click.
Start the Linux AppImage from a terminal in the folder it downloaded to: chmod +x wsp-*.AppImage && ./wsp-*.AppImage. A double-click on its icon on Ubuntu's desktop does not start it: the desktop hands an AppImage to Disk Image Mounter, which mounts it and runs nothing. There, set the run bit, then right-click the icon and pick Run as a program. It needs no FUSE 2. It mounts itself with fusermount3 from the fuse3 package, which Ubuntu, Fedora and Arch desktops already have. If it says it cannot mount the AppImage, install fuse3, or start it with --appimage-extract-and-run.
wsp 0.3.2
What changed since v0.3.1
Renamed in 0.3.0
The front page of wsp --help is sixteen words on five nouns: image, place, workspace, thread, project. Every command is wsp <verb> <workspace> ..., the workspace first. Nothing answers to the old words, so here they are, once.
| was | is |
|---|---|
wsp thread new --in <workspace> "<task>" |
wsp run <workspace> "<task>" |
the MCP tool thread_new |
the MCP tool run |
wsp import <folder> --to <workspace> |
wsp import <workspace> <folder> |
wsp threads --in <workspace> |
wsp threads <workspace> |
wsp new --local [name] |
wsp new <name> --on <place>, naming the computer you are at |
wsp new --ssh <user@host> |
wsp add user@host (or an alias from your ssh config), then wsp new <name> --on <that place> |
wsp init --provider <id> |
wsp add <id> |
wsp pair, wsp devices |
wsp host pair, wsp host devices |
wsp connect <url> |
wsp login: a host on your account needs no code |
wsp hosts default, wsp disconnect |
nothing: a line goes to your account's one host, --host names another, and wsp logout drops them |
wsp relay link, wsp relay unlink |
wsp host link, wsp host unlink |
wsp relay hosts, wsp host linked, wsp host list |
wsp hosts, the hosts on your account |
wsp relay clients, wsp host clients |
wsp login, and wsp logout <id> to sign one out |
wsp up to get going |
nothing: the first command that needs a host starts one, and wsp down stops it |
plain wsp serving |
plain wsp prints the help |
This computer and every computer or provider you add are places, and wsp places lists them; --on <place> on wsp new is the one flag you meet, and only once you have more than one. wsp add is the one way a place joins: wsp add user@host for a computer over ssh (an alias from your ~/.ssh/config works as well), wsp add <provider> for a provider, wsp add alone for the line another computer types. wsp up is still there for a host you want to watch in a terminal or one that serves beyond this computer.
Agents on this computer get the new skill the first time the new host starts; a project folder whose AGENTS.md carries the old section gets the new one at the next wsp mcp install there.
- fix(web): link chips draw a glyph, never ask Google for a favicon
- fix(web): no Image on a computer with the cloud off, no held Install
- feat(slate): images from any path and from allowed domains
- refactor: verbs, tools and the skill take a thread, not a workspace
- docs: pin the Scalar subdomain the usewsp.com Worker reads from
- docs: serve the docs at usewsp.com/docs, the new tree replacing the old
- docs: the pictures and recordings the pages show
- fix(web): sidebar inks off glass, a done card's line, folds counting 0
- fix: app and command line words say what the code does
- ci: run the Mac gate on GitHub's macOS runner beside the Linux jobs
- feat(www): /compare as an index of cards and one page per tool
- fix(box): GH_TOKEN reaches box turns, joined boxes keep the host
- fix(web): a thread switch and a scroll draw only what moved
- fix(desktop): the wsp on PATH and a later older host match the app
- fix(web): measure the right pane's row past the lead panels wrapper
- docs: write the reference pages from their sources, held by a test
- docs: agents, how it works and guides pages for the new docs
- site: the Agents tile and the relay answers say what ships
- docs: write the feature pages from Threads to Recipes
- docs: write the feature pages from Slate to Other devices
- docs(docs-next): write the six Get started pages
- fix(runtime): say Starting at launch, keep agent lists across hosts
- www: JetBrains is not an SSH editor, and OpenCode takes a key
- fix(desktop): replace a host of an earlier release before attaching
- www: usewsp.com/compare, one table with a source on every cell
- fix: a message with images steers into the running turn
- fix(threads): a moved row goes out alone, not the workspace's list
- fix(web): no branch, push or merge in a thread row
- fix(runtime): a thread's terminal opens in the thread's folder
- docs: lay out the new docs tree, its redirects and a prose check
- feat(web): a subagent's own page, its bar and the way back to its lead
- fix(web): a tile's Settle has its tooltip, a sub-thread's arrow shows
- www: privacy, terms and security pages
- feat(web): the Threads section shuts to its counts and its top row
- fix(web): an event re-derives what it touched, not every thread
- feat(www): prerender every page with its own head and og image
- feat(host): usage events carry surface app
- fix(adapter-claude): end a subagent's fold on its report on 2.1.295
- www: count visits with PostHog, with no cookies
- fix: a child's finished line stays owed until its lead takes it
- www: the setup list says what each item offers; Slate turns itself
- perf(web): draw crabs and the empty-thread field only when seen
- www: the pitch is said once
- www: usewsp.com serves from one Cloudflare Worker
- fix(runtime): a socket gets a workspace's spend only when it moves
Downloads
wsp-0.3.2-mac.dmg: macOS on Apple silicon and on Intel, one disk image for both.wsp-0.3.2.AppImage: Linux on x64.- The command line:
npm i -g @wsp-labs/wsp@0.3.2.
macOS may ask again for permissions you gave wsp, since each update is signed on its own.
Opening a downloaded bundle
Open the macOS disk image and drag wsp onto the Applications folder it shows. One image holds both Apple silicon and Intel.
The bundles are not signed yet, so macOS refuses the first open of wsp.app. Open it once, dismiss the refusal, then in System Settings under Privacy & Security find the line saying wsp was blocked and pick Open Anyway. Or from a terminal: xattr -dr com.apple.quarantine /Applications/wsp.app. Every open after that is a double click.
Start the Linux AppImage from a terminal in the folder it downloaded to: chmod +x wsp-*.AppImage && ./wsp-*.AppImage. A double-click on its icon on Ubuntu's desktop does not start it: the desktop hands an AppImage to Disk Image Mounter, which mounts it and runs nothing. There, set the run bit, then right-click the icon and pick Run as a program. It needs no FUSE 2. It mounts itself with fusermount3 from the fuse3 package, which Ubuntu, Fedora and Arch desktops already have. If it says it cannot mount the AppImage, install fuse3, or start it with --appimage-extract-and-run.
wsp 0.3.1
What changed since v0.3.0
Renamed in 0.3.0
The front page of wsp --help is sixteen words on five nouns: image, place, workspace, thread, project. Every command is wsp <verb> <workspace> ..., the workspace first. Nothing answers to the old words, so here they are, once.
| was | is |
|---|---|
wsp thread new --in <workspace> "<task>" |
wsp run <workspace> "<task>" |
the MCP tool thread_new |
the MCP tool run |
wsp import <folder> --to <workspace> |
wsp import <workspace> <folder> |
wsp threads --in <workspace> |
wsp threads <workspace> |
wsp new --local [name] |
wsp new <name> --on <place>, naming the computer you are at |
wsp new --ssh <user@host> |
wsp add user@host (or an alias from your ssh config), then wsp new <name> --on <that place> |
wsp init --provider <id> |
wsp add <id> |
wsp pair, wsp devices |
wsp host pair, wsp host devices |
wsp connect <url> |
wsp login: a host on your account needs no code |
wsp hosts default, wsp disconnect |
nothing: a line goes to your account's one host, --host names another, and wsp logout drops them |
wsp relay link, wsp relay unlink |
wsp host link, wsp host unlink |
wsp relay hosts, wsp host linked, wsp host list |
wsp hosts, the hosts on your account |
wsp relay clients, wsp host clients |
wsp login, and wsp logout <id> to sign one out |
wsp up to get going |
nothing: the first command that needs a host starts one, and wsp down stops it |
plain wsp serving |
plain wsp prints the help |
This computer and every computer or provider you add are places, and wsp places lists them; --on <place> on wsp new is the one flag you meet, and only once you have more than one. wsp add is the one way a place joins: wsp add user@host for a computer over ssh (an alias from your ~/.ssh/config works as well), wsp add <provider> for a provider, wsp add alone for the line another computer types. wsp up is still there for a host you want to watch in a terminal or one that serves beyond this computer.
Agents on this computer get the new skill the first time the new host starts; a project folder whose AGENTS.md carries the old section gets the new one at the next wsp mcp install there.
- www: the FAQ says what the relay sees
- www: the page tells wsp as it is now, shown by the real app
- feat: a restart names the thread it replaced, which settles
- fix(release): pin the root vitest setup files to the config folder
- feat: settle a thread's tree from the host, the verbs and the tools
- feat(web): a lead's tree in the sidebar, its folds, Needs you as inbox
- ci: restore the daemon a landing built, build packages beside it
- feat(web): one drawer around the composer, and the bars its rows open
- feat(web): a lead's calls stand as its children's live rows
- feat(web): a lead's tree read once, its rows, folds and acts
- fix: a box's Codex files land where its threads' Codex reads
- fix: a woken agent's reply, not a held one, ends a steered turn
- test(screenshots): a marathon lead fixture the lead shots are taken on
- test(runtime): box launch cases run on a Mac with Linux unchanged
- A status is its icon alone, a Stopped mark, one tree line
- build: type check with TypeScript 7, the native compiler
- test(runtime): close the restarted host before removing its folder
- feat: listings carry a turn's last line, failure, subagents and fold
Downloads
wsp-0.3.1-mac.dmg: macOS on Apple silicon and on Intel, one disk image for both.wsp-0.3.1.AppImage: Linux on x64.- The command line:
npm i -g @wsp-labs/wsp@0.3.1.
macOS may ask again for permissions you gave wsp, since each update is signed on its own.
Opening a downloaded bundle
Open the macOS disk image and drag wsp onto the Applications folder it shows. One image holds both Apple silicon and Intel.
The bundles are not signed yet, so macOS refuses the first open of wsp.app. Open it once, dismiss the refusal, then in System Settings under Privacy & Security find the line saying wsp was blocked and pick Open Anyway. Or from a terminal: xattr -dr com.apple.quarantine /Applications/wsp.app. Every open after that is a double click.
Start the Linux AppImage from a terminal in the folder it downloaded to: chmod +x wsp-*.AppImage && ./wsp-*.AppImage. A double-click on its icon on Ubuntu's desktop does not start it: the desktop hands an AppImage to Disk Image Mounter, which mounts it and runs nothing. There, set the run bit, then right-click the icon and pick Run as a program. It needs no FUSE 2. It mounts itself with fusermount3 from the fuse3 package, which Ubuntu, Fedora and Arch desktops already have. If it says it cannot mount the AppImage, install fuse3, or start it with --appimage-extract-and-run.
wsp 0.2.0
What changed since v0.1.4
- setup: the running estimate, the sign-in slide, and what a live run hit
- tests own their environment, the first launch waits on its event
- fix(setup): the build's error states say what happened and lose nothing
- fix(setup): the Solari key is checked with the provider before it is saved
- fix(signin): every login runs without questions, or says which it cannot answer
- fix(setup): the first cloud workspace is forked off the step's answer, not the list
- feat(app): a build that needs you says so in three places
- fix(app): the cloud setup screens in the first launch's grammar, measured
- fix(setup): the agent road launches a thread that can do the job, and shows it
- feat(host): sign-ins from the app finish by callback, or take the code back
- feat(app): the cloud setup is full-window screens in the first launch's grammar
- feat(desktop): the first launch's tilde gets its edges, the screens lose their filler
- feat(sidebar): the cloud setup row is a keycap button that shows the build
- build(desktop): one hairline arrow points from the app to Applications
- feat(sidebar): the kind glyph goes green while the machine runs, this computer shows its size
- build(desktop): the disk image window on a light ground, one glow, one line
- test(vault): the export's streaming claims no longer read the disk's flush timing
- fix(shell): the centre column keeps a floor, the sidebar gives way beside the panel
- fix(vault): a nap over the cap says so on the row and the tab, not only once
- fix(threads): a thread is spoken for from the moment its first turn is asked
- feat(image): a manifest of recipe-owned files decides what an upgrade keeps
- feat(labs): spaces as icons, a theme colour picker, real settings controls
- build(desktop): a DMG that moves to Applications, one universal build, stable download URLs
- feat(app): cloud setup is a job the app draws, and init runs on that job
- test(desktop): a keyless computer with a local workspace opens on the list
- feat(cli): wsp thread read prints a thread's messages
- fix(local): a thread on this computer gets its title with the person's own sign-in
- fix(web): the composer's pickers stay readable at every width
- feat(www): the host's memory as one measured line, guarded by a test
- feat(projects): drag a folder onto a workspace, and a thread finds its project from where you stand
- feat(local): this computer shows its load, memory, disk and processes
- test: two flaky cases wait for the event they assert on
- feat(threads): a thread names itself as a notify target, and nobody waits
- feat(desktop): first launch is this computer, with a welcome and an agents screen
- feat(app): rows with fixed slots, an honest machine tab, and a composer that wakes
- feat(projects): a workspace holds projects, and a thread starts in one
- fix(protocol): no provider URL rides a workspace view, and a table read leaves the sidebar alone
- fix(recipe): the ssh config copied to a Linux golden drops macOS-only options
- feat(host): this computer and ssh machines work with no provider key
- fix(cli): the workspaces table shows the state the sidebar shows
- fix(daemon): the daemon runs under systemd and comes back when killed
- feat(ssh): a machine you already have as a workspace, over ssh
- feat(init): this computer as a workspace from the first run, with or without a key
- feat(local): a turn and an exec on this computer start in the workspace's folder
- build(desktop): sign and notarize mac bundles when the secrets exist
- feat(threads): the last access pick is the default for the next thread
- test: the suite is green on a Linux runner
- fix(web): one capped Chromium launch for every render test
- feat(www): canonical, robots, sitemap and structured data
Downloads
wsp-0.2.0-mac.dmg: macOS on Apple silicon and on Intel, one disk image for both.wsp-0.2.0.AppImage: Linux on x64.- The command line:
npm i -g @zingzy/wsp@0.2.0.
Opening a downloaded bundle
Open the macOS disk image and drag wsp onto the Applications folder it shows. One image holds both Apple silicon and Intel.
The bundles are not signed yet, so macOS refuses the first open of wsp.app. Open it once, dismiss the refusal, then in System Settings under Privacy & Security find the line saying wsp was blocked and pick Open Anyway. Or from a terminal: xattr -dr com.apple.quarantine /Applications/wsp.app. Every open after that is a double click.
The Linux AppImage needs the run bit before it starts: chmod +x wsp-*.AppImage.
wsp preview
A preview build of the main branch for testers, rebuilt by hand as fixes land; not a release. The version inside says 0.2.0. The current disk image was built from main at 6229d9f on 2026-09-10.
Since v0.2.0: a thread on your own computer runs Claude Code as your own Claude, so a claude.ai login is found; an app opened from Finder or the Dock finds the agents in your user folders, since the host takes your login shell's PATH before anything else starts; the slash menu offers only commands that work in a thread and says where the screen commands live; the browser pane frames a path, localhost:3000/about reaches /about; a setup step with nothing to pick is not shown and the counter counts the steps you see; a wake the provider does not answer says so within thirty seconds, keeps asking on its own with the count on the row, and offers a rebuild when the machine will not come back; the app says so when it is attached to a host of another release; its state no longer comes from the launch folder; the About row shows the version.
Opening it: macOS refuses the first open of an unsigned app. Open it once, dismiss the refusal, then in System Settings under Privacy & Security pick Open Anyway next to the line about wsp. Or from a terminal: xattr -dr com.apple.quarantine /Applications/wsp.app.
wsp 0.1.4
What changed since v0.1.3
- docs: community standards for the public repo
- feat(www): the link card
- chore: drop three build logs a worktree added, ignore logs
- build(desktop): re-sign each mac bundle ad hoc after staging node-pty
- docs: point the README and the docs header at the site
- build(www): deploy the landing page from main only
- feat(www): link the docs from the nav, the hero and the footer
Downloads
wsp-0.1.4-mac-arm64.zip: macOS on Apple silicon.wsp-0.1.4-mac-x64.zip: macOS on Intel.wsp-0.1.4.AppImage: Linux on x64.- The command line:
npm i -g @zingzy/wsp@0.1.4.
Opening a downloaded bundle
The bundles are not signed yet, so the first open of wsp.app is refused: right click it in Finder, pick Open, and pick Open again in the dialog. Every open after that is a double click.
The Linux AppImage needs the run bit before it starts: chmod +x wsp-*.AppImage.