Self-hosted · Single-user · Mobile-first
An AI coding agent terminal,
in your pocket.
A web terminal for Copilot CLI, Claude Code, Aider, or plain shell — running on a VM you control, designed around the constraint that your only input device is a thumb.
The phone is the device that's actually with you.
AI coding agents run for minutes or hours, but you don't sit at a laptop the whole time. SSH clients on iOS feel like 2005, and most "remote IDE" products want you to hand over your code to their cloud. Cloud Terminal is a small, self-hosted alternative that runs on a VM you control, behind authentication you control, and gives an agent CLI a UI built around the way thumbs actually move.
Built for working from a phone — not just viewable from one.
-
Modifier bar built for thumbs
Ctrl,Shift,Tab,Esc, and arrow keys — always one tap away, sized for touch, iOS-keyboard-aware so the keyboard never collapses mid-command. TapCtrlto latch the modifier; the next keystroke is sent asCtrl+X. -
Long-prompt composer
A floating textarea panel anchored above the iOS keyboard for composing long prompts with full keyboard intelligence — autocorrect, predictive text, swipe typing, dictation. Minimize while you read agent output; restore your draft with one tap.
-
Sessions that survive disconnects
tmux runs in its own container behind the scenes. Close the tab, lose signal, or redeploy the app — your agent keeps running. Reconnect from any device and pick up where you left off, scrollback included.
-
Up to 4 concurrent sessions
Run Copilot in one, Claude in another, your build watcher in a third. Each session shows a live status badge (active · idle · ended) and an attention bell when an agent is waiting on you. Rename inline; destroy with a confirm step so you don't fat-finger an active task.
-
Push when an agent needs you
Web push notifications fire when an agent stops to ask a question or finishes a long task. Tap the notification to jump straight back into that session — no scrolling a list to find the right one.
-
Passkey authentication
Authelia forward-auth with WebAuthn. Tap the Face ID or fingerprint prompt and you're in. 12-hour sessions by default, with an in-app expiry warning before you get bumped. No passwords to remember, no codes to copy.
-
Installable as a PWA
Add to home screen and it behaves like a native app — full-bleed, no Safari chrome, offline-aware, with safe-area handling for notch and home-indicator. The same React tree scales from a 375 px phone to a laptop.
-
Hardened by default
Strict CSP, dropped Linux capabilities, no-new-privileges, digest-pinned images, only port 443 exposed to the internet, Caddy auto-TLS via Let's Encrypt. Deploy guards
caddy validateevery Caddyfile change before recreating the container, so a typo can't take down auth.
How it works
Four containers on a small VM. No SSH client, no jump host, no remote-IDE service in between. Your agent runs on a machine you control.
- Phonebrowser / PWA
- Caddyauto-TLS · 443
- Autheliaforward-auth · every request
- AppNode + ws
- tmuxsession server
- Agentcopilot · claude
The stack
Boring, reliable pieces wired together carefully — open source from the terminal emulator to the reverse proxy.
- Frontend React 19 · TypeScript (strict) · Vite 6 · xterm.js 5
- Backend Node.js · Express 5 · TypeScript · ws · node-pty
- Sessions tmux · SQLite (session metadata)
- Auth Authelia · WebAuthn / passkeys
- Proxy Caddy · Let's Encrypt · TLS-ALPN-01
- Runtime Docker Compose · Azure VM
- PWA Service worker · Web Push (VAPID)
- Quality Vitest · Playwright · BATS · coverage thresholds in CI
About this project
Cloud Terminal started as a single-developer answer to that problem — built around one person's real workflow rather than as a product, and shaped by using it from a phone every day.
It stays deliberately small and self-hosted: your agent, your VM, your auth — no remote IDE or hosted-terminal service in the middle.