问题域/PD-05

沙箱隔离

Sandbox Isolation

Agent 执行代码时如何隔离环境,防止宿主机污染。安全性和便利性的平衡。

子问题

1.代码执行隔离:用户代码在沙箱中运行,不影响宿主机

2.文件系统隔离:Agent 只能访问指定目录

3.网络隔离:限制 Agent 的网络访问范围

4.资源限制:CPU、内存、执行时间的限制

5.环境一致性:沙箱环境与目标环境的一致性

6.变量声明作用域泄露:vm.Context 中 const/let 不挂全局,需 AST 转 globalThis

7.跨 turn 状态传递:沙箱每次执行需要访问上一次的返回值和持久化数据

8.工具热更新与不可变冲突:内置工具不可覆盖但 Action 列表需要动态更新

9.LLM 代码围栏剥离:LLM 输出常带 markdown 代码块标记需要预处理

10.Symlink 逃逸防护:共享依赖的 symlink 可能 resolve 到 workspace 外部

11.Session 恢复隔离:崩溃 session 的 workspace 和 runtime 需要独立恢复而非重建

12.Hash 命名空间碰撞:多 orchestrator 实例共享同一台机器时的 tmux/目录名冲突

13.长命令传输截断:tmux send-keys 对超过 200 字符的命令会截断,需要 load-buffer 绕过

14.双运行时切换:如何在 subprocess 和容器沙箱间无缝切换,保持工具接口一致

15.VNC GUI 沙箱:容器内运行浏览器自动化和 GUI 应用的远程桌面方案

16.异步并发限流:高并发下如何限制同时运行的 subprocess 数量,避免进程爆炸

17.产物回收:沙箱中生成的文件需要下载到宿主机才能提交评估

18.迭代超限兜底:Agent 达到步数上限时自动扫描并提交已有产物

19.参考文件双写:任务附件需同时存在于宿主机和沙箱中

20.二进制文件安全:下载 PNG/DOCX 等二进制文件需用 bytes 模式防止损坏

21.自定义模板预热:高频依赖包预装到镜像避免运行时安装延迟

22.大文件传输:base64 编码后超过 ARG_MAX 限制需要 heredoc stdin 绕过

23.timeout 向后兼容:旧版 Backend 不支持 timeout 参数需要 inspect.signature 运行时检测

24.模板自动创建:沙箱模板不存在时需要自动创建而非报错

25.setup script 宿主机变量展开:${VAR} 需在宿主机侧解析避免在沙箱内暴露环境变量获取能力

26.跨平台命令过滤:同一黑名单需覆盖 POSIX(rm -rf)和 Windows(del /f)命令变体

27.双系统独立防御:MCP Server 和 Agent 框架各自实现安全检查,如何保持一致性

28.导入控制:限制代码可 import 的模块,防止调用危险 API

29.意图转代码隔离:LLM 将用户意图转为代码再执行,避免直接注入

30.跨进程沙箱发现:多 worker 进程需要找到同一 thread 的已有沙箱,避免重复创建

31.多运行时适配:同一代码需要在 macOS Apple Container、Docker、K8s 三种运行时下工作

32.空闲沙箱回收:守护线程定期扫描超时沙箱的轮询间隔与误杀风险

33.信号链式传递:自定义 SIGTERM handler 清理后需恢复原始 handler 避免吞信号

34.环境变量引用解析:配置中 $VAR 引用需在容器启动前从宿主机 env 解析

35.健康检查轮询:容器启动后 wait_for_ready 的超时与轮询间隔平衡

36.路径前缀重叠:repo_root 尾部与输入路径头部相同时的歧义解析

37.子代理递归生成:子代理若能 spawn 新子代理会导致无限递归资源耗尽

38.Kernel 死亡恢复:Jupyter Kernel 崩溃后如何快速重建并恢复执行上下文

39.编辑语法防护:LLM 生成的代码编辑可能引入语法错误,需要 lint 前后对比和自动回滚

40.输出截断策略:成功输出取头部、错误输出取尾部,不同截断方向影响 LLM 理解

41.GPU VRAM 自适应:不同显存容量需要不同的 batch size 和 memory utilization 参数

42.区域感知镜像:模型下载源在不同地区不可达,需要双镜像策略

43.多加速器适配:同一代码需支持 CUDA/MPS/NPU/GCU/MUSA/MLU/SDAA 七种加速器

44.推理并发控制:GPU 推理请求并发过高导致 VRAM OOM,需要请求级限流

45.容器 daemon 腐败恢复:Apple Container daemon 异常时自动降级到 Docker

46.确定性镜像重建:用户删除本地镜像后根据配置哈希自动重建

47.host fallback 包安装:无容器运行时时在 Debian host 上直接 apt-get 安装

48.秘密值编码泄露:LLM 可能通过 base64/hex 编码绕过 raw 值脱敏

49.容器代际命名冲突:stale 容器占用名称时通过代际后缀避免阻塞

50.配置漂移检测:运行中容器的配置与期望配置不一致时如何感知和修复

51.浏览器隔离:Agent 控制的浏览器需要独立网络和认证机制

52.工具访问控制:沙箱内 Agent 可使用的工具需要细粒度 allow/deny 策略

53.沙箱池化冷启动:idle queue 为空时创建新沙箱的延迟优化

54.执行队列过载:高并发下队列满时的请求拒绝与反压策略

55.大代码传输:超过 shell 参数长度限制的代码需要文件中转

56.S3 凭证生命周期:沙箱内临时凭证的写入时机与自动清理

57.暂停态恢复:paused 沙箱 reconnect 后的状态一致性验证

58.字符串匹配绕过:excludeTools 基于简单字符串匹配,命令变体(如双空格、别名)可绕过黑名单

59.多入口配置一致性:CLI flag、环境变量、settings.json 三入口需要统一的优先级解析,避免配置冲突

60.macOS 原生沙箱与 Docker 沙箱的能力差异:两种运行时的隔离粒度和文件系统行为不同

61.先保存后禁用:猴子补丁禁用 API 后临时目录清理函数也失效,需提前保存引用

62.平台 rlimit 差异:macOS 不支持 RLIMIT_AS 导致内存保护层在开发机上失效

63.eval 表达式沙箱:推理时计算器需要比 exec 更轻量的隔离(空 builtins + 白名单)

64.幂运算拒绝服务:9**9**9 等指数爆炸表达式需要在 eval 前显式拦截

各项目的解法18 solutions

Signals

横向对比

维度DeerFlowMiroThinkerAIRIAgent-OrchestratorAgentScopeClawWorkDeepAgentsDeepCodeDeepResearchDeepTutorFastCodeMetaGPTMinerUMoltisOpenClawReflyiflow-clinanochat
隔离级别Provider+Sandbox 双层抽象(Local subprocess / Aio Docker)E2B 云沙箱(完全隔离)Node.js vm.Context 进程内隔离,无 require/process 访问进程级:git worktree 文件隔离 + tmux/child_process 进程隔离,无容器subprocess 进程隔离 + 可选容器隔离(agentscope-runtime)E2B 云 VM 级隔离,代码在独立虚拟机执行远程容器/VM 级隔离,四种云提供商(Daytona/LangSmith/Modal/Runloop)进程级软隔离:subprocess + Path.resolve() 边界检查,无容器进程级:subprocess.run + tempfile 临时目录,生产环境叠加 Docker 容器应用层路径检查 + 命令正则黑名单,无 OS 级隔离三层递进:subprocess 进程级 → Jupyter Kernel 级 → Docker 容器级Docker 容器级隔离,无进程级沙箱四后端:Docker 容器、Apple Container VM、Linux cgroup v2、NoSandbox 直通Docker 容器级:read-only root + cap-drop ALL + no-new-privileges + 独立浏览器容器Scalebox 云沙箱进程级隔离 + S3 FUSE 文件系统隔离Docker 容器级隔离,shell 命令和文件修改在容器内执行multiprocessing.Process 进程级隔离,无容器/VM
虚拟路径/mnt/user-data/* 双层翻译 + 输出反向翻译无(直接操作沙箱内路径)无虚拟路径,Agent 直接操作真实 worktree 路径无虚拟路径翻译,Agent 直接使用沙箱内真实路径无虚拟路径,直接使用真实路径 + startswith 前缀检查无虚拟路径翻译,直接使用 allowed_roots 白名单校验真实路径无虚拟路径,直接用 repo_root 前缀检查 startswithWorkspaceConfig 统一 workspace 路径,SWE_CMD_WORK_DIR 限制操作范围沙箱内固定 /home/sandbox,host 绝对路径被拒绝或重写双向翻译:host↔container 路径通过挂载点匹配,支持 workspace/agent/bind 三种挂载源tempfile.TemporaryDirectory 临时目录,执行后自动删除
生命周期管理SandboxMiddleware 懒初始化 + 空闲超时回收 600s每任务独立实例 + DEFAULT_TIMEOUT=600sSession Manager 正序创建逆序销毁 + 每步回滚 + restore 恢复临时文件自动清理(TemporaryDirectory),进程执行后立即销毁SessionSandbox 单例 + 任务级 cleanup + 会话级 reset 双层清理SandboxProvider.get_or_create + delete,context manager 自动清理,条件清理(只删自己创建的)无显式生命周期,workspace 随进程存在,tempfile 用后即删懒初始化 + TemporaryDirectory 上下文管理器自动清理工具实例随 AgentLoop 创建,子代理工具随任务创建销毁ExecuteNbCode 三态管理 build/terminate/reset,DataInterpreter 结束时显式 terminateCompose profiles 按需启动,restart: always 自动恢复SandboxRouter per-session 路由 + FailoverSandbox 自动降级配置 hash 驱动重建 + JSON registry 持久化 + 空闲24h/存活7天自动修剪Redis idle queue 池化 + BullMQ auto-pause/kill 调度默认禁用,显式启用;预构建镜像 + 按需自定义构建一次性进程:每次 execute_code 创建新进程,执行完即销毁
防御性设计结构化异常体系(SandboxError 层级)INVALID_SANDBOX_IDS 黑名单 + 结果/错误截断deepFreeze+toStructuredClone 双重冻结,数据完全只读SAFE_PATH_SEGMENT 白名单 + symlink 双重路径校验 + hash 碰撞检测UTF-8 强制编码,无缓冲输出(-u),terminate 优雅终止健康检查探活 files.list('/') + 死沙箱自动重建双层防御:MCP 字符串黑名单 + Nanobot 正则黑名单 + 路径遍历检测三层纵深:ImportGuard(AST) + 路径白名单 + subprocess 超时PathUtils 异常默认拒绝 + deny_patterns 8 类危险命令forbidden_commands 命令黑名单 + flake8 lint guard 编辑回滚 + 输出截断防 token 溢出路径遍历过滤 + UUID 目录隔离 + 后台自动清理SSRF DNS 解析后 IP 检查 + CIDR 白名单 + 三重编码 secret 脱敏5 层纵深防御:bind 黑名单 + symlink 逃逸防护 + env 清洗 + 网络/seccomp/apparmor 校验三层分布式锁 + 队列过载保护 + 资源限制四维度三层纵深:Docker 隔离 + 工具过滤 + Hook 拦截,文档警告黑名单可绕过三层纵深:API 猴子补丁(30+函数) + rlimit 内存 + 双重超时
代码修复validate_and_fix() LLM 自动修复(最多 2 次)TypeScript AST 规范化 const→globalThis,表达式自动 return无自动代码修复,依赖 Agent 自身能力无自动代码修复,执行失败返回错误由 Agent 自行重试无自动修复,execute_python 失败后由 LLM 迭代修改代码ToolAgent 检测 exit_code 失败后添加错误前缀提示路径修正无自动代码修复,EditFileTool 仅做唯一性检查edit_linting.sh 编辑前后 flake8 对比,新增语法错误自动回滚到备份热容器保护:5 分钟窗口内不自动重建,提示 CLI 命令手动操作ModuleNotFoundError 自动安装缺失包后重试无自动修复,仅返回 ExecutionResult 供调用方判断
资源限制750ms 超时 + 5 次/turn 动作数上限超时保护(默认 300s),无内存/CPU 限制(需自行添加 rlimit)默认 30 分钟执行超时(_default_timeout=1800s),execute_accepts_timeout 兼容旧版后端RLIMIT_AS/DATA/STACK 三重 256MB + 5s 超时,macOS 跳过 rlimit
工具访问控制工具层统一入口:5 个 @tool 函数均经过 ensure_sandbox_initialized 门控两层注入:内置不可变 + Action 可热更新,Zod schema 校验无沙箱内工具限制,Agent 拥有 workspace 内完整权限配置驱动:restrict_to_workspace 开关统一控制文件和 shell 工具子代理裁剪 message/spawn/cron,prompt+工具双重限制SWE-Agent 命令集白名单(open/edit/search/submit),Terminal forbidden_commands 黑名单ApprovalManager 对非沙箱命令做人工审批,沙箱内跳过glob 模式 allow/deny 列表,agent > global > default 三级优先级BuiltinExecuteCode 工具级 allow/deny + 预装包白名单coreTools 白名单 + excludeTools 黑名单 + ShellTool(cmd) 命令级粒度
导入控制vm.Context 天然隔离,无 require/import 可用sys.modules 置 None 禁用 5 个模块(ipdb/joblib/resource/psutil/tkinter)
Scope 粒度线程级隔离:每个 thread_id 独立 workspace/uploads/outputs 三目录单 vm.Context 实例复用,mem 对象跨 turn 持久化per-session:每个 Issue/任务一个独立 worktree + runtime会话级单例,同一任务多次调用共享文件系统workspace 级别,所有工具共享同一 workspace 边界workspace 级别,restrict_to_workspace 布尔开关控制按角色分层:Engineer 用 subprocess,DataInterpreter 用 Kernel,SWE-Agent 用 TerminalSession/Agent/Shared 三级 scope + per-session override三种模式:session(每会话)/ agent(每 Agent)/ shared(全局共享)用户+画布级锁隔离,同一画布串行执行Sub Agent 级权限继承控制(isInheritTools/isInheritMcps)
输入过滤extractJavaScriptCandidate 剥离 markdown 代码围栏无输入过滤,直接执行用户代码(依赖 LLM 生成安全代码)base64 编码防止 shell 注入,shlex.quote 转义 grep 参数,路径验证(partner 包检查 startswith /)engine.py 计算器用字符白名单+危险模式黑名单+方法白名单三重过滤
上下文持久化FileSandboxStateStore JSON + fcntl,预留 Redis 扩展点mem 对象 + prevRun.returnRaw 跨 turn 传递状态无状态,每次执行独立进程,不保留全局变量沙箱内文件跨调用持久,uploaded_reference_files 字典跟踪HomePersistence 三模式:Off/Session/Shared,host 目录 bind mountCodeContext ID 跨调用变量持久 + 优雅降级到无状态
双层沙箱无双层,单层 vm.Context + 应用层防御execution.py 进程沙箱(评估) + engine.py eval 沙箱(推理计算器)
跨进程发现确定性 ID(sha256(thread_id)[:8])+ FileSandboxStateStore + fcntl 文件锁Hash 命名空间 + metadata flat-file 实现跨进程 session 发现不涉及:MCP Server 和 Nanobot 是独立进程,各自管理 workspace不涉及,单进程内 asyncio 任务管理SandboxRouter 集中管理所有 session 的沙箱状态,无需跨进程发现
多运行时支持自动检测 Apple Container / Docker,K8s 通过 RemoteSandboxBackend + Provisioner插件化:tmux 和 process 两种 runtime,通过 YAML 配置切换subprocess(开发)+ Docker/K8s(生产)双运行时四种远程沙箱提供商统一为 SandboxBackendProtocol,BaseSandbox 模板方法使子类只需实现 execute()支持 Docker Compose 部署,但沙箱逻辑不区分运行时不涉及,纯 Python 应用层实现subprocess 本地执行 + Docker 容器部署,无 K8s/Apple Container 原生支持7 种加速器自动检测:CUDA/MPS/NPU/GCU/MUSA/MLU/SDAAauto_detect_backend 自动探测 Apple Container → Docker → NoSandbox单一 Scalebox 云运行时,双模板 executor/interpreterDocker + macOS 原生沙箱(.sb profile),双运行时适配
跨平台命令过滤无命令过滤,postCreate 钩子以 trusted config 身份执行无命令黑名单,依赖操作系统权限控制deny_patterns 同时覆盖 POSIX 和 Windows 命令模式deny_patterns 同时覆盖 POSIX rm/dd 和 Windows del/rmdirTerminal 区分 win(cmd.exe)/unix(bash),forbidden_commands 统一拦截
异步并发全异步设计(asyncio),支持高并发执行
结构化输出XML 标签格式(<returncode><stdout><stderr>),LLM 友好
文件追踪ARTIFACT_PATH: stdout 标记协议 + 扩展名白名单扫描双轨:executor diff 实际追踪 + 正则预测式元数据提取
资源池化空闲超时回收(默认 600s),守护线程 60s 轮询无池化,按需创建单个沙箱,3600s 超时自动回收Semaphore 并发控制,无预创建沙箱池确定性 SHA256 镜像标签避免重复构建,删除后按需自动重建Redis idle queue + auto-pause 2min + 最大10沙箱池
产物回收机制WrapUp LangGraph 工作流:扫描→LLM选择→下载→提交upload_files/download_files 批量操作,支持 partial success,FileOperationError 标准化错误码
自定义模板Pydantic SandboxConfig 12 字段,image/mounts/environment 全可配gdpval-workspace 预装 20+ 包,基于 220 任务分析定制LangSmithProvider 自动检测并创建模板(DEFAULT_TEMPLATE_NAME + python:3 镜像)双区域 Dockerfile 模板,构建时模型预热.iflow/sandbox.Dockerfile + BUILD_SANDBOX=1 自动构建
配置驱动选择resolve_class 动态加载 Provider,切换模式只改 config.yamlprovider 字符串参数选择后端,_get_provider 工厂延迟导入,_PROVIDER_TO_WORKING_DIR 映射工作目录环境变量驱动设备/VRAM/并发参数,支持运行时覆盖CLI flag / 环境变量 / settings.json 三入口,6 级优先级链
健康检查echo ready 轮询,2s 间隔,timeout//2 次重试,失败则删除沙箱并 raise RuntimeErrorDocker healthcheck curl /health,30s 间隔 3 次重试遥测系统追踪 sandbox_enabled 状态,OpenTelemetry + Jaeger 可视化
大文件传输heredoc + base64 双重编码绕过 ARG_MAX 限制,支持 >100KB 文件的 write/edit/read
双系统独立防御FastCode PathUtils 和 Nanobot allowed_dir 各自独立实现路径检查
路径重叠解析resolve_path 智能去重,处理 repo_root 与输入路径前缀重叠
GPU自适应资源VRAM 检测 → 动态 batch size + memory utilization
区域感知部署global/china 双 Dockerfile + 双模型源
容器代际命名Apple Container 冲突时 bump_container_generation 追加 -g{N} 后缀

最佳实践

1.双层抽象是最佳实践:Provider 管生命周期、Sandbox 管操作,DeerFlow 的模式值得借鉴

2.虚拟路径必须双向翻译:输入翻译 + 输出反向翻译,否则 Agent 看到真实路径会混乱

3.懒初始化节省资源:不是所有 Agent 都需要沙箱,首次工具调用才创建

4.设置执行超时:MiroThinker 600s、博客场景 30s,防止死循环耗尽资源

5.防御 LLM 幻觉:INVALID_SANDBOX_IDS 黑名单是简单有效的防御手段

6.结果截断保护:输出超过阈值自动截断,避免 token 爆炸

7.toStructuredClone + deepFreeze 双重防护:先切断引用再冻结,比单独使用任一方更安全

8.Zod 校验失败返回结构化错误而非抛异常:让 LLM 代码可以 if(!ok) 做降级处理

9.用 TypeScript AST 做代码规范化比正则替换更可靠:能正确处理解构赋值等复杂语法

10.路径段白名单优于黑名单:SAFE_PATH_SEGMENT 正则只允许安全字符,比过滤危险字符更可靠

11.进程组隔离(detached + kill -pgid)确保 shell 子命令也被终止,不留孤儿进程

12.创建-销毁对称性:正序创建逆序销毁 + 每步失败回滚,防止资源泄漏

13.Symlink 需要双重校验:原始路径不含 .. 且 resolve 后仍在 workspace 内

14.临时文件用 shortuuid 命名:避免并发执行时的文件名冲突

15.强制 UTF-8 编码:PYTHONUTF8=1 + PYTHONIOENCODING=utf-8 解决跨平台字符问题

16.XML 标签输出:比 JSON 更适合 LLM 解析,无需转义特殊字符

17.异步优先设计:全部用 async/await,支持高并发场景

18.ARTIFACT_PATH stdout 协议让 Agent 自主声明产物,比固定目录扫描更灵活

19.健康检查用 files.list('/') 探活比捕获执行异常更快发现死沙箱

20.二进制文件下载必须用 format='bytes',text 模式会损坏 PNG/DOCX

21.迭代超限时用 LLM 分析对话历史选择产物,比全量提交更精准

22.单方法抽象最小化适配成本:BaseSandbox 将 8 个文件操作转为 shell 命令,新提供商只需实现 execute() 约 30 行代码

23.条件清理防止误删共享沙箱:should_cleanup = sandbox_id is None,只清理自己创建的沙箱

24.heredoc 传输绕过 ARG_MAX:用 stdin 而非命令参数传递大文件内容,避免 >100KB 文件操作失败

25.正则黑名单优于字符串匹配:\brm\s+-[rf]{1,2}\b 能匹配 rm -rf 的各种变体,避免简单 in 检查被绕过

26.配置驱动隔离开关:restrict_to_workspace 允许开发时关闭、生产时开启,兼顾便利和安全

27.AST 静态分析 import 白名单是零开销的预执行安全检查,适合补充进程隔离

28.配置加载优先级链(环境变量 > 模块配置 > 全局配置 > 默认值)让同一套代码适配多种部署环境

29.LLM 意图→代码转换比直接执行用户输入更安全,ToolAgent 的 _generate_code_from_intent 模式值得借鉴

30.确定性 ID 是跨进程发现的关键:sha256(thread_id) 让所有进程推导出相同的沙箱标识

31.三层一致性获取(进程缓存→状态存储→后端发现)兼顾性能和正确性

32.技能目录只读挂载(read_only=True)防止沙箱内代码篡改共享资源

33.确定性 ID 是跨进程发现的关键:SHA256(thread_id) 让所有进程推导出相同 sandbox_id

34.三层 fallback 保证一致性:进程缓存 → 文件锁+持久化 → 后端发现,逐层降速但覆盖更广

35.信号处理必须链式调用:保存原始 handler,自身清理后恢复,避免吞掉其他组件的信号

36.配置驱动 Provider 选择:resolve_class 动态加载,开发用 Local、生产用 Aio,零代码切换

37.路径安全检查应集中到一个工具类,避免每个工具重复实现

38.子代理工具裁剪 + prompt 声明形成双重限制,比单一手段更可靠

39.命令黑名单应同时覆盖 POSIX 和 Windows 变体,一份列表跨平台

40.按角色分层选择隔离级别:轻量脚本用 subprocess,交互式分析用 Jupyter Kernel,生产部署用 Docker

41.编辑操作加 lint guard:flake8 前后对比,新增语法错误自动回滚,防止 LLM 破坏代码

42.输出截断要区分方向:成功取头部(有用信息在前)、失败取尾部(错误信息在后)

43.构建时预下载模型到镜像层,运行时设置 MODEL_SOURCE=local 实现零网络依赖启动

44.ENTRYPOINT 使用 exec "$@" 透传模式,让 Compose 的 entrypoint+command 灵活覆盖

45.VRAM 检测支持环境变量覆盖,方便在 CI/CD 或虚拟化环境中模拟不同显卡

46.Compose profiles 将多服务声明在同一文件中按需启动,比多个 compose 文件更易维护

47.FailoverSandbox 装饰器模式:primary 失败自动切 fallback,一旦降级不再回退

48.SHA256(Dockerfile) 作为镜像 tag:相同配置不重复构建,删除后可自动重建

49.SSRF 检查必须在 DNS 解析后做:直接检查域名无法防御 DNS rebinding

50.secret 脱敏需覆盖 raw + base64 + hex 三种编码:防止 LLM 通过编码变换泄露

51.SandboxRouter 即使 mode=Off 也创建真实后端:per-session override 可能动态启用沙箱

52.配置 hash 检测漂移:SHA256(normalize(config)) 对比容器 label,冷容器自动重建

53.热容器保护窗口:最近使用的容器不自动重建,避免中断正在执行的任务

54.环境变量三层过滤:正则黑名单 + 值校验(null byte/超长/base64)+ 可选严格白名单

55.原子注册表写入:临时文件 + rename 防止并发写入损坏,写锁防止竞态

56.Symlink 逃逸防护:realpathSync 解析符号链接后再次校验黑名单

57.guard().orElse() 链式降级:idle queue 取不到就 create,比 if-else 更优雅

58.三层 defer 嵌套锁保障并发:用户锁→沙箱获取→沙箱锁,自动释放不泄漏

59.双模式代码传输:小代码 Base64 内联,大代码(>64KB)写文件路径引用

60.fire-and-forget 异步清理:失败沙箱通过 BullMQ 异步 kill,不阻塞主流程

61.CodeContext 优雅降级:上下文执行失败自动回退到无状态 sandbox.runCode

62.白名单优于黑名单:coreTools 显式声明可用工具比 excludeTools 排除危险工具更安全,iflow-cli 文档明确警告黑名单可被绕过

63.Sub Agent 权限最小化:安全审计类 Agent 应设 isInheritTools: false 切断继承,仅授予 Read/Grep 等只读工具

64.三层纵深防御:容器隔离 + 工具过滤 + Hook 拦截,任一层被突破仍有其他层兜底

65.双重超时是必须的:进程内信号超时可能被代码捕获,进程外 join+kill 是最终兜底

66.API 猴子补丁按类别组织:进程控制/文件破坏/权限修改/目录逃逸/模块禁用五类分治

67.结构化返回优于布尔值:ExecutionResult 的 timeout/memory_exceeded 字段让调用方能区分失败原因

68.OMP_NUM_THREADS=1 限制线程:防止生成代码通过 OpenMP 并行消耗所有 CPU 核心