DrumsBench

Experiments / EXP-013

Real-agent rollouts on matched arms through Bedrock (Experiment 2 of the plan)

Measure, with a frontier agent driving real desktop tasks, how many valid trajectories each environment arm yields per unit of time and money, and how often each arm corrupts a trajectory, under identical workload, model and frozen config.

plannedWritten and reviewed as code or protocol, but not executed. No numbers.
Date
2026-10-25
Hypothesis
On a frozen set of supported desktop tasks, the arms differ in environment time and cost per valid trajectory and in the rate of invalid or corrupted trajectories, while task success with the same model stays within noise.
Arms
bedrock-opus-cua, qemu-kvm-warm-snapshot, oci-runc-criu
Model
Claude Opus 5.5 via Amazon Bedrock (frozen config from EXP-012); evaluation only, outputs excluded from training
Workload
frozen set of 20 to 30 supported desktop tasks, OSWorld task definitions and external checkers where supported
Benchmark
drumsbench with the bedrock_cua adapter as the policy command
Code
claude/ecstatic-archimedes-456go6 at cf2adc4
Limitation
Nothing has run; the preflight that binds the adapter's contract has not passed, the workload is not frozen, and the Drums candidate arm has no passing restore to run on.

In one paragraph

Experiment 1 asks whether an environment is correct (isolation, reset, no contamination). Experiment 2 asks what it costs to get valid agent experience out of it. The plan is to run the same frontier agent, Claude Opus 5.5 through the Bedrock adapter of EXP-012, with the same frozen configuration, on the same frozen task set, against each environment arm, and to count what comes out: trajectories that completed, trajectories that failed the task but are still valid experience, trajectories that are invalid or corrupted by the environment, and the time and money spent on inference, on the environment, on verification and on recovery. The point is not whether Opus 5.5 is good at desktops. The point is whether the environment wastes its steps. Nothing has run. This record is the protocol and the preconditions.

Setup

What Experiment 2 measures

Per arm, per task, per seed, from the harness's receipts and the adapter's episode records:

quantitywhere it comes from
completed trajectoriesadapter ending done_claimed or max_steps and the external checker returning success
failed-but-valid trajectorieschecker returns task failure (exit 1) with every validity gate passed
invalid or corrupted trajectoriesisolation canary violated, fidelity hash mismatch after reset, policy or checker error, backend_error, protocol_error, action_rejected, any non-zero checker exit other than 1
task success ratecompleted over all valid trajectories, reported per arm with its denominator
inference time and costthe endpoint's own usage fields and api_seconds per call, summed per trajectory; price from the provider's published rate, settled only by reconciliation
environment time and costenvironment_seconds (execute, sleep, observe) plus the harness phases restore, reseed, reset and state hash, times the reconciled host rate
verification costtime of the checker, canary probe and state-hash phases per attempt
recovery overheadtime and attempts spent on failed restores or resets and on re-provisioning a slot after an invalid attempt

The headline per arm is cost per valid trajectory (environment plus verification plus recovery, inference reported separately because it is identical by design across arms) and the invalid rate. Both come from the same receipts the harness already hash-chains.

Rules fixed in advance

The frozen workload

The idea: 20 to 30 desktop tasks that every arm can support (GNOME Files, a text editor, a browser where the image has one), taken from OSWorld task definitions with their external checkers wherever the task's checker is a command or file inspection the harness can run from outside. Tasks whose checkers need an OSWorld component the arms do not expose are excluded, not approximated. The one task wired so far is the folder rename of EXP-007; the set is not frozen.

What ran

Nothing. No preflight, no episode, no workload freeze.

Results

None. No numbers will appear here until a run with receipts and episode records exists.

Failures and surprises

None recorded. The nearest observations are in EXP-012: the real endpoint rejected a trimmed history, and earlier runs ended as endpoint_error.

Limitations

Reproduce

The preflight that must pass first, bound to the frozen config:

python -m bedrock_cua freeze CONFIG.json
python -m bedrock_cua preflight --config FROZEN --screenshots DIR_OF_1920x1080_PNGS --out preflight-1 --turns 6

Then, per arm, with the adapter as the workload's policy command and the harness owning reseed, checker, canary and reset:

python -m drumsbench plan --workload W.json --arm baseline --baseline-config B.json
python -m drumsbench run --workload W.json --arm baseline --baseline-config B.json --money M.json --out-dir runs/exp2-baseline --execute
python -m drumsbench run --workload W.json --arm drums --arm-config D.json --money M.json --out-dir runs/exp2-oci --execute
python -m drumsbench reconcile ... && python -m drumsbench compare ...

Each run directory with its receipts.jsonl, summary.json, reconciled.json, the episode.json files and the NO_TRAINING_USE marker is the evidence this record is waiting for.

Sources