Note
This codebase was almost entirely written by Claude Code. I (Jamie) designed the system architecture and directed development, but the vast majority of the code was generated by Claude while I operated it remotely from my phone — using this very app. Built by dogfooding.
A secure, mobile-first web interface for accessing Claude Code from your phone.
Run Claude Code on your desktop or server, control it from anywhere over an encrypted connection.
- End-to-end encryption — ECDH P-256 key exchange + AES-256-GCM per message
- QR code pairing — Scan once from your phone to pair
- PIN protection — Argon2-hashed, rate-limited authentication
- Real-time streaming — See Claude's responses as they're generated
- Rich activity panel — Live tool calls, file diffs, bash commands, sub-agent tasks
- Multi-project support — Switch between projects, git worktree support
- Push notifications — Get notified when Claude finishes a task
- PWA support — Install as a native-feeling app on your phone (see below)
For the best experience, add Claude Remote to your home screen. This gives you a full-screen app experience with push notifications — no browser chrome, no tab clutter.
- Open your Claude Remote URL in Safari
- Tap the Share button (square with arrow)
- Scroll down and tap Add to Home Screen
- Tap Add
- Open your Claude Remote URL in Chrome
- Tap the three-dot menu
- Tap Add to Home screen (or Install app)
- Tap Add
Once installed, Claude Remote will launch as a standalone app with push notifications for completed tasks.
- Node.js 20+
- pnpm
- Claude CLI installed and authenticated
- An HTTPS reverse proxy (e.g. Cloudflare Tunnel, nginx, caddy)
git clone https://github.com/jamierpond/claude-remote.git
cd claude-remote
pnpm installCopy the example env file and fill in your values:
cp .env.example .env.local# .env.local
CLAUDE_REMOTE_PIN=your-secure-pin
CLIENT_URL=https://your-client-domain.com
SERVER_URL=https://your-server-domain.com# Development (hot reload)
pnpm dev
# Production
pnpm build
pnpm startThe server runs on port 6767 and serves the built client as static files.
A systemd user service file is included for running as a daemon. Edit claude-remote.service to match your paths, then:
cp claude-remote.service ~/.config/systemd/user/
systemctl --user enable --now claude-remote- Pair — Server shows a QR code. Scan it from your phone to exchange ECDH keys.
- Authenticate — Enter your PIN. It's verified against an argon2 hash on the server.
- Chat — Messages are encrypted end-to-end. The server spawns Claude CLI and streams responses back.
All communication between your phone and the server is encrypted with a shared secret derived during pairing — even if your reverse proxy terminates TLS, the message contents are opaque.
- Frontend: React + TypeScript + Tailwind CSS (Vite)
- Backend: Node.js HTTP + WebSocket server
- Security: ECDH key exchange, AES-256-GCM encryption, argon2 PIN hashing
- Claude: Spawns
claudeCLI with--output-format stream-json
