犀牛鸟 2026 研究笔记 estelledc.github.io

Coding Agent 沙箱对照:从沙箱赛道视角看生产 Agent

调研时间:2026-06-22 | 环境:macOS arm64,无 KVM 本篇从沙箱隔离技术视角对照生产 Coding Agent,补 A 线盲区(密度、microVM 需求、隔离层级差异)


一句话定位

同一个问题——「AI 生成的不可信代码该怎么安全执行」——Codex 用 OS 沙箱、Claude Code 用权限分类器、Cursor 用用户确认、E2B/CubeSandbox 用 microVM。本篇从隔离层级、启动成本、多实例密度三个维度做系统对照。

Harness 内沙箱调用见 Codex 沙箱精读 / Claude Code 工具与权限 CubeSandbox 架构概览见 精读: cubesandbox(已有)


日常类比

想象你是一个快递站站长,每天收到大量来路不明的包裹(Agent 生成的代码),需要拆包检查(执行)。不同的安全策略对应不同的成本和安全等级:

类比边界:真实的代码执行比拆包裹复杂得多——代码可以创建文件、发网络请求、spawn 子进程,每个动作都需要独立的安全判定。


全维度对比表

维度 Codex Claude Code Cursor E2B CubeSandbox
隔离层 L2 OS 进程沙箱 L0-L2 应用层权限+OS级 L0 应用层 L4 云端 microVM L4 自托管 microVM
隔离机制 Seatbelt(Mac)/bwrap+seccomp(Linux) Permission classifier+hook+Bash限制 终端命令确认框 Firecracker KVM RustVMM KVM
默认网络 三模式可控(disabled/enabled/proxy) 策略+PreToolUse hook 用户确认 隔离(云端VPC) CubeEgress eBPF
冷启动 <10ms(进程fork) <10ms(进程内) <10ms(进程内) ~150ms(云端VM) 60ms(CoW预池)
单实例内存 ~0(共享进程) ~0(共享进程) ~0(共享进程) 未公开(云端) <5MB
并行规模 subagent(单机数十个) Swarm/Workflow(百级) 低(单会话) 云弹性扩展 高密度本机(千级)
文件快照 git worktree git 云端快照 CubeCoW(毫秒级)
自托管 是(CLI) 是(CLI) 否(商业产品) 复杂(Terraform) (一键部署)
E2B 兼容 原生 兼容
代码执行 API 无(通过Bash) 无(通过BashTool) 无(通过终端) SDK原生 SDK(E2B兼容)
攻击面 中(内核共享) 弱(无内核隔离) 弱(无隔离) 小(独立VM) (独立VM)

关键问题一:何时 OS sandbox 够用,何时必须 microVM?

这是隔离技术选型的核心分歧。

OS sandbox 够用的场景(Codex 路线)

Codex 的沙箱设计思路是「OS 进程级隔离 + 策略控制」[已有] deep-dive-codex-sandbox:

够用的条件:代码在单一信任域内执行(同一个用户的代码)、不需要强多租户隔离、不需要完整的内核独立。Codex 的典型场景是「开发者自己的代码在自己的机器上跑」——攻击者和受害者是同一个人,OS sandbox 主要防的是误操作和 prompt 注入导致的意外命令。

必须 microVM 的场景(E2B/CubeSandbox 路线)

当满足以下任一条件时,OS sandbox 不够 [社区]

  1. 多租户:不同用户的代码在同一台机器上执行——内核共享意味着内核漏洞可以跨租户攻击
  2. 不可信代码源:代码来自外部(用户上传、AI 生成后未经人类审查直接执行)——攻击面包含 LLM 被 prompt 注入后生成的恶意代码
  3. 合规要求:金融/医疗等行业要求 VM 级隔离,OS namespace 隔离不满足审计标准
  4. 内核 exploit 防护:Linux 内核每年有数十个 CVE,共享内核意味着沙箱逃逸攻击面持续存在

分水岭判断:如果你的 Agent 只执行自己生成的代码、在单用户环境下运行、不暴露给外部输入,Codex 的 OS sandbox 够用。如果你要做一个”代码执行即服务”(像 E2B 那样给第三方 Agent 调用),microVM 是最低安全标准。


关键问题二:并行密度与 Swarm/Workflow 的需求

Claude Code 的并行架构 [已有]

从 A 线 多 Agent 编排 的研究,Claude Code 有四层递进的多 Agent 模式:

  1. Subagent:派生一次性子 agent,共享同一个进程
  2. Coordinator:通过环境变量激活多 agent 协调
  3. Swarm/Teams:三种后端(in-process/tmux/iTerm2),文件邮箱通信
  4. Dynamic Workflow:JS 脚本编排百级 subagent

关键观察:Claude Code 的并行全部在 L0(应用层) 进行——子 agent 之间没有内核级隔离,共享同一个文件系统和网络栈。这在开发者自用场景下没问题,但如果要把这个架构用于多租户生产环境,每个 subagent 都需要独立的隔离容器。

CubeSandbox 的密度优势

CubeSandbox 的 <5MB 单实例内存意味着 [源码] [已有]

对比其他方案:

方案 单实例内存 64GB 机器理论上限 实际可行
CubeSandbox <5MB ~12,000 千级
Firecracker <5MB ~12,000 千级
Kata Containers 10-30MB ~2,000-6,000 百级
Docker(无额外隔离) ~10MB ~6,000 千级(但隔离弱)
gVisor 低(进程级) 千级(但 syscall 兼容风险)

Dynamic Workflow 场景:如果未来的 Agent 编排需要「同时跑 100 个 subagent,每个都在独立沙箱里」,CubeSandbox 的密度优势是决定性的——100 个实例只需要 500MB 内存。Kata Containers 同样的规模需要 1-3GB。


关键问题三:Claude Code 有独立 microVM 吗?

结论:没有 [已有] [源码]

从 A 线精读可知,Claude Code 的安全模型是四层纵深防御:

  1. System Prompt 层(指令约束)
  2. Permission Rules 层(.claude/settings.json 配置)
  3. Tool 层(每个工具的 isReadOnly() / needsPermissions() 声明)
  4. 用户确认层(interactiveHandler 的 4 源竞赛判定)

这四层全部在 应用层和用户态 运行——没有 KVM、没有 namespace、没有 seccomp。Claude Code 执行 Bash 命令时,命令直接在用户的 shell 环境里跑,没有额外隔离。

与 CubeSandbox 的差异

维度 Claude Code CubeSandbox
隔离实现层 应用逻辑(L0) 硬件虚拟化(L4)
内核共享 是(与宿主机共享) 否(独立 guest kernel)
逃逸风险 中(依赖分类器准确性) 极低(需要 KVM exploit)
灵活性 极高(任何命令都能跑) 受限于沙箱模板
用户体验 无感(像本地开发) 有 API 调用开销

Claude Code 的策略是「信任但验证」——通过 classifier 和 hook 过滤危险操作,而不是阻止所有操作。CubeSandbox 的策略是「默认不信任」——所有代码都在隔离的 VM 里跑,即使有恶意行为也无法影响宿主机。两种策略的适用场景不同,不是简单的优劣关系。


Agent Harness 到沙箱的调用路径

graph TD
    AGENT[AI Agent / Harness] --> REQ{代码执行请求}

    REQ -->|"Codex 路线"| OS[L2: OS Sandbox<br>bwrap + seccomp]
    REQ -->|"Claude Code 路线"| PERM[L0: Permission Classifier<br>→ BashTool 直接执行]
    REQ -->|"E2B 路线"| CLOUD[L4: 云端 microVM<br>Firecracker + API]
    REQ -->|"CubeSandbox 路线"| LOCAL[L4: 自托管 microVM<br>RustVMM + E2B SDK]

    OS --> EXEC1[执行结果]
    PERM --> EXEC2[执行结果]
    CLOUD --> EXEC3[执行结果]
    LOCAL --> EXEC4[执行结果]

    OS -.->|"A 线已有"| CODEX_DOC["deep-dive-codex-sandbox.md"]
    PERM -.->|"A 线已有"| CLAUDE_DOC["deep-dive-claude-code-tools-permissions.md"]
    CLOUD -.->|"C 线已有"| E2B_DOC["sandbox-deep-dive-e2b.md"]
    LOCAL -.->|"C 线已有"| CUBE_DOC["sandbox-deep-dive-cubesandbox.md"]

    style OS fill:#e3f2fd
    style PERM fill:#fff3e0
    style CLOUD fill:#e8f5e9
    style LOCAL fill:#fce4ec

Codex 的 OS 沙箱与 microVM 的具体差异

从隔离技术视角补充 A 线盲区:

启动成本

Codex 的 sandbox 启动是进程级的——fork() + 设置 namespace/seccomp/Landlock 策略,总耗时 <10ms [已有]。CubeSandbox 的 60ms 虽然是 microVM 中最快的,但仍然是 Codex 的 6 倍。

影响:在交互式 Agent 场景下(用户等待每一步执行结果),10ms 和 60ms 的差异可以忽略。在批量执行场景下(Agent 连续发起 100 个命令),差异累积到 5 秒 vs 0.5 秒——仍然可接受。真正的差异在于 microVM 的首次 boot(冷启动),CubeSandbox 通过 CoW 预池化把这个成本压到了 60ms。

多实例密度

维度 Codex OS sandbox CubeSandbox microVM
每实例额外内存 ~0(共享进程空间) <5MB(独立 VM)
每实例额外 CPU ~0 vCPU 分配
内核独立性 否(共享宿主内核) 是(独立 guest kernel)
文件系统隔离 namespace(视图隔离) 完全独立(virtio-blk)
适合并行数 无上限(受进程数限制) 千级(受内存限制)

网络 egress 策略

维度 Codex CubeSandbox
实现层 sandbox policy(disabled/enabled/proxy) CubeEgress(eBPF + OpenResty)
粒度 三档(全禁/全开/代理) 域名级过滤、凭据注入、审计日志
可配置性 启动时固定 运行时动态调整
绕过风险 低(OS 级) 极低(eBPF 内核级 + VM 隔离)

与 6 开源项目的关系映射

                    ┌──────── 引擎层 ────────┐
                    │ Firecracker (L4 引擎)   │
                    │ gVisor Sentry (L1 引擎) │
                    └─────────┬──────────────┘
                              │ 构建于
            ┌─────────────────┼─────────────────┐
            │                 │                   │
     ┌──────▼──────┐  ┌──────▼──────┐  ┌────────▼────────┐
     │ E2B (L3 云) │  │ CubeSandbox │  │ Kata (L4 OCI)  │
     │ 云端 API    │  │ (L4 自托管) │  │ K8s 安全容器    │
     └──────┬──────┘  └──────┬──────┘  └─────────────────┘
            │                 │
            └────── SDK ──────┘  E2B SDK 兼容
                    兼容

     ┌─────────────────────────────────────────────────────┐
     │            Agent 内建沙箱(非独立项目)              │
     │  Codex (L2 OS)    Claude Code (L0 Permission)      │
     │  Cursor (L0 确认)  Daytona (L3 容器级三层)          │
     └─────────────────────────────────────────────────────┘

核心发现总结

  1. OS sandbox vs microVM 的分水岭是多租户和信任边界——单用户自用场景 Codex 的 L2 方案够用,多租户代码执行服务必须 L4

  2. Claude Code 没有独立 microVM,完全依赖应用层权限控制。安全模型的核心假设是「代码由可信 LLM 生成,用户在场监督」

  3. CubeSandbox 的密度优势在 Agent 并行场景下是决定性的——<5MB/实例让千级并行在单机上可行,这是 Codex 的 OS sandbox(共享进程,无密度问题但安全弱)和 Kata(10-30MB/实例)都无法匹敌的安全-密度组合

  4. E2B SDK 正在成为事实标准——CubeSandbox 选择兼容而非另起炉灶,让 Agent 框架可以零改动从 E2B 切换到 CubeSandbox

  5. 启动成本差异在实际场景中可忽略——60ms vs <10ms 在交互式 Agent 使用中感知不到,但在高频批量执行中会累积


证据等级

结论 等级 来源
Codex 三平台 OS 沙箱机制 [已有] A 线 deep-dive-codex-sandbox.md
Claude Code 四层权限 [已有] A 线 deep-dive-claude-code-tools-permissions.md
Claude Code 多 Agent 编排 [已有] A 线 deep-dive-claude-code-multi-agent.md
CubeSandbox <5MB / 60ms [已有] [源码] sandbox-deep-dive-cubesandbox.md + README
E2B Firecracker 底层 [已有] sandbox-deep-dive-e2b.md
E2B SDK API 面 [已有] sandbox-unresolved-deep-dive.md
Cursor 无 microVM [社区] cursor.com/docs(终端确认机制)
Agent 并行密度推算 [推断] 基于 5MB × N 计算,未经生产验证
Claude Code 无 VM 隔离 [源码] [已有] A 线 tools-permissions 精读