Skip to main content
Use Sandbox.connect() to reconnect to an existing sandbox. This is useful for:
  • Resuming work on a sandbox after your application restarts
  • Connecting multiple clients to the same sandbox
  • Resuming paused sandboxes (beta feature)

Connect to Running Sandbox

from moru import Sandbox

# Connect using sandbox ID
sandbox = Sandbox.connect("sbx_abc123...")

# Now you can use the sandbox normally
result = sandbox.commands.run("echo 'Reconnected!'")
print(result.stdout)

Check if Sandbox is Running

Before connecting, you can check if a sandbox is still active:
from moru import Sandbox

sandbox = Sandbox.connect("sbx_abc123...")

if sandbox.is_running():
    print("Sandbox is active")
    result = sandbox.commands.run("uptime")
else:
    print("Sandbox has been terminated")

Get Sandbox Information

Retrieve metadata and status of a connected sandbox:
from moru import Sandbox

sandbox = Sandbox.connect("sbx_abc123...")
info = sandbox.get_info()

print(f"Template: {info.template_id}")
print(f"Started: {info.started_at}")
print(f"Ends: {info.end_at}")
print(f"State: {info.state}")
print(f"CPUs: {info.cpu_count}")
print(f"Memory: {info.memory_mb} MB")

Resume Paused Sandbox (Beta)

If a sandbox was paused using beta_pause(), reconnect with connect():
from moru import Sandbox

# Sandbox was previously paused
sandbox = Sandbox.connect("sbx_abc123...")

# Resume the paused sandbox
sandbox.connect()

# Sandbox is now running again
result = sandbox.commands.run("ls -la")

List All Sandboxes

List your sandboxes to find ones to connect to:
from moru import Sandbox

# List running sandboxes (uses pagination)
for info in Sandbox.list():
    print(f"{info.sandbox_id}: {info.state}")

Connection Options

from moru import Sandbox

sandbox = Sandbox.connect(
    "sbx_abc123...",
    timeout=30,  # Connection timeout in seconds
)

Error Handling

from moru import Sandbox
from moru.exceptions import NotFoundException, TimeoutException

try:
    sandbox = Sandbox.connect("sbx_abc123...")
except NotFoundException:
    print("Sandbox not found or already terminated")
except TimeoutException:
    print("Connection timed out")

Use Cases

Session Recovery

Store the sandbox ID and reconnect after application restart:
import json
from moru import Sandbox

# Save sandbox ID
sandbox = Sandbox.create()
with open("session.json", "w") as f:
    json.dump({"sandbox_id": sandbox.sandbox_id}, f)

# Later, reconnect
with open("session.json") as f:
    data = json.load(f)

sandbox = Sandbox.connect(data["sandbox_id"])

Multiple Clients

Multiple processes can connect to the same sandbox:
# Process 1
sandbox = Sandbox.connect("sbx_abc123...")
sandbox.files.write("/shared/from_process_1.txt", "Hello from process 1")

# Process 2 (different machine/process)
sandbox = Sandbox.connect("sbx_abc123...")
content = sandbox.files.read("/shared/from_process_1.txt")
print(content)  # Hello from process 1

Next Steps