The execution layer for agents
Your agent generates code. We run it safely—with full access to your tools. Every await becomes a tool call back to your system.
# Every await = tool call back to your system
user = await get_user(id=123) # tool: get_user
orders = await fetch_orders(user.id) # tool: fetch_orders
total = sum(o.amount for o in orders) # pure compute
if total > 1000:
await send_discount(user.email) # tool: send_discount
Built for agent workloads
Your LLM generates code with tool calls. We execute it—each await routes back to your system.
Data Analysis
# Tool call: query_db
data = await query_db("SELECT * FROM sales")
# Pure computation (no tool)
avg = sum(d.revenue for d in data) / len(data)
trend = "up" if data[-1].revenue > avg else "down"
# Tool call: send_slack
await send_slack("#analytics", f"Trending {trend}")
Multi-Tool Chains
# Parallel tool calls with asyncio.gather
weather, calendar = await asyncio.gather(
get_weather("London"),
get_calendar("today")
)
if weather.rain_chance > 0.7:
for event in calendar.outdoor_events:
await notify(event.organizer, "Rain!")
Self-Testing Code
# Tool call: get_task
spec = await get_task(42)
# Pure computation: generate + test
code = generate(spec.requirements)
for t in spec.tests:
assert eval(code)(t.input) == t.expected
# Tool call: submit
await submit_code(42, code)
Why eryx.run
Sub-5ms Cold Start
WASM-based sandboxing boots instantly. No VM spinup, no container pulls. Your agent never waits.
Native Async Callbacks
Python code can await host-provided functions. Build agents that call your tools mid-execution.
Deterministic Billing
Pay for compute units, not wall-clock time. Same code = same cost. No charges while waiting on callbacks.
Secure by Default
WebAssembly sandbox isolates untrusted code. No filesystem, no network, unless you explicitly allow it.
await = tool call
Agent generates code
Your LLM writes Python with await tool_name()
Code hits await
Sandbox pauses, sends callback request to you
You respond
Your system handles the callback, returns data
Execution resumes
Sandbox continues with your response
// You send agent-generated code
{"type": "execute", "code": "user = await get_user(id=5)"}
// eryx.run pauses and asks for data
{"type": "callback", "call_id": "abc", "name": "get_user", "args": {"id": 5}}
// You fetch from your database and respond
{"type": "callback_response", "call_id": "abc", "result": {"name": "Alice"}}
// Execution completes
{"type": "completed", "stdout": "Hello Alice\n", "compute_units": 1842}
Simple, predictable pricing
Pay for what you use. No charge while waiting on your callbacks.
Free
- 100k compute units/mo
- 1 concurrent session
- 5 second timeout
- Community support
Starter
- 1M compute units/mo
- 10 concurrent sessions
- 30 second timeout
- Email support
- $0.10/100k overage
Pro
- 10M compute units/mo
- 100 concurrent sessions
- 60 second timeout
- Priority support
- $0.08/100k overage
Team
- 100M compute units/mo
- 1000 concurrent sessions
- 120 second timeout
- Dedicated support
- $0.05/100k overage
Get early access
Join the waitlist to be notified when we launch. Early users get extended free tier benefits.
No spam. We'll only email you when we're ready.