工作原理
1
桌面端开启远程网关
在设置 → 远程里打开网关。sidecar 通过
axum 起一个 HTTP + WebSocket 服务,
把会话与工具调用桥接出来。2
用配对码换 token
首次连接时输入配对码,服务端签发 token。token 存入系统钥匙串
(iOS Keychain / Android Keystore),之后免输入。
3
走 WebSocket 连上 sidecar
移动 App 与远程网页端连的是同一个
/ws 端点、原语相同的协议。
桌面端的会话流、工具调用、检查点在另一端原样呈现。三种网络接入
局域网直连
默认可用。桌面和手机在同一 Wi-Fi 下,
直接连桌面机的局域网地址。适合家里和办公室。
Cloudflare Tunnel
公网接入且不需要公网 IP。
仓库支持补充 Cloudflare 网关 ID 等凭据字段来走认证流程。
Tailscale
同样免暴露公网,走私有网络地址。
安全须知
移动 App
技术选型
Expo SDK 57 + React Native 0.86 +
@assistant-ui/react-native。
刻意不用 Tauri mobile,而是复用桌面网关的 /ws 协议,
与浏览器网页端同源。依赖隔离
移动端依赖装在
apps/mobile/node_modules
(install.hoistingLimits = "workspaces")。
RN 0.86 只能配 react 19.2.3,与桌面的 react 19.3 各持一份,
避免 hoisting 互相抬版本导致 Metro 双实例。远程网页端的功能边界
浏览器网页端是三端里功能最全的一个(它跑在桌面环境里), 但仍有一些边界:- 不能安装 / 卸载插件——插件市场是桌面本地行为;
- 不能改系统级设置与凭据管理,这些走 Rust 宿主的系统钥匙串;
- 系统级能力(窗口控制、终端、截图)需要桌面宿主在场。
Agent 始终跑在桌面
这一点值得单独说,因为它决定了远程访问在体验上意味着什么。模型调用、工具执行、文件读写全在桌面侧的 sidecar 里。
手机连的是一个视口,不是一个被降级过的第二套实现。
桌面关机了,手机就只是一个连不上的壳。
手机息屏、切后台、掉 Wi-Fi,都不影响桌面上正在跑的任务。
重新连上后看到的是同一个回合的延续。
当前形态下,审批卡会出现在你正在使用的那个客户端上。
在桌面发起并在桌面批准是安全的;在手机上批准则要清楚自己批的是什么。
这一层的安全性依赖于配对设备本身可信,而不是每次都重新鉴权。
还没做的
移动端真正的短板在”离开电脑”这件事上,目前还没有:- 推送通知(任务完成、等待审批、定时任务结果到手机);
- 生物识别解锁与 token 轮换;
- 离线草稿与弱网下的排队发送、流中断续播;
- 窄屏交互打磨(手势、附件选择、会话列表重排)。
下一步
理解这些功能各自跑在哪一层。
