SESSION / READY TMUX 3.2+· iOS 16.4+ / iPadOS· SAFARI · CHROME· LAUNCHD · SYSTEMD
──── REMOTE CONTROL FOR AI CODING AGENTS ────

Coding agents run on your Mac.
You run them
from
your phone.

Claude Code, Codex, Aider, Cursor Agent — keep them moving when you step away from the desk. Attach from anywhere, approve in seconds, walk away.

§ 01 / Features

Built for reach, not tutorials.

Every primitive — session keeper, QR pairing, browser client — exists so your agents are within reach on any device you happen to be carrying.

F.01

Always attached — you're always within reach

Your agent's session lives on your server between attaches, so when you open QuickTUI on any device it's already there — output intact, cursor exactly where you left it. (tmux keeps the PTY alive under the hood.)

F.02

QR onboarding in 2 seconds

Run `quicktui-server --qrcode` on the server, scan with the iOS app — you are inside your agent's session. No token copy-paste, no IP typing.

F.03

One truth, every client

Windows, panes, zoom, scroll, copy-mode — every client sees the exact same view of what your agents are doing. Switch devices mid-task, the cursor doesn't blink.

F.04

Self-hosted, zero cloud

Your agents run where you run them — Mac, Linux, or WSL. Your code, your keys, your API quotas stay put. No account, no telemetry, no vendor in the loop.

F.05

Three ways to get attached

Add your server via Quick Setup (SSH auto-install), QR scan, or manual URL + token. An accessory bar & shortcut panel keep terminal keys one tap from your thumb.

F.06

Runs as a service, forever

Installed as a user service on macOS launchd & Linux systemd. Upgrade checks, controlled restarts, reboot survival — your agents keep supervising even when you are not watching. q.sh handles install and service registration.

§ 02 / In Action

Within reach on every screen.

Same session across every device. Peek on your phone during a commute. Steer from iPad at the café. Review in a browser at your desk. Your agent is wherever you are.

■ CONTINUOUS

Pick up any screen. It's already there.

Every client — phone, tablet, browser — is a live window into the same agent session. No reconnect ritual, no scrolling back through logs. Your agent is already waiting on whichever screen you open.

  • sessionclaude-code · 14d · 7 windows
  • roamWi-Fi → LTE → 5G · seamless
  • clientsiPhone · iPad · Safari · Chrome
  • transportHTTP API · WebSocket
§ 03 / Use Cases

Your agents, wherever you happen to be.

QuickTUI isn't an IDE. It's the seam between the agents humming away on your server and the screen you happen to be holding right now.

>_

Steer an agent from your phone

Your agent hit a confirm prompt. You're on the subway. Attach, approve, detach — 10 seconds. It keeps going without you.

iPad as agent cockpit

Magic Keyboard + QuickTUI + a beefy server = a 12" cockpit to supervise Claude Code, Aider, or a multi-hour build. Lightweight client, heavyweight agents.

Browser from any borrowed device

No install needed. Open the server URL in any modern browser, enter your token once, and you are watching your agents live — from a hotel laptop if you have to.

Long-running jobs without babysitting

Training runs, agent swarms, migrations, builds. Start it, walk away, check in from the couch. Your laptop can sleep — the job can't be bothered.

§ 04 / Get started

From install to daily driving.

Two ways to install the server, then the gestures you'll actually use on phone and iPad every day.

Get the App
■ INSTALL

Two paths to your server.

If you can SSH to the box, the iOS app installs the server for you. If not, run one line on the server itself. Either way, the installer detects tmux 3.2+, registers a launchd / systemd service, and saves your token to ~/.config/quicktui/config.

01
SSH-capable server → App wizard.
Add a server in the iOS app, pick Quick Setup, enter your SSH credentials. The app installs the server for you — no terminal needed.
02
No SSH? Run on the server.
curl -fsSL https://quicktui.ai/q.sh | sh
Copy that one line to the server's terminal and run it. Done in under a minute.
03
Pair the app, or open a browser.
On the server, run quicktui-server --qrcode, then in the app tap + → Scan.
Browser users: visit http://<host>:8022 and paste the token once.
■ DAILY USE

The pieces you'll touch every day.

Five things on screen, each doing one job.

Toolbar & D-Pad

A customizable strip of keys at the bottom — Tab, Ctrl, and your own macros organized in folders. A D-Pad overlay sits next to it with the keys you reach for most: four arrow keys, Esc, Enter, Backspace. One tap away.

Toolbar and D-Pad overlay

Input Bar

A compact text input right above the toolbar. Tap the edit button to open, type your command, hit Send or Enter. Stays out of the way until you need it.

Input bar above toolbar

Command Palette

Quick launcher for terminal commands. Searchable, folder-organized, with a recent list. Slash commands send Enter automatically.

Command palette

Switcher

Three-finger swipe up to summon the session switcher. Jump between tmux sessions and windows, even across different servers, in one tap.

Session switcher
■ GESTURES

How you actually drive the terminal from a phone or iPad. A few of these are swappable in Settings if you prefer single- and double-finger flipped.

1-finger double-tapSend Tab
2-finger double-tapSend Enter
1-finger swipe ↕Scroll history
1-finger swipe ↔Switch tmux window
2-finger swipeArrow keys
3-finger swipe ←Backspace
3-finger swipe ↑Open session switcher
■ INSTALLER OPTIONS

Non-interactive installs, custom ports, environment checks. Pass via sh -s --:

-y, --yesNon-interactive mode
--token <string>Set access token (default: prompted)
--rotate-tokenGenerate a fresh random token
--addr <address>Listen address, IPv4/hostname only (default: 0.0.0.0)
--port <port>Listen port (default: 8022)
--term <value>TERM for tmux (default: screen-256color)
--lang <value>LANG for tmux (default: en_US.UTF-8)
--previewInstall the latest GitHub preview release
--checkRun environment checks without installing
--no-serviceSkip background service setup
--uninstallRemove QuickTUI and all related files
§ 05 / FAQ

Questions & answers.

Grouped by topic, straight from the docs. More answers in the repo — open an issue at github.com/dualface/quicktui.

Installation
Q.01
Checksum verification failed during install.

Usually the download was interrupted or corrupted — re-run the installer. If it persists, release assets may have just been updated; wait a few minutes and retry.

Also verify nothing is intercepting HTTPS traffic (e.g. a corporate proxy).

+
Q.02
tmux is not installed or the version is too old.
QuickTUI requires tmux 3.2 or later. The installer can install it for you — first via the system package manager (brew, apt, yum, dnf), else a prebuilt archive unpacked to ~/.local/tmux. When tmux is not discoverable from the service PATH, the installer saves QUICKTUI_TMUX_BIN.
+
Q.03
What happens when I re-run the installer?
It detects the existing ~/.local/bin/quicktui-server and switches to upgrade mode: stops the service, stages the new binary, sanity-checks --version, atomically swaps it into place, and rolls back on failure. Your token, address, TERM, LANG and QUICKTUI_TMUX_BIN are preserved.
+
Server & Service
Q.04
What can I configure in the config file?
The service reads ~/.config/quicktui/config — a manual quicktui-server process does not. Keys: QUICKTUI_TOKEN, QUICKTUI_ADDR (default 0.0.0.0:8022), QUICKTUI_TERM (default screen-256color), QUICKTUI_LANG (default en_US.UTF-8), optionally QUICKTUI_TMUX_BIN. After editing, restart: launchctl kickstart -k gui/$(id -u)/ai.quicktui (macOS) or systemctl --user restart quicktui (Linux).
+
Q.05
How do server upgrade and restart work?
Two paths: re-run the installer (atomic swap, rollback on failure, config preserved); or server self-update (cached release checks, platform download, binary replacement). Self-update does not auto-restart; restart from the app/browser, call POST /api/restart, or restart the service. Update / restart / shutdown are serialized. Check status: quicktui-server --check-upgrade.
+
Q.06
Can I validate the server environment without installing?
Yes. curl -fsSL https://quicktui.ai/q.sh | sh -s -- --check runs all preflight checks with no downloads or writes: platform / arch, tmux 3.2+, locale, terminfo for TERM, default shell executable, PTY allocation via script, and a throwaway tmux session. Override values with --term / --lang.
+
Q.07
QuickTUI says "token is required".
Service: ensure ~/.config/quicktui/config exists and contains QUICKTUI_TOKEN=…. Manual start: pass --token or set QUICKTUI_TOKEN in the environment — normal server startup does not read the config file automatically.
+
Q.08
Can't connect — connection refused.
First check the service: launchctl print gui/$(id -u)/ai.quicktui (macOS) or systemctl --user status quicktui (Linux). If you skipped service registration, start the server manually with the same token and address. If it's running, make sure your firewall or tunnel allows the port from QUICKTUI_ADDR.
+
Q.09
Text rendering is garbled when TERM=xterm-ghostty.

QuickTUI's server-side tmux won't render correctly when TERM=xterm-ghostty is forwarded — Ghostty's own terminfo isn't a fit for tmux inside the remote session.

Use a widely supported TERM instead. In ~/.config/quicktui/config:

QUICKTUI_TERM=screen-256color

Then restart the service. For a manual server command:

--term screen-256color
+
Q.10
PTY spawn failed / internal server error when opening a session.
The server could not launch or attach tmux. Check logs: tail -f ~/Library/Logs/QuickTUI/stdout.log (macOS) or journalctl --user -u quicktui -f (Linux). If QUICKTUI_TMUX_BIN is set, it must be an absolute path to a real tmux binary. Also verify QUICKTUI_TERM and QUICKTUI_LANG are valid.
+
Q.11
How do I view server logs?
macOS: tail -f ~/Library/Logs/QuickTUI/stdout.log ~/Library/Logs/QuickTUI/stderr.log. Linux: journalctl --user -u quicktui -f. If you started quicktui-server manually, output appears in the terminal where you launched it.
+
Q.12
How do I change the listen address or port?
Service: edit QUICKTUI_ADDR in ~/.config/quicktui/config, then restart. Manual: pass --addr 0.0.0.0:9000. At install time: curl … | sh -s -- --addr 127.0.0.1 --port 9000. The installer accepts IPv4 addresses or hostnames, not IPv6 literals.
+
Q.13
How do I uninstall QuickTUI?
curl -fsSL https://quicktui.ai/q.sh | sh -s -- --uninstall — stops the service, removes the binary, config, known launchd / systemd service files, and logs. Also cleans up leftover service files from partial installs.
+
Q.14
macOS file browser hangs on Desktop / Documents / Downloads.

macOS protects Desktop, Documents, Downloads, iCloud Drive, and other system folders via TCC (Transparency, Consent, Control). The QuickTUI service runs as a background launchd agent and cannot trigger the system consent dialog, so accesses to those folders hang silently until the request times out.

Fix — grant Full Disk Access to the server binary:

  1. Open System SettingsPrivacy & SecurityFull Disk Access.
  2. Click the + button. In the file picker, press Cmd+Shift+G and enter ~/.local/bin, then select quicktui-server.
  3. Make sure the toggle next to quicktui-server is enabled.
  4. Back in the QuickTUI client, tap Recheck on the warning banner. No service restart needed.

If Recheck still fails, restart the service:

launchctl kickstart -k gui/$(id -u)/ai.quicktui

Why no consent dialog appears: macOS only shows the TCC consent prompt for processes launched with a UI context (Finder, Terminal, Dock). Background launchd agents have no UI, so the prompt is never displayed and the OS silently blocks until manually authorized.

+
Q.15
Linux file browser shows "permission denied" or returns 403.

The QuickTUI server runs under your user (typically systemd --user) and can only read paths your user has POSIX read+execute on. Common causes:

  • Mode bits. Files mode 0600 / dirs mode 0700 are unreadable to anyone but the owner. Check with ls -ld /path.
  • Parent directory missing x bit. Even if the target file is world-readable, the server can't traverse into it without execute permission on every ancestor directory.
  • POSIX ACL. getfacl /path may show an explicit deny entry that overrides mode bits.
  • Wrong user. If you started the server with sudo once and switched back, residual files may be owned by root. stat /path shows the owner.
  • SELinux (RHEL / Fedora / Rocky). Even with correct mode, MAC may block access. Check with ausearch -m AVC -ts recent or getenforce. Temporarily test with setenforce 0 (do not leave permissive in production).
  • AppArmor / Snap confinement (Ubuntu). If you installed quicktui-server via snap, it can't read files outside the snap home. The recommended install path is ~/.local/bin/quicktui-server (no confinement).
  • Mount options. A mount with noexec or read-only flags may surface as EACCES on some operations. Check findmnt /path.

Fix steps:

  1. Run ls -ld /full/path/to/dir on the failing path and every parent. Confirm the user running quicktui-server has r-x on dirs and r-- on files.
  2. Identify which user the service runs as: systemctl --user show quicktui -p MainPID, then ps -o user= -p <PID>.
  3. Adjust permissions: chmod o+rx /path for shared paths, or use ACLs (setfacl -m u:<user>:rx /path) for selective access.
  4. If SELinux blocks access, add a file context label or use audit2allow to generate a policy module — see your distro's SELinux docs.
  5. Tap Recheck in the client. No service restart required.

If still failing, check logs: journalctl --user -u quicktui -f while reproducing.

+
tmux
Q.16
My session list is empty.
QuickTUI shows your current tmux sessions. If none exist yet, create one from the app or browser with New Session, or on the server: tmux new-session -s mysession.
+
Q.17
tmux scrollback shows duplicated / misaligned text after running Claude Code.
Symptom and fix.
+
iOS App & Browser
Q.18
What is the access token?
A secret you set during installation — it protects your server from unauthorized access. Find it on your server: cat ~/.config/quicktui/config. Enter it when prompted on first login in the app or browser.
+
Q.19
Can I connect over the internet?
Yes. You need the server reachable from the internet — via a public IP, VPN, or a tunnel such as Tailscale or Cloudflare Tunnel. Make sure the configured port (8022 by default) is accessible and your token stays secret.
+
Q.20
The app or browser shows "Session not found".
This comes directly from the server — the tmux session was closed, renamed, or the tmux server isn't running. Refresh the session list, then open an existing session or create a new one.
+