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 生态系统

运作原理(高阶流程)

  1. App 开启连接至执行 rtach 二进制文件的远程主机。
  2. 用户输入被封装成 rtach frames 并透过 SSH 通道传送。
  3. rtach 将输入写入远程 PTY,执行用户的 Shell,并将输出串流回传。
  4. App 接收串流输出,透过 RtachClient 解析,并交由 GhosttyKit 进行 Metal 渲染。
  5. 若网络中断,rtach 会保持 PTY 活跃。当 App 重新连接时,连接状态(滚动记录、光标位置)会自动恢复。

构建与执行

  • 需要 Xcode 15+、iOS 17+、Zig 0.15.2+、Go 以及 Apple 开发者账号(免费账号可用于个人测试)。
  • 本仓库为一个 monorepo,包含三个子仓库 (ghostty, rtach, libtailscale)。构建步骤:
    1. 使用 Zig 构建 GhosttyKit 框架。
    2. 编译 rtach Linux 二进制文件(交叉编译)并复制到 App 套件中。
    3. 使用 Go 与 libtailscale 源代码构建 TailscaleKit xcframework。
    4. 使用提供的 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。

相关

  • 项目
  • 项目
  • 项目
  • 项目