Hermes iOS Companion
我独立设计和开发的自托管 iOS 移动控制端。它连接 Mac 与 VPS 上的 Hermes Agent,让用户在 iPhone 上继续会话、查看工具执行、确认高风险操作、使用语音输入,并接收系统级任务状态。
项目概览
Hermes iOS Companion 是我为开源 Hermes Agent 独立设计和开发的移动控制端。离开运行 Agent 的电脑后,我仍可以继续会话、查看工具执行、处理安全审批、使用语音输入,并跟踪长时间任务。
它是已经部署在个人系统中的 private beta,不是普通聊天 App。我负责 iOS 客户端、交互模型、Gateway 协议集成、安全边界和 Apple 系统能力。它不是 Nous Research 官方产品。
问题:离开电脑后,桌面 Agent 失去了交互入口
桌面 AI Agent 可以读取文件、调用工具并执行长任务,但用户一旦离开电脑,原本的界面就不存在了。仅仅把聊天框搬到手机上并不能解决问题。移动端还需要表达执行状态、维持会话连续性、接住系统事件,并让高风险操作足够明确。
因此,产品目标不是缩小桌面端,而是识别手机上真正重要的责任:轻量输入、状态感知、处理中断,以及可信确认。
产品判断:iPhone 不运行 Agent Runtime
Hermes Runtime 继续运行在 Mac 或 VPS 上,因为那里拥有文件、工具、算力和长时间进程上下文。iPhone 只作为安全控制端发送输入,并渲染 Gateway 提供的状态。
这个边界同时降低了产品和安全复杂度。Gateway 始终是事实源。移动端即使重连、补偿状态,或错过一次瞬时事件,也不会成为任务状态的第二个权威。
架构:一个事实源,多条反馈路径
iPhone 通过 Tailscale HTTPS 访问每个 Hermes Gateway。Mac 与 VPS profile 分别保存 endpoint 身份、凭证、会话和通知路由,避免跨实例混用。请求发送到当前选择的 Gateway,SSE 提供前台进度,APNs、Widget、Live Activity 和 Dynamic Island 提供系统级状态。
SSE 与推送都是反馈层,不是互相竞争的数据库。中断或重连后,客户端以 Gateway 状态进行 reconcile,而不是假设每一个瞬时事件都已收到。
核心难点
真正困难的工作不是渲染聊天气泡,而是在网络、进程、设备和 iOS 生命周期边界之间维持信任与连续性。
- 01
不可重放 SSE 与断线恢复
把流式反馈与 Gateway 持久状态分开,再通过重连与 reconcile,避免一次中断让客户端持有错误的任务结论。
- 02
Mac 与 VPS 身份隔离
将会话、凭证、草稿、通知和深链接绑定到明确实例,切换环境时不会把上下文带入另一个系统。
- 03
Face ID 高风险审批
高风险操作必须先选择授权范围,再通过本地 Face ID 或设备密码确认,通知点击本身不能代表授权。
- 04
离线 Share outbox
当 App 或 Gateway 不可用时持久保存 Share Extension 输入,恢复连接后再送往原本指定的实例与会话。
- 05
Push、Widget 与 Live Activity 路由
把后台事件映射到正确 profile 与任务,同时仍以 Gateway 的最终状态为准。
- 06
语音草稿与长会话交互
处理中断后的转写草稿恢复,并把滚动、自动折叠和精确文字选择当作生产力核心交互。
- 07
中英文与辅助功能
在主要流程中实现中英文、Dynamic Type、VoiceOver 结构和最小触控区域,而不是在功能完成后补做。
远程执行必须保持可理解和可控制
远程执行首先是人因问题。用户需要足够上下文做判断,但不应该被迫在手机上阅读桌面尺寸的执行轨迹。审批流程先呈现意图与授权范围,高风险请求再通过 Face ID 或设备密码确认当前持有者身份。
执行期间,推理与工具调用被折叠为紧凑状态面板。细节仍可检查,但最终答案保持在执行轨迹之外,避免状态、诊断信息和结果互相争夺注意力。这里的界面来自当前 main 的安全模拟器 fixture。
验证证据
最有价值的证据是完整系统真实运行在一台 iPhone 和两个自托管环境中。自动化测试负责确定性行为,真机验收负责验证 mock 无法证明的 Apple 服务与网络条件。
- iOS 系统能力
- 在真机验证 APNs、Face ID、Share Extension、Widget、Live Activity、Dynamic Island、语音输入和中英文行为。
- 中断后的连续性
- 覆盖 SSE 恢复、前后台切换、草稿恢复、离线 outbox 和实例级路由。
- 面向真实部署的边界
- 使用 Tailscale 私有连接、Keychain 凭证、fail-closed 审批和 Gateway reconcile,不把 Agent Runtime 直接暴露到公网。
已知限制与发布边界
Hermes iOS Companion 是 private beta 和已经部署的个人系统。它没有上架 App Store,也不是公开下载产品,更不是官方 Hermes App。当前配置仍假设用户拥有自托管 Hermes Gateway 与 Tailscale 网络,这适合目前的使用范围,但不是面向大众的 onboarding。
公开截图只使用 example data 与脱敏 fixture。真实 Gateway URL、API key、配对 payload、Tailscale 域名、设备 token、APNs 凭证和私人会话内容都不会出现在公开材料中。
这个项目证明了什么
Hermes iOS Companion 是我目前最完整的端到端案例。它把 AI 系统、UX 判断、原生 iOS 开发、后端协议、安全和真实部署组合成一个完整产品。
最重要的产品结论是:AI Companion 不应该模仿 Runtime,而应该把 Runtime 翻译成最少的一组移动交互,同时保留连续性、状态感知和信任。
Built independently by Prince Niu,作为开源 Hermes Agent 的 companion 设计与开发。Not an official Nous Research product。
