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._nativeis generated bylibs/cua/scripts/generate-uniffi-bindings.mjsand must not be edited;--checkfails CI when it drifts.- Wheels are platform wheels (
build_wheel.py), one per OS/arch, each with thelibcua_sdklibrary 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.4.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| cua-0.4.4-py3-none-win_arm64.whl | Python 3 | none | Windows ARM64 | Details |
| cua-0.4.4-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details |
| cua-0.4.4-py3-none-manylinux_2_31_x86_64.whl | Python 3 | none | Linux glibc 2.31+ x86-64 | Details |
| cua-0.4.4-py3-none-manylinux_2_31_aarch64.whl | Python 3 | none | Linux glibc 2.31+ ARM64 | Details |
| cua-0.4.4-py3-none-macosx_11_0_arm64.whl | Python 3 | none | macOS 11.0+ ARM64 | Details |
| cua-0.4.4-py3-none-macosx_10_12_x86_64.whl | Python 3 | none | macOS 10.12+ x86-64 | Details |
Total release size: 423.0 MB
Release files / cua-0.4.4-py3-none-win_arm64.whl
| Download URL | cua-0.4.4-py3-none-win_arm64.whl |
|---|---|
| Size | 61.4 MB |
| Tags | Python 3 Windows ARM64 |
|
SHA-256 checksum How to use checksums |
e12aa079c497a609ae2c35300f1db2b57e00e4a5a982f65a2a388b02e3d4c96f
|
|
BLAKE2b-256 checksum How to use checksums |
7f3f6517660a98982868fdcb52f8b3bd7de3f06dc15ffcbd0c485f5ffb71cf57
|
| 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.4.4-py3-none-win_amd64.whl
| Download URL | cua-0.4.4-py3-none-win_amd64.whl |
|---|---|
| Size | 66.5 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
5722d5b85e9c72d5015bb79bf82cb50ada52d3e35cf42f9b8697596d133adcac
|
|
BLAKE2b-256 checksum How to use checksums |
23ebca13046954c75564b7bfae50abad4936000b0749fc4aa92ddb318daa6902
|
| 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.4.4-py3-none-manylinux_2_31_x86_64.whl
| Download URL | cua-0.4.4-py3-none-manylinux_2_31_x86_64.whl |
|---|---|
| Size | 77.3 MB |
| Tags | Linux glibc 2.31+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
b14e893caaa1f42d9f2addde9e077dff79f2433acecb0dcbc7f10be961b89367
|
|
BLAKE2b-256 checksum How to use checksums |
5f5a04dd2b9f1546e0e84ab1acf75cc6457fcbcf6ebecba0ef522b154c2c0d34
|
| 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.4.4-py3-none-manylinux_2_31_aarch64.whl
| Download URL | cua-0.4.4-py3-none-manylinux_2_31_aarch64.whl |
|---|---|
| Size | 78.6 MB |
| Tags | Linux glibc 2.31+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
89240a7b36c80854a5a67a1ced5c319db0c64c2331725c3de7ef27b20ace60a4
|
|
BLAKE2b-256 checksum How to use checksums |
a89a08f7b9a91596a2d2da2439a8fdbb6bf0115a52efb3438b6a0c5265637ba3
|
| 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.4.4-py3-none-macosx_11_0_arm64.whl
| Download URL | cua-0.4.4-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 67.1 MB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
fa3258dbcc5f5b6ba8d42f7c8a2a7be68df8f1b69142b47c1dc5be69df3a0be0
|
|
BLAKE2b-256 checksum How to use checksums |
018a4b64754ddefd4c08074cd88c1e43cae0a41d38418796dc498f789f272982
|
| 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.4.4-py3-none-macosx_10_12_x86_64.whl
| Download URL | cua-0.4.4-py3-none-macosx_10_12_x86_64.whl |
|---|---|
| Size | 72.1 MB |
| Tags | Python 3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
36cd198143caca8fb9cf7024c19bd9e0f689c5d542e370bfa844ab87dc13567a
|
|
BLAKE2b-256 checksum How to use checksums |
e39eaabc908fee95b98c16c3b875033bc692f14e1aa0e3d80e21fcefe1a2eb7d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|