No description
Find a file
2026-01-30 07:19:28 -05:00
data Add data/dev and data/prod directories for db storage 2026-01-28 17:06:07 -05:00
docs Change default port from 3000 to 7200 2026-01-28 15:37:25 -05:00
public Fix code review issues for phase 2.6 UI polish 2026-01-28 15:18:55 -05:00
src Add visual separation before Remote help section 2026-01-30 05:19:01 -05:00
.gitignore Move existing db to data/dev, update gitignore 2026-01-28 17:09:10 -05:00
biome.json Fix biome config formatting (self-heal) 2026-01-28 11:03:31 -05:00
bun.lock Restructure project files into src and public directories 2026-01-28 11:00:19 -05:00
Caddyfile.example Add Caddyfile.example with Tailscale restriction 2026-01-28 17:14:47 -05:00
CLAUDE.md Add code review workflow to CLAUDE.md 2026-01-28 12:19:07 -05:00
compose.yml Auto-seed device from CLAUDE_REMOTE_SECRET env var 2026-01-28 17:21:12 -05:00
Dockerfile Copy public dir in build 2026-01-30 07:19:28 -05:00
justfile Add light build requiring bun installed 2026-01-28 17:34:02 -05:00
package.json Restructure project files into src and public directories 2026-01-28 11:00:19 -05:00
README.md Add compiled binary support with env var config 2026-01-28 16:59:36 -05:00
TODO.txt Disable idle timeout 2026-01-28 15:38:29 -05:00
tsconfig.json Restructure project files into src and public directories 2026-01-28 11:00:19 -05:00

claude-remote

Self-hosted remote control for Claude Code. Wraps CLI in PTY, streams output to server, approve prompts from phone.

quick start

# 1. start the server
just dev

# 2. create a device (one-time setup)
just seed dev "My Phone"

# 3. build the binary + symlink to ~/bin
bun build --compile src/cli.ts --outfile claude-remote
ln -sf $(pwd)/claude-remote ~/bin/claude-remote

# 4. set your secret
export CLAUDE_REMOTE_SECRET=dev  # add to .bashrc/.zshrc

# 5. use it like claude
claude-remote
claude-remote -r
claude-remote --dangerously-skip-permissions

# 6. open browser/phone
open http://localhost:7200

usage

server

just dev     # development with hot reload
just start   # production
just check   # lint + typecheck + test

Server runs on port 7200 (configure via PORT env var).

create device

just seed <secret> <name>

Creates a device with the given secret and name. The secret is used to authenticate the CLI wrapper.

Default if you just run just seed:

  • secret: "dev"
  • name: "dev device"

run claude

With the binary installed and CLAUDE_REMOTE_SECRET set, just use claude-remote like claude:

claude-remote                    # interactive
claude-remote -r                 # resume
claude-remote --help             # shows help
claude-remote -p "explain this"  # print mode

All arguments pass through to claude.

configuration

Environment variables (add to .bashrc/.zshrc):

export CLAUDE_REMOTE_SECRET=dev                    # required
export CLAUDE_REMOTE_SERVER=ws://localhost:7200/ws # optional, this is the default

Or use flags to override:

claude-remote --secret other-device --server ws://remote:7200/ws

shell aliases

alias cr='claude-remote'
alias crr='claude-remote -r'
alias crd='claude-remote --dangerously-skip-permissions'
alias crdr='crd -r'

view output

Open http://localhost:7200 in browser or phone to:

  • see live terminal output
  • approve/reject permission prompts
  • answer questions

docker

just build  # build image
just up     # compose up
just down   # compose down
just logs   # compose logs

architecture

Pure Bun stack:

  • bun-pty for PTY wrapper
  • bun:sqlite for persistence
  • Bun.serve() for HTTP + WebSocket + SSE
  • plain text output (mobile-friendly)

Target: ~1000-1500 lines total.