除 ZMX 后端外,每个会话都自带一个基于 xterm.js 的 Web 终端,地址形如 http://<WEB_EXTERNAL_HOST>:<端口>。ZMX 会话没有 Web 终端,需通过 botmux list 或 zmx attach 进入本机终端(见 zmx)。
两种链接
| 链接 | 来源 | 能力 |
|---|---|---|
| 只读链接 | 自动展示在流式卡片上 | 随时查看进度,不能输入 |
| 可操作链接 | 点卡片「🔑 获取操作链接」,经私聊发送 | 可直接在浏览器里操作 CLI |
流式卡片本身见 cards。
移动端与三端同步
- 移动端快捷键:平板/手机上提供悬浮快捷键工具栏,含
Esc、Ctrl+C、Tab、方向键等,手机上也能流畅操控 CLI(如在 Claude Code 里选菜单、确认权限)。 - 三端同步:飞书话题、Web 终端、本地 tmux 三处看到的是同一个 CLI 进程的实时状态——在电脑 tmux 里敲、在手机 Web 终端里敲、在飞书里发消息,效果一致。
远程访问(公网 / 内网域名)
默认链接使用自动探测的局域网 IP,仅同网段可达。手机与运行 botmux 的机器不同网时,可把链接指向一台双方都可达的主机。
情形一:botmux 直接跑在云主机上——在 ~/.botmux/.env 设置 WEB_EXTERNAL_HOST=<云主机公网域名或IP>,botmux restart 后卡片上的终端链接即对外可用。
情形二:botmux 跑在本地,经中转主机转发(云主机或公司内网机器均可):
# 1. 终端链接指向中转主机(写入 ~/.botmux/.env 后 botmux restart)
WEB_EXTERNAL_HOST=<中转主机域名或IP>
# 2. 本机 → 中转主机 反向隧道(在运行 botmux 的机器上执行)
autossh -M 0 -f -N -R 18800:localhost:8800 user@relay-host
# 3. 中转主机把对外端口桥接到隧道(sshd 多默认禁 GatewayPorts,故用用户态桥接)
socat TCP-LISTEN:8800,bind=0.0.0.0,reuseaddr,fork TCP:127.0.0.1:18800端口与注意事项:
- 链接端口默认取本机终端代理实际监听端口(
8800 + botIndex),此时中转主机须监听同号端口(上例两端都是8800)。 - 想让中转主机用不同端口对外(如本机
8800、中转用9000),设WEB_EXTERNAL_PORT=9000后botmux restart,卡片链接即改用该端口;多 bot 部署时它是基准端口,第 N 个 bot 实际取WEB_EXTERNAL_PORT + botIndex,与本机8800 + botIndex一一对应,中转主机按各自端口分别桥接。 - Web 终端的 WebSocket 按页面地址同源连接,TCP 级转发即可透传,无需额外配置。
- 只读链接无凭证即可查看;把端口暴露到更大网络前请评估可见范围;可写操作始终需要 🔑 链接中的 token。
环境变量完整列表见 env;把本地已有 tmux 会话接入这套终端体系见 session-handoff。