Feature: headless mode for remote-control (--headless/--daemon flag)
Feature Request: Headless Remote Control
Problem
claude remote-control currently requires a TTY, which means on headless servers (e.g., Ubuntu VPS, dev boxes accessed via SSH) the only reliable option is wrapping it in tmux or screen. You can't nohup it, run it as a systemd service, or daemonize it in any standard way — because the process renders a terminal UI locally even though all interaction happens through the remote client (claude.ai/code or the mobile app).
Observation
The pieces already exist separately:
- Headless mode (
claude -p): Proves the execution engine runs without a TTY - Remote control: Proves the UI can live entirely elsewhere (phone, browser)
- The local terminal rendering is redundant in remote-control mode — the user is interacting through the remote UI, not the local terminal
Proposal
Add a --headless (or --daemon) flag to remote-control:
claude remote-control --headless
Behavior:
- Runs the execution engine + HTTPS polling loop as a plain process (no PTY required)
- Prints the session URL/token to stdout once, then runs in the background
- No local terminal rendering — all UI is on the remote client
- Works with
nohup,systemd, Docker containers, or any process supervisor
Use Cases
# Simple background process
nohup claude remote-control --headless > /tmp/rc-session.txt 2>&1 &
# systemd service on a dev server — always available from your phone
# Docker container with your dev environment
# CI/CD or cloud dev environments without interactive terminals
Why This Matters
Remote-control is fantastic for mobile/cross-device development. But requiring a TTY limits it to machines where you can maintain an interactive terminal session — which is exactly the constraint remote-control is supposed to free you from. Combining headless execution with the remote-control networking would make it truly run-anywhere.
The architecture is already there. The execution engine doesn't need a terminal. The remote UI doesn't need a terminal. They just need to be wired together without the local TUI in the middle.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗