A Claude Code plugin
Share a Claude Code session with a link
Teammates join from their own Claude Code and talk to it. One session does the work, everyone sees every turn as it streams, and the host approves what runs on their machine.
claude plugin marketplace add marketer-ux-team/claude-share && claude plugin install shared-session@mux-shareThen start a new session and press Share above the prompt (or type /share-session). For your team, press Team: sign in with GitHub or Google, and everything your team shares is a press from joining. Requires Claude Code 2.1.286 or later.
What this server sees and keeps
- What passes through: while a session is shared, its prompts and the files people attach to them, Claude's replies and, while someone else is in the room, its thinking as it happens (passed along, never kept), the tools it runs with the first lines of their results and the pictures in them (screenshots, images it opens), the side chat, people's reactions to Claude's replies and which replies each person has had on screen, any files or local previews the host's Claude shows, and messages between a teammate's own other sessions and the host's session, which go to the other side alone (passed along, never kept). Sharing a session that already has history asks first whether to include it.
- How long: a room and everything in it is deleted 24 hours after the host stops sharing or was last seen. A room keeps its newest 5000 events, 16 MB of them at most. For TCP previews the room keeps only coarse connection and byte-budget counters, until the room is deleted. For a preview opened through its link, the room keeps the link (which preview, which seat made it, the page it opens) for 10 minutes, and the browser session it starts (which preview and seat) for 12 hours from the last link that browser opened; both end when that seat leaves or the host stops the preview. A seat keeps its newest 4 browser sessions per preview, and a room its newest 128 links and 256 browser sessions. A link or session that expired is removed at the room's next activity, or with the room; one that ended goes at once. Application bytes are relayed, never stored. To count the rooms each network makes in a day, the server on Cloudflare keeps a hash of each new room's network address, keyed by a random key made for that day, with that count, until the day (UTC) ends; then all of it goes, the key too. There are no analytics, and no request logs kept.
- Previews share a host name: every shared session's previews are served on one preview host name, and their links name the session by a key of its own, which can't join it. A browser not already in a session's previews has that host name's storage and cache, and its domain's cookies, cleared before it enters; browsers clear them only over HTTPS (or on localhost). No preview can register a service worker there. Clearing can't stop a page that's still open, though: a preview page of one session left open in a browser can reach the previews of another session that browser opens after it. Close the previews of a session you don't trust before opening another's, or open them in a browser profile of their own. A server of your own can give each session's previews a host name of its own, which closes this (how).
- Accounts, only for teams: sharing and joining need none. If you sign in (GitHub or Google) to use teams, the server keeps your name, username, the email your provider last verified (once it stops verifying one, it's shown but no longer signs anyone in or matches a team's domain), which GitHub organizations you're in, the teams you're in and their settings, which open sessions are shared with each team, and invites to a session (who invited whom, until it's joined, dismissed, ends, or 12 hours pass). Signing in finishes only when you press Continue on this server's page. The page and Claude Code show the same code, and you continue only if they match. Until you press Continue, the server keeps who GitHub or Google said you are; after ten minutes that sign-in stops working, and it's deleted then. Claude Code's token is made when it picks up the sign-in, and the server keeps only its hash, never the token itself. Sign-ins stay until you delete your account (
/team delete-account), which removes them at once. A browser signed in to this server's dashboard (/app) keeps its sign-in in a cookie, and the server keeps only its hash, with your account. A browser sign-in lasts 30 days, and signing out there, or deleting your account, ends it at once. It only reads: your teams' live sessions, and the traces you could search from Claude Code. Signed in, a session you share or join also knows your account for as long as it lasts, so your sessions count as one person. - Native subscription pools, where configured: a separate Mac helper may use your Share sign-in to enroll in a pool for a configured team. Share checks actual team membership and keeps a hashed grant with the account, team, device name and verifier hash for at most two minutes. The pool receives the account and team IDs and device name and checks current membership before giving out credentials. Your Share sign-in token stays with Share. A room link grants no pool access, and one-time Mac setup is required.
- In the cloud, if a host chooses it: Move to cloud sends the session's project files, its conversation and the host's Claude token to a container this server starts for that room, which runs Claude Code as the host. The server passes them on and keeps none of them. The container, with everything in it, is deleted when the host brings the session home, the room ends, or a week after the move; its changes are kept as a room file for Bring home, deleted with the room.
- Who can see it: anyone with the room's link, or for a session shared with a team that keeps it to its people, only the people in that team. Links are long and random; forward one only to people you'd hand the session to. Content is encrypted in transit, not end to end: the server can read what passes through it.
- What runs where: a teammate's prompt runs on the host's machine. Reads inside the host's project run without asking (one through a link out of it asks); everything else asks the host first, by default. A local page the host's Claude opens or gives the address of is shared only once the host says so.
- Limits: new rooms and joins are rate-limited per network; rooms hold up to 20 people, 100 MB of files (10,240 files at most), 128 open previews, and events of 128 KB each. Previews opened through their link limit request bodies to 1 MB and response bodies to 20 MB, and allow 512 requests waiting per room, 32 WebSockets per seat and 128 per room (one the host's Claude Code doesn't take up within 10 seconds closes, and those waiting hold 8 MB per room at most), and 30 new links a minute per seat (120 per room). A room sends out at most 8 GB a day of its files and of what its previews' links answer, and to any one seat at most 256 MB a minute of it. Such a WebSocket closes once 1 MB sent through it waits unread; on Cloudflare, which can't see that, once one side sends more than 4 MB in a second. TCP previews instead allow 32 connections per seat across all previews, 64 per room, and 1200 new connections per minute (240 for any one seat). Only a port the host chose to forward can be reached this way, and only by someone in the room: their connections close when they leave or the host stops that preview. Unpaired connections close after 10 seconds. A room has a lifetime 1 GiB TCP byte budget, reserved in 1 MiB chunks per direction, unused parts given back when a connection closes. Data messages are at most 64 KiB, with at most 4 messages / 256 KiB outstanding per direction, and a connection closes if 1 MiB of control messages to one side goes unacknowledged (each acknowledgement covers everything sent before it), however long it lives. Rooms that are abused get ended.
- Your own server: teams that want their sessions on their own infrastructure can run the same server on their own Cloudflare account in a few minutes (how), and set it in the plugin.
Questions or abuse reports: open an issue on GitHub.