code-remote-starter

skill
Security Audit
Warn
Health Warn
  • License — License: MIT
  • Description — Repository has a description
  • Active repo — Last push 0 days ago
  • Low visibility — Only 5 GitHub stars
Code Pass
  • Code scan — Scanned 12 files during light audit, no dangerous patterns found
Permissions Pass
  • Permissions — No dangerous permissions requested

No AI report is available for this listing yet.

SUMMARY

Start Claude Code sessions in any directory on your Mac — from your phone.

README.md

Code Remote Starter

Start Claude Code sessions in any directory on your Mac — from your phone.

CI MIT License macOS Installable PWA

The Claude mobile app's Remote Control can drive sessions that already exist, but it can't
start a new session in a new directory. For that you still have to walk to your Mac, open a
terminal, cd, and run Claude Code. Code Remote Starter closes that gap: a small web app that
runs on your Mac and is reachable from your phone. Pick a directory, confirm, and it launches a
session there with Remote Control on — so it shows up in the Claude app and you drive it from
your phone as usual.

Home — running sessions and New session Directory picker Confirm and start a session

How it works

When you launch a session, the server runs your Claude Code command — the cym alias,
claude --dangerously-skip-permissions --effort max — inside a detached tmux session in
the directory you chose:

claude --dangerously-skip-permissions --effort max

tmux keeps the process alive independently of the browser. With Remote Control enabled at
startup ("remoteControlAtStartup": true in ~/.claude/settings.json), the session registers
with Anthropic and appears in the Claude mobile app, where you do the actual work — exactly as if
you had typed cym in that directory yourself. Code Remote Starter is purely the launcher and
session manager — it never proxies your conversation.

The base command is configurable via baseCommand.

Requirements

  • macOS
  • tmuxbrew install tmux
  • Claude Code on your PATH, signed in, with Remote Control enabled at startup
    ("remoteControlAtStartup": true in ~/.claude/settings.json)
  • Node.js 20+

Quick start

git clone https://github.com/burakgon/code-remote-starter.git
cd code-remote-starter
npm install
npm run build
npm start

Run it from a shell where claude already works, so the launched sessions inherit your
sign-in. On start it prints an access URL for this Mac, plus a LAN URL and a QR code for
your phone:

  Code Remote Starter is listening on 0.0.0.0:4317

  On this Mac:
    http://localhost:4317/?token=…

  On your phone (same Wi-Fi / Tailscale) — scan the QR or open the URL:
    http://192.168.1.20:4317/?token=…
    █▀▀▀▀▀█ ▀▌▄█ █▀▀▀▀▀█
    …

Scan the QR with your phone's camera (on the same network) — it opens the full URL, so the long
token can't get truncated in transit.

For day-to-day development with hot reload:

npm run dev      # Vite on :5173 proxying the API to the server on :4317

Reaching it from your phone

The server binds to 0.0.0.0 so it is reachable on your network, and the access token is what
protects it. The easiest way in is to scan the QR code printed at startup. Otherwise:

  • Same Wi‑Fi: open http://<your-mac-ip>:4317/?token=… on your phone.
  • Anywhere: put your Mac and phone on a private network such as
    Tailscale and use the Mac's Tailscale address.

Code Remote Starter launches Claude Code with --dangerously-skip-permissions, so treat the URL
like a password and only expose it over networks you trust. A first-class tunnel is on the
roadmap.

Security

  • Every HTTP request and the WebSocket require a valid token. The token is generated on first
    run and stored in ~/.config/code-remote-starter/config.json (mode 0600).
  • The token arrives once via ?token=…, then is kept in a Strict, httpOnly cookie; the URL
    is tidied so the token isn't left in the address bar.
  • State-changing requests are checked against an Origin allowlist (CSRF guard).
  • Brute-force protection: more than 5 wrong-token attempts from an IP within an hour locks
    that IP for 30 minutes. Behind a local reverse proxy or tunnel (Cloudflare, nginx, …) the
    forwarded client IP (CF-Connecting-IP / X-Forwarded-For) is used so the lock targets the
    real attacker; on direct connections those headers are ignored to prevent spoofing.
  • Nothing leaves your machine except Claude Code's own traffic.

Configuration

~/.config/code-remote-starter/config.json:

Key Default Description
port 4317 Port to listen on.
host 0.0.0.0 Interface to bind.
baseCommand claude --dangerously-skip-permissions --effort max Command run in each session.
token generated Access token.

Command-line flags override the config for a run: --port, --host, --command, --open.

npm start -- --port 8080 --command "claude --effort max"

Set CRS_CONFIG_DIR to relocate the config directory.

Features

  • Touch-first directory picker: browse the filesystem, paste a path, with Git and
    "used with Claude before" indicators.
  • Bookmark directories you launch into often, plus recent ones drawn from your launch history
    and from where you've used Claude Code.
  • Live session list over a WebSocket — rename, stop (with confirmation), or dismiss / clear
    finished sessions.
  • Installable PWA — add it to your phone's home screen for a full-screen, app-like launcher.
  • A scannable QR code and LAN URL printed on startup, so opening it on your phone is one scan.
  • Brute-force protection on the access token (per-IP lockout), correct behind a reverse proxy /
    tunnel or on a direct connection.
  • One dark, considered interface that works on phone, foldable, and desktop. No emoji.

Development

npm run dev         # server + web with hot reload
npm test            # unit + integration tests (Vitest)
npm run typecheck   # tsc --noEmit
npm run lint        # ESLint
npm run build       # build web (and server bundle) into dist/

The backend lives in src/server (Hono + ws, sessions via tmux); the web app in src/web
(React + Vite + Tailwind). Design and implementation notes are under docs/superpowers/.

Roadmap

  • Optional "working vs needs input" session status via a Claude Code hook.
  • A built-in tunnel for zero-config remote access.
  • Light theme.

License

MIT

Reviews (0)

No results found