Even Realities Agent OS
一个面向 Even Realities G2 智能眼镜的 agent 无关 OS:按住说话语音进、分页 HUD 帧出、三个信任级别上的四个进程。大脑在一个 provider 接口后面可插拔——一个约 900 行的自建 agent,唯一持有 LLM 密钥;或一个对接不受控的第三方 OpenClaw 网关的适配器——同一块显示屏同时作为硬件 MCP 接口面暴露,于是任何厂商模型(包括 Claude Code)都能渲染到你正戴着的眼镜上。

576×288 4-bit 画布上的一次真实运行,不是示意图:轮次进行中,状态行显示天气工具正在运行,用户自己的转写在下方。一枚干净的徽标——没有「?」——意味着对端是生产 agent。
详情
语音回路与硬件桥接
工程化完整的可穿戴回路:插件作为带看门狗的哑终端跑在官方 Even App WebView 里;一条 WSS 承载 JSON 渲染帧下行与 16kHz s16le PCM 上行,仅限按住说话,凭可撤销的短时效设备 JWT 运行——凭据永不出服务器。双模型 ASR(faster-whisper tiny 出实时增量,base 出路由所信任的终稿)加领域热词,对照自建的十段真值集压到 CER 0.0085。一次锁竞争排查把松手到出文本从 7.6s 降到 0.4s,做法是把等待与计算拆开(9.5s 锁等待 vs 0.35s 实际解码);实测整轮现在无工具 6.1s、一次工具 11.5s,因为预算按模型往返计数,而不是按工具延迟。
像素级精确的 HUD 排版
对照真值而非字符数重建了排版引擎:在 576×288 4-bit 绿色画布上以真实像素排版(正文 576×216、固定 27px 行、8 行 × 3 页——早先的五行假设浪费了每页的 37%)。字形步进对照官方 pretext 度量库这个外部 oracle 核验——17,025 个码点、820 个换行案例,逐断行位置比对,零偏差——而真实上限其实是 999 UTF-8 字节,不是厂商文档暗示的 1,000 字符。一张实测字形表覆盖其余:HUD 最初用的 13 个字形里有 10 个在 G2 上不存在、会被静默丢弃,现在被丢弃的字形会被报告出来,而不是在设备上凭空消失。
硬件 MCP 接口面与帧租约
把眼镜作为一个标准 MCP 服务器暴露在独立进程里(8 个工具、3 个资源、1 个 prompt),于是任何厂商模型都能写 HUD——只差一条「claude mcp add」。这个进程正是那个什么都不持有的:没有麦克风、没有 ASR、没有设备凭据,能做的恰好是九条控制面路由允许的事。textkit_paginate 完全不需要设备——排版引擎作为纯函数,这是证明一个外来模型真的到达了你的代码的最便宜方式。屏幕同一时刻只有一个所有者:写入走帧租约,落败的客户端拿到带当前持有者与 TTL 的结构化 LEASE_HELD,而不是后写覆盖;人按下按住说话即无条件抢占。四进程端到端套件(真实 MCP 客户端 → 真实 MCP 进程 → 真实网关 → 真实设备 WebSocket)断言帧确实从设备 socket 发出——27/27。
自建 agent,权限靠架构
一个约 900 行手写的 agent 循环(直连 DeepSeek、仅回环监听、LLM 密钥的唯一持有者),带 12 个工具与 7 个技能,守在四道门后:能力枚举只有 READ|WRITE、完全没有 exec 层级;正则路由器在模型见到 prompt 之前就定下技能与它的工具白名单;WRITE 工具在导入时绑定到具体文件,模型给的任何参数都到不了另一条路径;每次调用与每次拒绝都向审计日志追加一行 JSON。正是这个顺序让提示注入在这里结构上无足轻重——注入的句子到达时已在用户轮次内,路由早已冻结了工具集。一条硬换来的规则:路由判意图,技能判可行性。当路由还在试图判可行性时,agent 对其实能服务的请求回答「我还不能设置提醒」——声称自己做不了其实做得到的事,与凭空编造是同一类失败。provider 接口的存在是因为现在确实有两个实现,不是为了未雨绸缪,而这个拆分看得见谁拥有小屏契约:第三方后端不受控,所以网关得替它注入样式头,自建 agent 则把这份契约放在自己的系统提示词里——无论哪条路,markdown 都在排版层被剥掉,作为第二道防线。它的协议还补上了第三方 v3 缺少而眼镜确实需要的三样东西:一个工具状态事件(没有它,HUD 会停在「thinking 12s」上,不知道有工具在跑)、一个按轮次的延迟预算(在 HUD 上,慢即是坏——超预算就降级收尾而不是干等)、以及握手时返回的溯源。真实 agent 端到端:对在线 DeepSeek 23/23,断言工具确实运行、审计轨迹确实落盘。
验证与诚实的屏幕
590 条网关 pytest + 82 条插件 vitest + 32/32 语音端到端 + 27/27 MCP 四进程 + 23/23 真实 agent 端到端,接进 CI 并带一条刻意的绊线:若排版 oracle 被跳过,构建直接失败,而不是在没有关键 claim 的情况下绿着通过。两条约定让这些数字有意义——每个新测试都做变异检查(故意弄坏代码;若它还能通过,它只是装饰);测测试夹具而不是测代码的测试被当作比没有测试更糟,起因是一个回归套件仅仅因为提前取消了尚未启动的任务而通过。demo 里没有任何东西是 mock 的:真实麦克风、真实 faster-whisper、真实 DeepSeek、真实的 Open-Meteo 与 Frankfurter 调用——仓库里唯一被替换的输入是 demo 音频。而且屏幕不许说谎:非生产对端戴「?」徽标,被预算截断的回答以「… (cut off)」结尾而不是完成标记,从未到达的遥测返回 null,而不是一个看似合理的电量数字。


















