Skip to main content
Version: 2.27

E2B

haystack_integrations.tools.e2b.bash_tool

RunBashCommandTool

Bases: Tool

A :class:~haystack.tools.Tool that executes bash commands inside an E2B sandbox.

Pass the same :class:E2BSandbox instance to multiple tool classes so they all operate in the same live sandbox environment.

Usage example

python
from haystack_integrations.tools.e2b import E2BSandbox, RunBashCommandTool, ReadFileTool

sandbox = E2BSandbox()
agent = Agent(
chat_generator=...,
tools=[
RunBashCommandTool(sandbox=sandbox),
ReadFileTool(sandbox=sandbox),
],
)

init

python
__init__(sandbox: E2BSandbox) -> None

Create a RunBashCommandTool.

Parameters:

  • sandbox (E2BSandbox) – The :class:E2BSandbox instance that will execute commands.

to_dict

python
to_dict() -> dict[str, Any]

Serialize this tool to a dictionary.

from_dict

python
from_dict(data: dict[str, Any]) -> RunBashCommandTool

Deserialize a RunBashCommandTool from a dictionary.

haystack_integrations.tools.e2b.e2b_sandbox

E2BSandbox

Manages the lifecycle of an E2B cloud sandbox.

Instantiate this class and pass it to one or more E2B tool classes (RunBashCommandTool, ReadFileTool, WriteFileTool, ListDirectoryTool) to share a single sandbox environment across all tools. All tools that receive the same E2BSandbox instance operate inside the same live sandbox process.

Usage example

python
from haystack.components.generators.chat import OpenAIChatGenerator
from haystack.components.agents import Agent

from haystack_integrations.tools.e2b import (
E2BSandbox,
RunBashCommandTool,
ReadFileTool,
WriteFileTool,
ListDirectoryTool,
)

sandbox = E2BSandbox()
agent = Agent(
chat_generator=OpenAIChatGenerator(model="gpt-4o"),
tools=[
RunBashCommandTool(sandbox=sandbox),
ReadFileTool(sandbox=sandbox),
WriteFileTool(sandbox=sandbox),
ListDirectoryTool(sandbox=sandbox),
],
)

Lifecycle is handled automatically by the Agent's pipeline. If you use the tools standalone, call :meth:warm_up before the first tool invocation:

python
sandbox.warm_up()
# ... use tools ...
sandbox.close()

init

python
__init__(
api_key: Secret = Secret.from_env_var("E2B_API_KEY", strict=True),
sandbox_template: str = "base",
timeout: int = 120,
environment_vars: dict[str, str] | None = None,
instance_id: str | None = None,
) -> None

Create an E2BSandbox instance.

Parameters:

  • api_key (Secret) – E2B API key.
  • sandbox_template (str) – E2B sandbox template name.
  • timeout (int) – Sandbox inactivity timeout in seconds.
  • environment_vars (dict[str, str] | None) – Optional environment variables to inject into the sandbox.
  • instance_id (str | None) – Stable identifier preserved across to_dict/from_dict. When omitted, a fresh UUID is generated. Tools that share the same E2BSandbox instance inherit this id, which is what lets them re-share the instance after a serialization round-trip. Distinct from the cloud-side sandbox id assigned by E2B at warm-up.

warm_up

python
warm_up() -> None

Establish the connection to the E2B sandbox.

Idempotent -- calling it multiple times has no effect if the sandbox is already running.

Raises:

  • RuntimeError – If the E2B sandbox cannot be created.

close

python
close() -> None

Shut down the E2B sandbox and release all associated resources.

Call this when you are done to avoid leaving idle sandboxes running.

to_dict

python
to_dict() -> dict[str, Any]

Serialize the sandbox configuration to a dictionary.

Returns:

  • dict[str, Any] – Dictionary containing the serialised configuration.

from_dict

python
from_dict(data: dict[str, Any]) -> E2BSandbox

Deserialize an :class:E2BSandbox from a dictionary.

Multiple tools that shared a single :class:E2BSandbox before serialization will share the same restored instance: each tool's from_dict consults a process-wide cache keyed on instance_id. A cache hit is only honored when the full serialized config (api_key, template, timeout, environment_vars) matches the cached entry — a crafted YAML with a guessed id but a different config falls through to a fresh instance and never observes the cached one.

Parameters:

  • data (dict[str, Any]) – Dictionary created by :meth:to_dict.

Returns:

  • E2BSandbox – An :class:E2BSandbox instance ready to be warmed up. May be a previously-restored instance if the id and config match.

haystack_integrations.tools.e2b.list_directory_tool

ListDirectoryTool

Bases: Tool

A :class:~haystack.tools.Tool that lists directory contents in an E2B sandbox.

Pass the same :class:E2BSandbox instance to multiple tool classes so they all operate in the same live sandbox environment.

Usage example

python
from haystack_integrations.tools.e2b import E2BSandbox, ListDirectoryTool

sandbox = E2BSandbox()
agent = Agent(chat_generator=..., tools=[ListDirectoryTool(sandbox=sandbox)])

init

python
__init__(sandbox: E2BSandbox) -> None

Create a ListDirectoryTool.

Parameters:

  • sandbox (E2BSandbox) – The :class:E2BSandbox instance to list directories from.

to_dict

python
to_dict() -> dict[str, Any]

Serialize this tool to a dictionary.

from_dict

python
from_dict(data: dict[str, Any]) -> ListDirectoryTool

Deserialize a ListDirectoryTool from a dictionary.

haystack_integrations.tools.e2b.read_file_tool

ReadFileTool

Bases: Tool

A :class:~haystack.tools.Tool that reads files from an E2B sandbox filesystem.

Pass the same :class:E2BSandbox instance to multiple tool classes so they all operate in the same live sandbox environment.

Usage example

python
from haystack_integrations.tools.e2b import E2BSandbox, ReadFileTool

sandbox = E2BSandbox()
agent = Agent(chat_generator=..., tools=[ReadFileTool(sandbox=sandbox)])

init

python
__init__(sandbox: E2BSandbox) -> None

Create a ReadFileTool.

Parameters:

  • sandbox (E2BSandbox) – The :class:E2BSandbox instance to read files from.

to_dict

python
to_dict() -> dict[str, Any]

Serialize this tool to a dictionary.

from_dict

python
from_dict(data: dict[str, Any]) -> ReadFileTool

Deserialize a ReadFileTool from a dictionary.

haystack_integrations.tools.e2b.sandbox_toolset

E2BToolset

Bases: Toolset

A :class:~haystack.tools.Toolset that bundles all E2B sandbox tools.

All tools in the set share a single :class:E2BSandbox instance so they operate inside the same live sandbox process. The toolset owns the sandbox lifecycle: calling :meth:warm_up starts the sandbox, and serialisation round-trips preserve the shared-sandbox relationship.

Usage example

python
from haystack.components.generators.chat import OpenAIChatGenerator
from haystack.components.agents import Agent

from haystack_integrations.tools.e2b import E2BToolset

agent = Agent(
chat_generator=OpenAIChatGenerator(model="gpt-4o"),
tools=E2BToolset(),
)

init

python
__init__(
api_key: Secret = Secret.from_env_var("E2B_API_KEY", strict=True),
sandbox_template: str = "base",
timeout: int = 120,
environment_vars: dict[str, str] | None = None,
) -> None

Create an E2BToolset.

Parameters:

  • api_key (Secret) – E2B API key. Defaults to Secret.from_env_var("E2B_API_KEY").
  • sandbox_template (str) – E2B sandbox template name. Defaults to "base".
  • timeout (int) – Sandbox inactivity timeout in seconds. Defaults to 120.
  • environment_vars (dict[str, str] | None) – Optional environment variables to inject into the sandbox.

warm_up

python
warm_up() -> None

Start the shared E2B sandbox (idempotent).

close

python
close() -> None

Shut down the shared E2B sandbox and release cloud resources.

to_dict

python
to_dict() -> dict[str, Any]

Serialize this toolset to a dictionary.

from_dict

python
from_dict(data: dict[str, Any]) -> E2BToolset

Deserialize an E2BToolset from a dictionary.

haystack_integrations.tools.e2b.write_file_tool

WriteFileTool

Bases: Tool

A :class:~haystack.tools.Tool that writes files to an E2B sandbox filesystem.

Pass the same :class:E2BSandbox instance to multiple tool classes so they all operate in the same live sandbox environment.

Usage example

python
from haystack_integrations.tools.e2b import E2BSandbox, WriteFileTool

sandbox = E2BSandbox()
agent = Agent(chat_generator=..., tools=[WriteFileTool(sandbox=sandbox)])

init

python
__init__(sandbox: E2BSandbox) -> None

Create a WriteFileTool.

Parameters:

  • sandbox (E2BSandbox) – The :class:E2BSandbox instance to write files to.

to_dict

python
to_dict() -> dict[str, Any]

Serialize this tool to a dictionary.

from_dict

python
from_dict(data: dict[str, Any]) -> WriteFileTool

Deserialize a WriteFileTool from a dictionary.