Cua

How many agent steps per second can one Mac run?

A trainer-style loop on one Mac completed 120.9 steps/s across 64 headless gVisor Spaces and 1,946 steps/s across 96 microVM Spaces (mean over each run, 20 steps per Space) on a Mac Studio (Apple M2 Max, 96 GB), measured 2026-10-25. The microVM run lasted about one second, so its figure is a burst rate.

Measured Build app 0.15.0, cua 0.9.0, cua-spacesd 0.8.0Result (JSON)

Results

Completed steps divided by the loop's wall time. Higher is better.

64 gVisor containers
120.9 steps/s
96 microVMs
1,946 steps/s
Every result on this page
ResultValuenMeasured
64 gVisor containers120.9 steps/s mean12802026-10-25
96 microVMs1,946 steps/s mean19202026-10-25

Method: 64 gVisor containers

Driver on the host: rollout_bench rollout --steps 20 (Rust SDK, built from the tag), the trainer-shaped loop, against 64 (headline) and then 256 running headless gVisor Spaces (the first 256-batch above, kept). Every Space runs 20 steps concurrently; one step = exec a short shell line that writes a reward file, upload a 4 KB action file, download the reward. steps/s = all completed steps / wall time of the loop. Workloads run in the Spaces; the trainer loop runs on the host.

Caveats

  • 64 of 256 running Spaces were stepped (the other 192 idle). At 256 Spaces the loop ran at 108.5 steps/s.
  • All gVisor Spaces run inside the built-in Linux runtime VM at its default size here (4 vCPU, 32 GiB).

Environment and build

MachineMac Studio, Mac14,13 (Mac Studio)
ChipApple M2 Max, 12 cores
Memory96 GB
OSmacOS 26.6.2 (25G83)
Wherelocal
Kindgvisor
Imageghcr.io/trycua/linux:24.04-slim
Shape1 vCPU, 1 GiB per Space, --headless
SettingsCUA_POOL_AUTO=off; built-in Linux runtime VM at its default size on this Mac, 4 vCPU / 32 GiB (CUA_RUNTIME_LINUX_CPUS=12 / MEMORY_GIB=64 were in the daemon's environment but the runtime VM was already running and kept its size, per the daemon log)
Other vms1
Networkn/a (local)
BuildCua Spaces 0.15.0 DMG (https://github.com/trycua/cua/releases/download/cua-spaces-v0.15.0/cua-spaces-0.15.0-darwin-universal.dmg, sha256 8725a09ba4132aa8a1667fa48c86416c91d5dec0d3c7dc93f88f5f3e29e0aba0): bundled cua 0.9.0, Helpers/cua-spacesd 0.8.0, cua-vz
App0.15.0
cua0.9.0
cua_spacesd0.8.0

Reproduce

# On an Apple silicon Mac (macOS 26), with Rust (rustup) and git:
curl -fLO https://github.com/trycua/cua/releases/download/cua-spaces-v0.15.0/cua-spaces-0.15.0-darwin-universal.dmg
hdiutil attach -nobrowse -mountpoint /tmp/cua-dmg cua-spaces-0.15.0-darwin-universal.dmg
mkdir -p ~/bench && ditto "/tmp/cua-dmg/Cua Spaces.app" ~/bench/"Cua Spaces.app" && hdiutil detach /tmp/cua-dmg
git clone --depth 1 --branch cua-spaces-v0.15.0 https://github.com/trycua/cua ~/bench/cua
(cd ~/bench/cua/libs/cua && cargo build --locked --release -p cua-sdk --example rollout_bench --example channel_bench)
export PATH="$HOME/bench/Cua Spaces.app/Contents/MacOS:$PATH" CUA_HOME=~/bench/home DO_NOT_TRACK=1 CUA_TELEMETRY=0
RB=~/bench/cua/libs/cua/target/release/examples/rollout_bench
CUA_POOL_AUTO=off cua daemon start --foreground &
ulimit -n 65536
$RB create --prefix u1- --n 256 --conc 64 --cpus 1 --memory-mb 1024 --kind container --runtime gvisor --headless --keep
$RB rollout --prefix u1- --n 64 --steps 20
$RB rollout --prefix u1- --n 256 --steps 20

Method: 96 microVMs

Driver on the host: rollout_bench rollout --steps 20 (Rust SDK, built from the tag) against 96 running headless microVM Spaces (runtime vz), created first with rollout_bench create --n 96 --conc 16 --keep. Every Space runs 20 steps concurrently; one step = exec a short shell line that writes a reward file, upload a 4 KB action file, download the reward. steps/s = completed steps / wall time of the loop. Also run at 64 microVMs.

Caveats

  • Burst rate: 20 steps x 96 Spaces finished in about 1 second. A longer run was not measured.
  • At 64 microVMs the loop ran at 1,859 steps/s.

Environment and build

MachineMac Studio, Mac14,13 (Mac Studio)
ChipApple M2 Max, 12 cores
Memory96 GB
OSmacOS 26.6.2 (25G83)
Wherelocal
Kindmicrovm (runtime vz)
Imageghcr.io/trycua/linux:24.04-slim
Shape1 vCPU, 1 GiB, --headless
SettingsCUA_POOL_AUTO=off
Other vms1
Networkn/a (local)
BuildCua Spaces 0.15.0 DMG (https://github.com/trycua/cua/releases/download/cua-spaces-v0.15.0/cua-spaces-0.15.0-darwin-universal.dmg, sha256 8725a09ba4132aa8a1667fa48c86416c91d5dec0d3c7dc93f88f5f3e29e0aba0): bundled cua 0.9.0, Helpers/cua-spacesd 0.8.0, cua-vz
App0.15.0
cua0.9.0
cua_spacesd0.8.0

Reproduce

# On an Apple silicon Mac (macOS 26), with Rust (rustup) and git:
curl -fLO https://github.com/trycua/cua/releases/download/cua-spaces-v0.15.0/cua-spaces-0.15.0-darwin-universal.dmg
hdiutil attach -nobrowse -mountpoint /tmp/cua-dmg cua-spaces-0.15.0-darwin-universal.dmg
mkdir -p ~/bench && ditto "/tmp/cua-dmg/Cua Spaces.app" ~/bench/"Cua Spaces.app" && hdiutil detach /tmp/cua-dmg
git clone --depth 1 --branch cua-spaces-v0.15.0 https://github.com/trycua/cua ~/bench/cua
(cd ~/bench/cua/libs/cua && cargo build --locked --release -p cua-sdk --example rollout_bench --example channel_bench)
export PATH="$HOME/bench/Cua Spaces.app/Contents/MacOS:$PATH" CUA_HOME=~/bench/home DO_NOT_TRACK=1 CUA_TELEMETRY=0
RB=~/bench/cua/libs/cua/target/release/examples/rollout_bench
CUA_POOL_AUTO=off cua daemon start --foreground &
$RB create --prefix rmv- --n 96 --conc 16 --cpus 1 --memory-mb 1024 --kind microvm --headless --keep
$RB rollout --prefix rmv- --n 64 --steps 20
$RB rollout --prefix rmv- --n 96 --steps 20

Cua commands use the published Cua Spaces 0.15.0 release and the public trycua/cua repository at the tag cua-spaces-v0.15.0. Downloads: result (JSON), this page as Markdown. This run recorded summary percentiles, not one row per sample, so there is no CSV.

Questions

What is one step?

Run a short shell line in the Space that writes a reward file, upload a 4 KB action file, and download the reward. The trainer loop runs on the host.

Is the microVM number sustained?

No. That run finished in about one second, so it is a burst rate; a longer run wasn't measured.

Can I run this myself?

Yes. The commands under Reproduce use the published Cua Spaces 0.15.0 release and the public trycua/cua repository at the tag cua-spaces-v0.15.0. A `cua bench run` command that wraps them is coming; it isn't in a release yet.

Checked 2026-10-25. Sources: the samples and result files above, measured by Cua. All benchmarks.

Open in your browser to continue

Sign-in often fails inside this app's built-in browser. Open this page in Safari or Chrome to continue.