在构建生产级 AI Agent 时,安全架构的选择直接影响系统的风险边界。传统的做法将 Agent 循环(harness)与执行环境(sandbox)置于同一容器内,但这种方法在多用户场景下面临凭证泄漏、状态冲突和沙箱逃逸等严峻挑战。Mendral 提出的 Harness 外置架构提供了一种更安全的工程化路径,其核心思想是将循环逻辑保留在可信的后端,仅将隔离的执行任务委托给沙箱。
两种架构的根本差异
Agent harness 是驱动 LLM 执行的核心循环:发送提示词、获取响应、执行工具调用、反馈结果,周而复始直至任务完成。架构的选择在于这个循环运行在何处。
Harness inside sandbox模式下,循环与代码运行在同一容器内,LLM 调用从容器内部发出,工具调用(bash、read、write)在本地执行,技能和内存以文件形式存储在容器的文件系统上。这接近于在个人笔记本上运行 Claude Code 的实现方式,单用户场景下简单直接。
Harness outside sandbox模式下,循环运行在后端服务器上,当需要执行工具时,通过 API 调用沙箱。沙箱运行工具并返回结果,但循环本身从不进入沙箱。这一架构带来根本性的安全属性变化。
凭证隔离:安全的第一道防线
将 harness 置于沙箱外的首要安全收益是凭证保护。在外置架构中,循环持有 LLM API 密钥、用户令牌、数据库访问凭证,而沙箱仅包含 Agent 完成任务所需的环境。这意味着沙箱内不存在可供逃逸获取的权限凭证,也无需在沙箱内部维护复杂的权限模型。
工程实现上,Mendral 采用代理注入模式:来自沙箱的出站 API 请求被主机端的代理拦截,由代理在请求中注入认证头部,凭证从未进入沙箱内部。这种设计确保即使沙箱被攻破,攻击者也无法获取长期凭证。
网络隔离进一步强化了这一优势。每个沙箱拥有独立的隔离网络,流量通过主机强制的代理路由,沙箱之间的通信以及沙箱到主机本地网络的访问被默认阻断。这种多层防御确保即使沙箱内代码被恶意控制,其行为仍被限制在受限的网络边界内。
进程特权分离与沙箱逃逸缓解
沙箱逃逸是 AI Agent 系统的核心威胁。外置架构通过进程特权分离降低了逃逸收益:当循环位于沙箱外时,攻破沙箱只能获取沙箱内部的临时计算资源,而无法直接控制 Agent 的推理过程或访问长期存储。
在技术实现层面,沙箱采用微虚拟机(如 Firecracker)或强隔离的容器运行时,拥有独立的内核或坚固的隔离边界,与主机不共享内存或进程空间。沙箱以最小权限运行,仅拥有执行任务所需的受限能力集。
针对 bash 工具可能绕过虚拟化层的问题,Mendral 采用双重防御:系统提示明确告知 Agent 不要对虚拟化命名空间使用 bash,同时使用树 - sitter 解析 bash 调用以捕获对受保护路径的访问。这不是绝对安全的解决方案,但在实践中足以应对大多数情况。
沙箱生命周期管理
外置架构还带来了运维层面的安全收益。循环在大多数时间处于暂停状态:LLM 调用期间、工具调用之间、甚至等待 CI 等长时间工作流时。沙箱可以随循环一起挂起,仅在实际需要运行命令时激活。这不仅降低了攻击面,还减少了资源消耗和安全监控的复杂度。
Mendral 使用 Blaxel 实现 25 毫秒的快速恢复,使沙箱能够在 Agent 需要时即时唤醒,而 Agent 甚至无法察觉沙箱曾被挂起。沙箱被视为可销毁的实体:如果某个沙箱在会话中途崩溃,循环可以立即 provision 一个新实例并继续执行,会话本身不受影响。这种 "沙箱即牛"(sandbox as cattle)的理念消除了单点故障。
文件系统虚拟化与多用户场景
多用户场景下,外置架构的另一优势更加突出。多个工程师可能同时使用同一个 Agent 处理同一代码库的不同任务。技能(如团队的分诊 playbook)和内存(如从历史交互中学习的部署惯例)需要在用户之间共享。
如果 harness 运行在沙箱内部,这会演变为分布式文件系统问题:并发写入相同文件需要冲突解决、最终一致性保证和缓存失效策略。而外置架构将技能和内存存储在集中式数据库中,通过路径分发路由器实现单一 API 表面:Agent 调用 read、write、edit 工具时,路径前缀决定了数据来源 ——/workspace/* 路由到沙箱,/skills/* 和 /memory/* 路由到数据库。这种虚拟化保持 Agent 看到的接口与模型训练时一致(read、write、edit),同时将持久化语义转移到后端。
工程实践中的已知挑战
这种架构并非没有代价。开源的 harness 实现大多假设本地文件系统,将循环外置需要自行处理持久化执行。Mendral 选择 Inngest 作为执行框架,每个执行轮次作为检查点,服务器重启后从中断处恢复。路径前缀(/skills/、/memory/)与 Claude Code 的本地布局镜像,这种选择存在风险:一旦上游约定改变,迁移成本不可避免。多用户并发更新内存时的严格可序列化会带来死锁风险,当前采用键级最后写入者胜出策略,对于已知的用例足够,但未来可能出现边界情况。
总体而言,Harness 外置架构代表了 AI Agent 安全工程的重要方向:通过将可信的计算循环与不可信的执行环境彻底分离,结合凭证隔离、进程特权分离和网络 containment,构建多层防御体系。虽然引入了文件系统虚拟化和持久化执行等工程复杂度,但在多用户、高风险的生产环境中,这些付出换取的安全收益远超成本。
资料来源:Mendral 博客《The Agent Harness Belongs Outside the Sandbox》