AI 编程 Agent
在 Mac 上跑,
你在手机上控。
Claude Code、Codex、Aider、Cursor Agent — 离开座位也别让它们空转。随时接入,秒级确认,转身走人。

为随手可用而生。
每一个底层能力 — 会话保活、扫码配对、浏览器客户端 — 都为了让你的 Agent 随手即得。
始终在线 — Agent 随时就位
Agent 的会话在两次接入之间持续存活于服务器 — 你在任何设备上打开 QuickTUI,它已在那里等你:输出完整、光标停在你离开的位置。(底层由 tmux 保活 PTY。)
2 秒扫码接入
在服务器执行 `quicktui-server --qrcode`,用 iOS App 扫描 — 你已进入 Agent 的会话。无需复制 Token、无需敲 IP。
同一真相,所有客户端
窗口、面板、缩放、滚动、复制模式 — 每个客户端都看到 Agent 当前状态的同一份视图。任务进行中切换设备,光标毫不闪动。
自托管 · 零云端
Agent 跑在你选的主机上 — Mac、Linux 或 WSL。代码、密钥、API 额度留在原地。无账号、无遥测、无厂商介入。
三种方式即刻接入
通过 Quick Setup(SSH 自动安装)、扫码,或手动输入 URL + Token 添加服务器。配件栏与快捷键面板让终端按键随指可得。
作为服务 · 永久在线
以用户级服务形式安装在 macOS launchd、Linux systemd 与 Windows 计划任务上。升级检查、受控重启、重启后自动恢复 — 你不在时,Agent 依然在被看守。安装器与服务端安装流程负责安装与服务注册。
每一块屏幕,皆是入口。
同一会话,跨越每一块设备。通勤时用手机查看。咖啡厅里用 iPad 接管。办公桌前在浏览器里审阅。你在哪里,Agent 就在哪里。
拿起任一屏幕,Agent 已在那里。
每个客户端 — 手机、平板、浏览器 — 都是通往同一 Agent 会话的实时窗口。无需重连仪式、无需翻回日志。Agent 已在你打开的那块屏幕上等你。
- 会话claude-code · 14 天 · 7 个窗口
- 漫游Wi-Fi → LTE → 5G · 无缝切换
- 客户端iPhone · iPad · Safari · Chrome
- 传输HTTP API · WebSocket
你在哪,Agent 就在哪。
QuickTUI 不是 IDE。它是那条纽带 — 连接正在你服务器上默默运行的 Agent,和你此刻正拿着的那块屏幕。
在手机上接管 Agent
Agent 停在一个确认提示上。你正在地铁里。接入、批准、断开 —— 10 秒。它继续往下跑,不需要你守着。
iPad 即 Agent 驾驶舱
Magic Keyboard + QuickTUI + 强力服务器 = 一块 12 英寸驾驶舱,用来盯着 Claude Code、Aider 或多小时构建任务。轻量客户端,重量级 Agent。
从任何设备的浏览器接入
无需安装。在任意现代浏览器中打开服务器 URL,输入一次 Token,即可实时查看 Agent 的运行状态 — 哪怕是酒店里借来的笔记本。
长时间任务 · 无需值守
训练任务、Agent 群、数据迁移、构建流水线。启动后走开,从沙发上随手查看。笔记本可以休眠 — 任务不会因此停下。
从安装到日常使用。
两种方式装好服务端,再加上手机和 iPad 上每天都会用到的手势速查表。
获取应用 →两种方式装好服务端。
如果机器能 SSH 登录,iOS App 内的向导帮你装好服务端。不能 SSH 的话,到机器上跑一行 curl 也行。两种方式都会自动检测 tmux 3.2+,注册 launchd / systemd 服务,并把 Token 写入 ~/.config/quicktui/config。
浏览器用户:访问 http://<host>:8022,粘贴一次 Token。
你每天都会用到的几个东西。
屏幕上的五个组件,每个只干一件事。
工具栏 与 方向键
屏幕底部可自定义的按键条 — Tab、Ctrl,以及你自己按文件夹分类的快捷宏。旁边的方向键面板提供最常按的键:四个方向键、Esc、Enter、删除。常用键随手可及。

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

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

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

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

在手机或 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停止服务并卸载服务端问题与答案。
按主题分组,均来自官方文档。更多答案请见仓库 — 在 github.com/dualface/quicktui 提 Issue。
通常是下载中断或损坏 — 重新运行安装脚本即可。若持续出错,可能是发布资源刚更新,稍等几分钟重试。
也请检查是否有中间人拦截 HTTPS 流量(例如企业代理)。
QuickTUI 需要 tmux 3.2 或更高版本。安装脚本可自动为你安装 — 优先使用系统包管理器(brew、apt、yum、dnf),否则下载预编译包解压到 ~/.local/tmux。
当服务 PATH 找不到 tmux 时,安装脚本会保存 QUICKTUI_TMUX_BIN。
服务会读取 ~/.config/quicktui/config — 手动启动的 quicktui-server 进程不会自动读取。
键:QUICKTUI_TOKEN、QUICKTUI_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
两条路径:
重新运行安装脚本 — 原子替换、失败回滚、配置保留。
服务端自更新 — 使用缓存发布检查、下载当前平台二进制、替换可执行文件。自更新不会自动重启;可在 App/浏览器重启、调用 POST /v2/api/restart,或重启系统服务。
升级 / 重启 / 关停相互串行:重启进行中时新升级请求会被拒绝,反之亦然。
查看状态:
quicktui-server --check-upgrade
可以 — 运行环境预检,不安装、不写入服务端配置:
curl -fsSL https://quicktui.ai/q.sh | sh -s -- --check
服务方式:确保 ~/.config/quicktui/config 存在且包含:
QUICKTUI_TOKEN=…
手动启动:传入 --token 或在环境中设置 QUICKTUI_TOKEN — 普通启动不会自动读取配置文件。
先检查服务:
# macOS launchctl print gui/$(id -u)/ai.quicktui # Linux systemctl --user status quicktui
若跳过了服务注册,用相同的 token 和地址手动启动服务端。若服务已在运行,请确认防火墙或隧道放通了 QUICKTUI_ADDR 对应的端口。
服务端的 tmux 在 TERM=xterm-ghostty 下无法正确渲染 — Ghostty 自己的 terminfo 不适用于远端会话里的 tmux。
改用广泛支持的 TERM。在 ~/.config/quicktui/config 中配置:
QUICKTUI_TERM=xterm-256color
然后重启服务。手动启动命令则用:
--term xterm-256color
服务端无法启动或附加 tmux。查看日志:
# macOS tail -f ~/Library/Logs/QuickTUI/stdout.log # Linux journalctl --user -u quicktui -f
若设置了 QUICKTUI_TMUX_BIN,必须是指向真实 tmux 二进制的绝对路径。也请确认 QUICKTUI_TERM 与 QUICKTUI_LANG 有效。
# macOS tail -f ~/Library/Logs/QuickTUI/stdout.log \ ~/Library/Logs/QuickTUI/stderr.log # Linux journalctl --user -u quicktui -f
若手动启动 quicktui-server,输出在你启动它的那个终端。
服务方式:编辑 ~/.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 字面量。
curl -fsSL https://quicktui.ai/q.sh | sh -s -- --uninstall
停止服务并卸载它所管理的服务端。
macOS 通过 TCC(隐私权限子系统)保护 桌面、文稿、下载、iCloud Drive 等系统目录。QuickTUI 服务以后台 launchd agent 形式运行,无 UI 上下文,无法触发系统授权弹窗,因此访问这些目录会静默挂起直到请求超时。
解决方法 — 给 server 二进制加完全磁盘访问权限:
- 打开 系统设置 → 隐私与安全性 → 完全磁盘访问。
- 点 + 号。在文件选择器中按 Cmd+Shift+G,输入 ~/.local/bin,选中 quicktui-server。
- 确保 quicktui-server 旁边的开关已启用。
- 回到 QuickTUI 客户端,点警告条上的 已授权, 重测。无需重启服务。
若 重测 仍然失败,重启服务:
launchctl kickstart -k gui/$(id -u)/ai.quicktui
为什么没有自动授权弹窗: macOS 仅对带 UI 上下文的进程(Finder、终端、Dock 启动的 App)显示 TCC 授权弹窗。后台 launchd agent 无 UI,授权弹窗永远不会显示,系统会静默拒绝直到用户手动加白名单。
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 recent 或 getenforce 检查。临时测试用 setenforce 0(生产环境不要长期 permissive)。
- AppArmor / Snap 隔离(Ubuntu)。 若你用 snap 安装 quicktui-server,它读不到 snap home 之外的文件。推荐安装路径是 ~/.local/bin/quicktui-server(无 confinement)。
- 挂载选项。 noexec 或只读挂载在某些操作上会表现为 EACCES。用 findmnt /path 检查。
排查步骤:
- 对失败路径及每一级父目录跑 ls -ld /full/path/to/dir。确认 server 运行用户对目录有 r-x,对文件有 r--。
- 确认服务运行用户:systemctl --user show quicktui -p MainPID,再 ps -o user= -p <PID>。
- 调权限:chmod o+rx /path(共享路径),或用 ACL setfacl -m u:<user>:rx /path(选择性授权)。
- SELinux 拦截时,加文件 context label 或用 audit2allow 生成策略模块 — 参考你的发行版 SELinux 文档。
- 客户端点 已授权, 重测。无需重启服务。
仍失败时复现操作并查看日志:journalctl --user -u quicktui -f。
QuickTUI 显示当前 tmux 会话。若尚无会话,从 App 或浏览器点 New Session 创建,或在服务器上运行:
tmux new-session -s mysession
现象。在 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:
- #29937 — Terminal rendering corruption in tmux
- #49086 — Resize duplicates banner/content in scrollback
- #37283 — TUI flicker / missing DECSET 2026
解决方法。用 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 时也会弹一条提示条。
现象。多个客户端(比如本地终端加上 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。
解决方法。
- 把受影响的应用改成固定主题,不用自动探测。Claude Code 里运行 /theme,选一个固定的浅色或深色值。
- 其他 TUI 工具同理,关闭自动终端配色 / 主题检测。
- 可选:在 ~/.tmux.conf 里加一行,降低转义序列被拆片误判的概率:
set -s escape-time 100
你在安装时设定的密钥 — 用于保护服务器不被未授权访问。在服务器上查看:
cat ~/.config/quicktui/config
首次在 App 或浏览器登录时按提示输入。
这是服务端返回的消息 — tmux 会话已关闭或被重命名,或 tmux 服务本身未运行。
刷新会话列表,然后打开已有会话或新建一个。
指南与对比
在手机上配置 tmux、远程运行编程 Agent,并了解 QuickTUI 的对比。