The basics work but this is being actively developed so don't expect much yet.
A web application that provides a browser-based interface to GitHub Copilot CLI via the @github/copilot-sdk. Access your Copilot sessions from any device — including your phone — over your local network or Tailscale.
- Remote access — interact with Copilot CLI sessions from any browser, anywhere on your network
- Mobile-friendly — responsive UI with touch-optimized controls, works great on phones
- Multi-session — run and switch between multiple Copilot sessions in parallel
- Session persistence — resume previous sessions with full conversation history
- Permissions — configurable rules for tool approvals (auto-approve, supervised, or read-only)
- Authentication — GitHub OAuth device flow, static token, or open access
- HTTPS/TLS — optional built-in TLS support for secure connections
- Dark mode — automatic (system), light, or dark theme
- GitHub Copilot CLI installed and authenticated (
copilot --versionshould work) - Node.js 20+
- A valid GitHub Copilot subscription
# Install dependencies
npm install
# Start in development mode
npm run devOpen http://localhost:3001 in your browser.
# Build everything
npm run build
# Start the production server
npm startThe production server serves the React app and API on a single port (default: 3001).
Copy .env.sample to .env and adjust values as needed. All settings are optional.
| Variable | Default | Description |
|---|---|---|
PORT |
3001 |
Server port |
HOST |
127.0.0.1 |
Bind address (0.0.0.0 for all interfaces, or a specific IP) |
GITHUB_CLIENT_ID |
(none) | GitHub OAuth App Client ID — enables "Sign in with GitHub" device flow (recommended) |
AUTH_TOKEN |
(none) | Static auth token — the web UI prompts for the token on login |
SESSION_TIMEOUT_MS |
1800000 (30 min) |
Idle timeout before session SDK resources are released |
BASE_PATH |
User home dir | Base directory for the session folder browser (set to / for full access) |
CLI_URL |
(none) | External Copilot CLI server (host:port) for remote CLI connections |
MCP_SERVERS |
(none) | JSON config for MCP server connections |
EXCLUDED_TOOLS |
(none) | Comma-separated tools to disable |
AGENT_PLUGIN_DIRS |
(none) | Comma-separated extra directories to scan for custom agent plugins |
ALLOWED_ORIGINS |
(none) | Comma-separated CORS origins (only needed if UI is served from a different origin) |
TLS_CERT_FILE |
(none) | Path to TLS certificate file (enables HTTPS when paired with TLS_KEY_FILE) |
TLS_KEY_FILE |
(none) | Path to TLS private key file |
Auth mode is auto-detected based on which variables are set:
| Mode | Config | Description |
|---|---|---|
| GitHub OAuth | Set GITHUB_CLIENT_ID |
Users sign in with their GitHub account via device flow. The server verifies the GitHub user matches the Copilot CLI login. Recommended for remote access. |
| Static token | Set AUTH_TOKEN |
Simple shared-secret auth. The web UI prompts for the token. |
| Open access | Neither set | No authentication. Suitable for localhost-only or trusted networks. |
To set up GitHub OAuth, create an OAuth App at github.com/settings/developers → "OAuth Apps" → "New OAuth App". The callback URL can be any placeholder (e.g., http://localhost) since the device flow doesn't use it.
- Start the server on your workstation with
HOST=0.0.0.0(required for remote access) - Find your LAN IP:
ipconfig getifaddr en0(macOS) orhostname -I(Linux) - Open
http://<your-ip>:3001on your phone - For security, set
GITHUB_CLIENT_ID(recommended) orAUTH_TOKEN— the web UI will prompt for login
With Tailscale: use your Tailscale hostname instead of LAN IP. Set HOST to your Tailscale IP to bind to that interface only.
For direct HTTPS without a reverse proxy:
TLS_CERT_FILE=/path/to/cert.pem
TLS_KEY_FILE=/path/to/key.pemAlternatively, run behind a reverse proxy (nginx, Caddy, etc.) that terminates TLS.
npm run dev # Start server + client in dev mode
npm run build # Build everything for production
npm run test # Run tests
npm start # Start production serverSee docs/ARCHITECTURE.md for technical details, project structure, and API reference.