Skip to main content

LetsWork

Google Docs for AI-assisted coding — real-time collaboration on a local codebase using two independent Claude subscriptions.

What is LetsWork?

LetsWork is an MCP (Model Context Protocol) server that lets two developers work on the same local codebase simultaneously, each using their own Claude. One developer hosts, the other connects — with file-level locking and an approval system to prevent conflicts.

How It Works

  1. Developer A (Host) runs letswork start in their project folder
  2. A secure HTTPS tunnel is created automatically via Cloudflare
  3. A one-time URL + guest token is generated
  4. Developer A shares the join command with Developer B (Guest)
  5. Developer B runs letswork join <url> --token <token> on their machine
  6. Both can now read, write, and list files — with lock protection and approval flow

Quick Start

Install

pip install letswork

Requirements

  • Python >= 3.10
  • cloudflared installed and available in PATH
    • macOS: brew install cloudflared
    • Linux: see Cloudflare docs
    • Windows: use WSL (Ubuntu) and follow Linux instructions
  • Claude Code CLI (npm install -g @anthropic-ai/claude-code)

Host (Developer A)

cd /path/to/your/project
letswork start

You'll see a session box with a join command — share it with your collaborator:

╔══════════════════════════════════════════════════════════════════════╗
║  🤝 LetsWork Session Active                                          ║
║                                                                      ║
║  Send this command to your collaborator:                             ║
║  letswork join https://abc123.trycloudflare.com --token a1b2c3d4    ║
║                                                                      ║
║  Press Ctrl+C to stop.                                               ║
╚══════════════════════════════════════════════════════════════════════╝

Claude Code opens automatically in a new terminal window, already connected to LetsWork.

Guest (Developer B)

letswork join <URL_FROM_HOST> --token <TOKEN_FROM_HOST>

Claude Code launches automatically with LetsWork MCP connected. No extra steps needed.

Windows users: Run this inside Ubuntu (WSL). Claude Code will launch directly in the same terminal.

MCP Tools Available

Tool Description
list_files List files and directories with lock status
read_file Read file contents (1MB limit)
write_file Submit a file change (requires host approval)
lock_file Lock a file for exclusive editing
unlock_file Release a file lock
get_status Show session info, connected users, and active locks
get_notifications Quick summary of what needs attention right now
get_pending_changes View all changes awaiting host approval with diffs
my_pending_changes View your own submitted changes (guest)
approve_change Approve a pending change and write it to disk (host only)
reject_change Reject a pending change (host only)
force_unlock Force-release a stuck file lock (host only)
set_display_name Set your display name for the session (guest only)
ping Verify connection to the host MCP server

Approval Flow

Guest file writes go through an approval queue — they are not written directly to disk:

  1. Guest asks Claude to edit a file → write_file submits the change
  2. Host sees a notification: 📝 guest submitted change to server.py (ID: a1b2c3)
  3. Host asks Claude to review: get_pending_changes
  4. Host approves or rejects: approve_change a1b2c3 / reject_change a1b2c3

Security

  • Unguessable tunnel URL (random Cloudflare subdomain)
  • Cryptographic secret token (second auth layer)
  • All traffic encrypted via HTTPS
  • Path traversal prevention (no access outside project root)
  • File lock timeout — locks auto-expire after 30 minutes
  • No accounts, no signup, no persistent credentials

CLI Commands

Command Description
letswork start [--port PORT] [--debug] Start a session (default port: 8000)
letswork join <URL> --token <TOKEN> Join a session as guest
letswork stop Stop instructions (use Ctrl+C in the start terminal)
letswork status Status instructions (use get_status tool in Claude Code)

Architecture

Developer A's Machine:
[Local Codebase] ← [MCP Server :8000] ← [Cloudflare Tunnel] ← HTTPS URL
                                                                     ↑
                                              Developer B connects here
                                              via stdio proxy + secret token

The guest connects through a stdio proxy (letswork-proxy) rather than directly over HTTP — this avoids Cloudflare SSE reliability issues and gives stable MCP connectivity.

Constraints

  • Maximum 2 users per session (Host + Guest)
  • Text files only (binary files not supported)
  • 1MB file size limit per operation
  • File operations only (no shell access for Guest)
  • Requires cloudflared on the host machine

License

MIT


Built with the Model Context Protocol.

Metadata

Release files for letswork 3.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for letswork 3.0.0
File Size Uploaded
letswork-3.0.0.tar.gz 27.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for letswork 3.0.0
File Interpreter ABI Platform
letswork-3.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 47.5 kB

Release files / letswork-3.0.0.tar.gz

Download URL letswork-3.0.0.tar.gz
Size 27.7 kB
Tags Source
SHA-256 checksum
How to use checksums
8289491b20722bd7fabd4dd25a12c888f56d94f5159b0488d2a8230605d16ed6
BLAKE2b-256 checksum
How to use checksums
7c7cbdd4d2425c5d281891067dd935541ee8373b387260d07e07dd21d05cc962
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.13

Release files / letswork-3.0.0-py3-none-any.whl

Download URL letswork-3.0.0-py3-none-any.whl
Size 19.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6e5dd69cc7d668b470570a07be13d13ced5d1eb16cd44972028cf640bfe9f166
BLAKE2b-256 checksum
How to use checksums
4b8950d0f8d87e99d1ab985aae2324251cbfcb17dcd4a140e0cdd01d12799cad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.13

Release history Release notifications | RSS feed

This release

3.0.0 This release

2 release files

2.1.1

2 release files

2.1.0

2 release files

2.0.9

2 release files

2.0.8

2 release files

2.0.7

2 release files

2.0.6

2 release files

2.0.5

2 release files

2.0.4

2 release files

2.0.3

2 release files

2.0.2

2 release files

2.0.0

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page