这周我开源了一个叫UseAgent的项目,它是我过去几个月里每天工作都在用的东西。简单说,它能把Claude Code、Codex或者OpenCode这些AI编码代理,各自配上一台真实的云电脑。你交给它任务,它交回来的不是聊天记录,而是成品——PR、表格、演示文稿、PDF,甚至还有它自己操作浏览器的屏幕录像。
项目地址在GitHub上,还挂了一个不用注册就能玩的在线演示。这个演示本身才是整个项目里最值得琢磨的工程产物,这个我后面细说。
![]()
把活儿丢给它,然后看着它干
你可以从Web应用或者Slack里丢一个任务过去。它会拿到一个沙盒环境:有终端、有文件系统、还有一个看得见的桌面。你能实时看它打开浏览器、点来点去,也可以不理它,等它干完再看录像回放。它会先做计划,然后一边干一边把进度勾掉。
这个引擎本身是个下拉菜单。每个代理都有自己的"方言":Codex有它的app-server RPC,Claude Code有自己的一套代理协议,OpenCode是个HTTP/SSE服务器,Pi也有自己的RPC。你要是把产品直接跟其中一个绑死,那你的线程、存储、界面就都跟着那个代理的形态走了。
所以UseAgent里定了一条规矩:下游任何东西都不知道现在跑的是哪个引擎。每个引擎都有一个适配器,负责说它的原生协议,然后翻译成一套统一的规范事件流。支持ACP协议的代理也有对应的适配器,但原生驱动才是正路。UI、记忆、产物、Slack——它们只认规范事件。把Claude Code换成Codex,就是个下拉菜单的事,你的线程和文件都不动。
界面本身很小,难的是翻译的保真度:每个工具对工具调用的边界、流式传输、什么叫"干完了",理解都不一样。适配器把这堆烂摊子收在一个地方处理掉。
关键设计:运行记录就是事件日志
大多数代理工具把一次运行当成一个活进程。关掉标签页,过程就丢了。后端中途重启,也没了。在UseAgent里,一次运行就是Postgres里一串只追加的规范事件日志。UI从来不渲染活进程,它渲染的是日志。每一次工具调用、每一次文件变更、每一次状态翻转,都是一行记录,按顺序,永远在。
这一个决定解决了所有其他问题。运行能扛过后端重启。你可以从另一台设备重新连上,线程从游标位置重建。你能审计某个代理上周二到底干了什么,一次工具调用一次工具调用地查。
然后就是那个证明:demo.useagent.org这个演示站是个纯静态网站。没有后端,背后也没有数据库。你点开的每一个会话,都是真实的事件日志在浏览器里回放:时间线、产物、多代理运行,全都有。如果运行记录不是事件溯源架构,这个演示根本不可能存在。我不是为了做营销才搭的演示,我就是把日志导出来,它们直接就能跑。那一刻我就知道,这个架构选对了。
交付的是真文件,密钥不进沙盒
交付物是你能在浏览器里打开编辑的真实文件:带公式的电子表格、PDF、演示文稿、代码。代理用的那台电脑是一次性的,密钥永远不会进到沙盒里。
这个项目最反常识的地方在于:它没有发明新的代理协议,而是把所有现有协议的差异吞进适配器里,让上层只面对一套统一的事件流。结果就是,换引擎的成本低到可以随便试,而运行记录变成了可审计、可回放、可重建的资产。
如果你也在折腾AI代理,值得去GitHub上看看这个项目的适配器是怎么写的——那部分才是真正的工程含量。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.