会话 / 就绪 TMUX 3.2+· iOS 16.4+ / iPadOS· SAFARI · CHROME· LAUNCHD · SYSTEMD
──── REMOTE CONTROL FOR AI CODING AGENTS ────

AI 编程 Agent
在 Mac 上跑,
你在手机上控

Claude Code、Codex、Aider、Cursor Agent — 离开座位也别让它们空转。随时接入,秒级确认,转身走人。

▌ 服务器一行装好
MAC·LINUX curl -fsSL https://quicktui.ai/q.sh | sh curl -fsSL https://dl.quicktui.cn/q.sh | sh
WINDOWS irm https://quicktui.ai/q.ps1 | iex
默认镜像 · 经 Cloudflare 的 GitHub Releases。
QuickTUI on iPhone
§ 01 / 功能特性

随手可用而生。

每一个底层能力 — 会话保活、扫码配对、浏览器客户端 — 都为了让你的 Agent 随手即得。

F.01

始终在线 — Agent 随时就位

Agent 的会话在两次接入之间持续存活于服务器 — 你在任何设备上打开 QuickTUI,它已在那里等你:输出完整、光标停在你离开的位置。(底层由 tmux 保活 PTY。)

F.02

2 秒扫码接入

在服务器执行 `quicktui-server --qrcode`,用 iOS App 扫描 — 你已进入 Agent 的会话。无需复制 Token、无需敲 IP。

F.03

同一真相,所有客户端

窗口、面板、缩放、滚动、复制模式 — 每个客户端都看到 Agent 当前状态的同一份视图。任务进行中切换设备,光标毫不闪动。

F.04

自托管 · 零云端

Agent 跑在你选的主机上 — Mac、Linux 或 WSL。代码、密钥、API 额度留在原地。无账号、无遥测、无厂商介入。

F.05

三种方式即刻接入

通过 Quick Setup(SSH 自动安装)、扫码,或手动输入 URL + Token 添加服务器。配件栏与快捷键面板让终端按键随指可得。

F.06

作为服务 · 永久在线

以用户级服务形式安装在 macOS launchd、Linux systemd 与 Windows 计划任务上。升级检查、受控重启、重启后自动恢复 — 你不在时,Agent 依然在被看守。安装器与服务端安装流程负责安装与服务注册。

§ 02 / 实战演示

每一块屏幕,皆是入口。

同一会话,跨越每一块设备。通勤时用手机查看。咖啡厅里用 iPad 接管。办公桌前在浏览器里审阅。你在哪里,Agent 就在哪里。

■ 持续在线

拿起任一屏幕,Agent 已在那里。

每个客户端 — 手机、平板、浏览器 — 都是通往同一 Agent 会话的实时窗口。无需重连仪式、无需翻回日志。Agent 已在你打开的那块屏幕上等你。

  • 会话claude-code · 14 天 · 7 个窗口
  • 漫游Wi-Fi → LTE → 5G · 无缝切换
  • 客户端iPhone · iPad · Safari · Chrome
  • 传输HTTP API · WebSocket
§ 03 / 使用场景

你在,Agent 就在哪。

QuickTUI 不是 IDE。它是那条纽带 — 连接正在你服务器上默默运行的 Agent,和你此刻正拿着的那块屏幕。

>_

在手机上接管 Agent

Agent 停在一个确认提示上。你正在地铁里。接入、批准、断开 —— 10 秒。它继续往下跑,不需要你守着。

iPad 即 Agent 驾驶舱

Magic Keyboard + QuickTUI + 强力服务器 = 一块 12 英寸驾驶舱,用来盯着 Claude Code、Aider 或多小时构建任务。轻量客户端,重量级 Agent。

从任何设备的浏览器接入

无需安装。在任意现代浏览器中打开服务器 URL,输入一次 Token,即可实时查看 Agent 的运行状态 — 哪怕是酒店里借来的笔记本。

长时间任务 · 无需值守

训练任务、Agent 群、数据迁移、构建流水线。启动后走开,从沙发上随手查看。笔记本可以休眠 — 任务不会因此停下。

§ 04 / 上手指南

安装到日常使用。

两种方式装好服务端,再加上手机和 iPad 上每天都会用到的手势速查表。

获取应用
■ 安装

两种方式装好服务端。

如果机器能 SSH 登录,iOS App 内的向导帮你装好服务端。不能 SSH 的话,到机器上跑一行 curl 也行。两种方式都会自动检测 tmux 3.2+,注册 launchd / systemd 服务,并把 Token 写入 ~/.config/quicktui/config

01
能 SSH 的机器 → App 向导。
在 iOS App 里添加服务器,选"快速设置",填入 SSH 凭据。App 自动帮你装好服务端,全程不用开终端。
02
不能 SSH?直接到机器上跑。
curl -fsSL https://quicktui.ai/q.sh | sh
把上面那行命令复制到服务器终端运行即可。一分钟搞定。
03
中国大陆镜像入口。
curl -fsSL https://dl.quicktui.cn/q.sh | sh
这是面向中国大陆用户的并列入口。已通过 quicktui.ai/q.sh 安装的服务不会自动迁移; 重新执行 dl.quicktui.cn/q.sh 后才会走 OSS 自动更新。
04
Windows 服务器?PowerShell 里跑一行。
irm https://quicktui.ai/q.ps1 | iex
自动下载安装器、自动安装 qscn 会话后端,并注册登录时自启的计划任务。中国大陆镜像入口将在 qscn 资产镜像完成后支持 Windows。老旧 Windows PowerShell 5.1 若未启用 TLS 1.2,在同一行前面加上 <span class="mono">[Net.ServicePointManager]::SecurityProtocol = [Net.ServicePointManager]::SecurityProtocol -bor 3072;</span> 即可。
05
配对 App,或用浏览器。
在服务器运行 quicktui-server --qrcode,然后在 App 里点 + → 扫描。
浏览器用户:访问 http://<host>:8022,粘贴一次 Token。
■ 日常使用

你每天都会用到的几个东西。

屏幕上的五个组件,每个只干一件事。

工具栏 与 方向键

屏幕底部可自定义的按键条 — Tab、Ctrl,以及你自己按文件夹分类的快捷宏。旁边的方向键面板提供最常按的键:四个方向键、Esc、Enter、删除。常用键随手可及。

Toolbar and D-Pad overlay

输入条

工具栏正上方的紧凑输入条。点编辑按钮打开,输入命令,按发送或回车。不用时完全隐藏,不占终端空间。

Input bar above toolbar

命令面板

终端命令的快速启动器。可搜索,按文件夹分组,有最近使用列表。斜杠命令自动按回车。

Command palette

切换器

三指上滑唤出会话切换器。在 tmux session、window 之间快速跳转,跨服务器也行,一指搞定。

Session switcher

文件浏览器

在 App 内浏览和预览服务器上的文件,不用切应用。点文件直接看,抓路径,或下载到本地。每个 pane 记住上次浏览的位置。

File browser
■ 手势操作

在手机或 iPad 上驾驭终端的方式。部分单指 / 双指动作可以在设置里互换。

单指双击输入 Tab
双指双击输入 Enter
单指上下滑滚动历史
单指左右滑切换 tmux 窗口
双指滑动方向键
三指左滑退格
三指上滑打开会话切换器
■ 安装脚本参数

非交互式安装、自定义端口、环境检查。通过 sh -s -- 传入:

-y, --yes非交互模式
--token <string>设置 access token(默认:交互提示)
--rotate-token生成新的随机 access token
--addr <address>监听地址,仅 IPv4/主机名(默认:0.0.0.0)
--port <port>监听端口(默认:8022)
--term <value>tmux 的 TERM(默认:xterm-256color)
--lang <value>tmux 的 LANG(默认:en_US.UTF-8)
--preview安装最新 server2 preview 版本
--check仅运行环境检查,不安装
--no-service跳过后台服务注册
--uninstall停止服务并卸载服务端
§ 05 / 常见问题

问题与答案

按主题分组,均来自官方文档。更多答案请见仓库 — 在 github.com/dualface/quicktui 提 Issue。

安装
Q.01
安装时校验和验证失败。

通常是下载中断或损坏 — 重新运行安装脚本即可。若持续出错,可能是发布资源刚更新,稍等几分钟重试。

也请检查是否有中间人拦截 HTTPS 流量(例如企业代理)。

+
Q.02
未安装 tmux 或版本过旧。

QuickTUI 需要 tmux 3.2 或更高版本。安装脚本可自动为你安装 — 优先使用系统包管理器(brewaptyumdnf),否则下载预编译包解压到 ~/.local/tmux

当服务 PATH 找不到 tmux 时,安装脚本会保存 QUICKTUI_TMUX_BIN

+
Q.03
重新运行安装脚本会发生什么?
脚本会检测已有的 ~/.local/bin/quicktui-server,切换到升级模式:停止服务、暂存新二进制、用 --version 做合理性检查、原子替换,失败自动回滚。你的 token、地址、TERM、LANG 以及 QUICKTUI_TMUX_BIN 全部保留。
+
服务端 · 服务
Q.04
配置文件里可以配置什么?

服务会读取 ~/.config/quicktui/config — 手动启动的 quicktui-server 进程不会自动读取。

键:QUICKTUI_TOKENQUICKTUI_ADDR(默认 0.0.0.0:8022)、QUICKTUI_TERM(默认 xterm-256color)、QUICKTUI_LANG(默认 en_US.UTF-8),可选 QUICKTUI_TMUX_BIN

编辑后重启服务:

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

# Linux
systemctl --user restart quicktui
+
Q.05
服务端升级与重启如何工作?

两条路径:

重新运行安装脚本 — 原子替换、失败回滚、配置保留。

服务端自更新 — 使用缓存发布检查、下载当前平台二进制、替换可执行文件。自更新不会自动重启;可在 App/浏览器重启、调用 POST /v2/api/restart,或重启系统服务。

升级 / 重启 / 关停相互串行:重启进行中时新升级请求会被拒绝,反之亦然。

查看状态:

quicktui-server --check-upgrade
+
Q.06
可以不安装就验证服务端环境吗?

可以 — 运行环境预检,不安装、不写入服务端配置:

curl -fsSL https://quicktui.ai/q.sh | sh -s -- --check
+
Q.07
QuickTUI 提示"token is required"。

服务方式:确保 ~/.config/quicktui/config 存在且包含:

QUICKTUI_TOKEN=…

手动启动:传入 --token 或在环境中设置 QUICKTUI_TOKEN — 普通启动不会自动读取配置文件。

+
Q.08
无法连接 — connection refused。

先检查服务:

# macOS
launchctl print gui/$(id -u)/ai.quicktui

# Linux
systemctl --user status quicktui

若跳过了服务注册,用相同的 token 和地址手动启动服务端。若服务已在运行,请确认防火墙或隧道放通了 QUICKTUI_ADDR 对应的端口。

+
Q.09
TERM=xterm-ghostty 时,文字渲染错乱。

服务端的 tmux 在 TERM=xterm-ghostty 下无法正确渲染 — Ghostty 自己的 terminfo 不适用于远端会话里的 tmux。

改用广泛支持的 TERM。在 ~/.config/quicktui/config 中配置:

QUICKTUI_TERM=xterm-256color

然后重启服务。手动启动命令则用:

--term xterm-256color
+
Q.10
打开会话时出现 PTY spawn failed / internal server error。

服务端无法启动或附加 tmux。查看日志:

# macOS
tail -f ~/Library/Logs/QuickTUI/stdout.log

# Linux
journalctl --user -u quicktui -f

若设置了 QUICKTUI_TMUX_BIN,必须是指向真实 tmux 二进制的绝对路径。也请确认 QUICKTUI_TERMQUICKTUI_LANG 有效。

+
Q.11
如何查看服务端日志?
# macOS
tail -f ~/Library/Logs/QuickTUI/stdout.log \
        ~/Library/Logs/QuickTUI/stderr.log

# Linux
journalctl --user -u quicktui -f

若手动启动 quicktui-server,输出在你启动它的那个终端。

+
Q.12
如何修改监听地址或端口?

服务方式:编辑 ~/.config/quicktui/config 中的 QUICKTUI_ADDR,然后重启。

手动方式:

quicktui-server --addr 0.0.0.0:9000

安装时:

curl -fsSL https://quicktui.ai/q.sh | sh -s -- \
  --addr 127.0.0.1 --port 9000

安装脚本接受 IPv4 地址或主机名,不接受 IPv6 字面量。

+
Q.13
如何卸载 QuickTUI?
curl -fsSL https://quicktui.ai/q.sh | sh -s -- --uninstall

停止服务并卸载它所管理的服务端。

+
Q.14
macOS 文件浏览器访问 桌面 / 文稿 / 下载 等目录会卡住。

macOS 通过 TCC(隐私权限子系统)保护 桌面文稿下载、iCloud Drive 等系统目录。QuickTUI 服务以后台 launchd agent 形式运行,无 UI 上下文,无法触发系统授权弹窗,因此访问这些目录会静默挂起直到请求超时。

解决方法 — 给 server 二进制加完全磁盘访问权限:

  1. 打开 系统设置隐私与安全性完全磁盘访问
  2. + 号。在文件选择器中按 Cmd+Shift+G,输入 ~/.local/bin,选中 quicktui-server
  3. 确保 quicktui-server 旁边的开关已启用
  4. 回到 QuickTUI 客户端,点警告条上的 已授权, 重测。无需重启服务。

重测 仍然失败,重启服务:

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

为什么没有自动授权弹窗: macOS 仅对带 UI 上下文的进程(Finder、终端、Dock 启动的 App)显示 TCC 授权弹窗。后台 launchd agent 无 UI,授权弹窗永远不会显示,系统会静默拒绝直到用户手动加白名单。

+
Q.15
Linux 文件浏览器提示 "permission denied" 或返回 403。

QuickTUI 服务以你当前用户(通常是 systemd --user)身份运行,只能读到该用户拥有 POSIX 读+执行权限的路径。常见原因:

  • 权限位。 文件 0600 / 目录 0700 模式只有所有者能读。用 ls -ld /path 检查。
  • 父目录缺少 x 位。 即使目标文件 world-readable,server 也需要每一级祖先目录有 execute 权限才能 traverse。
  • POSIX ACL。 getfacl /path 可能显示显式 deny 条目覆盖了普通权限位。
  • 用户错误。 如果某次用 sudo 启动过 server,后又切回普通用户,残留文件可能 root 所有。stat /path 看 owner。
  • SELinux(RHEL / Fedora / Rocky)。 即便权限位正确,MAC 也可能拦截。用 ausearch -m AVC -ts recentgetenforce 检查。临时测试用 setenforce 0(生产环境不要长期 permissive)。
  • AppArmor / Snap 隔离(Ubuntu)。 若你用 snap 安装 quicktui-server,它读不到 snap home 之外的文件。推荐安装路径是 ~/.local/bin/quicktui-server(无 confinement)。
  • 挂载选项。 noexec 或只读挂载在某些操作上会表现为 EACCES。用 findmnt /path 检查。

排查步骤:

  1. 对失败路径及每一级父目录ls -ld /full/path/to/dir。确认 server 运行用户对目录有 r-x,对文件有 r--
  2. 确认服务运行用户:systemctl --user show quicktui -p MainPID,再 ps -o user= -p <PID>
  3. 调权限:chmod o+rx /path(共享路径),或用 ACL setfacl -m u:<user>:rx /path(选择性授权)。
  4. SELinux 拦截时,加文件 context label 或用 audit2allow 生成策略模块 — 参考你的发行版 SELinux 文档。
  5. 客户端点 已授权, 重测。无需重启服务。

仍失败时复现操作并查看日志:journalctl --user -u quicktui -f

+
tmux
Q.16
会话列表为空。

QuickTUI 显示当前 tmux 会话。若尚无会话,从 App 或浏览器点 New Session 创建,或在服务器上运行:

tmux new-session -s mysession
+
Q.17
在 tmux 里跑 Claude Code 一段时间后,scrollback 出现重复或错位的文字。

现象。在 tmux pane 里使用 Claude Code(或同类 TUI 工具如 OpenAI Codex CLI、aider)一段时间后,向上滚动 tmux 历史会看到重复的帧、错位的列,或旧渲染的碎片。重启 QuickTUI 服务端 不能 让桌面 tmux 自愈,只有 tmux clear-history 才能清掉。

原因。Claude Code 的 TUI 基于 Ink 渲染库。当渲染区域超过 viewport(或满屏重绘时),Ink 的 render loop 会在 主屏 上发送 CSI 3 J("擦除滚动条历史")并重绘整屏 — 且没有 DECSET 2026(同步输出)包裹。tmux 把这些半截帧写进 pane scrollback。后续每次 SIGWINCH / 改尺寸会再叠加一份。上游 issue:

解决方法。fullscreen 模式跑 Claude Code — 切到 alternate screen buffer(和 vim / htop 一样),完全不动 scrollback。需要 Claude Code v2.1.89+

/tui fullscreen

v2.1.89 — v2.1.109 版本用环境变量代替:

CLAUDE_CODE_NO_FLICKER=1 claude

清掉已经污染的 scrollback。烂字节已经在 tmux 内存里,只能整段清掉:

tmux clear-history

然后用 fullscreen 模式重启 Claude Code 防止再次发生。QuickTUI 客户端在你选择运行了 Claude Code(或其他已知 main-screen TUI 工具)的 pane 时也会弹一条提示条。

+
Q.18
终端应用输入框反复出现 11;rgb:2828/2c2c/3434 之类乱码。

现象。多个客户端(比如本地终端加上 QuickTUI App 或浏览器)同时 attach 同一个 tmux session 时,终端应用的输入框会反复出现类似 11;rgb:2828/2c2c/3434 的乱码,有时连续好几条。

原因。部分终端应用会通过发送 OSC 10/11/12 转义查询("当前前景色 / 背景色 / 光标色是什么")来自动探测配色主题。tmux 把查询转发给最外层终端,再把对方的回包路由回 pane。当多个客户端同时 attach 时,回包可能在应用为这次查询打开的解析窗口关闭之后才到达,于是应用把这些原始转义字节当成了普通按键,直接塞进了自己的输入框。这是终端应用侧的 bug,与 QuickTUI 无关 — 例如 Claude Code 就有对应的 #12910 — OSC terminal color query responses leak into input buffer

解决方法。

  1. 把受影响的应用改成固定主题,不用自动探测。Claude Code 里运行 /theme,选一个固定的浅色或深色值。
  2. 其他 TUI 工具同理,关闭自动终端配色 / 主题检测。
  3. 可选:在 ~/.tmux.conf 里加一行,降低转义序列被拆片误判的概率:
    set -s escape-time 100
+
iOS App 与浏览器
Q.19
什么是 access token?

你在安装时设定的密钥 — 用于保护服务器不被未授权访问。在服务器上查看:

cat ~/.config/quicktui/config

首次在 App 或浏览器登录时按提示输入。

+
Q.20
可以通过公网连接吗?
可以。需要让服务器可从公网访问 — 通过公网 IP、VPN、反向代理,或 TailscaleCloudflare Tunnel 等隧道。QuickTUI 本身在 8022 跑明文 HTTP;如果使用 Cloudflare Tunnel,tunnel service 填 http://127.0.0.1:8022,App 里填公网 HTTPS 域名,通常不写端口;:443 等价可用。公网 HTTPS 地址不要写 :8022。Token 妥善保密。
+
Q.21
App 或浏览器提示"Session not found"。

这是服务端返回的消息 — tmux 会话已关闭或被重命名,或 tmux 服务本身未运行。

刷新会话列表,然后打开已有会话或新建一个。

+
§ 06 / 资源

指南与对比

在手机上配置 tmux、远程运行编程 Agent,并了解 QuickTUI 的对比。