Quickstart
Start the runtime, connect from Python, and run your first prompt.
1. Start the Runtime
npm install -g @anthropic-ai/claude-code
export ANTHROPIC_API_KEY=your_anthropic_api_key
npx -y runtimeuse@latest --agent claudeThis starts the Claude Code agent on port 8080. To use OpenAI agent instead:
export OPENAI_API_KEY=your_openai_api_key
npx -y runtimeuse@latestws_url = "ws://localhost:8080"pip install e2b# Required env vars: E2B_API_KEY, ANTHROPIC_API_KEY
from e2b import Template, wait_for_port, Sandbox
template = (
Template()
.from_node_image("lts")
.set_workdir("/runtimeuse")
.npm_install(["@anthropic-ai/claude-code"], g=True)
.set_envs(
{
"ANTHROPIC_API_KEY": anthropic_api_key,
"IS_SANDBOX": "1",
"CLAUDE_SKIP_ROOT_CHECK": "1",
}
)
.set_start_cmd("npx -y runtimeuse@latest --agent claude", wait_for_port(8080))
)
sandbox = Sandbox.create(template="runtimeuse-quickstart-claude", api_key=e2b_api_key)
ws_url = f"wss://{sandbox.get_host(8080)}"Full example: examples/e2b-quickstart.py
pip install daytona# Required env vars: DAYTONA_API_KEY, ANTHROPIC_API_KEY
from daytona import (
CreateSandboxFromImageParams,
Daytona,
DaytonaConfig,
Image,
SessionExecuteRequest,
)
image = Image.base("node:lts").run_commands(
"apt-get update && apt-get install -y unzip",
"npm install -g @anthropic-ai/claude-code",
)
daytona = Daytona(config=DaytonaConfig(api_key=daytona_api_key))
sandbox = daytona.create(
CreateSandboxFromImageParams(
image=image,
env_vars={
"ANTHROPIC_API_KEY": anthropic_api_key,
"IS_SANDBOX": "1",
"CLAUDE_SKIP_ROOT_CHECK": "1",
},
public=True,
),
timeout=600,
)
sandbox.process.create_session("runtimeuse")
sandbox.process.execute_session_command(
"runtimeuse",
SessionExecuteRequest(
command="npx -y runtimeuse@latest --agent claude",
run_async=True,
),
)
preview = sandbox.create_signed_preview_url(8080, expires_in_seconds=3600)
ws_url = _http_to_ws(preview.url)Full example: examples/daytona-quickstart.py
pip install vercel python-dotenv# Required env vars: VERCEL_TOKEN, VERCEL_PROJECT_ID, VERCEL_TEAM_ID, ANTHROPIC_API_KEY
from vercel.sandbox import Sandbox
sandbox = Sandbox.create(
runtime="node24",
ports=[8081],
env={
"ANTHROPIC_API_KEY": anthropic_api_key,
"IS_SANDBOX": "1",
"CLAUDE_SKIP_ROOT_CHECK": "1",
},
)
sandbox.run_command("sudo", ["dnf", "install", "-y", "unzip"])
sandbox.run_command("npm", ["install", "-g", "@anthropic-ai/claude-code"])
sandbox.run_command_detached(
"npx",
["-y", "runtimeuse", "--agent", "claude", "--port", "8081"],
)
ws_url = _http_to_ws(sandbox.domain(8081))Full example: examples/vercel-quickstart.py
pip install modal# Required env vars: ANTHROPIC_API_KEY
# Authenticate with Modal: `modal token set` or set MODAL_TOKEN_ID + MODAL_TOKEN_SECRET
import modal
app = modal.App.lookup("runtimeuse-quickstart", create_if_missing=True)
image = modal.Image.from_registry("node:lts").run_commands(
"apt-get update && apt-get install -y unzip",
"npm install -g @anthropic-ai/claude-code",
)
secret = modal.Secret.from_dict(
{
"ANTHROPIC_API_KEY": anthropic_api_key,
"IS_SANDBOX": "1",
"CLAUDE_SKIP_ROOT_CHECK": "1",
}
)
sandbox = modal.Sandbox.create(
app=app,
image=image,
secrets=[secret],
workdir="/runtimeuse",
encrypted_ports=[8080],
timeout=600,
)
sandbox.exec("npx", "-y", "runtimeuse", "--agent", "claude")
ws_url = _http_to_ws(sandbox.tunnels()[8080].url)Full example: examples/modal-quickstart.py
2. Install the Client
pip install runtimeuse-client3. Connect and Query
Once you have a ws_url, the client flow is the same across providers:
import asyncio
from runtimeuse_client import (
QueryOptions,
RuntimeEnvironmentDownloadableInterface,
RuntimeUseClient,
TextResult,
)
async def main(ws_url: str) -> None:
client = RuntimeUseClient(ws_url=ws_url)
result = await client.query(
prompt="Summarize the contents of this repository and list your favorite file.",
options=QueryOptions(
system_prompt="You are a helpful assistant.",
model="claude-sonnet-4-20250514", # gpt-5.4 for openai
pre_agent_downloadables=[
RuntimeEnvironmentDownloadableInterface(
download_url="https://github.com/openai/codex/archive/refs/heads/main.zip",
working_dir="/runtimeuse",
)
],
),
)
assert isinstance(result.data, TextResult)
print(result.data.text)
asyncio.run(main(ws_url))