Overview
Jinba Toolbox executes tool code in isolated sandbox environments. The sandbox system is designed around a provider-agnostic architecture: a shared interface package (@jinba-toolbox/sandbox-core) defines the contract, and individual provider packages (sandbox-e2b, sandbox-daytona) implement it.
This separation means you can switch providers or add new ones without modifying any business logic.
Architecture
Core Interface
The@jinba-toolbox/sandbox-core package contains only interfaces and types — no concrete implementations. All providers must conform to these contracts.
SandboxProvider
The factory that creates and resumes sandbox instances:SandboxInstance
A running sandbox environment with code execution, shell commands, and filesystem access:SandboxCommands
Shell command execution within the sandbox:SandboxFilesystem
File operations within the sandbox:Key Types
E2B Provider
The@jinba-toolbox/sandbox-e2b package implements the sandbox interface using the E2B Code Interpreter SDK.
Configuration
How It Works
- Sandbox creation: The provider creates an E2B Code Interpreter sandbox, optionally using a custom template.
- Package installation: If packages are specified,
pip install(Python) ornpm install(TypeScript) runs inside the sandbox. - Code execution: Tool code is executed via E2B’s
runCodeAPI in a Jupyter-like kernel. - Lifecycle: Sandboxes can be paused, resumed, or terminated.
TypeScript Note
E2B’s Code Interpreter executes TypeScript in a Jupyter kernel that does not support ESM file imports. For this reason, TypeScript tool code is inlined rather than loaded from files. Python tools can use filesystem imports normally.Daytona Provider
The@jinba-toolbox/sandbox-daytona package implements the sandbox interface using the Daytona SDK.
Configuration
How It Works
- Sandbox creation: The provider initializes the Daytona SDK and creates a sandbox with the specified language.
- Package installation: If packages are specified, the provider runs
pip installornpm installinside the sandbox. - Code execution: Tool code is executed via Daytona’s
process.codeRunAPI. - Lifecycle: Sandboxes can be started, stopped, and deleted.
ToolSet Sandbox Configuration
When creating a toolset, you specify which sandbox provider and settings to use:SandboxConfig stored on each toolset:
Error Handling
All sandbox packages use a unifiedSandboxError type:
Adding a New Provider
The architecture is designed for extensibility. To add a new sandbox provider:1
Create a new package
Create
packages/sandbox-<provider> with the standard package structure.2
Implement the SandboxProvider interface
Implement
create() and resume() methods that return a SandboxInstance.3
Register the provider
Add the provider case to the API server’s
getSandboxProvider function. No changes to sandbox-core or business logic are needed.Related
- REST API — Endpoints for managing toolsets and running tools
- Versioning & Publishing — How sandbox config is frozen in versions
- Security & Access Control — Isolation and tenant boundaries