claude-on-the-go


Nameclaude-on-the-go JSON
Version 1.0.0 PyPI version JSON
download
home_pageNone
SummaryAccess Claude Code CLI from your mobile device over WiFi
upload_time2025-10-11 21:26:39
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseMIT
keywords claude terminal mobile websocket pwa cli
VCS
bugtrack_url
requirements fastapi uvicorn websockets pexpect qrcode PyYAML pydantic-settings httpx safety bandit pbr pytest pytest-asyncio websockets psutil types-pexpect types-PyYAML
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Claude-on-the-go

[![CI](https://github.com/MatthewJamisonJS/claude-on-the-go/actions/workflows/ci.yml/badge.svg)](https://github.com/MatthewJamisonJS/claude-on-the-go/actions/workflows/ci.yml)
[![Security](https://img.shields.io/badge/security-actively%20maintained-brightgreen)]()
[![License](https://img.shields.io/badge/license-MIT-blue.svg)]()

> Control your Mac's `claude` CLI from your phone. Because sometimes you just want to code from the couch.

Use Claude on your iPhone, Android, or any device with a browser - while your Mac does the heavy lifting. No cloud sync, no data leaks, just your local network keeping things fast and private.

## ๐Ÿ†• Latest Improvements (v1.1)

Three major features just landed to make your mobile Claude experience even better:

**๐Ÿ“ฒ Progressive Web App (PWA)**
- Install directly to your home screen like a native app
- Works offline with intelligent caching
- Full-screen experience without browser chrome
- See [docs/PWA_IMPLEMENTATION.md](docs/PWA_IMPLEMENTATION.md) for details

**๐Ÿ”” Push Notifications**
- Get notified when Claude needs your input
- Support for Pushover, ntfy.sh, and Telegram
- Smart detection with 30-second debouncing
- See [docs/PUSH_NOTIFICATIONS.md](docs/PUSH_NOTIFICATIONS.md) for setup

**๐Ÿ“ฆ Easy Installation**
- Now available via pip: `pip install claude-on-the-go`
- Complete CLI with commands: start, stop, status, logs, qr
- Professional packaging with all dependencies included
- See [docs/INSTALLATION.md](docs/INSTALLATION.md) for all install options

---



## ๐Ÿ“ฑ What Is This?

claude-on-the-go lets you use the [Claude Code CLI](https://claude.ai/download) from your mobile device. Your Mac runs the `claude` process, and your phone displays the terminal over WiFi.

![Screenshot showing Claude-onTheGo mobile interface](screenshot-mobile.jpeg)

**Perfect for:**
- ๐Ÿ›๏ธ Coding from bed without lugging your laptop
- โšก Quick fixes while away from your desk
- ๐ŸŽ‰ Showing off Claude to friends on your phone
- ๐ŸŽจ Actually using that sweet terminal theme you spent hours configuring๐Ÿ˜…

## ๐Ÿš€ Quick Start

### โš™๏ธ One-Command Installation

```bash
git clone https://github.com/MatthewJamisonJS/claude-on-the-go.git
cd claude-on-the-go
./install.sh
```

The installer will:
- โœ… Check for Python 3 and Claude CLI
- ๐Ÿ“ฆ Create a virtual environment
- ๐Ÿ”Œ Install dependencies
- ๐Ÿ”’ Run security checks
- โš™๏ธ Create configuration file

### ๐ŸŽฌ Launch

```bash
./start.sh
```

๐Ÿ“ฒ You'll see a beautiful QR code - scan it with your phone's camera and you're connected!

## ๐Ÿ“‹ Requirements

**๐Ÿ–ฅ๏ธ Mac/Linux:**
- ๐Ÿ Python 3.8+
- ๐Ÿค– [Claude Code CLI](https://claude.ai/download) installed
- ๐Ÿ“ก Same WiFi network for Mac and phone

**๐Ÿ“ฑ Mobile Device:**
- ๐ŸŒ Any modern browser (Safari, Chrome, Firefox, etc.)
- ๐Ÿ“ก Same WiFi network as your Mac

## โœจ Features

### ๐Ÿ”’ Security First
- ๐Ÿšฆ Rate limiting to prevent DoS attacks (10 msg/sec, 100KB/sec)
- โœ… Input validation and sanitization
- ๐Ÿ›ก๏ธ Content Security Policy (CSP) headers
- ๐Ÿ” Log redaction for sensitive data
- ๐ŸŽซ Optional token authentication
- ๐Ÿšซ No hardcoded IPs or ports

### ๐Ÿ’พ Session Persistence
- ๐Ÿ”„ Sessions survive disconnections and reconnect seamlessly
- ๐Ÿ†” UUID-based session IDs with 1-hour timeout
- ๐Ÿงน Automatic session cleanup
- โฎ๏ธ Resume coding exactly where you left off

### ๐Ÿ“‹ Bidirectional Clipboard Sync
- ๐Ÿ–ฅ๏ธโ†’๐Ÿ“ฑ Copy on Mac โ†’ automatically syncs to phone
- ๐Ÿ“ฑโ†’๐Ÿ–ฅ๏ธ Copy on phone โ†’ automatically syncs to Mac
- โšก Configurable sync interval (default 1 second)
- ๐Ÿ”„ Content hashing prevents sync loops
- โš™๏ธ Can be disabled via config

### ๐Ÿ–ฅ๏ธ Universal Terminal Support

Fully implemented parsers:
- **โœ… Ghostty** - Complete theme and font parsing
- **โœ… iTerm2** - Binary plist with RGB color extraction
- **โœ… Alacritty** - YAML config with multiple file support
- **โœ… Kitty** - Key-value config with include directives
- **โœ… Terminal.app** - NSColor/NSFont parsing (best-effort)

Partial support (default theme fallback):
- โณ Warp
- โณ Hyper
- โณ Windows Terminal

๐ŸŽจ Can't find your terminal? Uses a clean default theme.

### ๐Ÿ“ฑ Mobile Optimized
- ๐Ÿ“ Responsive terminal sizing
- ๐Ÿ“ฒ iOS safe area support (handles notch/home indicator)
- ๐ŸŒŠ Smooth scrolling with momentum
- โŒจ๏ธ Keyboard-aware layout
- ๐ŸŒ Works on ANY phone browser
- ๐Ÿ“‹ Real-time clipboard sync with your Mac

### ๐Ÿญ Production Ready
- โฑ๏ธ 60-minute stability testing with live metrics
- ๐Ÿ” Memory leak detection and monitoring
- ๐Ÿ“Š CPU and latency tracking
- ๐Ÿšจ Error rate monitoring
- ๐Ÿ“ˆ Stability scoring (90+/100 passing criteria)

## How It Works

```
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”         WiFi         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Your iPhone    โ”‚โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”‚  Your Mac       โ”‚
โ”‚                 โ”‚                       โ”‚                 โ”‚
โ”‚  [Safari/Chrome]โ”‚    WebSocket (8000)   โ”‚  Claude Process โ”‚
โ”‚  Frontend (8001)โ”‚โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”‚  Backend (8000) โ”‚
โ”‚                 โ”‚                       โ”‚                 โ”‚
โ”‚  xterm.js       โ”‚                       โ”‚  pexpect + PTY  โ”‚
โ”‚  renders        โ”‚                       โ”‚  controls       โ”‚
โ”‚  terminal       โ”‚                       โ”‚  claude CLI     โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                       โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
```

1. **Backend** (Python + FastAPI) spawns `claude` CLI
2. **Frontend** (HTML + xterm.js) renders terminal
3. **WebSocket** streams I/O between them
4. **mDNS** lets you use `.local` domains (no IP addresses!)

## Project Structure

- `legacy/` - v1.0 architecture (frozen, maintained for compatibility)
- `core/` - Business logic (PTY manager, session store, config)
- `server/` - FastAPI WebSocket + REST API
- `client/` - Modern web client + PWA
- `integrations/` - Notifications, Tailscale, QR codes
- `cli/` - Command-line interface

See [ARCHITECTURE.md](ARCHITECTURE.md) for detailed documentation.

## Configuration

Edit `.env` to customize (all optional):

```bash
# Security
ENABLE_AUTH=true                # Require token authentication
AUTH_TOKEN=your-secret-token    # Set your auth token

# Network
BACKEND_PORT=8000               # Backend WebSocket port
FRONTEND_PORT=8001              # Frontend HTTP port

# Rate Limiting
RATE_LIMIT_MESSAGES=10          # Max messages per second
RATE_LIMIT_BYTES=100000         # Max bytes per second

# Logging
LOG_LEVEL=INFO                  # DEBUG, INFO, WARNING, ERROR
LOG_REDACTION=true              # Redact IPs/tokens from logs

# Features
ENABLE_CLIPBOARD_SYNC=true      # Enable clipboard synchronization
CLIPBOARD_SYNC_INTERVAL=1.0     # Clipboard check interval (seconds)
```

## ๐Ÿ”ง Troubleshooting

### โŒ "Claude CLI not found"

๐Ÿ“ฅ Install it from [https://claude.ai/download](https://claude.ai/download)

### ๐Ÿšซ "Can't connect from phone"

1. โœ… Make sure you're on the same WiFi network
2. ๐Ÿ”— Try the direct IP URL instead of `.local`
3. ๐Ÿ”ฅ Check firewall settings on your Mac

### ๐ŸŽจ "Terminal looks weird"

๐Ÿ” Your terminal config wasn't detected. To add support:
1. ๐Ÿ“– Check `docs/ADDING_TERMINALS.md`
2. ๐ŸŽฏ Or just use the default theme (it's pretty good!)

### โš ๏ธ "Connection keeps dropping"

๐Ÿ“ Check `backend.log` and `frontend.log` for errors:

```bash
tail -f backend.log
tail -f frontend.log
```

## Documentation

- `docs/SECURITY.md` - Security policy and best practices
- `docs/ADDING_TERMINALS.md` - How to add new terminal parsers
- `docs/LESSONS_LEARNED.md` - Technical deep dive

## Architecture Highlights

**Backend:**
- FastAPI with native WebSockets
- Pexpect for PTY control
- Watermark flow control (pause at 100KB, resume at 10KB)
- Message batching (30ms window)
- Single-user mode (auto-closes old connections)
- Session persistence with UUID-based IDs
- Clipboard monitoring with change detection (pbcopy/pbpaste)

**Frontend:**
- Xterm.js 5.3+
- DOM renderer on mobile (better ANSI support)
- Canvas renderer on desktop (better performance)
- Exponential backoff reconnection (1sโ†’30s with jitter)
- Auto-reconnects to existing sessions

**Security:**
- Token bucket rate limiting (10 msg/sec, 100KB/sec)
- Input size limits (10KB per message)
- Terminal size validation (1-500 rows/cols)
- CSP, X-Frame-Options, X-XSS-Protection headers
- Constant-time auth token comparison
- Log redaction for IPs, tokens, emails

**Terminal Parsers:**
- Ghostty: Key-value config parsing
- iTerm2: Binary plist with RGB float conversion
- Alacritty: YAML config with multi-file support
- Kitty: Key-value with include directives
- Terminal.app: NSColor/NSFont heuristic parsing

## Contributing

PRs welcome! Especially for:
- New terminal parsers (see `docs/ADDING_TERMINALS.md`)
- Bug fixes
- Documentation improvements
- Performance optimizations

Please read `SECURITY.md` before contributing.

## License

MIT License - see `LICENSE` file

Built for vibecoders who want Claude in their pocket.

## Acknowledgments

- [Anthropic](https://anthropic.com) for Claude
- [xterm.js](https://xtermjs.org/) for terminal emulation
- [FastAPI](https://fastapi.tiangolo.com/) for the web framework

---

## Questions or Issues?

**Found a bug or have a question?**
Open an issue: https://github.com/MatthewJamisonJS/claude-on-the-go/issues

**Security concern?**
Report privately: https://github.com/MatthewJamisonJS/claude-on-the-go/security/advisories/new
(This creates a private report that only maintainers can see)

**Want to add a terminal parser?**
Check out: `docs/ADDING_TERMINALS.md`

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "claude-on-the-go",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": "Matthew Jamison <99699313+MatthewJamisonJS@users.noreply.github.com>",
    "keywords": "claude, terminal, mobile, websocket, pwa, cli",
    "author": null,
    "author_email": "Matthew Jamison <99699313+MatthewJamisonJS@users.noreply.github.com>",
    "download_url": "https://files.pythonhosted.org/packages/e3/09/17888ab5f14644eec3c30173c3d72578295f4427ff997074a46bc1a3307d/claude_on_the_go-1.0.0.tar.gz",
    "platform": null,
    "description": "# Claude-on-the-go\n\n[![CI](https://github.com/MatthewJamisonJS/claude-on-the-go/actions/workflows/ci.yml/badge.svg)](https://github.com/MatthewJamisonJS/claude-on-the-go/actions/workflows/ci.yml)\n[![Security](https://img.shields.io/badge/security-actively%20maintained-brightgreen)]()\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)]()\n\n> Control your Mac's `claude` CLI from your phone. Because sometimes you just want to code from the couch.\n\nUse Claude on your iPhone, Android, or any device with a browser - while your Mac does the heavy lifting. No cloud sync, no data leaks, just your local network keeping things fast and private.\n\n## \ud83c\udd95 Latest Improvements (v1.1)\n\nThree major features just landed to make your mobile Claude experience even better:\n\n**\ud83d\udcf2 Progressive Web App (PWA)**\n- Install directly to your home screen like a native app\n- Works offline with intelligent caching\n- Full-screen experience without browser chrome\n- See [docs/PWA_IMPLEMENTATION.md](docs/PWA_IMPLEMENTATION.md) for details\n\n**\ud83d\udd14 Push Notifications**\n- Get notified when Claude needs your input\n- Support for Pushover, ntfy.sh, and Telegram\n- Smart detection with 30-second debouncing\n- See [docs/PUSH_NOTIFICATIONS.md](docs/PUSH_NOTIFICATIONS.md) for setup\n\n**\ud83d\udce6 Easy Installation**\n- Now available via pip: `pip install claude-on-the-go`\n- Complete CLI with commands: start, stop, status, logs, qr\n- Professional packaging with all dependencies included\n- See [docs/INSTALLATION.md](docs/INSTALLATION.md) for all install options\n\n---\n\n\n\n## \ud83d\udcf1 What Is This?\n\nclaude-on-the-go lets you use the [Claude Code CLI](https://claude.ai/download) from your mobile device. Your Mac runs the `claude` process, and your phone displays the terminal over WiFi.\n\n![Screenshot showing Claude-onTheGo mobile interface](screenshot-mobile.jpeg)\n\n**Perfect for:**\n- \ud83d\udecf\ufe0f Coding from bed without lugging your laptop\n- \u26a1 Quick fixes while away from your desk\n- \ud83c\udf89 Showing off Claude to friends on your phone\n- \ud83c\udfa8 Actually using that sweet terminal theme you spent hours configuring\ud83d\ude05\n\n## \ud83d\ude80 Quick Start\n\n### \u2699\ufe0f One-Command Installation\n\n```bash\ngit clone https://github.com/MatthewJamisonJS/claude-on-the-go.git\ncd claude-on-the-go\n./install.sh\n```\n\nThe installer will:\n- \u2705 Check for Python 3 and Claude CLI\n- \ud83d\udce6 Create a virtual environment\n- \ud83d\udd0c Install dependencies\n- \ud83d\udd12 Run security checks\n- \u2699\ufe0f Create configuration file\n\n### \ud83c\udfac Launch\n\n```bash\n./start.sh\n```\n\n\ud83d\udcf2 You'll see a beautiful QR code - scan it with your phone's camera and you're connected!\n\n## \ud83d\udccb Requirements\n\n**\ud83d\udda5\ufe0f Mac/Linux:**\n- \ud83d\udc0d Python 3.8+\n- \ud83e\udd16 [Claude Code CLI](https://claude.ai/download) installed\n- \ud83d\udce1 Same WiFi network for Mac and phone\n\n**\ud83d\udcf1 Mobile Device:**\n- \ud83c\udf10 Any modern browser (Safari, Chrome, Firefox, etc.)\n- \ud83d\udce1 Same WiFi network as your Mac\n\n## \u2728 Features\n\n### \ud83d\udd12 Security First\n- \ud83d\udea6 Rate limiting to prevent DoS attacks (10 msg/sec, 100KB/sec)\n- \u2705 Input validation and sanitization\n- \ud83d\udee1\ufe0f Content Security Policy (CSP) headers\n- \ud83d\udd10 Log redaction for sensitive data\n- \ud83c\udfab Optional token authentication\n- \ud83d\udeab No hardcoded IPs or ports\n\n### \ud83d\udcbe Session Persistence\n- \ud83d\udd04 Sessions survive disconnections and reconnect seamlessly\n- \ud83c\udd94 UUID-based session IDs with 1-hour timeout\n- \ud83e\uddf9 Automatic session cleanup\n- \u23ee\ufe0f Resume coding exactly where you left off\n\n### \ud83d\udccb Bidirectional Clipboard Sync\n- \ud83d\udda5\ufe0f\u2192\ud83d\udcf1 Copy on Mac \u2192 automatically syncs to phone\n- \ud83d\udcf1\u2192\ud83d\udda5\ufe0f Copy on phone \u2192 automatically syncs to Mac\n- \u26a1 Configurable sync interval (default 1 second)\n- \ud83d\udd04 Content hashing prevents sync loops\n- \u2699\ufe0f Can be disabled via config\n\n### \ud83d\udda5\ufe0f Universal Terminal Support\n\nFully implemented parsers:\n- **\u2705 Ghostty** - Complete theme and font parsing\n- **\u2705 iTerm2** - Binary plist with RGB color extraction\n- **\u2705 Alacritty** - YAML config with multiple file support\n- **\u2705 Kitty** - Key-value config with include directives\n- **\u2705 Terminal.app** - NSColor/NSFont parsing (best-effort)\n\nPartial support (default theme fallback):\n- \u23f3 Warp\n- \u23f3 Hyper\n- \u23f3 Windows Terminal\n\n\ud83c\udfa8 Can't find your terminal? Uses a clean default theme.\n\n### \ud83d\udcf1 Mobile Optimized\n- \ud83d\udcd0 Responsive terminal sizing\n- \ud83d\udcf2 iOS safe area support (handles notch/home indicator)\n- \ud83c\udf0a Smooth scrolling with momentum\n- \u2328\ufe0f Keyboard-aware layout\n- \ud83c\udf0d Works on ANY phone browser\n- \ud83d\udccb Real-time clipboard sync with your Mac\n\n### \ud83c\udfed Production Ready\n- \u23f1\ufe0f 60-minute stability testing with live metrics\n- \ud83d\udd0d Memory leak detection and monitoring\n- \ud83d\udcca CPU and latency tracking\n- \ud83d\udea8 Error rate monitoring\n- \ud83d\udcc8 Stability scoring (90+/100 passing criteria)\n\n## How It Works\n\n```\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510         WiFi         \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502  Your iPhone    \u2502\u25c4\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2502  Your Mac       \u2502\n\u2502                 \u2502                       \u2502                 \u2502\n\u2502  [Safari/Chrome]\u2502    WebSocket (8000)   \u2502  Claude Process \u2502\n\u2502  Frontend (8001)\u2502\u25c4\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2502  Backend (8000) \u2502\n\u2502                 \u2502                       \u2502                 \u2502\n\u2502  xterm.js       \u2502                       \u2502  pexpect + PTY  \u2502\n\u2502  renders        \u2502                       \u2502  controls       \u2502\n\u2502  terminal       \u2502                       \u2502  claude CLI     \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                       \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n```\n\n1. **Backend** (Python + FastAPI) spawns `claude` CLI\n2. **Frontend** (HTML + xterm.js) renders terminal\n3. **WebSocket** streams I/O between them\n4. **mDNS** lets you use `.local` domains (no IP addresses!)\n\n## Project Structure\n\n- `legacy/` - v1.0 architecture (frozen, maintained for compatibility)\n- `core/` - Business logic (PTY manager, session store, config)\n- `server/` - FastAPI WebSocket + REST API\n- `client/` - Modern web client + PWA\n- `integrations/` - Notifications, Tailscale, QR codes\n- `cli/` - Command-line interface\n\nSee [ARCHITECTURE.md](ARCHITECTURE.md) for detailed documentation.\n\n## Configuration\n\nEdit `.env` to customize (all optional):\n\n```bash\n# Security\nENABLE_AUTH=true                # Require token authentication\nAUTH_TOKEN=your-secret-token    # Set your auth token\n\n# Network\nBACKEND_PORT=8000               # Backend WebSocket port\nFRONTEND_PORT=8001              # Frontend HTTP port\n\n# Rate Limiting\nRATE_LIMIT_MESSAGES=10          # Max messages per second\nRATE_LIMIT_BYTES=100000         # Max bytes per second\n\n# Logging\nLOG_LEVEL=INFO                  # DEBUG, INFO, WARNING, ERROR\nLOG_REDACTION=true              # Redact IPs/tokens from logs\n\n# Features\nENABLE_CLIPBOARD_SYNC=true      # Enable clipboard synchronization\nCLIPBOARD_SYNC_INTERVAL=1.0     # Clipboard check interval (seconds)\n```\n\n## \ud83d\udd27 Troubleshooting\n\n### \u274c \"Claude CLI not found\"\n\n\ud83d\udce5 Install it from [https://claude.ai/download](https://claude.ai/download)\n\n### \ud83d\udeab \"Can't connect from phone\"\n\n1. \u2705 Make sure you're on the same WiFi network\n2. \ud83d\udd17 Try the direct IP URL instead of `.local`\n3. \ud83d\udd25 Check firewall settings on your Mac\n\n### \ud83c\udfa8 \"Terminal looks weird\"\n\n\ud83d\udd0d Your terminal config wasn't detected. To add support:\n1. \ud83d\udcd6 Check `docs/ADDING_TERMINALS.md`\n2. \ud83c\udfaf Or just use the default theme (it's pretty good!)\n\n### \u26a0\ufe0f \"Connection keeps dropping\"\n\n\ud83d\udcdd Check `backend.log` and `frontend.log` for errors:\n\n```bash\ntail -f backend.log\ntail -f frontend.log\n```\n\n## Documentation\n\n- `docs/SECURITY.md` - Security policy and best practices\n- `docs/ADDING_TERMINALS.md` - How to add new terminal parsers\n- `docs/LESSONS_LEARNED.md` - Technical deep dive\n\n## Architecture Highlights\n\n**Backend:**\n- FastAPI with native WebSockets\n- Pexpect for PTY control\n- Watermark flow control (pause at 100KB, resume at 10KB)\n- Message batching (30ms window)\n- Single-user mode (auto-closes old connections)\n- Session persistence with UUID-based IDs\n- Clipboard monitoring with change detection (pbcopy/pbpaste)\n\n**Frontend:**\n- Xterm.js 5.3+\n- DOM renderer on mobile (better ANSI support)\n- Canvas renderer on desktop (better performance)\n- Exponential backoff reconnection (1s\u219230s with jitter)\n- Auto-reconnects to existing sessions\n\n**Security:**\n- Token bucket rate limiting (10 msg/sec, 100KB/sec)\n- Input size limits (10KB per message)\n- Terminal size validation (1-500 rows/cols)\n- CSP, X-Frame-Options, X-XSS-Protection headers\n- Constant-time auth token comparison\n- Log redaction for IPs, tokens, emails\n\n**Terminal Parsers:**\n- Ghostty: Key-value config parsing\n- iTerm2: Binary plist with RGB float conversion\n- Alacritty: YAML config with multi-file support\n- Kitty: Key-value with include directives\n- Terminal.app: NSColor/NSFont heuristic parsing\n\n## Contributing\n\nPRs welcome! Especially for:\n- New terminal parsers (see `docs/ADDING_TERMINALS.md`)\n- Bug fixes\n- Documentation improvements\n- Performance optimizations\n\nPlease read `SECURITY.md` before contributing.\n\n## License\n\nMIT License - see `LICENSE` file\n\nBuilt for vibecoders who want Claude in their pocket.\n\n## Acknowledgments\n\n- [Anthropic](https://anthropic.com) for Claude\n- [xterm.js](https://xtermjs.org/) for terminal emulation\n- [FastAPI](https://fastapi.tiangolo.com/) for the web framework\n\n---\n\n## Questions or Issues?\n\n**Found a bug or have a question?**\nOpen an issue: https://github.com/MatthewJamisonJS/claude-on-the-go/issues\n\n**Security concern?**\nReport privately: https://github.com/MatthewJamisonJS/claude-on-the-go/security/advisories/new\n(This creates a private report that only maintainers can see)\n\n**Want to add a terminal parser?**\nCheck out: `docs/ADDING_TERMINALS.md`\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Access Claude Code CLI from your mobile device over WiFi",
    "version": "1.0.0",
    "project_urls": {
        "Bug Reports": "https://github.com/MatthewJamisonJS/claude-on-the-go/issues",
        "Documentation": "https://github.com/MatthewJamisonJS/claude-on-the-go#readme",
        "Homepage": "https://github.com/MatthewJamisonJS/claude-on-the-go",
        "Repository": "https://github.com/MatthewJamisonJS/claude-on-the-go",
        "Source Code": "https://github.com/MatthewJamisonJS/claude-on-the-go"
    },
    "split_keywords": [
        "claude",
        " terminal",
        " mobile",
        " websocket",
        " pwa",
        " cli"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3cb17f15add197acc2e19b0ffdd0739f7fdbac084fd931ac52fd49c7f038be2a",
                "md5": "3a61522d326b3becaf895fae4618271a",
                "sha256": "ca5d81e4f2d9eb9db477da8906cbedb97afb5ee8996bf47f4fb744be1711336e"
            },
            "downloads": -1,
            "filename": "claude_on_the_go-1.0.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "3a61522d326b3becaf895fae4618271a",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 135678,
            "upload_time": "2025-10-11T21:26:38",
            "upload_time_iso_8601": "2025-10-11T21:26:38.345486Z",
            "url": "https://files.pythonhosted.org/packages/3c/b1/7f15add197acc2e19b0ffdd0739f7fdbac084fd931ac52fd49c7f038be2a/claude_on_the_go-1.0.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e30917888ab5f14644eec3c30173c3d72578295f4427ff997074a46bc1a3307d",
                "md5": "7f1cb670d4563aca13afe6949be1023a",
                "sha256": "358e5546ad644c5668b9b1aab5f96f27393f2c68c6ce51c412dfe1a320c301a1"
            },
            "downloads": -1,
            "filename": "claude_on_the_go-1.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "7f1cb670d4563aca13afe6949be1023a",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 192375,
            "upload_time": "2025-10-11T21:26:39",
            "upload_time_iso_8601": "2025-10-11T21:26:39.916100Z",
            "url": "https://files.pythonhosted.org/packages/e3/09/17888ab5f14644eec3c30173c3d72578295f4427ff997074a46bc1a3307d/claude_on_the_go-1.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-11 21:26:39",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "MatthewJamisonJS",
    "github_project": "claude-on-the-go",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "fastapi",
            "specs": [
                [
                    "==",
                    "0.118.3"
                ]
            ]
        },
        {
            "name": "uvicorn",
            "specs": [
                [
                    "==",
                    "0.37.0"
                ]
            ]
        },
        {
            "name": "websockets",
            "specs": [
                [
                    "==",
                    "15.0.1"
                ]
            ]
        },
        {
            "name": "pexpect",
            "specs": [
                [
                    "==",
                    "4.9.0"
                ]
            ]
        },
        {
            "name": "qrcode",
            "specs": [
                [
                    "==",
                    "8.2"
                ]
            ]
        },
        {
            "name": "PyYAML",
            "specs": [
                [
                    "==",
                    "6.0.1"
                ]
            ]
        },
        {
            "name": "pydantic-settings",
            "specs": [
                [
                    "==",
                    "2.11.0"
                ]
            ]
        },
        {
            "name": "httpx",
            "specs": [
                [
                    "==",
                    "0.27.0"
                ]
            ]
        },
        {
            "name": "safety",
            "specs": [
                [
                    "==",
                    "2.3.5"
                ]
            ]
        },
        {
            "name": "bandit",
            "specs": [
                [
                    "==",
                    "1.8.6"
                ]
            ]
        },
        {
            "name": "pbr",
            "specs": [
                [
                    ">=",
                    "2.0.0"
                ]
            ]
        },
        {
            "name": "pytest",
            "specs": [
                [
                    "==",
                    "8.4.2"
                ]
            ]
        },
        {
            "name": "pytest-asyncio",
            "specs": [
                [
                    "==",
                    "1.2.0"
                ]
            ]
        },
        {
            "name": "websockets",
            "specs": [
                [
                    "==",
                    "15.0.1"
                ]
            ]
        },
        {
            "name": "psutil",
            "specs": [
                [
                    "==",
                    "5.9.6"
                ]
            ]
        },
        {
            "name": "types-pexpect",
            "specs": [
                [
                    ">=",
                    "4.9.0"
                ]
            ]
        },
        {
            "name": "types-PyYAML",
            "specs": [
                [
                    ">=",
                    "6.0.0"
                ]
            ]
        }
    ],
    "lcname": "claude-on-the-go"
}
        
Elapsed time: 1.36685s