Skip to main content

cua (Python)

The cua SDK for Python: a thin, generated binding over the Rust cua-sdk crate (libs/cua/crates/cua-sdk). The same API runs embedded in your process or against a cua daemon that shares sandboxes, spacesd connections and credentials across processes.

import asyncio, cua

async def main():
    c = cua.embedded()
    sb = await c.sandboxes().connect_url("http://127.0.0.1:3211", "token", "dev")
    env = await sb.spacesd(None)
    print((await env.run(cua.SpacesdCommand(program="uname", args=["-a"]))).stdout.decode())
    png = await env.screenshot(None)

asyncio.run(main())

Sandboxes: any image, local or cloud

c = cua.embedded()
sb = await c.sandboxes().create(cua.SandboxCreateOptions(
    on="local",                                   # or "cloud": same options
    image="python:3.12-slim",
    command=["python", "-m", "my_mcp", "--port", "8765"],
    env={"FOO": "bar"},
    services={"mcp": 8765},
    wait_for=[cua.ReadinessProbe(port=0, service="mcp", http_path="/health")],
    cloud=cua.CloudOptions(warm=True),            # optional, ignored locally
))
svc = sb.service("mcp")
r = await svc.request("POST", "/mcp", body, None, [cua.HttpHeader(name="accept", value="application/json, text/event-stream")])
url = await svc.url()                             # usable from this machine
share = await sb.public_url("mcp", 3600, None)    # shareable, expires
fwd = await sb.forward(8765)                      # loopback URL: fwd.url()
info = sb.info()  # id, phase, location, services, expires_at_unix, provider_details

public_url is a signed URL in the cloud and a loopback URL with its own token locally, served by the cua daemon (started on demand with the bundled CLI). await sb.mcp("mcp", None) is an MCP client for a server the sandbox serves and await sb.mcp_config("mcp", None) its URL and headers for any MCP client; neither needs cua-spacesd. cua.canonical_image("linux", None) returns ghcr.io/trycua/linux:24.04. Cloud env, sidecars (addressed by name, on gVisor and KubeVirt) and registry secrets work like local ones; cloud image layers (a remote build) are not available yet and fail with a clear error.

High-level API (optional extras)

cua replaces the former cua meta-package (0.1.x). Its convenience imports resolve lazily from optional extras:

pip install "cua[sandbox]"   # cua-sandbox: Sandbox, Image, Pool, QEMURuntime, ...
pip install "cua[agent]"     # cua-agent: ComputerAgent, cua.callbacks, cua.tools
pip install "cua[all]"       # both (the `cua` command is the Rust CLI in libs/cua)
from cua import Sandbox, Image            # cua_sandbox.Sandbox / Image
async with Sandbox.ephemeral(Image.linux(), local=True) as sb:
    print((await sb.shell.run("uname -a")).stdout)

With cua-sandbox installed, cua.Sandbox is the high-level cua_sandbox.Sandbox; the SDK's own handle type (what sandboxes().create() returns) is always cua.SandboxHandle.

  • cua._native is generated by libs/cua/scripts/generate-uniffi-bindings.mjs and must not be edited; --check fails CI when it drifts.
  • Wheels are platform wheels (build_wheel.py), one per OS/arch, each with the libcua_sdk library next to _native.py.

Development

cd libs/cua
cargo build --release -p cua-sdk
scripts/build-test-fixtures.sh
node scripts/stage-uniffi-library.mjs          # copies the library here
cd python && uv run --with pytest pytest -q    # smoke tests against fixtures
CUA_E2E_FLEET=1 uv run --with pytest pytest -q tests/test_live_fleet.py  # live Fleet

Metadata

Release files for cua 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for cua 0.3.0
File
cua-0.3.0-py3-none-win_arm64.whl Python 3 none Windows ARM64 Details
cua-0.3.0-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details
cua-0.3.0-py3-none-manylinux_2_31_x86_64.whl Python 3 none Linux glibc 2.31+ x86-64 Details
cua-0.3.0-py3-none-manylinux_2_31_aarch64.whl Python 3 none Linux glibc 2.31+ ARM64 Details
cua-0.3.0-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details
cua-0.3.0-py3-none-macosx_10_12_x86_64.whl Python 3 none macOS 10.12+ x86-64 Details

Total release size: 419.8 MB

Release files / cua-0.3.0-py3-none-win_arm64.whl

Download URL cua-0.3.0-py3-none-win_arm64.whl
Size 60.9 MB
Tags Python 3 Windows ARM64
SHA-256 checksum
How to use checksums
e92a7b4af34f3ecf9be553b256142d25139f348e3e0dbd34d517916e30580d3b
BLAKE2b-256 checksum
How to use checksums
c0ff98cd0e1da1a26236d5d515a40d5f217951936abdd8c7c0b8dc738ab5e16e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / cua-0.3.0-py3-none-win_amd64.whl

Download URL cua-0.3.0-py3-none-win_amd64.whl
Size 65.9 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
13b31b6d9639a59f49505b7c959073d1021fed2461bbabba89c27d2fbcb15d0f
BLAKE2b-256 checksum
How to use checksums
4241b8991e7ddef5f0b52052955f0cf7de9a794a982817137ee6b5806462f3bc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / cua-0.3.0-py3-none-manylinux_2_31_x86_64.whl

Download URL cua-0.3.0-py3-none-manylinux_2_31_x86_64.whl
Size 76.8 MB
Tags Linux glibc 2.31+ x86-64 Python 3
SHA-256 checksum
How to use checksums
a448f06ed6e3c057ef833e887d0ad2a1656c64a10016412c7373d67dba8673c9
BLAKE2b-256 checksum
How to use checksums
24ed72a9cb1ef1bcab2ccc8835258957f6db68c1eddb689eba07dddce6fe4159
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / cua-0.3.0-py3-none-manylinux_2_31_aarch64.whl

Download URL cua-0.3.0-py3-none-manylinux_2_31_aarch64.whl
Size 78.0 MB
Tags Linux glibc 2.31+ ARM64 Python 3
SHA-256 checksum
How to use checksums
ac6ded376b02153328b3e7975ca129c3e94117bf340e05621dc4ff6ebb779427
BLAKE2b-256 checksum
How to use checksums
d1a05e2248947d912c08d5d42b27b147a3ae5902640bbd526766f7cb301acd95
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / cua-0.3.0-py3-none-macosx_11_0_arm64.whl

Download URL cua-0.3.0-py3-none-macosx_11_0_arm64.whl
Size 66.6 MB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
f580fac0c198e7e0994a382c6c0ec12dd727b98e38c1212174a98a5d3c8d3cb9
BLAKE2b-256 checksum
How to use checksums
8ca59978cc3a2a934767c235085dbc8072506d0e6e7acdbdeb76ab21a2e5d452
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / cua-0.3.0-py3-none-macosx_10_12_x86_64.whl

Download URL cua-0.3.0-py3-none-macosx_10_12_x86_64.whl
Size 71.6 MB
Tags Python 3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
76128a4d161ec6b29c26ad388173e176ab470c3c492f3185d69e4f2bffe70e7a
BLAKE2b-256 checksum
How to use checksums
abbebca62707fc2ed284f42b255c1a652482121382c33634492e3c7ee913b111
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release history Release notifications | RSS feed

0.4.4

6 release files

0.4.3

6 release files

0.4.2

6 release files

0.4.1

6 release files

0.4.0

6 release files

0.3.1

6 release files

This release

0.3.0 This release

6 release files

0.2.0

6 release files

0.1.6

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page