A computer is a Linux machine that belongs to you rather than to a single conversation. Shell abilities normally run in an ephemeral sandbox that is created for a conversation and thrown away when it goes idle. Link those abilities to a computer and they run on it instead, so the tools an agent installs and the files it writes are there the next time any conversation uses the same computer.
Kinds of computer
- shell - a headless Linux environment for commands, scripts and files.
- desktop - a Linux desktop with a graphical session. Besides running commands, you can mint a short-lived link and watch or take over the screen from a browser.
The kind is chosen when the computer is created.
Creating a Computer
POST /api/v1/computer/create Content-Type: application/json { "name": "Research desktop", "description": "Browser and tools for the research agent", "kind": "desktop" }http
The response contains the ID of the new computer. A computer starts in the
stopped state and is provisioned the first time it is started or used.
Connecting Computers to Shell Abilities
Set linkedComputerId on a shell ability (for example shell/exec,
shell/read or shell/write) to run it on the computer. Abilities without
a computer keep the ephemeral sandbox behaviour.
POST /api/v1/skillset/{skillsetId}/ability/create Content-Type: application/json { "name": "Run command", "instruction": "template: shell/exec", "linkedComputerId": "computer_abc123" }http
Blueprints
Computers can belong to a blueprint like any other resource. Cloning a blueprint creates new, stopped computers of the same kind; the clone never shares the original's machine.
Listing Computers
GET /api/v1/computer/listhttp
Each item includes the computer's kind and its last known status. The
list supports the usual cursor, order, take, meta and blueprintId
parameters, and kind to list only shell or only desktop computers.
Fetching a Computer
GET /api/v1/computer/{computerId}/fetchhttp
{ "id": "computer_abc123", "name": "Research desktop", "kind": "desktop", "status": "running", "lastActiveAt": "2026-10-17T14:00:00.000Z", "createdAt": "2026-10-17T13:00:00.000Z", "updatedAt": "2026-10-17T14:00:00.000Z" }json
status is the last state the platform recorded. It changes when the
computer is started, stopped or provisioned on first use, and it can lag
behind a machine the sandbox reclaimed for idleness - starting the computer
refreshes it.
Updating a Computer
POST /api/v1/computer/{computerId}/update Content-Type: application/json { "name": "Research desktop (EU)", "meta": { "team": "research" } }http
The name, description, alias, blueprint and metadata can be changed. The
kind cannot: it is accepted only when it matches the computer's current
kind, and a different one fails with COMPUTER_KIND_IMMUTABLE. Create a
new computer to switch between shell and desktop.
Deleting a Computer
POST /api/v1/computer/{computerId}/deletehttp
Deleting a computer releases its machine and unlinks it from any shell abilities, which go back to running in an ephemeral sandbox.
If the machine cannot be released, the computer is kept and the call fails, so it can be retried without leaving a machine running.
Exporting Computers
GET /api/v1/computer/exporthttp
Exports the computers' definitions - name, description, kind, blueprint and metadata - for backup or migration. Runtime state is not exported.
Starting, Stopping and Restarting a Computer
POST /api/v1/computer/{computerId}/start POST /api/v1/computer/{computerId}/stop POST /api/v1/computer/{computerId}/restarthttp
Each returns the computer's status. Starting provisions a machine when the
computer has none and checks that a kept one is still alive. A computer is
also started on demand by the first command or file operation that uses it,
so calling start is optional.
Stopping releases the machine. Whether its files survive a stop depends on the sandbox the platform runs on, so keep anything important in a space or download it first.
Restarting stops the computer and starts it again. Use it when a computer stops responding: it succeeds even when the old machine is already gone.
Running Commands
POST /api/v1/computer/{computerId}/exec Content-Type: application/json { "command": "uname -a && df -h /", "timeout": 60000 }http
{ "exitCode": 0, "stdout": "Linux ...", "stderr": "" }json
A command that runs and fails is a normal result with a non-zero
exitCode. A computer that is not running is started first.
Sharing Files
Read and write text files on a computer by absolute path:
POST /api/v1/computer/{computerId}/file/write Content-Type: application/json { "path": "/home/user/notes.md", "contents": "# Notes" }http
POST /api/v1/computer/{computerId}/file/read Content-Type: application/json { "path": "/home/user/notes.md" }http
Contents are text and limited to 3 MB per request. For binary files, encode
them (for example with base64) through exec.
Remote Access to a Desktop
Mint a short-lived link that opens a desktop computer's screen in the browser over web VNC, so a person can watch the agent or take over - to sign in to a site, for example:
POST /api/v1/computer/{computerId}/session/create Content-Type: application/json { "durationInSeconds": 900 }http
{ "url": "https://...", "expiresAt": "2026-10-17T15:15:00Z" }json
The link is signed, valid for 10 minutes by default and at most one hour,
and anyone holding it can see and control the desktop. Mint a fresh link
each time one is needed rather than storing it. Shell computers have no
screen and return a COMPUTER_NOT_DESKTOP error.