{
  "markdown": "<!-- mcp-name: io.github.saicharanrajoju/letswork -->\n\n# LetsWork\n\n**Real-time collaborative coding via Claude Code** — two developers, one codebase, each using their own Claude subscription.\n\nOne 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.\n\n---\n\n## How It Works\n\n1. **Host** runs `letswork start` inside their project folder\n2. A secure HTTPS tunnel is created automatically via Cloudflare\n3. A one-time URL + guest token is generated and printed\n4. Host shares the join command with the guest\n5. **Guest** runs `letswork join <url> --token <token>` on their machine\n6. Both developers now have Claude Code connected to the same codebase\n\n---\n\n## Requirements\n\n| Requirement | macOS | Windows (WSL) |\n|-------------|-------|---------------|\n| Python 3.10+ | `brew install python` | Comes with Ubuntu WSL |\n| cloudflared | `brew install cloudflared` | See WSL section below |\n| Claude Code | `npm install -g @anthropic-ai/claude-code` | `npm install -g @anthropic-ai/claude-code` (inside WSL) |\n| Node.js | `brew install node` | `sudo apt install nodejs npm` (inside WSL) |\n\n---\n\n## macOS — Host Setup\n\n> The host is the developer who owns the project. You start the session and share the join command.\n\n### Step 1 — Install dependencies\n\n```bash\nbrew install cloudflared\npip install letswork\n```\n\n### Step 2 — Install Claude Code\n\n```bash\nnpm install -g @anthropic-ai/claude-code\n```\n\n### Step 3 — Start the session\n\nNavigate to your project folder and run:\n\n```bash\ncd /path/to/your/project\nletswork start\n```\n\nYou will be asked for your display name, then a session box appears:\n\n```\n╔══════════════════════════════════════════════════════════════════════╗\n║  🤝 LetsWork Session Active                                          ║\n║                                                                      ║\n║  Send this command to your collaborator:                             ║\n║  letswork join https://abc123.trycloudflare.com --token a1b2c3d4    ║\n║                                                                      ║\n║  Press Ctrl+C to stop.                                               ║\n╚══════════════════════════════════════════════════════════════════════╝\n```\n\n**Copy the full `letswork join ...` command and send it to your collaborator.**\n\nTwo new terminal windows open automatically:\n- Claude Code — already connected to LetsWork\n- A chat window to communicate with your collaborator\n\n### Step 4 — Approve guest changes\n\nWhen the guest edits a file, you'll see a notification in Claude Code. Ask Claude:\n\n```\nget_pending_changes\n```\n\nThen approve or reject:\n\n```\napprove_change <id>\nreject_change <id>\n```\n\n### Step 5 — Stop the session\n\nPress `Ctrl+C` in the terminal where you ran `letswork start`.\n\n---\n\n## macOS — Guest Setup\n\n> The guest connects to the host's project. You need the join command from the host.\n\n### Step 1 — Install dependencies\n\n```bash\nbrew install cloudflared\npip install letswork\n```\n\n### Step 2 — Install Claude Code\n\n```bash\nnpm install -g @anthropic-ai/claude-code\n```\n\n### Step 3 — Join the session\n\nRun the command the host sent you:\n\n```bash\nletswork join https://abc123.trycloudflare.com --token a1b2c3d4\n```\n\nYou'll be asked for your display name. Then two windows open:\n- Claude Code — connected to the host's project\n- A chat window to communicate with the host\n\n### Step 4 — Edit files\n\nAsk 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.\n\n---\n\n## Windows — Guest Setup (WSL)\n\n> LetsWork runs inside WSL (Windows Subsystem for Linux). The guest experience is the same as macOS once WSL is set up.\n\n### Step 1 — Enable WSL and install Ubuntu\n\nOpen **PowerShell as Administrator** and run:\n\n```powershell\nwsl --install\n```\n\nRestart your computer when prompted. Ubuntu will install automatically.\n\nOpen **Ubuntu** from the Start menu and set up your Linux username and password.\n\n### Step 2 — Install dependencies inside Ubuntu\n\nOpen Ubuntu and run these one by one:\n\n```bash\n# Update packages\nsudo apt update && sudo apt upgrade -y\n\n# Install Python\nsudo apt install python3 python3-pip -y\n\n# Install Node.js and npm\nsudo apt install nodejs npm -y\n\n# Install cloudflared\ncurl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o cloudflared\nchmod +x cloudflared\nsudo mv cloudflared /usr/local/bin/\n\n# Install letswork\npip3 install letswork\n```\n\n### Step 3 — Install Claude Code inside Ubuntu\n\n```bash\nnpm install -g @anthropic-ai/claude-code\n```\n\n### Step 4 — Join the session\n\nRun the command the host sent you, inside Ubuntu:\n\n```bash\nletswork join https://abc123.trycloudflare.com --token a1b2c3d4\n```\n\nYou'll be asked for your display name. Claude Code launches directly in the same terminal window.\n\n> **Note for Windows users:** Claude Code runs in the WSL terminal — not as a separate window. Everything else works identically to macOS.\n\n---\n\n## MCP Tools Available\n\nBoth host and guest have access to these tools inside Claude Code:\n\n| Tool | Who Can Use | Description |\n|------|-------------|-------------|\n| `list_files` | Both | List files and directories with lock status |\n| `read_file` | Both | Read file contents (1MB limit, text files only) |\n| `write_file` | Both | Submit a file change (guest changes need host approval) |\n| `lock_file` | Both | Lock a file for exclusive editing |\n| `unlock_file` | Both | Release your own file lock |\n| `get_status` | Both | Show session info, connected users, and active locks |\n| `get_notifications` | Both | Quick summary of what needs attention |\n| `ping` | Both | Verify connection to the host MCP server |\n| `set_display_name` | Guest only | Set your display name for the session |\n| `my_pending_changes` | Guest only | View your submitted changes awaiting approval |\n| `get_pending_changes` | Host only | View all changes awaiting approval with diffs |\n| `approve_change` | Host only | Approve a pending change and write it to disk |\n| `reject_change` | Host only | Reject a pending change |\n| `force_unlock` | Host only | Force-release a stuck file lock |\n\n---\n\n## Approval Flow\n\nGuest file writes do not go directly to disk — they go through the host's approval queue:\n\n1. Guest asks Claude to edit a file → `write_file` submits the change\n2. Host sees: `📝 guest submitted change to server.py (ID: a1b2c3)`\n3. Host asks Claude: `get_pending_changes` — sees a full diff\n4. Host approves: `approve_change a1b2c3` → file is written to disk\n5. Or rejects: `reject_change a1b2c3` → guest is notified\n\n---\n\n## Security\n\n- Random Cloudflare subdomain — URL is unguessable\n- Cryptographic token — second auth layer on top of the URL\n- All traffic encrypted via HTTPS\n- Path traversal prevention — guest cannot access files outside the project root\n- File locks auto-expire after 30 minutes\n- No accounts, no signup, no persistent credentials — session ends when host stops\n\n---\n\n## Constraints\n\n- Maximum 2 users per session (Host + 1 Guest)\n- Text files only — binary files not supported\n- 1MB file size limit per read/write operation\n- Guest has no shell access — file operations only\n- `cloudflared` must be installed on the **host machine** (guest does not need it on macOS, but WSL guests do)\n\n---\n\n## CLI Reference\n\n```bash\nletswork start [--port PORT] [--debug]   # Start a session (default port: 8000)\nletswork join <URL> --token <TOKEN>      # Join a session as guest\n```\n\n---\n\n## Architecture\n\n```\nHost Machine:\n[Project Files] ← [MCP Server :8000] ← [Cloudflare Tunnel] ← HTTPS URL\n                                                                    ↑\n                                             Guest connects here\n                                             via stdio proxy + secret token\n```\n\nThe guest connects through a stdio proxy rather than directly over HTTP — this avoids Cloudflare SSE reliability issues and gives stable MCP connectivity.\n\n---\n\n## License\n\nMIT — see [LICENSE](LICENSE)\n\n---\n\nBuilt with the [Model Context Protocol](https://modelcontextprotocol.io).\n",
  "bytes": 8243,
  "sha": "7573ce69c3e3c1e78b1cea59c417ce010aef8e0a16a1b0ef79f69dc43488d373",
  "repo_slug": "saicharanrajoju/letswork-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_saicharanrajoju_letswork_c5f048c1/readme"
}