Development Status
- 3 - Alpha
Intended Audience
- Developers
Operating System
- OS Independent
Programming Language
- Python :: 3
- Python :: 3.10
- Python :: 3.11
- Python :: 3.12
- Python :: 3.13
Typing
- Typed
use-computer Python SDK
Python client for use.computer — rent dedicated VMs across macOS, iOS/visionOS/tvOS simulators, Windows, and Ubuntu built for computer-use agents.
pip install use-computer
export USE_COMPUTER_API_KEY=uc_live_...
Optional agent and Harbor integrations are installed explicitly:
pip install "use-computer[agents]" # computer-use agents and provider SDKs
pip install "use-computer[harbor]" # Harbor agent wrapper dependencies
pip install "use-computer[harbor,agents]" # Harbor agent wrappers plus agents
Base installs only the SDK client and httpx. The agents extra installs the
agent runtime plus model-provider dependencies; harbor installs Harbor for
use_computer.harbor.agents.
Sandboxes default to ephemeral=True, so they are deleted after roughly 2
minutes without activity. Use ephemeral=False when a sandbox should persist
until manual deletion, or call sandbox.start_keepalive(interval=30) during
long model-think/install periods.
from use_computer.agents import AnthropicComputerAgent
In Harbor job YAML, use Harbor's built-in use.computer environment and the SDK agent wrappers:
environment:
type: use-computer
kwargs:
platform: macos
agents:
- import_path: use_computer.harbor.agents:AnthropicCUAAgent
model_name: anthropic/claude-sonnet-4-6
from use_computer import Computer, SandboxType, SimulatorFamily
client = Computer()
reservation = client.reserve(hours=24)
with client.create(type="macos", reservation_id=reservation.id) as mac:
mac.exec_ssh("open -a TextEdit")
mac.keyboard.type("hello")
png = mac.screenshot.take_full_screen()
with Computer().create(type=SandboxType.IOS, family=SimulatorFamily.TV) as tv:
tv.screenshot.take_full_screen()
tv.input.press_remote("select")
with Computer().create(type=SandboxType.IOS) as ios:
ios.input.long_press(120, 300, duration=1.0)
print(ios.exec("simctl getenv $UDID HOME").stdout) # CoreSimulator exec, not SSH
# Only needed when the same account key has more than one active Mac reservation.
with Computer().create(type="macos", reservation_id="...") as mac:
print(mac.exec_ssh("uname -a").stdout)
Windows (Beta)
with Computer().create(type="windows") as win:
print(win.run("$env:COMPUTERNAME").stdout) # PowerShell exec (no SSH)
win.keyboard.type("hello")
win.screenshot.take_full_screen()
win.ui_tree() # native Windows UIAutomation tree
Windows sandboxes are Beta (admin-only). Same mouse/keyboard/screenshot/
recording/file surface as macOS; exec runs in-guest via PowerShell/cmd
(win.run / win.shell) instead of SSH. AsyncWindowsSandbox mirrors it.
See docs.use.computer/docs/windows.
Selectable Windows images are exposed by Computer().platforms()["windows"].
Prefer version="windows-11" plus resources={"cpus": 4, "memory_mb": 4096, "disk_gb": 40} to select a resource profile. Explicit image IDs such as
windows-11-4c4g40g still work. The image metadata includes CPU/RAM/disk and
display size.
Ubuntu (Beta)
with Computer().create(type="ubuntu", version="ubuntu-24.04") as ubuntu:
print(ubuntu.run("uname -a").stdout) # bash exec (no SSH)
print(ubuntu.display.get_info())
ubuntu.keyboard.type("hello")
ubuntu.screenshot.take_full_screen()
Ubuntu sandboxes are Beta (admin-only). They use the same KVM/noVNC backend
as Windows; pass version="ubuntu-24.04" plus resources to select CPU/RAM/disk.
Selectable Ubuntu images are exposed by Computer().platforms()["ubuntu"].
Current examples include ubuntu-24.04, ubuntu-24.04-4c4g80g,
ubuntu-24.04-4c4g40g, and ubuntu-24.04-2c4g40g.
client = Computer()
platforms = client.platforms()
for image in platforms["ubuntu"]["images"]:
print(image["version"], image["resources"], image["display"])
with client.create(
type="ubuntu",
version="ubuntu-24.04",
resources={"cpus": 2, "memory_mb": 4096, "disk_gb": 40},
) as ubuntu:
print(ubuntu.display.get_info())
Snapshots (Beta)
Windows and Ubuntu snapshots preserve disk + RAM state, including open apps and running processes. Seed a VM once, snapshot it, then create new sandboxes from that snapshot version.
client = Computer()
# Configure the desktop by hand over VNC, then snapshot it.
with client.create(type="ubuntu", version="ubuntu-24.04") as ubuntu:
print("Set up the desktop here:", ubuntu.vnc_url)
# install apps, sign into accounts, pre-open the windows your agent starts from
input("Press Enter once the desktop is ready to snapshot...")
snapshot = ubuntu.snapshot("chrome-seeded-ubuntu")
# New sandboxes boot from that exact state, no setup needed.
with client.create(type="ubuntu", snapshot=snapshot.version) as seeded:
print(seeded.vnc_url) # apps, logins, and open windows restored
Use client.snapshots("ubuntu") or client.snapshots("windows") to list saved
snapshot versions.
Full DSL reference: docs.use.computer/docs/sdk
Simulator sandboxes use type=SandboxType.IOS for the SDK route, but
device_type and runtime can target any installed compatible CoreSimulator
pair: iPhone or iPad with iOS, Apple Watch with watchOS, Apple TV with tvOS, or
Apple Vision with visionOS. Prefer family=SimulatorFamily.TV/WATCH/VISION
unless you need to pin raw CoreSimulator identifiers. Raw strings like
type="ios" still work for compatibility. If omitted, the gateway defaults to
iPhone 17 Pro on the latest installed iOS runtime.
Known-incompatible simulator types are filtered from family selection,
including the non-4K Apple Vision Pro type on current fleet runtimes.
For iOS app installs, upload the .app / .ipa first and pass the same path
to sandbox.apps.install(path); files are staged on the simulator host.
Per-family input
iPhone / iPad sims have full touch + on-screen keyboard. Apple Watch supports
touch + crown / button (no type_text — watchOS keyboard isn't exposed). Apple
TV has no touch — drive it with input.press_remote(RemoteButton.SELECT) (the
remote D-pad, select, menu, home, play/pause). Apple Vision (visionOS) is
BETA: sessions display and you can screenshot / launch apps, but
input.tap is a no-op because there's no XCTest-free coordinate tap path on
visionOS yet. Use it for read-only flows for now.
Examples
| File | What it shows |
|---|---|
examples/_1_hello_macos.py |
create → exec → keyboard → screenshot |
examples/_2_hello_ios.py |
create iPhone sim → open URL → screenshot |
examples/_3_recording.py |
start / stop / download a screen recording |
examples/_4_file_transfer.py |
upload bytes, download a file back |
examples/_5_keepalive.py |
heartbeat for ephemeral sessions idle > 2 min |
examples/_6_hello_tvos.py |
tvOS: pick TV family + drive the Apple Remote |
examples/_7_hello_windows.py |
create Windows → run PowerShell → screenshot |
examples/_8_hello_ubuntu.py |
create Ubuntu → run bash → screenshot |
examples/_9_seeding.py |
typed setup: files, hosts, open URLs/apps |
examples/_10_snapshots.py |
snapshot seeded Ubuntu/Windows desktop state |
For agent loops and evals: use-computer-cookbook. Harbor job YAMLs should use Harbor's type: use-computer environment plus use_computer.harbor.agents:* agent wrappers.
Skill for AI coding assistants
Point your assistant at use-computer-cookbook/skills/SKILL.md — short body with per-topic references for macOS, Apple simulators, lifecycle, and the Harbor harness.
HTTP API
Every SDK method wraps https://api.use.computer/v1/... with Authorization: Bearer uc_live_.... Swagger: api.use.computer/docs. OpenAPI spec: api.use.computer/openapi.yaml.