Skip to main content
沙箱系统让 Agent 的操作(文件读写、Shell 命令)在隔离环境中执行,而不是直接在宿主机上运行。每个 Thread 在其生命周期内绑定到同一个沙箱。

提供商对比

提供商隔离方式费用适用场景
Local无(直接在宿主机)免费开发、可信代码
Docker容器免费测试、可复现环境
Daytona云端或自建免费(自建)生产、团队环境
E2B云端$0.15/小时临时任务、CI
AgentBay阿里云¥1/小时中国区域

快速开始

1

配置提供商

在 Web UI 进入设置 → 沙箱,展开对应提供商的卡片,填写必填字段:
提供商必填字段
Docker镜像名称、挂载路径
E2BAPI Key
DaytonaAPI Key、API URL
AgentBayAPI Key
点击保存,配置存储到 ~/.leon/sandboxes/<provider>.json
2

启动沙箱 Thread

在新建会话页面,从输入框的沙箱下拉菜单中选择提供商,发送第一条消息。该 Thread 之后所有运行均在同一个隔离环境中进行。
3

监控资源

进入资源页面(侧边栏),查看各沙箱的 CPU/RAM/磁盘实时指标和文件浏览器。

提供商配置

Docker

需要宿主机安装 Docker,无需 API Key。
{
  "provider": "docker",
  "docker": {
    "image": "python:3.12-slim",
    "mount_path": "/workspace"
  },
  "on_exit": "pause"
}
字段默认值说明
docker.imagepython:3.12-slim使用的 Docker 镜像
docker.mount_path/workspace容器内的工作目录
on_exitpausepause(保留状态)或 destroy(清空)

E2B

云端沙箱,需要 E2B API Key。
{
  "provider": "e2b",
  "e2b": {
    "api_key": "${E2B_API_KEY}",
    "template": "base",
    "cwd": "/home/user",
    "timeout": 300
  },
  "on_exit": "pause"
}
安装 E2B 扩展:uv sync --extra e2b

Daytona

支持 Daytona SaaS 和自建实例。
{
  "provider": "daytona",
  "daytona": {
    "api_key": "${DAYTONA_API_KEY}",
    "api_url": "https://app.daytona.io/api",
    "cwd": "/home/daytona"
  },
  "on_exit": "pause"
}
安装 Daytona 扩展:uv sync --extra daytona

AgentBay

阿里云沙箱,适用于中国区域。
{
  "provider": "agentbay",
  "agentbay": {
    "api_key": "${AGENTBAY_API_KEY}",
    "region_id": "ap-southeast-1",
    "context_path": "/home/wuying"
  },
  "on_exit": "pause"
}
安装 AgentBay 扩展:uv sync --extra sandbox

API Key 解析顺序

  1. 配置文件字段(e2b.api_keydaytona.api_key 等)
  2. 环境变量(E2B_API_KEYDAYTONA_API_KEYAGENTBAY_API_KEY
  3. ~/.leon/config.env

会话生命周期

空闲 → 激活 → 暂停 → 销毁
on_exit行为
pause退出时暂停,下次使用时恢复。文件、包、进程全部保留。
destroy退出时销毁,下次使用时全新创建。
默认为 pause — 跨重启保留所有状态。

通过 Web UI 管理会话

资源页面:
  • 统一网格展示所有提供商的所有会话
  • 点击会话卡片 → 详情面板(指标 + 文件浏览器)
  • 通过 UI 或 API 暂停 / 恢复 / 销毁

API 接口

操作接口
列出会话GET /api/sandbox/sessions
暂停POST /api/sandbox/sessions/{id}/pause?provider={type}
恢复POST /api/sandbox/sessions/{id}/resume?provider={type}
销毁DELETE /api/sandbox/sessions/{id}?provider={type}
获取指标GET /api/sandbox/sessions/{id}/metrics

架构

沙箱是中间件栈之下的基础设施层:
Agent
  ├── sandbox.fs()    → 文件系统后端(供文件系统中间件使用)
  └── sandbox.shell() → 命令执行后端(供命令中间件使用)
中间件负责策略(校验、路径规则、安全钩子)。沙箱后端负责I/O(操作真正在哪里执行)。切换后端只会改变执行位置,不影响任何中间件逻辑。 会话跟踪存储在 SQLite(~/.leon/sandbox.db):
用途
sandbox_leases租约生命周期 — 提供商、期望状态/实际状态
sandbox_instances提供商侧的会话 ID
abstract_terminals绑定到 Thread + 租约的虚拟终端
lease_resource_snapshotsCPU、内存、磁盘指标