eriklangille/clauntty
iOS Terminal with native Claude Code support
Clauntty – 具备持久化连接与 GPU 加速渲染的 iOS SSH 终端
简介
- 这是一款原生的 iOS 应用程序,让您能从 iPhone 或 iPad 开启 SSH 连接。
- 它利用一个名为 rtach 的小型服务器端守护进程,确保您的终端连接即使在 App 切换至后台、网络中断或设备重启时依然保持活跃。
- 终端显示透过 Ghostty 渲染器并结合 Metal 技术进行渲染,提供流畅的 60 fps 滚动体验以及完整的 Unicode/emoji 支持。
为何重要
- 移动版 SSH 客户端通常会在连接中断时丢失远程 Shell。Clauntty 的自动连接持久化功能意味着您可以随时离开并回到中断处,无需在远程主机上使用 tmux 或 screen。
- 基于 GPU 的渲染技术让操作体验如同桌面端终端一样灵敏,这在 iOS 上相当罕见。
关键组件
| 组件 | 角色 | 来源 |
|---|---|---|
| GhosttyKit | 基于 Metal 的终端模拟器(渲染、主题) | 开源 Ghostty 项目的分支 |
| rtach | 运行于远程主机的小型守护进程,负责捕捉 PTY 输出并在重连时重新串流 | 作者自定义仓库 |
| libtailscale / TailscaleKit | 内建基于 WireGuard 的网状网络,实现无需手动设置 VPN 的简易加密 SSH | Tailscale 的开源 libtailscale |
| SwiftNIO-SSH | App 使用的纯 Swift SSH 客户端实现 | Apple 的 SwiftNIO 生态系统 |
运作原理(高阶流程)
- App 开启连接至执行 rtach 二进制文件的远程主机。
- 用户输入被封装成 rtach frames 并透过 SSH 通道传送。
- rtach 将输入写入远程 PTY,执行用户的 Shell,并将输出串流回传。
- App 接收串流输出,透过 RtachClient 解析,并交由 GhosttyKit 进行 Metal 渲染。
- 若网络中断,rtach 会保持 PTY 活跃。当 App 重新连接时,连接状态(滚动记录、光标位置)会自动恢复。
构建与执行
- 需要 Xcode 15+、iOS 17+、Zig 0.15.2+、Go 以及 Apple 开发者账号(免费账号可用于个人测试)。
- 本仓库为一个 monorepo,包含三个子仓库 (
ghostty,rtach,libtailscale)。构建步骤:- 使用 Zig 构建 GhosttyKit 框架。
- 编译 rtach Linux 二进制文件(交叉编译)并复制到 App 套件中。
- 使用 Go 与
libtailscale源代码构建 TailscaleKit xcframework。 - 使用提供的
sim.sh脚本(封装了 Facebook 的 idb 工具)在 iOS 模拟器中执行 App,或使用xcodebuild构建至实体设备。
UI 功能特色
- 支持滑动手势的多分页界面。
- 提供 Esc、Ctrl、方向键及常用快捷键的键盘辅助列。
- 支持长按文字选取、复制/粘贴,以及透过 App 内浏览器进行端口转发。
- 支持 SSH 密钥验证 (Ed25519) 与简易的连接配置文件管理。
- 内建超过 20 种预设色彩主题(Dracula, Monokai, Solarized 等)。
适用对象
- 需要从 iPhone/iPad SSH 连接至服务器,且希望连接在断线后能持续的开发者。
- 偏好原生高效能终端而非网页版控制台的移动系统管理员。
- 任何重视隐私优先 SSH 客户端的使用者(无遥测、无账号)。
限制
- 远程主机必须安装
rtach二进制文件;App 会在首次连接时自动部署,但您需要一台 Linux 服务器。 - 构建过程较为复杂:必须编译 Zig 与 Go 组件并管理 Xcode 签名。
- 目前仅限 iOS;无 Android 版本。
后续方向
- Fork 本仓库,修改 bundle ID/team ID,并发布您自己的版本。
- 为 Ghostty 渲染器贡献改进或新增更多主题。
- 扩充 rtach 协议以支持文件传输或多工连接等功能。
以上所有信息均直接取自项目的 README。
相关
- 项目
- 项目
- 项目
- 项目