{"id":"a4471a3c-15f8-4e30-918f-d47f543beabf","slug":"wsp","kind":"mcp","name":"wsp","summary":"Your setup, on cloud machines, for coding agents. Fork your own dev machine in seconds and let Claude Code and Codex work on it.","owner":"wsp-labs","repoUrl":"https://github.com/wsp-labs/wsp","license":"AGPL-3.0","licenseTier":"strong-copyleft","trust":"community","stars":9,"match":null,"fewStars":false,"format":"mcp","createdAt":null,"addedAt":"2026-10-14T05:49:12.191Z","logoUrl":"https://avatars.githubusercontent.com/u/338820970?v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["developer-tools"],"tags":["claude-code","cloud-development","codex","coding-agents","developer-tools","electron","local-first","remote-development"],"runtime":"binary","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-14T08:07:17.391Z","sample":false,"url":"https://conduits.dev/tools/wsp","language":"TypeScript","transports":["stdio"],"install":{},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"# wsp\n\nYour setup, on your computers, for coding agents.\n\nThe site is [usewsp.com](https://usewsp.com). The docs are at [usewsp.com/docs](https://usewsp.com/docs).\n\nwsp runs coding agents (Claude Code, Codex, OpenCode, Cursor) as threads on your own computers: the Mac you sit at, and any Linux box you add over ssh. A thread works in your project's folder, the way the agent would in a terminal there. You start threads, read them and answer them from the app, the command line, or from another agent over MCP, and every one of them shows in the same sidebar.\n\n![The wsp app: threads in the sidebar, the new thread composer in the center](docs/screenshots/app.png)\n\n## What it does\n\n- **Threads in your project.** A thread runs in the project's folder on its computer. Several threads share the folder; a thread on another branch gets a git worktree wsp makes, with your `.env` files and installed dependencies carried in.\n- **Any agent, any model.** Pick the agent, the model, how hard it thinks and how far it may go without asking, per thread. Answer its questions and permission prompts from the app.\n- **Agents starting agents.** A thread can start threads of its own, with the same agent or another one, beside it in the same folder. They show as its children in the sidebar, and each one's last reply comes back to the thread that started it.\n- **Computers you own.** Add a Linux box over ssh and wsp puts your setup on it: your agents, the command-line tools they use, their skills, MCP servers and plugins, your sign-ins and your projects. Then start threads there the same way.\n- **Everything about a thread, beside it.** A terminal in its folder, its dev server in a browser tab, its changes with commit, push and pull request, its files, its processes, the computer's load, and the slate: a panel the agent builds for the thread, live, from trackers to forms with buttons.\n- **What your agents use.** A usage page with each agent account's plan limits and what was used, by agent, project and computer.\n- **Your keys stay on your computers.** The host runs on your Mac, not on a service of ours, and your sign-ins live on the computers that use them.\n\n![A thread that started threads of its own: its children in the sidebar and in its transcript, and the board it built on the slate](docs/screenshots/threads.png)\n\n## Before you start\n\n- macOS, or Linux on x64.\n- An agent you already use and are signed in to: Claude Code, Codex, OpenCode or Cursor.\n- For a box you add: Linux you can reach over ssh as root, with systemd and cgroup v2.\n\n## Install\n\n```sh\ncurl -fsSL https://usewsp.com/install | sh\n```\n\nOn a Mac this puts wsp.app in Applications and opens it; on Linux it puts the AppImage in `~/Applications`. Either way the `wsp` command lands in `~/.wsp/bin`, on PATH in a new terminal. Each download comes from this repo's releases and is checked against the sha256 GitHub publishes for it. `WSP_VERSION=1.2.3` installs that release; running it again updates wsp.\n\nThe desktop bundles for macOS and Linux are also on the [releases page](https://github.com/wsp-labs/wsp/releases).\n\nWith Node 22 or newer, this installs the command line alone:\n\n```sh\nnpm i -g @wsp-labs/wsp\n```\n\n## First run\n\nOpen the app. It finds the agents on your Mac and serves your projects from there. Add a project (any folder, a git repo or not) and start a thread from the composer.\n\nThe same from a terminal:\n\n```sh\nwsp add ~/code/api                                   # a project: a folder on this computer\nwsp run api \"fix the flaky terminal test\"            # a thread in that folder\nwsp run api --branch fix/flaky \"write the failing test first\"   # a thread in a worktree on that branch\nwsp threads                                          # who is working, where, on which branch\n```\n\n`wsp send <thread> \"<message>\"` is a thread's next message and `wsp stop <thread>` ends its turn. `wsp thread read <thread>` prints what it said. The first line that needs a host starts one; `wsp down` stops it.\n\n## Add a computer\n\nIn the app: Settings, then Computers, then Add a computer. Name the box as you reach it over ssh (an alias from your `~/.ssh/config` works), and wsp checks it, installs itself there, and sets it up from your Mac's setup or a saved recipe, one step at a time. Or from a terminal:\n\n```sh\nwsp add root@my-box\n```\n\n![Settings, Computers: the Mac and a box added over ssh, with their cores, memory and threads](docs/screenshots/computers.png)\n\n`wsp computers` lists your computers; `wsp computers set <computer>` renames one, moves its ssh login, and sets how many threads run there at once. `wsp remove <computer>` takes a box out and removes what wsp put there.\n\n## For your agents\n\nGive your agent the wsp tools and skill:\n\n```sh\nwsp mcp install --agent claude     # or codex, gemini, opencode\n```\n\nAfter the agent restarts, it can open threads, start threads on other agents and models beside it, read their replies and send them messages, all of it in your sidebar. In the agent: *\"use wsp to start a Codex thread on api that reviews the open pull request\"*.\n\n## The command line\n\n```\nwsp add <user@host|folder|url>  a computer over ssh, or a project\nwsp computers                   your computers: this one, each box you added\nwsp remove <computer>           take a computer out\nwsp projects                    your projects, each on its computer\nwsp threads [<project>]         who is working, in which folder, branch and computer\nwsp run <project> \"<message>\"   an agent works in the project's folder\nwsp send <thread> \"<message>\"   the thread's next message\nwsp stop <thread>               end the thread's running turn\nwsp delete <thread>             gone with its turns; the folder stays\nwsp status                      whether a host serves, and where\nwsp mcp                         the verbs as tools for agents on this computer\n```\n\n`wsp --help` lists them all, `wsp <verb> --help` gives a verb's flags, and `wsp --help agent` has the ones your agents use. The command line and the MCP tools are the same verbs.\n\n<!-- renames:start -->\n### Renamed in 0.3\n\nA 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.\n\n| was | is |\n| --- | --- |\n| `wsp thread new --in <workspace> \"<task>\"` | `wsp run <project> \"<message>\"` |\n| the MCP tool `thread_new` | the MCP tool `run` |\n| `wsp threads --in <workspace>` | `wsp threads <project>` |\n| `wsp new --local [name]`, `wsp import <folder> --to <workspace>` | `wsp add <folder>`, a project on this computer |\n| `wsp new --ssh <user@host>` | `wsp add user@host` (or an alias from your ssh config), a computer |\n| `wsp places` | `wsp computers` |\n| `wsp stop <thread> --task <id>` | `wsp stop <thread> --subagent <id>`, the id in the SUBAGENT column of `wsp threads` |\n| `wsp pair`, `wsp devices` | `wsp host pair`, `wsp host devices` |\n| `wsp connect <url>` | `wsp login`: a host on your account needs no code |\n| `wsp disconnect` | nothing: a line goes to your account's one host, `--host` names another, and `wsp logout` drops them |\n| `wsp relay link`, `wsp relay unlink` | `wsp host link`, `wsp host unlink` |\n| `wsp relay hosts`, `wsp host linked`, `wsp host list` | `wsp hosts`, the hosts on your account |\n| `wsp relay clients`, `wsp host clients` | `wsp login`, and `wsp logout <id>` to sign one out |\n\nA 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.\n\nAgents 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.\n<!-- renames:end -->\n\n<!-- bundles:start -->\n### Opening a downloaded bundle\n\nOpen the macOS disk image and drag wsp onto the Applications folder it shows. One image holds both Apple silicon and Intel.\n\n<!-- unsigned:start -->\nThe 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.\n<!-- unsigned:end -->\n\nStart 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`.\n<!-- bundles:end -->\n\n## What is next\n\nThreads on a box you added run in the project's folder there, the same as on your Mac. A thread on your Mac starts a child on one of your boxes, sends it the work it has so far, and gets the result back as a branch.\n\n## Building from source\n\n```sh\ngit clone https://github.com/wsp-labs/wsp.git && cd wsp\npnpm install && pnpm build\npnpm wsp --help\n```\n\n`pnpm test` runs without any key. The laws the code follows are in [CONTRIBUTING.md](CONTRIBUTING.md); how a browser reaches a computer is in [docs/reach.md](docs/reach.md); cutting a release is [docs/release.md](docs/release.md).\n\n## Issues\n\n[github.com/wsp-labs/wsp/issues](https://github.com/wsp-labs/wsp/issues). Say what you ran, what you saw, and the output of `wsp --version`. Never paste a key.\n\n## License\n\nAGPL-3.0-only. See [LICENSE](LICENSE) and [THIRD_PARTY_NOTICES](THIRD_PARTY_NOTICES).\n"}