How it works
When the agent needs to run something, it spins up a fresh virtual machine, runs the commands, and destroys it when done. The VM is isolated from the platform and the internet calls it makes originate from the VM itself, not your workspace. A typical flow:- Create a virtual machine (
create_vm). - Run bash commands inside it (
execute_bash) — Python, Node, shell, package installs, and long-running jobs are all fair game. - Transfer files in and out as needed — the agent can upload files you attached to the chat, or files stored as agent documents, and download results back into the chat.
When to use it
Virtual Machine is the right tool when the agent needs a real Linux environment. Common cases:- Office documents — create and edit
.xlsx,.pptx,.docx, and.pdffiles using libraries likeopenpyxl,python-pptx,python-docx,pypdf, andpandoc. - Data processing — crunch large CSV, JSON, or Parquet files with pandas, or run anything that needs more than a short in-chat script.
- Browser automation — Playwright is pre-installed (Chromium + Google Chrome) via the
vm-browser-automationskill, enabling stateful sessions, SPA scraping, form filling, and screenshot capture — no extra setup needed. - PDF generation — produce high-quality PDFs from Typst markup using the pre-installed Typst binary (
vm-typstskill), alongside the existing pandoc/pypdf support. - Package installs —
pip install,npm install, andapt-getwork for any additional libraries you need. - Longer-running jobs — multi-step pipelines, batch conversions, or commands that would exceed the in-chat code execution timeout.
File transfers
The agent can move files in both directions between the chat and the VM:- Upload — attach a file to the chat (or point the agent at an agent document) and the agent uploads it into the VM for processing.
- Download — after the VM produces output, the agent pulls the file back and saves it as a chat document or agent document that you can open or share.
Secrets
You can give the VM access to tokens — a GitHub PAT, an API key — without the agent ever seeing the real value. Create a Virtual Machine secret under Shared Assets → Secrets, then select it on the agent’s Virtual Machine capability. Every new VM gets that secret as an environment variable. Outbound HTTPS requests to the hosts you allow on the secret have the real value substituted into request headers; anywhere else, including the VM itself, only a placeholder is present. Three encodings cover the usual cases:- Header as-is — API tokens sent in
Authorization: Beareror a custom header. - Git / HTTP Basic Auth — the value is stored so the agent can send
Authorization: Basic $VAR. Use this with git’shttp.extraHeader, not a token in the URL. - GitHub PAT — one secret becomes two variables: the raw token for the GitHub API, plus a git-ready Basic Auth value. Default hosts are
github.comandapi.github.com.
Example use cases
- “Take this sales spreadsheet, pivot the numbers by region and month, and give me back a new
.xlsxwith charts.” - “Convert these ten Word documents to clean Markdown and save each one as an agent document.”
- “Fill in this PowerPoint template with the metrics from our database and email the deck to the leadership team.”
- “Run this Python script against
orders.csvand report the top 20 customers by revenue.” - “Scrape the pricing pages of these competitors using Playwright (pre-installed) and save the results to a CSV.”
- “Convert this Typst template into a formatted PDF report with our Q1 metrics.”
Related features
Code Execution
Lightweight in-chat code execution for calculations and quick transformations
Documents
Store files produced or consumed by the VM as agent or chat documents
Scheduling
Run VM-based workflows automatically on a schedule

