Turns your Claude Code session into a two-person workspace where one developer hosts a project and another joins remotely through a Cloudflare tunnel. The guest connects via stdio proxy with a one-time token and gets read/write access to the same codebase, but all their file edits go into an approval queue the host reviews with diffs before committing to disk. File locking prevents simultaneous edits to the same file. Built-in chat window keeps you coordinated. Exposes tools like list_files, read_file, write_file, lock_file, get_pending_changes, and approve_change. Host needs cloudflared installed, guest just needs the CLI. Useful when pair programming across machines without standing up a full dev server or dealing with Git conflicts in real time.
Real-time collaborative coding via Claude Code — two developers, one codebase, each using their own Claude subscription.
One developer hosts the session. The other joins from anywhere. Both get a live Claude Code window connected to the same project — with file locking and an approval system to prevent conflicts.
letswork start inside their project folderletswork join <url> --token <token> on their machine| Requirement | macOS | Windows (WSL) |
|---|---|---|
| Python 3.10+ | brew install python | Comes with Ubuntu WSL |
| cloudflared | brew install cloudflared | See WSL section below |
| Claude Code | npm install -g @anthropic-ai/claude-code | npm install -g @anthropic-ai/claude-code (inside WSL) |
| Node.js | brew install node | sudo apt install nodejs npm (inside WSL) |
The host is the developer who owns the project. You start the session and share the join command.
brew install cloudflared
pip install letswork
npm install -g @anthropic-ai/claude-code
Navigate to your project folder and run:
cd /path/to/your/project
letswork start
You will be asked for your display name, then a session box appears:
╔══════════════════════════════════════════════════════════════════════╗
║ 🤝 LetsWork Session Active ║
║ ║
║ Send this command to your collaborator: ║
║ letswork join https://abc123.trycloudflare.com --token a1b2c3d4 ║
║ ║
║ Press Ctrl+C to stop. ║
╚══════════════════════════════════════════════════════════════════════╝
Copy the full letswork join ... command and send it to your collaborator.
Two new terminal windows open automatically:
When the guest edits a file, you'll see a notification in Claude Code. Ask Claude:
get_pending_changes
Then approve or reject:
approve_change <id>
reject_change <id>
Press Ctrl+C in the terminal where you ran letswork start.
The guest connects to the host's project. You need the join command from the host.
brew install cloudflared
pip install letswork
npm install -g @anthropic-ai/claude-code
Run the command the host sent you:
letswork join https://abc123.trycloudflare.com --token a1b2c3d4
You'll be asked for your display name. Then two windows open:
Ask Claude to read and edit files normally. When you write a file, it goes into an approval queue — the host reviews it before it's written to disk. You'll get a notification when it's approved or rejected.
LetsWork runs inside WSL (Windows Subsystem for Linux). The guest experience is the same as macOS once WSL is set up.
Open PowerShell as Administrator and run:
wsl --install
Restart your computer when prompted. Ubuntu will install automatically.
Open Ubuntu from the Start menu and set up your Linux username and password.
Open Ubuntu and run these one by one:
# Update packages
sudo apt update && sudo apt upgrade -y
# Install Python
sudo apt install python3 python3-pip -y
# Install Node.js and npm
sudo apt install nodejs npm -y
# Install cloudflared
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o cloudflared
chmod +x cloudflared
sudo mv cloudflared /usr/local/bin/
# Install letswork
pip3 install letswork
npm install -g @anthropic-ai/claude-code
Run the command the host sent you, inside Ubuntu:
letswork join https://abc123.trycloudflare.com --token a1b2c3d4
You'll be asked for your display name. Claude Code launches directly in the same terminal window.
Note for Windows users: Claude Code runs in the WSL terminal — not as a separate window. Everything else works identically to macOS.
Both host and guest have access to these tools inside Claude Code:
| Tool | Who Can Use | Description |
|---|---|---|
list_files | Both | List files and directories with lock status |
read_file | Both | Read file contents (1MB limit, text files only) |
write_file | Both | Submit a file change (guest changes need host approval) |
lock_file | Both | Lock a file for exclusive editing |
unlock_file | Both | Release your own file lock |
get_status | Both | Show session info, connected users, and active locks |
get_notifications | Both | Quick summary of what needs attention |
ping | Both | Verify connection to the host MCP server |
set_display_name | Guest only | Set your display name for the session |
my_pending_changes | Guest only | View your submitted changes awaiting approval |
get_pending_changes | Host only | View all changes awaiting approval with diffs |
approve_change | Host only | Approve a pending change and write it to disk |
reject_change | Host only | Reject a pending change |
force_unlock | Host only | Force-release a stuck file lock |
Guest file writes do not go directly to disk — they go through the host's approval queue:
write_file submits the change📝 guest submitted change to server.py (ID: a1b2c3)get_pending_changes — sees a full diffapprove_change a1b2c3 → file is written to diskreject_change a1b2c3 → guest is notifiedcloudflared must be installed on the host machine (guest does not need it on macOS, but WSL guests do)letswork start [--port PORT] [--debug] # Start a session (default port: 8000)
letswork join <URL> --token <TOKEN> # Join a session as guest
Host Machine:
[Project Files] ← [MCP Server :8000] ← [Cloudflare Tunnel] ← HTTPS URL
↑
Guest connects here
via stdio proxy + secret token
The guest connects through a stdio proxy rather than directly over HTTP — this avoids Cloudflare SSE reliability issues and gives stable MCP connectivity.
MIT — see LICENSE
Built with the Model Context Protocol.