一台服务器集中运行 Web(15300)与 Hermes(9119),其他 Mac 或 Windows 电脑安装夭夭 App 后作为“电脑”出站连接服务器,向服务器上的 Bot 提供自己的真实桌面(截图、键鼠、独立浏览器)。产品中只用两种名称:运行服务的一端叫“服务器”,连接服务器的设备叫“电脑”。服务器自己机器上的 App 继续走本机回环通道,内部编号为 local。
所有 Bot 的聊天、模型、配置、记忆提炼都运行于服务端 Hermes。客户端 App 只负责界面和已授权的电脑操作,无需安装 Hermes。虚拟机 Runner 只在调用 computer_* 时建立工具会话;虚拟机离线不会转移聊天,也不会让普通聊天启动虚拟机。
Bot 的服务端状态独立于客户端:本轮 Hermes 会话连接成功即报告服务端已连接。工具桥 1.3.1 按 Profile 的完整原生目录上报终端、文件、桌面与浏览器能力,操作服务端运行环境时优先使用这些实际可用工具。目录存在不保证工具后端已连接,Hermes 进程的系统信息也不代表所有工具的执行目标;SSH、容器或远程桌面仍需按工具配置与结果确认。旧工具桥未上报快照时只将元数据标为未知,不判定服务端离线。
服务器也可打开纯客户端,它提供的是另一条客户端电脑控制通道;关闭客户端不会影响 Hermes 已有能力。没有可信的目标关联时,不按名称或 IP 自动合并两种连接,也不将容器内路径当作宿主机路径。电脑清单中的「服务器桌面代理」离线只说明 desktop_* 通道不可用,不能据此判定 Hermes 原生能力离线。
电脑开放范围与审批策略在 Bot 设置统一管理,默认开放服务器、电脑、Grok Bot 云电脑和虚拟机。旧 Bot 的 computer、execution、envs、approvalPolicy 不再决定实际设备权限或模型运行位置。旧虚拟机共享关系保留,任务助手仍受所属任务的生命周期约束。
deviceHost,服务端保存到消息和运行。省略 host 或使用「本机」/local 时,只解析为本轮来源电脑;切换客户端后新消息覆盖来源,已经运行的任务保留自己的来源快照。desktop_* 的 host 可指定电脑名称或编号;server /「服务器」固定指服务器。重复名称需要用编号。来源未知、离线或全局关闭时明确报错,不用旧消息、Bot 绑定或其他在线机器兜底。普通浏览器未提供可控设备身份时须点名目标。auto 答复也只允许一次。desktop_*,不自动将两种连接视为同一目标。全局服务器电脑开关控制 desktop 适配器,旧 denyServerTools 字段停用,不再展示未接入的封禁开关。/api/app/agents/:id/computer 系列接受 backend=desktop|cloud|vm,桌面可附带 host。界面显式选择目标。此处的 host=local 是历史 API 的服务器编号,不等于 Bot 工具中随消息变化的别名。Windows 客户端的构建、未签名安装包和验收记录见 Windows 客户端。Windows 首次启动直接连接服务器,仅支持客户端模式;以下双模式选择与本机服务器说明仅适用于 Mac。
192.168.1.10:15300)、用户名和密码。登录成功后窗口直接使用远程服务器的夭夭界面(本机不运行 Web 服务);用管理员账号登录时,App 会自动把这台 Mac 注册为电脑(令牌经系统钥匙串加密保存在数据目录 desktop-host.enc,0600),无需任何配置文件。非管理员账号只登录界面,并提示需要管理员账号才能注册电脑控制。startupChoice);也可在菜单「运行模式 → 启动时询问运行模式」恢复每次询问。desktop-host.json 仍可用于不便登录的机器(菜单「电脑 → 导入电脑配置…」),但常规流程不再需要。computer-permissions.json,各机独立;菜单「撤销本机控制授权」同时作用于本机与远程通道。屏幕授权之外是独立的第二档授权「文件与命令」:电脑面板直接提供「授权文件与命令」按钮,无需先完成屏幕授权,桌面端弹窗单独确认。授权后该账号下所有机器人获得四个工具:
desktop_file_list / desktop_file_read / desktop_file_write:在这台电脑的用户主目录范围内列目录、读文件(≤12MB)和写文件(≤10MB);..、绝对路径越界和符号链接逃逸都会被拒绝,TCC 保护目录仍按系统权限处理。desktop_shell:在主目录执行一条命令(Mac 使用 zsh,Windows 使用系统 Windows PowerShell)(最长 120 秒,stdout/stderr 各截断 512KB,超时终止并如实报告)。命令按当前系统用户权限执行,不受文件工具主目录边界限制。两档授权分别记录(approved 与 approvedFull),「撤销本机控制授权」同时清除;工具目录按账号下可用设备的授权汇总,且每次调用在服务端二次校验。
POST /api/desktop-host/v1/<hostId>/exchange:Bearer 令牌(sha256 后 timingSafeEqual)+ x-desktop-host-protocol: 1;拒绝任何携带 Origin 的请求,不进入用户会话、CSRF 或 CORS 体系;Host 白名单照常生效。{host, results} → {commands} 格式:每轮最多 8 条命令、20 条结果,请求体上限 24MB。App 成功后 400ms 轮询,网络错误指数退避至 5s;令牌失效(401/403)即停止并提示重新导入。host.id)变化即围栏在途命令。人工接管的 generation/epoch/30 秒续期语义与单台电脑时一致,接管记录以 desktop:<hostKey>:<resource> 区分。http:// 登录)时,App 保存的电脑配置自动带 allowInsecureLan: true,与 Runner 规则一致;公网部署应使用 HTTPS 并把域名加入外网访问地址。登录凭据只走该服务器地址,密码不落盘。tests/server/desktopHosts.test.ts(注册令牌一次性、准入与协议头、撤销围栏)、tests/server/desktopEnvironments.test.ts(消息来源解析、离线不回退、全局权限、文件与屏幕授权独立、并发来源隔离、按机围栏)。desktop/remote-login.test.mjs(地址归一化、账号密码登录的 CSRF/Origin 往返、管理员注册电脑、错误路径)、desktop/host-files.test.mjs(目录内列/读/写、路径与符号链接逃逸拒绝、命令退出码/超时/工作目录)、desktop/host-manager.test.mjs(配置校验、加密导入、交换往返、403 停止、退避重试)、desktop/preferences.test.mjs(启动选择与远程地址偏好持久化)。启动选择/登录窗口需按上述流程手工验收(自动化桌面测试通过 fixture 环境固定走本地路径)。tests/e2e/desktop-hosts.spec.ts(注册/下载/停用;模拟远程电脑连接与电脑面板状态)。真实多机链路需按上述流程手工验收。