分支④ 伸进世界的手
这条分支补主干的哪块缺口: 原始模型「什么也碰不到」。光会说不够,agent 要真的跑命令、改代码、点网页。这条分支提供安全可控的执行环境,让模型的「动作」落到真实系统上,又不至于炸掉宿主机或泄露凭据。
1. 这条分支是什么(第一性原理)
分支①给了循环,但循环里那一步「调工具」要落到真实世界:在终端跑 pytest、把文件改掉、在浏览器里点「下单」。这就带来两个新问题:
- 隔离:agent 跑的命令可能删库、可能死循环——得有个沙箱,让它在受控环境里折腾。
- 接口:真实世界(shell、DOM)对人很自然,但对 LLM 是一大坨噪声——得把它整形成模型能稳定操作的表示(这就是 SWE-agent 提出的「agent-计算机接口 / ACI」)。
agent 循环里的「动作」
│
┌───────────┴────────────┐
▼ ▼
代码/终端环境 浏览器环境
跑命令、改文件、改代码 点击、填表、抓数据
│ │
需要:沙箱 + 把 shell/ 需要:把活 DOM 整形成
文件系统整形成 ACI 模型可操作的表示
分支里的库,差别在在哪动手(代码 vs 浏览器)、隔离做到什么程度、接口怎么整形。
2. 分支内有哪几种做法(流派)
伸进世界的手
│
┌────────────────┴───────────────────┐
▼ ▼
代码 / 终端环境 浏览器环境
│ │
┌────┼─────────┬──────────┐ ┌─────┴──────┐
▼ ▼ ▼ ▼ ▼ ▼
沙箱平台 终端agent ACI研究 执行运行时 纯AI循环 确定性优先
openhands opencode swe-agent swe-rex browser-use stagehand
goose mini-swe
- 代码/终端环境:又细分为「带沙箱的平台」(openhands) 、「面向用户的终端 agent」(opencode、goose)、「ACI 研究」(swe-agent、mini-swe-agent)、「把执行抽成可并行运行时」(swe-rex)。
- 浏览器环境:分「纯 AI 观察-规划-行动循环」(browser-use)与「确定性优先、AI 只补缺口」(stagehand)。
3. 对比矩阵(子库区别,逐格接地)
3.1 代码 / 终端环境
| 库 | 隔离/运行模型 | 接口整形(ACI) | 一句话差异 | 代码锚点 |
|---|---|---|---|---|
| openhands | Docker 沙箱 + 事件流(action/observation 可重放日志) | microagents / 仓库上下文加载 | 把执行做成「可重放的事件流」,沙箱边界即架构 | (TODO: 待 openhands 子库 doc;openhands/ controller/events/runtime) |
| opencode | 终端编码 agent 的循环/工具/会话 | 消费 AGENTS.md、支持 agent-skills | 「开源版终端编码 agent」,provider 无关;dev 分支高频变动 | (TODO: 待 opencode 子库 doc;根 README + AGENTS.md) |
| goose | 本地优先运行时,扩展=MCP server | recipe 打包可复用工作流 | 本地优先 + MCP 原生;同时是分支①的工程化运行时 | (TODO: 待 goose 子库 doc;crates/goose*) |
| swe-agent | 研究级、config 驱动 | 提出 ACI 概念:为 LM 塑形工具与反馈 | 学术原型,主打可复现基准跑分,执行后端接 SWE-ReX | (TODO: 待 swe-agent 子库 doc;config/ YAML) |
| mini-swe-agent | 每条命令开新 subprocess(无常驻 shell) | 极简:只有 bash | 极简对照组,证明「无状态 shell」也能在 SWE-bench 上得分 | src/minisweagent/agents/default.py:38 DefaultAgent |
| swe-rex | 把「在某处跑命令」抽象成会话运行时(local/Docker/Modal/Fargate) | runtime/ 管交互式会话(超时、提示符检测) | 把 agent 逻辑与执行基建解耦,支持大规模并行会话;本身不是安全边界 | src/swerex/deployment/(docker.py、modal.py、fargate.py),runtime/ |
3.2 浏览器环境
| 库 | 怎么把网页给模型 | 控制姿态 | 一句话差异 | 代码锚点 |
|---|---|---|---|---|
| browser-use | 把活 DOM 抽成带索引的可操作元素表示 | observe → plan → act 的纯 AI 循环,带恢复 | 主打「让 AI 自己开浏览器干多步任务」;提示+DOM 序列化驱动大部分行为 | (TODO: 待 browser-use 子库 doc;browser_use/agent/、dom/、controller/) |
| stagehand | 在 Playwright 上加 act/extract/observe,用 a11y 树 | 确定性优先,AI 只补脚本搞不定的步;可退化回纯 Playwright | 面向 CI 的可重复自动化;extract 用 zod schema 校验 | (TODO: 待 stagehand 子库 doc;monorepo handlers 在 packages/core/lib/v3/handlers/) |
4. 模式与权衡
- 隔离强度 ≠ 框架给的。 openhands 的 Docker 沙箱是真边界;swe-rex 卡片明说它本身不是安全边界,隔离来自所选后端;browser-use 卡片明说凭据与沙箱卫生在你。别假设框架替你扛安全。
- ACI 是真变量。 同一个模型,工具/反馈整形得好不好,跑分差很多——这是 swe-agent 的核心论点。mini-swe-agent 用「无状态 shell + 极简工具」做下限对照,告诉你哪些复杂度其实可砍。
- 逻辑与基建解耦。 swe-agent / swe-rex 的拆分(agent 逻辑 vs 执行运行时)是可复用的工程模式:换执行后端(本地→云)不动 agent 逻辑。
- 浏览器:纯 AI vs 确定性优先。 browser-use 灵活但不稳、贵;stagehand 把 AI 当「补丁」、能退回确定性脚本,换来 CI 可重复性。选哪个看你要「探索性任务」还是「稳定流程」。
5. 趋势
- 沙箱标准化、可并行化:swe-rex 把「在哪跑命令」抽象成统一接口(local/Docker/Modal/Fargate),agent 集群化执行成为可能。
- AGENTS.md / skills 成为 agent 读取项目上下文的约定:opencode、goose 都在 dogfood 这套约定(详见分支⑤与姊妹货架 ai-protocol-reference)。
- 浏览器从「纯 AI」回摆到「混合」:stagehand 的确定性优先姿态反映出生产环境对可重复性的需求。
6. 代表作 + 深入
- 要带沙箱的开源编码 agent 平台 → openhands(事件流 + Docker)。
- 要把执行抽象成可并行运行时 → swe-rex(
src/swerex/)。 - 要看「最小可工作的编码 agent 执行模型」 → mini-swe-agent(无状态 shell)。
- 要让 agent 操作浏览器 → browser-use(纯 AI、探索性)或 stagehand(确定性优先、CI 友好)。
- 要本地优先、MCP 原生的运行时 → goose。