# Best sandbox for Mastra agents in 2026 Mastra agents take AI SDK tools as they are, so the best sandbox plugs in as tools and costs almost nothing while idle. **With Runtime a Mastra agent gets a full Linux microVM from one line, `tools: runtimeTools(sbx)`, and pays for CPU only while code runs.** The four tools run commands and read, write and list files in a Firecracker microVM with its own kernel, where pandas, NumPy and matplotlib are already installed. Twenty thousand three-minute data questions a month, each busy for 30 CPU-seconds, cost $34.17 on Runtime, $165.60 on E2B and $165.60 on Daytona at their published rates, checked 23 September to 2 October 2026. ## How does Mastra connect an agent to a sandbox? Mastra has two routes. Its workspaces attach a sandbox provider to an agent with `workspace: new Workspace({ sandbox })`, and Mastra's [sandbox docs](https://mastra.ai/docs/sandbox/overview) list Daytona, E2B, Modal, Vercel and Docker among the providers. Separately, any AI SDK tool can go straight into an agent's `tools`, which is how Runtime plugs in: no workspace, no provider package, and the same tools work in a plain `generateText` call. | Route | Where commands run | What you add | | ------------------------------------- | ----------------------------------- | ----------------------------------- | | `LocalSandbox`, no isolation | The app's own host | Nothing; Mastra calls it not secure | | `LocalSandbox` with bwrap or seatbelt | The host, with writes limited | Bubblewrap or macOS Seatbelt | | A workspace sandbox provider | That provider's machines | The provider's Mastra package | | `runtimeTools(sbx)` | A Runtime microVM your code created | `withruntime`, one line in `tools` | ## What matters in a sandbox for Mastra? - **Per-user machines that cost nothing idle.** A Mastra app usually serves many users. `Sandbox.getOrCreate("user-42")` gives each user one named sandbox that pauses itself after 60 seconds with nothing happening and wakes with its files, memory and processes when that user returns. - **Packages without a build step.** The default image has Python 3.12, Node.js 24, pandas, NumPy and matplotlib, and `pip install` works when the agent needs more. - **Steps that can take a while.** A command runs up to the timeout you give it, so a long data job is one tool call, not a polling loop. - **One tool set across frameworks.** The tools are AI SDK tools, so the same sandbox code serves a Mastra agent, an AI SDK route and a workflow step. ## What does a Mastra data agent cost per month? Twenty thousand questions, each three minutes on a 2 vCPU, 4 GiB sandbox and busy for 30 CPU-seconds, at each provider's published rates: | Provider | Isolation | CPU billed on | A month of questions | | -------------- | ----------------------- | ----------------- | --------------------------------- | | Runtime | Firecracker microVM | Measured use | $34.17 | | Vercel Sandbox | Firecracker microVM | Measured use | $106.13 | | E2B | Firecracker microVM | Every vCPU held | $165.60 | | Daytona | Containers by default | Every vCPU held | $165.60 | | Modal | gVisor, a shared kernel | The CPU requested | $237.96 | Runtime costs 68% less than Vercel Sandbox and 86% less than Modal for the same month. ## A run on Runtime, recorded 1 October 2026 ```ts check import { Agent } from "@mastra/core/agent"; import { Sandbox } from "withruntime"; import { runtimeTools } from "withruntime/ai"; await using sbx = await Sandbox.create(); const analyst = new Agent({ id: "analyst", name: "Analyst", instructions: "Answer with numbers you computed in the sandbox.", model: "anthropic/claude-sonnet-4-6", tools: runtimeTools(sbx), }); const answer = await analyst.generate("Total revenue by region in sales.csv?", { maxSteps: 6 }); console.log(answer.text); ``` We ran this agent's `generate()` loop with `@mastra/core` 1.71.0 and the AI SDK's mock model in place of Claude, so the model's two tool calls were scripted and Mastra ran them against a live sandbox: ```text runtime_write_file sales.csv Wrote 62 bytes to /workspace/sales.csv runtime_exec python3 -c "...groupby('region').revenue.sum()..." exitCode 0 region east 1250 south 950 west 1500 ``` pandas was there with nothing installed first. Per-user sandboxes and the rest of the API are in [Mastra in a sandbox](/integrations/mastra). ## When might another sandbox fit better? - **Mastra's workspace features.** If you want Mastra's workspace layer itself, with its filesystem abstraction and mounts, use one of the workspace providers Mastra lists; Runtime plugs in as tools instead. ## Sources Checked 1 October 2026. - [Mastra sandboxes](https://mastra.ai/docs/sandbox/overview): workspaces, the provider list and the `LocalSandbox` isolation levels - Each provider's published rates, checked 23 September to 2 October 2026, as the [pricing guide](/docs/pricing) lists them - The recorded run: Runtime's TypeScript SDK with `@mastra/core` 1.71.0 and `ai` 7.0.87's `MockLanguageModelV4`, against production on 1 October 2026