← Back to Blog

CubeSandbox — Instant, Secure KVM Sandboxes for AI Agents (Self-Hosted Guide)

CubeSandbox — Instant, Secure KVM Sandboxes for AI Agents

What is CubeSandbox?

CubeSandbox is an open-source, high-performance sandbox service built by Tencent Cloud that launches hardware-isolated MicroVMs for AI agents in under 60 milliseconds. Each sandbox runs its own dedicated Guest OS kernel — no shared kernel, no container escape risks — yet consumes less than 5 MB of memory overhead per instance.

GitHub: github.com/tencentcloud/CubeSandbox
Stars: ⭐ 5,500+
License: Apache 2.0
Language: Rust
Created: April 2026

Why this matters: AI agents executing LLM-generated code need isolation. Docker's shared-kernel approach (namespace isolation) has known escape vectors. Traditional VMs are too slow and memory-heavy to spin up per agent request. CubeSandbox bridges this gap — KVM-level isolation at Docker-level speed and density. It's also a drop-in E2B replacement: swap one environment variable to migrate from the expensive E2B Cloud service to your own self-hosted sandbox.

Key Features

  • <60 ms cold start — Pre-provisioned resource pools and snapshot cloning skip initialization entirely
  • <5 MB RAM per sandbox — Copy-on-Write memory reuse and aggressively stripped runtime
  • True kernel-level isolation — Dedicated Guest OS kernel per sandbox, not shared namespaces
  • E2B SDK compatible — Drop-in replacement. Change E2B_API_URL and you're done
  • eBPF network security — CubeVS enforces inter-sandbox network isolation with fine-grained egress policies
  • One-click deploy — Single-node or multi-node cluster via a single install script
  • PVM support — Runs on ordinary cloud VMs without bare-metal (nested virtualization via page-table-based VM)

Comparison: CubeSandbox vs Docker vs Traditional VMs

Metric Docker Container Traditional VM CubeSandbox
Isolation Level Low (shared kernel) High (dedicated kernel) Extreme (dedicated kernel + eBPF)
Cold Start ~200 ms Seconds <60 ms
Memory Overhead Low (shared kernel) High (full OS) Ultra-low (<5 MB)
Deployment Density High Low Extreme (thousands per node)
E2B SDK Compatible No No ✅ Drop-in

Architecture Overview

CubeSandbox uses a layered architecture built on KVM MicroVMs, with a REST API gateway, cluster orchestrator, and eBPF-powered virtual switch for network isolation.

CubeSandbox Architecture

Here's how the system works:

  1. User/Agent Code calls the E2B SDK, which sends requests to the CubeAPI REST gateway (port 3000)
  2. CubeAPI forwards requests to CubeMaster, the cluster orchestrator that manages resource scheduling and cluster state
  3. CubeMaster dispatches sandbox requests to the appropriate Cubelet (one per compute node)
  4. Cubelet manages the full lifecycle of sandbox instances on its node — creation, execution, teardown
  5. CubeProxy provides reverse proxying and DNS-based request routing to individual sandbox instances
  6. CubeHypervisor & CubeShim form the virtualization layer — managing KVM MicroVMs and integrating with the container runtime via containerd Shim v2
  7. CubeVS (eBPF virtual switch) enforces kernel-level network isolation and security policies between sandboxes
  8. The Resource Pool pre-provisions snapshots for instant sandbox creation via CoW cloning

Prerequisites

  • An x86_64 Linux server with:
    • 4+ CPU cores (8+ recommended)
    • 8 GB+ RAM (16 GB+ recommended for multiple sandboxes)
    • 300 GB+ disk (for sandbox images and templates)
    • Root access
  • Docker and Docker Compose (for CubeAPI, MySQL, Redis dependencies)
  • A domain or IP for accessing the sandbox API
  • For standard cloud VMs: follow the PVM deployment path (no bare-metal required)

Step-by-Step Setup Guide

Step 1: Provision a Server and Install the PVM Kernel

CubeSandbox requires KVM support. Standard cloud VMs (AWS EC2, DigitalOcean, Hetzner) don't expose hardware virtualization — so CubeSandbox provides PVM (Pagetable-based Virtual Machine), a page-table-based nested virtualization framework that works on any cloud VM.

First, provision an x86_64 cloud server running OpenCloudOS 9 (recommended for best compatibility). Log in as root:

sudo su root

Download and install the PVM host kernel from the CubeSandbox Releases page. Find the kernel-*cube.pvm.host*.x86_64.rpm attachment for RPM-based systems:

# Replace with the actual URL from the releases page
wget "https://github.com/TencentCloud/CubeSandbox/releases/download/v0.1.0/kernel-devel-5.14.0_cube.pvm.host.x86_64.rpm"
rpm -ivh --oldpackage kernel-*.rpm

Set the PVM kernel as the default boot entry:

grubby --info=ALL | grep -E "^kernel|^index"
# Find the PVM kernel index, then:
grubby --set-default-index=<INDEX>
grubby --default-kernel

Configure kernel boot parameters:

curl -sL https://github.com/tencentcloud/CubeSandbox/raw/master/deploy/pvm/grub/host_grub_config.sh | bash

Reboot and verify:

reboot

After reboot:

uname -r
# Should contain: cube.pvm.host

modprobe kvm_pvm
lsmod | grep kvm
# Should show kvm_pvm

# Make it persistent
echo 'kvm_pvm' > /etc/modules-load.d/kvm-pvm.conf

Step 2: Install CubeSandbox

Run the one-click installer as root:

curl -sL https://github.com/tencentcloud/CubeSandbox/raw/master/deploy/one-click/online-install.sh | CUBE_PVM_ENABLE=1 bash

This installs:

  • CubeAPI — E2B-compatible REST API on port 3000
  • CubeMaster + Cubelet — cluster orchestration components as host processes
  • CubeProxy — TLS (mkcert) and CoreDNS domain routing (cube.app)
  • CubeShim + CubeVS — virtualization and network isolation layer
  • MySQL + Redis — managed via Docker Compose for internal state

Step 3: Create a Sandbox Template

A template is a pre-built MicroVM image that sandboxes are cloned from. Create one from the official code interpreter image:

cubemastercli tpl create-from-image \
--image cube-sandbox-int.tencentcloudcr.com/cube-sandbox/sandbox-code:latest \
--writable-layer-size 1G \
--expose-port 49999 \
--expose-port 49983 \
--probe 49999

Monitor the build progress:

cubemastercli tpl watch --job-id <job_id>

Wait until the template status shows READY. Note the template ID (template_id) — you'll need it in the next step. The initial image download and extraction may take a few minutes.

Step 4: Run Your First Sandbox

Install the Python SDK (E2B compatible SDK):

pip install e2b-code-interpreter

Set environment variables:

export E2B_API_URL="http://127.0.0.1:3000"
export E2B_API_KEY="dummy"
export CUBE_TEMPLATE_ID="<your-template-id>"
export SSL_CERT_FILE="/root/.local/share/mkcert/rootCA.pem"

Run code inside an isolated sandbox:

import os
from e2b_code_interpreter import Sandbox

with Sandbox.create(template=os.environ["CUBE_TEMPLATE_ID"]) as sandbox:
    result = sandbox.run_code("print('Hello from Cube Sandbox, safely isolated!')")
    print(result.text)

Step 5: Execute Shell Commands

Beyond Python code execution, you can run arbitrary shell commands:

with Sandbox.create(template=os.environ["CUBE_TEMPLATE_ID"]) as sandbox:
# Run shell commands
proc = sandbox.commands.run("uname -a")
print(proc.stdout)

# Install packages
sandbox.commands.run("pip install numpy pandas matplotlib")

# File operations
sandbox.filesystem.write("/tmp/data.txt", "some data")
content = sandbox.filesystem.read("/tmp/data.txt")
print(content)

Step 6: Use with OpenAI Agents SDK

CubeSandbox integrates seamlessly with the OpenAI Agents SDK via the E2BSandboxClient:

from agents import Agent, Runner
from agents.sandbox import E2BSandboxClient
import os

sandbox_client = E2BSandboxClient(
    api_url=os.environ["E2B_API_URL"],
    api_key=os.environ["E2B_API_KEY"],
    template_id=os.environ["CUBE_TEMPLATE_ID"],
)

agent = Agent(
    name="Code Assistant",
    instructions="You write and execute Python code to solve problems.",
    sandbox_client=sandbox_client,
)

result = Runner.run_sync(agent, "Calculate the first 20 Fibonacci numbers and plot them.")
print(result.final_output)

Verification Checklist

  • PVM kernel is active: uname -r contains cube.pvm.host
  • KVM module loaded: lsmod | grep kvm shows kvm_pvm
  • CubeAPI is running: curl -s http://127.0.0.1:3000/health returns 200
  • Template created: cubemastercli tpl list shows a template with READY status
  • Sandbox creates successfully: Python script with Sandbox.create() completes without errors
  • Code execution works: sandbox.run_code("print('hello')") returns the expected output
  • Shell commands work: sandbox.commands.run("echo test") returns stdout
  • File operations work: write/read cycle completes without errors
  • Multiple concurrent sandboxes can be created (test with 3-5 simultaneous requests)
  • Network isolation: one sandbox cannot reach another sandbox's internal IP

Use Cases

AI Agent Code Execution — The primary use case. Let LLM agents execute generated code in isolated MicroVMs without risk of host compromise.

RL Training Environments — CubeSandbox can fork sandboxes at millisecond granularity (event-level snapshot rollback coming soon), enabling rapid exploration environments for reinforcement learning.

Browser Automation — Run headless Chromium inside a sandbox and control it via Playwright/CDP, completely isolated from the host.

SWE-bench Evaluation — Automate coding task evaluation in isolated sandboxes. CubeSandbox ships with a mini-swe-agent integration example.

Multi-tenant Code Execution — Offer a code execution service where each user's code runs in a dedicated kernel-isolated sandbox.

Troubleshooting

"kvm: module not found" after PVM kernel install → Verify you rebooted into the PVM kernel (uname -r). If the old kernel loaded, check GRUB default and reboot again.

Sandbox creation fails with "no template found" → Ensure the template creation completed (cubemastercli tpl watch shows READY). Verify CUBE_TEMPLATE_ID is set correctly.

"Connection refused" when hitting port 3000 → Check CubeAPI is running: systemctl status cube-api. Check logs: journalctl -u cube-api -f.

Sandbox creation timeout → The first sandbox creation downloads the template image and takes longer. Subsequent creations should be instant (<60 ms).

PVM kernel install fails on Debian/Ubuntu → Make sure you're using the .deb package variant from the releases page, not the .rpm.

Resources

← Retour au Blog

CubeSandbox — Des Sandbox KVM Instantanées et Sécurisées pour Agents IA (Guide Auto-Hébergé)

CubeSandbox — Des Sandbox KVM Instantanées et Sécurisées pour Agents IA

Qu'est-ce que CubeSandbox ?

CubeSandbox est un service de sandbox open-source et haute performance développé par Tencent Cloud, qui lance des MicroVMs isolées au niveau matériel pour agents IA en moins de 60 millisecondes. Chaque sandbox exécute son propre noyau Guest OS dédié — pas de noyau partagé, aucun risque d'évasion de conteneur — tout en consommant moins de 5 MB de surcharge mémoire par instance.

GitHub : github.com/tencentcloud/CubeSandbox
Étoiles : ⭐ 5 500+
Licence : Apache 2.0
Langage : Rust
Création : Avril 2026

Pourquoi c'est important : Les agents IA qui exécutent du code généré par LLM ont besoin d'isolation. L'approche noyau partagé de Docker (isolation par namespaces) présente des vecteurs d'évasion connus. Les VM traditionnelles sont trop lentes et gourmandes en mémoire pour être lancées par requête d'agent. CubeSandbox comble ce fossé — isolation niveau KVM à la vitesse et densité de Docker. C'est aussi un remplacement direct d'E2B : changez une seule variable d'environnement pour migrer du service cloud E2B (coûteux) vers votre propre sandbox auto-hébergée.

Fonctionnalités Clés

  • Démarrage à froid <60 ms — Pools de ressources pré-provisionnés et clonage par snapshot qui saute entièrement l'initialisation
  • <5 MB de RAM par sandbox — Réutilisation mémoire par Copy-on-Write et runtime allégé au maximum
  • Isolation noyau réelle — Noyau Guest OS dédié par sandbox, pas de namespaces partagés
  • Compatible SDK E2B — Remplacement direct. Changez E2B_API_URL et c'est tout
  • Sécurité réseau eBPF — CubeVS assure l'isolation réseau inter-sandbox avec des politiques de filtrage egress fines
  • Déploiement en une commande — Nœud unique ou cluster multi-nœuds via un script d'installation
  • Support PVM — Fonctionne sur des VM cloud ordinaires sans bare-metal (virtualisation imbriquée par table de pages)

Comparaison : CubeSandbox vs Docker vs VM Traditionnelles

Métrique Conteneur Docker VM Traditionnelle CubeSandbox
Niveau d'isolation Faible (noyau partagé) Élevé (noyau dédié) Extrême (noyau dédié + eBPF)
Démarrage à froid ~200 ms Secondes <60 ms
Surcharge mémoire Faible (noyau partagé) Élevée (OS complet) Ultra-faible (<5 MB)
Densité de déploiement Élevée Faible Extrême (milliers par nœud)
Compatible SDK E2B Non Non ✅ Direct

Architecture

CubeSandbox utilise une architecture en couches construite sur des KVM MicroVMs, avec une passerelle API REST, un orchestrateur de cluster, et un commutateur virtuel eBPF pour l'isolation réseau.

Architecture CubeSandbox

Voici comment le système fonctionne :

  1. Le Code Utilisateur/Agent appelle le SDK E2B, qui envoie les requêtes à la passerelle REST CubeAPI (port 3000)
  2. CubeAPI transmet les requêtes à CubeMaster, l'orchestrateur de cluster qui gère le scheduling des ressources et l'état du cluster
  3. CubeMaster distribue les demandes de sandbox au Cubelet approprié (un par nœud de calcul)
  4. Cubelet gère le cycle de vie complet des instances sandbox sur son nœud — création, exécution, destruction
  5. CubeProxy assure le reverse proxying et le routage DNS vers les instances sandbox individuelles
  6. CubeHypervisor & CubeShim forment la couche de virtualisation — gestion des KVM MicroVMs et intégration au runtime conteneur via containerd Shim v2
  7. CubeVS (commutateur virtuel eBPF) applique l'isolation réseau et les politiques de sécurité entre sandboxes
  8. Le Pool de Ressources pré-provisionne des snapshots pour une création instantanée de sandbox via clonage CoW

Prérequis

  • Un serveur x86_64 Linux avec :
    • 4+ cœurs CPU (8+ recommandé)
    • 8 Go+ RAM (16 Go+ recommandé pour plusieurs sandboxes)
    • 300 Go+ disque (pour les images et templates de sandbox)
    • Accès root
  • Docker et Docker Compose (pour CubeAPI, MySQL, Redis)
  • Un domaine ou une IP pour accéder à l'API sandbox
  • Pour les VM cloud standard : suivre le chemin de déploiement PVM (pas de bare-metal nécessaire)

Guide d'Installation Pas à Pas

Étape 1 : Provisionner un Serveur et Installer le Noyau PVM

CubeSandbox nécessite le support KVM. Les VM cloud standard (AWS EC2, DigitalOcean, Hetzner) n'exposent pas la virtualisation matérielle — CubeSandbox fournit donc PVM (Pagetable-based Virtual Machine), un framework de virtualisation imbriquée par table de pages qui fonctionne sur n'importe quelle VM cloud.

Provisionnez d'abord un serveur cloud x86_64 avec OpenCloudOS 9 (recommandé pour la meilleure compatibilité). Connectez-vous en root :

sudo su root

Téléchargez et installez le noyau hôte PVM depuis la page CubeSandbox Releases. Trouvez la pièce jointe kernel-*cube.pvm.host*.x86_64.rpm pour les systèmes RPM :

# Remplacez par l'URL réelle depuis la page des releases
wget "https://github.com/TencentCloud/CubeSandbox/releases/download/v0.1.0/kernel-devel-5.14.0_cube.pvm.host.x86_64.rpm"
rpm -ivh --oldpackage kernel-*.rpm

Définissez le noyau PVM comme entrée de démarrage par défaut :

grubby --info=ALL | grep -E "^kernel|^index"
# Trouvez l'index du noyau PVM, puis :
grubby --set-default-index=<INDEX>
grubby --default-kernel

Configurez les paramètres de démarrage du noyau :

curl -sL https://github.com/tencentcloud/CubeSandbox/raw/master/deploy/pvm/grub/host_grub_config.sh | bash

Redémarrez et vérifiez :

reboot

Après le redémarrage :

uname -r
# Devrait contenir : cube.pvm.host

modprobe kvm_pvm
lsmod | grep kvm
# Devrait montrer kvm_pvm

# Rendre persistant
echo 'kvm_pvm' > /etc/modules-load.d/kvm-pvm.conf

Étape 2 : Installer CubeSandbox

Exécutez l'installeur en une commande en tant que root :

curl -sL https://github.com/tencentcloud/CubeSandbox/raw/master/deploy/one-click/online-install.sh | CUBE_PVM_ENABLE=1 bash

Ceci installe :

  • CubeAPI — API REST compatible E2B sur le port 3000
  • CubeMaster + Cubelet — composants d'orchestration de cluster comme processus hôtes
  • CubeProxy — TLS (mkcert) et routage de domaine CoreDNS (cube.app)
  • CubeShim + CubeVS — couche de virtualisation et d'isolation réseau
  • MySQL + Redis — gérés via Docker Compose pour l'état interne

Étape 3 : Créer un Template de Sandbox

Un template est une image MicroVM pré-construite à partir de laquelle les sandboxes sont clonées. Créez-en un à partir de l'image officielle d'interpréteur de code :

cubemastercli tpl create-from-image \
--image cube-sandbox-int.tencentcloudcr.com/cube-sandbox/sandbox-code:latest \
--writable-layer-size 1G \
--expose-port 49999 \
--expose-port 49983 \
--probe 49999

Surveillez la progression de la construction :

cubemastercli tpl watch --job-id <job_id>

Attendez que le statut du template soit READY. Notez le template ID (template_id) — vous en aurez besoin à l'étape suivante. Le téléchargement et l'extraction initiaux de l'image peuvent prendre quelques minutes.

Étape 4 : Lancer Votre Première Sandbox

Installez le SDK Python (SDK compatible E2B) :

pip install e2b-code-interpreter

Définissez les variables d'environnement :

export E2B_API_URL="http://127.0.0.1:3000"
export E2B_API_KEY="dummy"
export CUBE_TEMPLATE_ID="<votre-template-id>"
export SSL_CERT_FILE="/root/.local/share/mkcert/rootCA.pem"

Exécutez du code dans une sandbox isolée :

import os
from e2b_code_interpreter import Sandbox

with Sandbox.create(template=os.environ["CUBE_TEMPLATE_ID"]) as sandbox:
    result = sandbox.run_code("print('Bonjour depuis Cube Sandbox, isolé en toute sécurité !')")
    print(result.text)

Étape 5 : Exécuter des Commandes Shell

Au-delà de l'exécution de code Python, vous pouvez lancer des commandes shell arbitraires :

with Sandbox.create(template=os.environ["CUBE_TEMPLATE_ID"]) as sandbox:
# Exécuter des commandes shell
proc = sandbox.commands.run("uname -a")
print(proc.stdout)

# Installer des paquets
sandbox.commands.run("pip install numpy pandas matplotlib")

# Opérations sur fichiers
sandbox.filesystem.write("/tmp/data.txt", "des données")
contenu = sandbox.filesystem.read("/tmp/data.txt")
print(contenu)

Étape 6 : Utiliser avec OpenAI Agents SDK

CubeSandbox s'intègre parfaitement avec l'OpenAI Agents SDK via E2BSandboxClient :

from agents import Agent, Runner
from agents.sandbox import E2BSandboxClient
import os

sandbox_client = E2BSandboxClient(
    api_url=os.environ["E2B_API_URL"],
    api_key=os.environ["E2B_API_KEY"],
    template_id=os.environ["CUBE_TEMPLATE_ID"],
)

agent = Agent(
    name="Assistant de Code",
    instructions="Vous écrivez et exécutez du code Python pour résoudre des problèmes.",
    sandbox_client=sandbox_client,
)

result = Runner.run_sync(agent, "Calculez les 20 premiers nombres de Fibonacci et tracez-les.")
print(result.final_output)

Liste de Vérification

  • Le noyau PVM est actif : uname -r contient cube.pvm.host
  • Module KVM chargé : lsmod | grep kvm montre kvm_pvm
  • CubeAPI fonctionne : curl -s http://127.0.0.1:3000/health retourne 200
  • Template créé : cubemastercli tpl list montre un template avec statut READY
  • La sandbox se crée avec succès : le script Python avec Sandbox.create() se termine sans erreur
  • L'exécution de code fonctionne : sandbox.run_code("print('hello')") retourne le résultat attendu
  • Les commandes shell fonctionnent : sandbox.commands.run("echo test") retourne stdout
  • Les opérations sur fichiers fonctionnent : cycle écriture/lecture sans erreur
  • Plusieurs sandboxes concurrentes peuvent être créées (testez avec 3-5 requêtes simultanées)
  • Isolation réseau : une sandbox ne peut pas atteindre l'IP interne d'une autre sandbox

Cas d'Utilisation

Exécution de Code par Agent IA — Le cas d'utilisation principal. Laissez les agents LLM exécuter du code généré dans des MicroVMs isolées sans risque de compromission de l'hôte.

Environnements d'Entraînement RL — CubeSandbox peut forker des sandboxes avec une granularité milliseconde (rollback de snapshot au niveau événementiel bientôt disponible), permettant des environnements d'exploration rapide pour l'apprentissage par renforcement.

Automatisation de Navigateur — Exécutez Chromium headless dans une sandbox et contrôlez-le via Playwright/CDP, complètement isolé de l'hôte.

Évaluation SWE-bench — Automatisez l'évaluation de tâches de codage dans des sandboxes isolées. CubeSandbox inclut un exemple d'intégration mini-swe-agent.

Exécution de Code Multi-tenant — Proposez un service d'exécution de code où chaque utilisateur exécute son code dans une sandbox dédiée isolée au niveau noyau.

Dépannage

"kvm: module not found" après l'installation du noyau PVM → Vérifiez que vous avez redémarré sur le noyau PVM (uname -r). Si l'ancien noyau est chargé, vérifiez la valeur par défaut de GRUB et redémarrez.

La création de sandbox échoue avec "no template found" → Assurez-vous que la création du template est terminée (cubemastercli tpl watch montre READY). Vérifiez que CUBE_TEMPLATE_ID est correctement défini.

"Connection refused" sur le port 3000 → Vérifiez que CubeAPI fonctionne : systemctl status cube-api. Consultez les logs : journalctl -u cube-api -f.

Délai d'attente de création de sandbox → La première création télécharge l'image du template et prend plus de temps. Les créations suivantes sont instantanées (<60 ms).

L'installation du noyau PVM échoue sur Debian/Ubuntu → Utilisez la variante .deb depuis la page des releases, pas le .rpm.

Ressources