Drums documentation
Isolated Linux desktops for computer-use agents. Create one, act in it, fork it, and score it through one API.
Drums gives your agents real Linux desktops to work in: each desktop is an OSWorld Ubuntu machine with a 1920 x 1080 screen, restored from a checkpoint for every episode. You drive a desktop with pyautogui code or shell commands, read it with screenshots, and score it with the task's own checker. Every episode also carries a gate report that says whether the desktop was correctly restored and isolated, so you train or report only on rewards from valid episodes. A running desktop can be saved, or forked into N independent copies of the same state, which is how group rollouts start from one reached state. Desktops run on a worker host dedicated to your workspace, behind a gateway that checks your API key, its scopes, your quotas and your spend cap.
- Workspaceconsole.drums.run
- API keyYour codepip install drums-sdk
- HTTPSGatewaybeta.drums.run/gw
- bound hostWorker hostsingle-tenant, runs drumsd
- restore · forkDesktops1 … N per host
- 1
Workspace. Members and roles, limits and spend cap, audit log. A member creates an API key here; it is shown once.
- 2
Your code. The drums Python package, the MCP server, or any HTTP client, sending the key as a Bearer token over HTTPS.
- 3
Gateway. Checks the key, its scopes, your quotas and spend cap; maps ids to your workspace; writes the audit log.
- 4
Worker host. A Linux host that serves your workspace only. One running OS and application set, shared by every desktop on it.
- 5
Desktops. OSWorld Ubuntu, 1920 × 1080, 4 vCPU and 4 GiB each, in separate namespaces with no network. Restored from a template, forked, stepped and verified.
Start here
- Quickstart: an API key, the SDK, and a first verified rollout in a few minutes.
- Computers and templates: what a desktop is and what it runs.
- GRPO-style group rollouts: N copies of one task state with
fork(). - Claude Code, Cursor and Codex (MCP): the Drums MCP server, remote at the gateway's
/mcpor local withdrums mcp. - HTTP API and Python SDK: every endpoint and every public symbol.
What is available in this version
| Capability | How | Status |
|---|---|---|
| Create, act in, observe and close desktops | Python SDK or HTTP API, with an API key | Available |
| Score an episode with the task's checker, with its validity | env.verify() / POST /v1/slots/{id}/verify | Available |
| Save a desktop's state; fork N copies | env.save(), env.fork(n) / capture, branch | Available |
| Drive desktops from Claude Code, Cursor or Codex | MCP server: the gateway's /mcp endpoint or drums mcp | Available |
| Watch a desktop from the console | Screenshot viewer, observation only | Available |
| Scripted test runs | Runs > New run in the console, POST /v1/runs or client.create_run(); keystroke recipes | Available for a few OSWorld tasks |
| Model evaluation runs from the console | Runs > New run, model endpoint | Not offered yet: none verified end to end on this deployment |
| Training runs | Not offered in this version | |
| Billing | Not enabled. Compute cost is measured and labelled "not billed" |
You can evaluate a model today by driving desktops from your own code: see Evaluate a model on OSWorld tasks.
Names
The console, the SDK and the HTTP API grew up with different words for the same things. They are interchangeable:
| Console | Python SDK | HTTP API |
|---|---|---|
| Computer | Env | slot (/v1/slots) |
| Snapshot (saved state) | State, from env.save() | checkpoint (/v1/checkpoints), made by capture |
| Fork | env.fork(n) | branch |
| Template (base image) | image="osworld-ubuntu" | checkpoint id osworld-ubuntu |
| Restart | env.reset() | reset |
| Terminate | env.close() | DELETE /v1/slots/{id} |
Ids are shared: the computer id in the console is env.id in the SDK and the {id} in /v1/slots/{id}.
Endpoints
| URL | |
|---|---|
| Console | https://console.drums.run (invited teams) |
| Gateway | https://beta.drums.run/gw |
| OpenAPI document | https://beta.drums.run/gw/openapi.json |
| MCP server (remote) | https://beta.drums.run/gw/mcp |