跳到主要内容
· 阅读需 7 分钟

Managed Agents Harness 架构与选择

xfgong
CubePlex
Managed Agents Harness 架构与选择

云端 Agent 平台有两种常见架构。一种把 Claude Code、Codex 或 OpenCode 这类现成 Harness 放进 Sandbox,VibeKit 和 LiteLLM Agent Platform 是代表,Buzz 也在复用这些 Harness。另一种把 Agent loop 留在控制面,Sandbox 只承担执行,Claude Managed Agents 和 OpenHands 采用这类边界,Manus 与 Perplexity Computer 也更接近集中调度的产品形态。前一种适合有明确起止的自动化任务,后一种更适合持续数周或数月、等待事件并服务多个用户的 Managed Agent。

Harness 的位置决定 Agent 的生命周期

Harness 负责保存上下文、发起模型请求、处理 tool call,并决定下一步动作。重试、审批、预算和子 Agent 调度也在这一层。判断它位于哪里,只需看谁持有上下文并发起下一轮模型调用。Sandbox 提供文件、进程、浏览器和网络等执行资源。

Managed Agents 的两种 Harness 运行架构

本文把 Sandbox 统一视为提供命令、文件、进程和状态生命周期的隔离执行资源,不重复比较容器、Kubernetes 与 MicroVM 的资源模型。不同 Sandbox 实现的调度、暂停、恢复和快照语义,可参考上一篇文章《OpenSandbox 与 CubeSandbox 选型》

Sandbox 内 Harness 适合单次任务

Sandbox 内 Harness 的优点很实在。Shell、文件、PTY 和浏览器都在本地,工具调用不经过远程协议。代码索引、大文件处理和长时间终端进程也不需要反复传输结果。平台还能把 Harness、依赖和工作区固定在同一个镜像里,运行环境容易复现,也方便交付到客户 VPC。

这套结构最适合一次任务对应一个运行环境。修一个 issue、生成一份报告、执行一轮数据处理,都有明确的开始和结束。任务完成后销毁 Sandbox,状态恢复和版本迁移都很少成为主要问题。多租户隔离也容易理解,每个任务或用户得到独立容器即可。

长期运行会改变这些条件。Agent 可能等待审批,几小时后接收 webhook,下周继续同一个项目。Harness 留在 Sandbox 内时,平台只能持续保留环境,或者把进程、上下文和工作区一起暂停。文件系统快照只能保存一部分状态,待处理的 tool call、PTY、本地服务和模型循环仍要恢复。

Harness 版本也会散落在大量存量 Sandbox 中。修复一个权限问题以后,平台需要迁移或终止旧实例。模型密钥和外部工具凭据进入执行环境后,不可信代码与 Harness 进程又处于同一个故障边界。短期 token 和凭据代理可以降低风险,系统复杂度也随之增加。

长期 Agent 需要独立状态

控制面 Harness 可以在没有 Sandbox 的情况下保存 Agent。对话、memory、预算、审批状态和运行事件继续存在,执行环境则按需要创建。Agent 等待消息或定时器时不占用 Sandbox;下一次运行可以连接原工作区,也可以从快照创建新环境。

有些步骤根本不需要执行环境。模型可以读取已经整理好的上下文,调用远程 MCP,或者等待用户确认。文件操作也可以先落到虚拟文件系统,真正需要 Shell、浏览器或本地进程时再申请 Sandbox。Agent 的持续存在不再等于一台机器持续运行。

故障恢复也会简单一些。Sandbox 崩溃时,Harness 仍然保留已经完成的步骤和最后一次 observation。控制面可以换一台机器继续执行。Harness worker 自身故障时,则通过 event log、checkpoint 和 lease 在其他 worker 恢复。Agent 状态与执行环境有了各自的故障边界。

这套架构的代价是远程执行协议。Shell、文件、PTY、浏览器和流式日志都要通过 API 表达。网络中断可能让控制面不知道命令是否已经完成,协议必须提供幂等键、租约、心跳、重连和明确的命令状态。大文件与长日志还需要对象存储或引用传递。控制面也会成为多租户共享故障域,需要限制单个 Agent 的并发、上下文内存、模型请求和事件写入。

多 Sandbox 属于控制面

长期 Agent 经常需要多个执行环境。代码 Agent 可以让几个 Sandbox 分别尝试不同修复方案,再比较测试结果。测试任务也可以并行使用不同操作系统、依赖版本和浏览器。浏览器登录环境、代码工作区和 GPU 任务还可能需要不同的网络与凭据策略。

控制面 Harness 可以直接管理这些资源租约,记录每个分支的状态和预算,处理取消、部分失败与结果合并。Sandbox 内 Harness 当然也能申请其他 Sandbox,但它随后要持有调度权限,并在一个临时执行环境里承担资源管理职责。长期运行以后,平台通常还是要在外部补上任务表、调度器、审批服务和恢复状态。

平台也可以给 Sandbox 内 Harness 增加外部 checkpoint、完整内存快照、凭据代理和 session scheduler,再让一个 session 跨 Sandbox 恢复。Perplexity 的 SPACE 就展示了 session 与单个 Sandbox 分离、暂停和分叉的设计。走到这一步,长期状态和资源编排已经回到 Sandbox 外,系统开始具备控制面 Harness 的主要特征。

云端 Harness 的 Sandbox 生命周期与并行编排

管控能力应留在控制面

多用户 Agent 平台需要统一管理身份、权限、审批、预算和审计。Harness 在控制面时,这些规则可以在发起模型请求和执行工具前统一检查。模型密钥与长期凭据也可以留在受管服务中,Sandbox 只拿到一次操作需要的短期权限。

Sandbox 仍然要限制网络出口和文件访问。控制面 Harness 也会接收仓库、网页和工具返回的不可信内容,prompt injection 依然可能诱导它调用高权限工具。Harness 的位置不会自动解决安全问题,它只是让策略有一个稳定的执行位置。

对单次自动化任务,最短路径依然是把成熟 Harness 放进 Sandbox。对长期 Managed Agent,用户、会话与权限都持续存在,Sandbox 只是偶尔使用的计算资源。后者更需要一个独立于执行环境的控制面。

CubePlex 的架构选择

CubePlex 选择控制面 Harness 与独立 Sandbox。CubePi 管理 Agent loop、上下文、MCP 路由、审批和 trace,Sandbox 提供隔离的 Shell、文件、浏览器与产物执行环境。高频本地操作可以交给 Sandbox 内的受限 worker,Agent trajectory、长期凭据和审批状态仍由控制面持有。

一次任务可以绑定一台 Sandbox。长期 Managed Agent 应当持续存在,并在需要执行时租用 Sandbox。这是 CubePlex 选择控制面 Harness 的原因。

参考资料

开源项目

把 Agent 接进团队的日常工作

CubePlex

面向团队的自托管 AI Agent 工作空间,用来处理文档、数据和跨系统任务,并统一管理权限与执行记录。

查看 CubePlex 源码

CubePi

高性能、可追踪、生产级持久化的 Python 原生异步 Agent 框架。

查看 CubePi 源码