返回博客列表

agentd 深度解析:把桌面 OS 变成 Agent 的 HTTP API,以及它留下的三个好问题

2026-10-05T18:00:00+08:00
agentdAgentSeaComputer UseAI Agent虚拟机自托管开源

agentd 深度解析:把桌面 OS 变成 Agent 的 HTTP API,以及它留下的三个好问题

让 Agent 会用鼠标键盘不难。难的是它点错之后,你能知道它点了什么。

这篇文章要聊的 agentd,和这几天写过的项目不太一样:它只有 45 stars、3 forks、4 个 open issue,最后一次提交停在 2025 年 5 月 29 日——到现在一年零四个月。没有 release,没有 CI 徽章,README 里的文档链接指向 docs.hub.agentsea.ai。

所以先说清楚定位:这不是一篇"推荐你用"的文章。 它更像一份设计案例——一个早期就对准"让 AI 操作桌面"这个问题的项目,在 2024 年初就把 VM 镜像、HTTP API 和动作录制三件事凑齐了。它停下来之后,这三个决定依然值得拿出来看,因为它们正好是今天 computer use 类产品最容易做错的地方。

先看它到底做了什么。

本文提纲

  1. 它是什么:把桌面变成一组 HTTP 端点
  2. 设计决定一:以 VM 为边界,而不是在你的机器上开权限
  3. 设计决定二:扁平 API,而不是会话协议
  4. 设计决定三:录制即审计
  5. 生态位置:AgentDesk、surfkit,以及这个组织的重心转移
  6. 如果你今天就要这个能力:三条路线与取舍

它是什么:把桌面变成一组 HTTP 端点

它自我描述只有一行:

AgentD makes a desktop OS accessible to AI agents by exposing an HTTP API.

展开就是:在一台 Ubuntu 22.04 机器上跑一个守护进程,通过 HTTP 暴露鼠标、键盘、浏览器、截图四类能力,让 Agent 像操作 GUI 一样操作这台机器。更高的抽象层留给另一个项目 AgentDesk(226 stars,"A desktop for AI agents")。

它的分发方式很能说明设计意图:它不主要靠 pip 安装,而是发虚拟机镜像。

  • QEMU:agentd-jammy.qcow2
  • AWS:公开 AMI ami-01a893c1530453073
  • GCE:公开镜像 ubuntu-22-04-20240208044623
  • 自建:curl -sSL https://raw.githubusercontent.com/agentsea/agentd/main/remote_install.sh | sudo bash

起一台 QEMU 虚拟机的命令是这样的(注意端口转发):

qemu-system-x86_64 -nographic -hda ./agentd-jammy.qcow2 \
  -m 4G -smp 2 -netdev user,id=vmnet,hostfwd=tcp::6080-:6080,hostfwd=tcp::8000-:8000,hostfwd=tcp::2222-:22 \
  -device e1000,netdev=vmnet -cdrom cidata.iso

8000 是 API,22(映射到宿主 2222)是给你 SSH 进去看的,6080 是留给图形界面的通道。用户和 SSH key 通过 cloud-init 注入,不需要手动配置系统:

#cloud-config
users:
  - name: agentsea
    sudo: ['ALL=(ALL) NOPASSWD:ALL']
    groups: sudo
    ssh_authorized_keys:
      - your-ssh-public-key

设计决定一:以 VM 为边界,而不是在你的机器上开权限

这是我今天最想强调的一点,因为它和这几天的几条新闻正好形成对照。

同一个问题——"怎么让 Agent 操作图形界面"——2026 年有几种答案。Octop 直接在控制台里做远程桌面,把你自己的宿主机桌面暴露给 Agent;Claude Code Mods 让插件能画界面、甚至起进程(而且明确不在沙箱里);云厂商的方案大多是把 browser/computer use 做成托管服务。

agentd 的答案更保守也更干净:不给你的机器开权限,而是把一台一次性虚拟机交给 Agent。

  • 它是可抛弃的:跑坏了就删掉重建,你的开发机不受影响;
  • 它是可重建的:镜像是打包产物(仓库里有 make pack),环境漂移被消掉;
  • 它是可审计的:因为一切都在那台虚拟机里发生,你的宿主机只是 SSH 进去旁观。

代价也很清楚:重。 要给 Agent 分配几 GB 内存和一块磁盘,启动要几十秒;而且它的镜像是 2024 年的 Ubuntu 22.04(jammy),今天看已经偏旧。但在"Agent 操作失误的爆炸半径"这个维度上,VM 边界是比"在宿主机加审批弹窗"强得多的默认值——审批靠你盯着,VM 靠物理隔离。

设计决定二:扁平 API,而不是会话协议

它的 HTTP 面非常"笨",笨得刚好适合 Agent:

类别 端点
健康检查 GET /health
鼠标 GET /mouse_coordinates、POST /move_mouse、POST /click、POST /double_click、POST /drag_mouse、POST /scroll
键盘 POST /type_text、POST /press_key
浏览器 POST /open_url(Chromium 系)
屏幕 POST /screenshot(返回 base64 图片)

每个端点都是无状态的一次调用:给坐标、给文本、给按键,返回 {"status": "success"} 或错误信息。没有 session、没有"先建立通道再协商能力"的握手,也没有需要保持的长连接。

为什么这值得单独说?因为它把最难的部分留给了模型,而不是协议。Agent 要做的是"看截图 → 决定点哪里 → 点 → 再看截图"这个循环,如果协议本身还需要维护状态机和重连逻辑,模型每一次决策都要额外承担协议复杂度。扁平的 REST 端点意味着:任何能发 HTTP 请求的 Agent 框架都能立刻上手,不需要为它写 SDK。

这也是它的局限:POST /open_url 只负责开一个 URL,页面里的元素识别、等待加载、处理弹窗,全都得靠调用方自己看截图判断。它提供的是"手和眼",不是"理解"。

设计决定三:录制即审计

这是整个 README 里我最喜欢的一部分,也是它比同时代很多 demo 想得更远的地方——它内置了一个动作录制子系统:

端点 作用
POST /recordings 开始一次录制会话
GET /recordings 列出所有录制
POST /recordings/{session_id}/stop 停止并保存
GET /recordings/{session_id} 查看某次录制信息
GET /recordings/{session_id}/event/{event_id} 取出单个事件
DELETE /recordings/{session_id}/event/{event_id} 删除单个事件
GET /recordings/{session_id}/actions 取出该会话的全部动作
GET /active_sessions 列出所有活跃录制会话

把这件事想清楚:computer use 最大的工程难题不是"怎么点对",而是"点错之后怎么复盘"。 一次失败的自动化任务,如果你只有最终截图,几乎无法定位是哪一步偏了;有了逐事件的动作流,你能像看飞行记录仪一样回放"第 7 步点在了弹窗关闭按钮上,于是后面全错"。

而且它把事件删除也做成了 API——这暗示了一个工作流:录完之后由人去删掉误操作或含敏感数据的片段,再把这批动作当作训练/演示数据留下来。这个思路放到今天,正好对应"从真实操作里蒸馏技能"那类自进化方向。

它还提供了开发侧的打包与运行入口:

make pack      # 重新打包一套镜像
make run-jammy # 从仓库直接跑起来

生态位置:AgentDesk、surfkit,以及这个组织的重心转移

agentd 不是孤立的。同一个组织(AgentSea)里有一套围绕 computer use 的布局:

  • agentdesk(226 stars)——"A desktop for AI agents",是 agentd 之上更高层的桌面抽象,agentd 的 README 直接推荐"想要更高层接口就用它";
  • surfkit(196 stars)——"A toolkit for building computer use AI agents",也就是往上再一层的 Agent 框架;
  • 更早还有 taskara(任务管理,16 stars)、nebulous(分布式容器编排,54 stars)等。

分层其实很清晰:agentd 是"手和眼"(设备层)→ AgentDesk 是"桌面"(界面抽象)→ surfkit 是"会用桌面的 Agent"(框架层)。

但要注意现实:这三个仓库的最后提交分别停在 2025 年 5 月、7 月和 6 月。而这个组织并没有停下——它把重心转到了别处,最新活跃的仓库是 nautilo(170 stars,2026-10-03 仍有提交,自我描述是"AI goes multiplayer,一个人和机器共存的自托管工作空间"),以及 flashbacker(Claude Code 会话状态管理,57 stars)、documentor 等。

所以对 agentd 的结论应该是:当作设计参考读,不要当生产依赖用。 依赖一个 16 个月没更新、4 个 open issue 悬着、只支持 Ubuntu 22.04 云镜像的守护进程,风险不在代码质量,而在没人接安全补丁。

如果你今天就要这个能力:三条路线与取舍

agentd 提出的问题今天依然成立,只是可选答案变多了。按"隔离强度"排序:

路线一:自己搭一台 VM,跑截图 + 输入 API。 也就是 agentd 的思路,但用你自己维护的镜像。适合需要长期跑批量 GUI 任务的团队。成本是镜像维护和启动时间,收益是爆炸半径最小、可随时重建。

路线二:用现成平台的远程桌面/浏览器能力。 比如 Octop 控制台里的 remote desktop 和 Browser AI+、各家云厂商的托管 computer use。省掉镜像维护,代价是你把宿主环境的操作权交给平台,且要审它的权限模型(Octop 的远程桌面同样意味着 Agent 可以操作宿主机)。

路线三:只做浏览器,不做桌面。 如果你的目标 90% 是网页表单、截图、抓取,CDP 直连的浏览器自动化(比如 agentd 同门的 octop-browser,或者任何基于 CDP 的方案)比整套桌面控制轻一个量级,也更稳。

一条判断标准:先问"它操作失误的后果由谁承担"。 如果后果是"你的开发机被改乱",就必须走路线一;如果只是"一次网页任务失败重跑",路线三足够。

参考链接

让 Agent 操作 GUI,你更愿意给它一台虚拟机,还是在宿主机上加审批?评论区聊聊你的底线,觉得这种"考古式设计分析"有用就点个赞。


作者: itech001 来源: 公众号:AI人工智能时代(the-ai-era) 网站: https://www.theaiera.top/ 关注每日最新AI新闻和技术博客,主页有更多的文章的AI 技术参考:https://www.theaiera.top

本文首发于 AI人工智能时代,转载请注明出处。

分享给朋友