人离开电脑,监督和验收照旧:手机上的 Mosh + SSH 终端

1 阅读15分钟

人离开电脑,监督和验收照旧:手机上的 Mosh + SSH 终端

开源、免费、纯 Kotlin 写就的移动终端 Termish——Android / iOS 一套代码。 这篇文章不讲虚的,先讲清楚为什么需要它,再教你怎么玩

先说痛点

你有没有过这样的场景:

  • 现在的主流干活方式:你坐在 Mac 前,AI 编程 agent 在终端里写代码——你盯着它一步步改:看输出、查 diff、跑测试,改歪了拍回去重来,满意了才验收。agent 负责写,你负责监督和验收
  • 但这一切的前提是"你在电脑前"。下午五点半合上电脑,监督台就没了:agent 还在 Mac 上继续跑,可它写到哪了你看不到、改歪了没人拦、写完了没人验收
  • 另一个同样熟悉的场景:服务器上的 agent 跑运维——排查线上问题、修 bug、改配置、部署。你人在外面,服务器报警了 / agent 卡住了 / 需要你拍板,而你手边只有一部手机
  • 带电脑出门?太重。远程桌面?又卡又慢还得那台电脑一直开着。网页仪表盘?很多 agent 根本没有,有的也只剩个"看"
  • 就算掏出手机连 SSH——普通 SSH 一换基站/WiFi 会话就断,agent 的上下文、任务进度全跟着丢
  • 手机上用 Termius 连远程电脑,中文输入法候选栏弹不出来,拼音直接漏到终端里
  • 手机上敲 vimhtop,CTRL 键按不了,鼠标事件没有,TUI 界面根本没法操作

Termish 的目标很直接:在手机上造成"人在电脑前"一样的工作——监督(实时看输出、滚动日志、检查进度)、遥控(追加需求、打断、批准)、验收(看结果、继续迭代),把监督和遥控整个搬进口袋。

而且它不是单打独斗:终端(SSH/Mosh)+ herdr + Git 面板 + SFTP + 语音输入 + 远程桌面——一套把"远程遥控效率"打磨到极致的组合拳,从命令行到文件、到版本库、到屏幕,遥控一台电脑的每一环都给你配好。

为什么需要 Termish:各家的配套 App 不香吗?

你可能会问:现在各家 AI 厂商都出了"手机远程联动"的配套 App,它们不也能让我在外面操作 agent 吗?

能,但它们是"配套 App",Termish 是"终端"。 区别在三个地方:

1. 不绑定任何 agent 厂商。 配套 App 只能连它自家那一个 agent——它是某个 agent 的生态墙。Termish 走的是 SSH / Mosh 这样的开放协议,那台电脑上跑什么它就进什么:herdr、vim、htop、tmux……任何 TUI agent 都是它的目标,今天用这个明天换那个,或者几个 agent 同时跑,一个终端全搞定。它是协议层的,不是某个产品的外壳。

2. 纯粹。 直连你自己的电脑,无账号、无云同步、无遥测、不经过任何第三方——你的 agent 会话只属于你。没有"登录一下、同步一下、数据过一下我们的云"这种事。密钥只进系统保险库(Android Keystore / iOS Keychain)。

3. 作者是终端爱好者。 Termish 的核心资产不是某个 agent 的壳,而是终端模拟器本身——纯 Kotlin 从零写的 VT100/xterm 模拟器 + 纯 Kotlin 的 Mosh 客户端。这意味着它在"终端体验"这个维度上打磨得比任何"agent 配套 App"都深:Mosh 本地回显预测、中文输入法组合态、触屏 TUI 输入、12 套配色……这些是配套 App 永远不会做的。

一句话:配套 App 是"我家 agent 的遥控器",Termish 是"你所有电脑的钥匙串"

Termish 是什么:30 秒版

一句话定位:手机上的 Mosh + SSH 终端——换网、漫游不掉线,任意 TUI agent(herdr 等)的口袋入口。

具体来说:

  • Mosh 优先:会话在换网、漫游中存活(走 UDP,网络抖不断);本地回显预测让高延迟下打字依然跟手
  • 纯 Kotlin 终端模拟器:VT100/xterm 转义序列、CJK 宽字符、备用屏、滚动回看、真彩、OSC 8 超链接——从零写就,不用 webview 壳
  • 处处原生:Compose Multiplatform 一套代码跑 Android / iOS,无 webview、无 Electron——长时 agent 会话不发热、不费电
  • 本地优先、隐私设计:直连你自己的电脑,无账号、无云同步、无遥测,不经过任何第三方;密钥只进系统保险库(Android Keystore / iOS Keychain)
  • 开源且永久免费:MIT 协议、代码可审计、无订阅、无功能墙
  • 中文输入法组合态一等公民:拼音永不上线,候选栏完整可用(玩法五细说)
  • 触屏 TUI 输入:固定 CTRL/ALT/ESC 工具行,触摸映射鼠标事件,agent TUI 在手机上顺手可用

核心资产是终端模拟器本身,不是某个 agent 的外壳——所以它对所有 TUI agent 一视同仁。

30 秒概念课:SSH、Mosh、TUI agent、herdr 分别是什么

后面玩法会用到这几个词,先花 30 秒讲清楚:

  • SSH:远程登录服务器的标准协议(TCP 22 端口)。你在电脑上 ssh user@server 用的就是它。它最大的毛病:网络一抖就断,一断进程就死。
  • Mosh:SSH 的"抗抖升级版"。走 UDP,会话状态存在服务端,客户端换网、锁屏、切 App 都不掉线;还有本地回显预测,高延迟下打字不卡。服务器装一次 mosh-server,客户端随便换。
  • TUI agent:跑在终端里的 AI 编程 agent——不是一个网页,而是一个全屏交互界面(Terminal UI)。herdr 这类 agent 的终端模式、还有 vim/htop 这种传统 TUI,都算。
  • herdr:一个让 AI agent 常驻的运行时(herdr.dev,"the runtime your coding agents live on")。注意"常驻"两个字——agent 住在那台电脑/服务器上,不依赖任何 SSH/Mosh 连接。它是 agent 的"房间",SSH/Mosh 只是"门",Termish 是你随身带的"前门"。后面玩法二会重点讲:为什么没它玩不转。

安装:1 分钟跑起来

Android 直接下载安装包(iOS 目前需本地构建,见文末):

  • Android:从 Releases 发布页 下载签名 APK(侧载需允许"安装未知来源应用")
  • 每个发布都附 SHA-256 校验和

装完打开,界面长这样:

主机列表 SSH 终端 herdr TUI agent

快速上手:添加主机 → 连接

第一步,添加主机。 主机 tab → 右上角 +,填四样东西:

  • 名称、主机地址、端口(默认 22)
  • 用户名 + 认证方式:密码 / 私钥 / 私钥优先密码兜底(支持 PKCS#8、传统 PEM、OpenSSH 格式,连接时询问一次口令、不持久化)/ keyboard-interactive
  • 连接方式:SSH 或 Mosh(后面玩法一细说)
  • 连接后启动 herdr 工作台:勾上就是 agent 口袋入口(玩法二细说)

还能顺手加标签(方便搜索)和快速命令(连接后自动执行)。

第二步,连接。 点主机卡片。首次连接会弹出服务器主机密钥指纹让你确认(TOFU 模式),确认后自动校验。

第三步,再点一次同一台主机 = 再开一个新会话。 同一主机的所有会话(外加 SFTP)平级显示在终端顶部的 tab 栏,随意切换、新建、关闭,各自持有独立的缓冲。

设置页里值得先看一眼的几项:

  • 字号:按 sp 调,或者直接按目标列数(比如 120 列——高密度)
  • 主题:内置 12 套终端配色(Default、Solarized、Dracula、Nord、Tokyo Night、Gruvbox、Catppuccin Mocha、Monokai 等)
  • 触觉反馈、光标闪烁、OSC 52 剪贴板开关、keepalive 间隔、自动重连开关

玩法一:Mosh——换网不掉线的正确姿势 ⭐

这是 Termish 最大的差异化玩法。

普通 SSH 走 TCP,网络一抖就断、一断就丢进程。Mosh 走 UDP,会话状态存在服务端,手机换 Wi-Fi、切蜂窝、锁屏、切 App,会话都不掉——回到终端,一切还在原样等着你。

怎么开:

  1. 主机设置里把连接方式从 SSH 改为 Mosh,直接连
  2. 远端没装 mosh-server?不用提前折腾——Termish 自动弹出引导安装卡:点「安装 mosh」,输入 sudo 密码(仅本次经加密 SSH 发送、不存储),卡片上实时滚动 apt 安装日志,装完自动重连 mosh;不想装也可以「跳过,改用 SSH」
  3. 连接时 Termish 会先经 SSH 启动 mosh-server,解析 UDP 端口与密钥,然后纯 Kotlin 的 mosh 客户端dev.termish.mosh:AES-128-OCB 加密、SSP 状态同步、zlib 分片)直连 UDP

NAT 环境(家里 NAS / 路由器后面): 给主机设一个固定 UDP 端口(60000-61000),路由器上做端口转发即可。

高延迟也不卡: Mosh 有本地回显预测——你敲的字符先在预测浮层上即时渲染,等服务器 echo 确认后再"收编"。在 4G/卫星这种高 RTT 链路上打字依然跟手,这在普通 SSH 客户端上根本做不到。

进阶玩法——主题同步: 把手机的终端配色(OSC 4/10/11 应答)注入 Mosh 流,远端 TUI 会按你手机上的主题渲染,而不是宿主机默认主题。你的终端长什么样,服务器上的界面就是什么样。

玩法二:herdr——为什么说没它玩不转 ⭐

先回答一个问题:手机遥控 agent,为什么必须要 herdr?

因为 agent 进程的生死,传统上绑在 SSH 连接上。你 ssh 上电脑/服务器,在终端里跑 agent,它是 SSH 会话的子进程——连接一断,agent 跟着死,任务白跑。这就是为什么"手机遥控 agent"以前只是口号:手机网络不稳定,SSH 动不动就断,agent 的命比连接还脆。

herdr 改变的是这一层:它是跑在你那台电脑/服务器上的 agent 运行时(官网一句话:herdr.dev——"the runtime your coding agents live on"),agent 在它里面常驻 7×24,跟你连不连接没有任何关系。SSH/Mosh 只是通往 herdr 的"门"——门关了,房间里的 agent 照常干活。

所以这套组合的因果是:

  • herdr 保 agent 的命:断开连接,agent 继续跑任务,等你回来验收——写代码、跑测试、修线上 bug 都一样
  • Mosh 保你的连接:你盯着它的时候,换网、锁屏、切 App 都不掉线
  • Termish 把两者串起来:点一下主机,就进入 herdr 的 TUI——所有 agent 的真实窗口。不需要网页仪表盘,手机上也不用装任何常驻进程

把它俩拼起来,画面是这样的:你在地铁上,agent 在你家电脑上干活——它改完一个文件,你掏出手机看一眼 diff,敲一句"这个接口顺便也重构了吧",它接着干。全程不掉线、不丢上下文。

完整搭配姿势:

  1. Termish 加主机——主机设置里勾选「连接后启动 herdr 工作台」(快速上手第一步里那个开关),连接方式建议直接用 Mosh(理由见玩法一:agent 任务跑着,你地铁换网它不掉线)
  2. 连接时自动引导装 herdr——不用提前折腾!Termish 检测到远端没有 herdr 时自动弹引导安装卡:点「安装」,卡片上实时显示安装日志(检测系统架构 → 拉取最新版本 → 下载安装),装完直接进入 agent 工作台。官网:herdr.dev

  1. 点进去就是 herdr 的 TUI——选任务、看状态、续对话、批准操作,掏出手机就能干:

  1. 设置启动命令 tmux new -A -s main——连接即进入(或复用到)常驻会话,配合 Mosh 双保险,任何客户端掉线都不怕

手机上怎么操作 herdr 这类 TUI:

  • 键盘上方有固定两行功能键工具栏CTRL ALT ESC TAB ⌃C ↑ ⌃L ⌨ / ⌃D PST ⌃E ← ↓ → ENT
  • 粘性 CTRL/ALT:点一下 CTRL 再点 A,就是 ⌃A,不用双手
  • 系统键盘组合(⌃A/⌃E/⌃R …)也照常可用
  • TUI 开启鼠标上报后,触摸手势自动映射为终端鼠标事件:点击 = 单击,拖动 = motion/滚轮——herdr 的交互面板、vim 的窗口、htop 的进程列表,在触屏上都能点

关键是:这套玩法不锁死 herdr。 今天用 herdr,明天换别的 agent,或者几个一起跑——Termish 对它们一视同仁,因为它只是终端。

玩法三:遥控全家桶——终端、文件、版本库、屏幕 ⭐

"监督和验收"不只是盯终端输出。agent 改完代码,你要看 diff;要传个文件过去;还有些场景终端根本到不了。Termish 围绕"遥控一台电脑"把每一环都补齐了:

Git 面板——手机上验收代码。 终端里直接打开 git 面板:仓库状态一目了然(staged / 工作区两个 tab),逐个文件看 diff,暂存、取消暂存,写提交信息提交。agent 改完的东西,你在手机上就能完成"看 diff → 验收 → 提交"的完整闭环——不用等回到电脑前,agent 就能进入下一轮迭代。

SFTP——文件随叫随到。 文件浏览器:上传(多选,一次挑一堆文件并发传)、流式下载、递归下载整个目录、跨目录递归搜索;文件列表按类型区分图标(图片/视频/压缩包/代码/PDF 一眼可辨);点开 md / txt / log 直接文本预览(超过 512KB 自动截断、二进制自动识别、一键复制),点开 png / jpg / gif / webp 直接看图(黑底显示、可切原始大小看细节)。给 agent 传个配置文件、拉日志、看截图,都是点几下的事。

语音输入(路线图)——手都不用动。 地铁上单手打字难受?路线图里的语音输入,直接口述命令和需求给 agent,解放双手。

远程桌面(开发中)——终端到不了的 GUI。 总有终端搞不定的场景:图形界面、浏览器操作。Termish 的 VNC 远程桌面已在开发分支跑通:触摸映射点击 / 拖拽、软键盘输入、工具栏,手机上直接操作远端桌面。

一句话:命令行、文件、版本库、屏幕——遥控一台电脑的四条路,Termish 都给你打通了。这就是"远程遥控效率打磨到极致"的意思。

玩法四:会话保活——离开再回来,一切还在

手机终端最怕的就是切出去回来看不到东西了。Termish 的做法:

  • 后台保活(Android):前台服务 + wakelock,锁屏、切 App 会话都不断
  • 会话恢复:重启应用后,会话列表原样回来(断开状态,点击重连)
  • iOS 退后台自动重连:应用被挂起、socket 断开,回前台自动重连活跃会话并恢复缓冲
  • 指数退避自动重连

进阶玩法——服务端持久化: 主机设置里配启动命令 tmux new -A -s main——连接即进入(或复用到)名为 main 的 tmux 会话。配合 Mosh,任何客户端掉线都不怕,agent 任务在那台电脑上继续跑,回来 attach 就行。这才是手机终端正确的打开方式。

会话管理器还有个 连接 tab:离开终端页不断连,回来就是原来的缓冲;主机卡片上实时显示当前会话数徽标。

玩法五:中文输入,这次真的做对了

Webview 终端(比如 Termius 里的 xterm.js)在移动端处理中文输入法一直很吃力:组合文本被吞或逐字节泄漏,候选栏经常弹不出来。

Termish 的输入管线从第一天起就围绕组合态设计:

  • 输入法组合文本(拼音)永不上线——只有提交后的文本才做公共前缀 diff 发送。拼音不可能污染远端行,输入框里的"zhong"绝不会变成远端的一串乱码
  • KeyboardType.Text 保证中文候选栏完整可用
  • 退格语义拆分:组合态时退格删拼音;已提交时退格直达远端(0x7f),本地缓冲为空也删得掉远端内容
  • 宽字符在缓冲、渲染、选择全链路按 2 格处理——彩色状态条上的中文渲染干净利落

日常输入、写代码注释、跟 agent 中文对话,全程不需要切输入法或者打英文。

玩法六:个性化——终端长成你想要的样子

  • 12 套内置配色:Solarized、Dracula、Nord、Tokyo Night、Gruvbox、Catppuccin Mocha、Monokai……总有一套是你
  • 双语界面:中文 / 英文 / 跟随系统,设置页随时切换
  • 深色 / 浅色应用主题;内置 JetBrains Mono 字体(每台设备度量一致,没有 OEM 字体惊喜)
  • 主机标签 + 搜索,主机多了也不乱

技术彩蛋:给好奇的读者

  • 纯 Kotlin Mosh 客户端:AES-128-OCB、SSP 状态同步、zlib 分片全部是 Kotlin 实现(dev.termish.mosh),零原生依赖、跨平台复用,协议层可以独立抽出来当库用
  • 纯 Kotlin 终端模拟器:VT100/xterm 转义序列、CJK 宽字符、备用屏、滚动回看、OSC 8 超链接、bracketed paste、三种鼠标上报协议全都有
  • Compose Multiplatform:一套共享 Kotlin 代码库跑 Android / iOS,无 webview、无 Electron——长时 agent 会话不发热、不费电
  • SSH 传输层按平台换用久经考验的引擎:JVM 用 sshj + BouncyCastle,iOS 用 libssh2 + OpenSSL

下载 & 项目信息

  • GitHub:github.com/icelum/term…(MIT 开源,欢迎 Star ⭐)
  • 下载:Releases 发布页
  • 官网:termish.dev
  • herdr:herdr.dev——agent 的"房间",Termish 是它的"前门"
  • iOS 用户注意:目前未公开分发,需要本地构建(make ios-native && make ios-framework 后 Xcode 跑模拟器/真机)——Android 开箱即用

路线图上还有不少好东西:herdr 会话接管与任务通知、端口转发、ProxyJump、~/.ssh/config 导入、语音输入、E2EE 跨设备同步……

手机终端这件事,值得一个 Mosh 优先、输入法友好、不绑定任何 agent 的新选择。

装上 herdr,agent 的命不再系在连接上;装上 Termish,监督和遥控照旧——人离开电脑,agent 干活,你随时在场。