为什么我们选了 gRPC,而不是 ACP
在把桌面端接到 agent 的过程中,有人提出了一个问题:既然 Agent Client Protocol(ACP)就是为「UI 与 agent 通信」这件事而生的,我们为什么还要手写一套 gRPC 协议?这个质疑很合理。答案并不是 ACP 不好——而是我们的两个硬性要求恰好落在 ACP 的能力边界之外:一个 agent 要同时服务多个客户端,而我们需要的流式能力,gRPC 原生具备、ACP 却几乎没有。 整份契约就是一个 1272…
4 篇
在把桌面端接到 agent 的过程中,有人提出了一个问题:既然 Agent Client Protocol(ACP)就是为「UI 与 agent 通信」这件事而生的,我们为什么还要手写一套 gRPC 协议?这个质疑很合理。答案并不是 ACP 不好——而是我们的两个硬性要求恰好落在 ACP 的能力边界之外:一个 agent 要同时服务多个客户端,而我们需要的流式能力,gRPC 原生具备、ACP 却几乎没有。 整份契约就是一个 1272…
FutureOS 的每一张产品截图和演示视频——包括本博客里的配图——都是对着 mock 数据、在无头 Chrome 里驱动真实 React UI 渲染出来的。没有显示器、没有运行中的应用、没有手画的 mockup。同一套工具还兼任 UI 回归测试。
对用户的承诺只有一句话:agent 不该碰你没允许的东西。兑现它却需要三套完全不同的操作系统机制——Seatbelt、Bubblewrap,以及受限令牌加 NTFS ACL——外加一份诚实的清单,列出哪些地方承诺无法完全兑现。
FutureOS Mobile 通过一个 NATS 中继来控制你桌面上的会话。这个中继在公网上,所以必须按「它是恶意的」来设计——它可以丢弃、重排、重放、伪造消息,但绝不能读到一条命令、也不能伪造出一条被端点接受的命令。下面是 v2 通道如何用 Noise 握手和 ChaCha20-Poly1305 记录层做到这一点的。