Skip to main content
Glama

terrarium

Echte, wegwerfbare Computer in Sekunden, für dich und deinen KI-Agenten.

Forke eine frische Windows- oder Linux-Maschine, nutze sie, zerstöre sie, setze sie in der Zeit, die du zum Lesen dieses Textes brauchst, wieder auf makellos zurück.

CI Go Lizenz

ein Befehl, eine echte Windows-Maschine

Warum

Container sind der richtige Weg, einen Linux-Dienst auszuliefern, und der falsche Weg, ein ganzes System zu testen: Jeder Container leiht sich den Kernel des Hosts, daher kann ein Build, der in einem Container durchläuft, auf echter Hardware trotzdem scheitern. VMs haben das schon immer gelöst. Was ihnen fehlte, war der Container-Workflow: Image, ausführen, wegwerfen.

terrarium ist dieser Workflow auf Basis der VirtualBox, die du bereits hast. Forke ein Golden Image in einer Zehntelsekunde. Zerstöre den Fork und stelle ihn in Sekunden wieder her. Tue es von der Kommandozeile aus oder gib dieselbe Macht einem KI-Agenten über MCP. Es enthält keinen Virtualisierungscode, kapselt VBoxManage und fasst keine VM an, die es nicht selbst erstellt hat.

Wofür es verwendet wird:

  • Ziel setzen, gehen. Gib einem Agenten über MCP eine echte Wegwerf-Maschine und ein Ziel; er baut, scheitert, setzt zurück und versucht es erneut – ganz ohne Aufsicht, bis hin zur vollständigen Installation von etwas – und die Aufgabe kann den Bildschirm betreffen, nicht nur die Kommandozeile.

  • Lass einen Agenten eine Installation Ende-zu-Ende testen auf einer echten Maschine, vom ersten Boot bis zu einer funktionierenden App.

  • Lass einen Agenten eine Anleitung schreiben oder einen Bug reproduzieren und eine Schritt-für-Schritt-Screenshot-Spur oder ein GIF zurückgeben, genau wie die Aufnahmen in dieser README.

  • Isoliert, wegwerfbar, echt. Erledige sensible oder riskante Arbeiten auf einer Maschine, die du wegwerfen kannst, sodass sie niemals deine eigene berührt.

  • Tests auf sauberer Maschine. Führe dein Installationsprogramm oder deinen Build auf einer Maschine aus, die deine Entwicklungsumgebung noch nie gesehen hat, und „bei mir funktioniert es“ ist kein Argument mehr.

Related MCP server: wisp

Inhalt

Funktionen

Jede Aufnahme unten ist echt: echte Befehle, echte Screenshots, die aus dem Videospeicher des Gasts gelesen werden, und ein Timer, der echte Wanduhr-Sekunden anzeigt. docs/demo erklärt, wie sie entstehen.

Windows forken: ein Desktop aus dem kalten Zustand in ~40s

eine Windows-Maschine forken

Linux forken: SSH antwortet in ~20s

eine Linux-Maschine forken

Zerstöre sie, dann setze sie zurück: in 13s wieder sauber

eine Maschine über den Boot hinaus zerstören und dann zurücksetzen

Claude gewinnt Minesweeper auf XP: kein SSH, nichts installiert

Claude gewinnt Minesweeper auf einem Windows-XP-Fork über den Hypervisor

Wie es sich vergleicht

terrarium

Docker

VirtualBox

Vagrant

Hyper-V

Multipass

WSL2

eine echte, vollständige Maschine (eigener Kernel)

✅

❌

✅

✅

✅

✅

❌

Windows-Gäste

✅

❌

✅

✅

✅

❌

❌

Legacy-Gäste (XP-Ära)

✅

❌

✅

❌

❌

❌

❌

neue Maschine mit einem Befehl, in Sekunden

✅

✅

❌

❌

❌

❌

❌

in Sekunden auf sauberen Zustand zurücksetzen

✅

✅

❌

❌

❌

❌

❌

Umgebung als kleine Textdatei geteilt

✅

✅

❌

✅

❌

❌

❌

steuert reine GUI-Gäste (Bildschirm, Maus)

✅

❌

❌

❌

❌

❌

❌

eingebaute KI-Agenten-Werkzeuge (MCP)

✅

❌

❌

❌

❌

❌

❌

Produktionslasten

❌

✅

❌

❌

✅

❌

❌

läuft auf jedem Host-Betriebssystem

❌

✅

✅

✅

❌

✅

❌

Wenn deine Arbeit in einen Container passt, nimm Docker. Wenn es eine echte, vollständige Maschine braucht, die du kaputt machen und wieder reparieren kannst – und die letzten beiden Zeilen sind Preise, die du zahlen kannst – dann ist die erste Spalte der Sinn dieses Projekts. VirtualBox hat absichtlich eine eigene Spalte: terrarium läuft darauf, also ist die grüne Hälfte dieser Spalte die Engine, und die rote Hälfte ist das, was dieses Projekt hinzufügt.

Eine Entwicklungsumgebung pro Projekt

# terrarium.yaml, committed in your repo
image: ubuntu-24.04
cpus: 4
memory: 4096

terrarium up forkt eine nach dem Projekt benannte Umgebung, teilt den Projektordner unter /work im Gast und fügt sie zu ~/.ssh/config hinzu, sodass ssh <project> funktioniert und VS Code Remote-SSH es einen Klick entfernt sieht. down parkt sie, up holt sie zurück, revert setzt sie zurück.

Dein KI-Agent bekommt echte Computer

$ claude mcp add terrarium -- terrarium mcp

Dieselbe Binärdatei ist ein MCP-Server: jeder Befehl von oben als Werkzeug, plus screenshot, click, scroll, type und keys – Bildschirm, Maus und Tastatur werden über den Hypervisor injiziert, sodass nichts im Gast installiert wird und weder Netzwerk noch Gasterweiterungen nötig sind. So steuert ein Agent ein Installationsprogramm, einen Anmeldebildschirm oder ein Betriebssystem, das für SSH zu alt ist – genau das zeigt die Minesweeper-Aufnahme oben. Beim Verbinden weist der Server den Agenten an, zuerst doctor auszuführen und zu melden, was fehlt, statt planlos zu agieren.

  • „Forke eine saubere Umgebung, baue das Projekt darin und sag mir, was die README ausgelassen hat.“

  • „Installiere unsere App in der Windows-Umgebung und mache von jedem Schritt einen Screenshot.“

Für Windows-Gäste mit SSH öffnet terrarium rdp einen vollständigen Desktop, der bereits angemeldet ist.

Installation

$ scoop bucket add terrarium https://github.com/chryaner/terrarium
$ scoop install terrarium

Oder, mit Go >= 1.25, go install github.com/chryaner/terrarium/cmd/terrarium@latest, oder go build -o terrarium ./cmd/terrarium aus einem Klon.

Erfordert einen Windows-Host mit VirtualBox 7.x (VBoxManage im PATH). Dann prüfe, ob die Maschine bereit ist:

$ terrarium doctor

Linux-Images laden sich selbst herunter. Windows-Images werden aus einer Installations-ISO erstellt, die du bereitstellst – siehe Images für den Ablageort und den Grund.

Schnellstart

$ terrarium get debian-12          # build a golden: download, boot, snapshot (~40s)
$ terrarium fork debian-12 t1      # a throwaway machine, SSH-ready in ~20s
$ terrarium exec t1 -- uname -a
$ terrarium ssh t1
$ terrarium revert t1              # back to clean in seconds
$ terrarium rm t1

down und start parken und wecken eine Umgebung, ohne sie zu verlieren. fork --ttl 2h markiert eine Umgebung als ablaufend, und terrarium gc entfernt die abgelaufenen (und alle, deren VM du von Hand gelöscht hast).

Wie schnell

Vorgang

gemessen

Golden forken (verknüpfter Klon)

0.1 s

Linux-Fork bis SSH antwortet (kalt)

~20 s

Windows-Fork bis zu einem nutzbaren Desktop (kalt)

~40 s

auf sauberen Zustand zurücksetzen (RAM-Resume)

8-11 s

Snapshot einer laufenden Maschine (RAM)

4 s

Speicherplatz pro Fork

28-48 MB

Linux-Golden von Grund auf erstellen

~40 s

Gemessen auf einem Desktop (i9-14900K, NVMe, VirtualBox 7.2). Deine Zahlen werden abweichen; die Größenordnung nicht. Forks sind verknüpfte Klone: Sie teilen sich die Festplatte des Goldens, weshalb das Klonen eine Zehntelsekunde und Megabyte kostet, nicht Minuten und Gigabyte.

Images

Ein Golden ist das eigene veröffentlichte Image des Anbieters plus ein paar Zeilen YAML, sodass die Bytes immer von der Distribution stammen, die sie pflegt. Ein Image hinzuzufügen ist ein Pull-Request mit einer Datei.

Linux: wird für dich heruntergeladen

terrarium get <name> lädt das offizielle Cloud-Image herunter, versieht es mit einem generierten SSH-Schlüssel, bootet es einmal und erstellt einen Snapshot. Jeweils etwa eine Minute.

Rezept

heruntergeladen von

ubuntu-24.04

cloud-images.ubuntu.com

ubuntu-22.04

cloud-images.ubuntu.com

debian-12

cloud.debian.org

debian-13

cloud.debian.org

alma-9

repo.almalinux.org

rocky-9

dl.rockylinux.org

fedora-44

fedoraproject.org

opensuse-16.0

download.opensuse.org

Windows: eigene ISO mitbringen

Es gibt kein Windows-Cloud-Image und die Medien von Microsoft dürfen nicht weitergegeben werden, also lädst du die ISO einmal herunter und terrarium führt das echte Installationsprogramm unbeaufsichtigt aus:

  1. Lade die Installations-ISO von Microsoft herunter.

  2. Speichere sie in %LOCALAPPDATA%\terrarium\isos\, benannt nach dem Rezept: win10.iso, winxp.iso.

  3. terrarium get win10. Vollständig unbeaufsichtigt: etwa zehn Minuten für win10, sieben für XP.

win10 und winxp sind heute enthalten. XP stammt aus der Zeit vor OpenSSH, daher werden seine Forks über screenshot, click, type und keys gesteuert statt über exec, und sein Rezept benötigt einen Produktschlüssel, den du in einem lokalen Override angibst. Rezeptdetails, private Spiegel und die Interna der unbeaufsichtigten Installation findest du in docs/DESIGN.md.

Eigene Ebene erstellen

Ein Rezept kann auf einem anderen Image aufbauen statt auf Medien: from benennt die Basis, setup führt Befehle in einem Fork davon aus, und das Ergebnis wird zu einem neuen Golden zusammengeführt. Die YAML-Datei ist das teilbare Artefakt – ein Teammitglied mit derselben Datei baut aus seiner eigenen Basis eine äquivalente Maschine, sodass nie ein Festplatten-Image (und keine Windows-Lizenz) den Besitzer wechselt.

# %LOCALAPPDATA%\terrarium\recipes\team-dev.yaml
name: team-dev
from: debian-12
setup:
  - sudo apt-get update
  - sudo apt-get install -y git build-essential

terrarium get team-dev baut es in Sekunden auf einer vorhandenen Basis auf. Für Zustände, die du von Hand statt per Skript erstellt hast, macht terrarium promote <env> <name> aus einer konfigurierten Umgebung direkt ein Golden. terrarium rm --golden <name> entfernt ein Image, das du nicht mehr brauchst.

Was es nicht ist

  • Noch nicht plattformübergreifend. Der Host muss Windows mit VirtualBox sein. Jeder Hypervisor-Aufruf steckt absichtlich hinter einem einzigen Paket, daher ist ein QEMU- oder Hyper-V-Treiber eine geplante Tür, kein Versprechen.

  • Nicht für die Produktion. Forks sind Wegwerf-Ressourcen für Entwicklung und Tests.

  • Kein Geheimnisverwalter. Das Passwort eines Windows-Goldens wird lokal im Klartext gespeichert und ist während der Installation kurzzeitig in der VBoxManage-Befehlszeile sichtbar. Verwende ein Wegwerf-Passwort.

Lizenz

Apache-2.0. Rezepte, Issues und Feldberichte sind willkommen; der nützlichste Beitrag ist ein Rezept für ein Image, das Menschen tatsächlich nutzen.

Available Tools

24 tools
doctorA

Check that this machine can run terrarium at all: VirtualBox present and responding, state directory writable, SSH client available. Call this once before anything else. Cheap and safe to call at any time. If it reports ok:false, report the failing check and its fix to the user rather than working around it.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
okYes
checksYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states that the operation is a non-destructive check, calls it 'cheap and safe', and describes the failure contract involving ok:false with actionable remediation. This is strong transparency beyond what structured data provides.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded, with each sentence serving a distinct purpose: what is checked, when to call it, safety, and failure handling. There is no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless preflight check with an output schema, the description provides a complete practical contract: prerequisites checked, invocation order, safety profile, and failure behavior. Nothing essential for an agent to select or invoke the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there is no parameter documentation needed. The description appropriately focuses on behavioral contract rather than inputs, matching the baseline expected for a parameterless tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: checking whether the machine can run terrarium. It enumerates the specific checks performed (VirtualBox, state directory, SSH client), making it easy to distinguish from sibling env_* tools that manipulate or inspect environments.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance on when to call this tool ('once before anything else'), notes it is safe to call at any time, and explains how to handle a failure (report the failing check and its fix rather than working around it). This fully covers usage context and expected behavior.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

env_clickA

Click the environment's screen at a pixel position, 0-based, exactly as seen in env_screenshot. Left button unless button says otherwise; double for a double-click. Like env_screenshot it goes through the hypervisor and needs nothing of the guest, but the click lands wherever the pixel says, so screenshot first and aim. The environment must be running.

NameRequiredDescriptionDefault
xYespixel column, 0-based, as seen in env_screenshot
yYespixel row, 0-based, as seen in env_screenshot
nameYesname of the environment
buttonNoleft (default), right or middle
doubleNodouble-click

Output Schema

NameRequiredDescription
logNo
nameYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does substantial work: it explains that clicks go through the hypervisor, require no guest agent, and land exactly where the pixel points. It could add more about potential side effects, but for a click tool the core behavior is clearly disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the action. All three sentences carry useful information, though the middle sentence is slightly long and partially overlaps with schema-provided defaults.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a click tool with an output schema and 100% parameter coverage, the description covers coordinate sourcing, environment state, button behavior, double-click behavior, and the underlying mechanism. Nothing essential is missing for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description mostly restates what the schema already says about x/y being pixel positions and the button/double defaults; it adds operational context like "screenshot first" but little new parameter-level meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: "Click the environment's screen at a pixel position." It also clarifies the coordinate frame by referencing env_screenshot, which distinguishes this tool from screenshot, scroll, and type operations among the siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear operational conditions: "screenshot first and aim" and "The environment must be running." It also explains button and double-click behavior, but it does not explicitly contrast with alternatives such as env_type or env_scroll.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

env_createA

Create a blank environment with an installation ISO in its DVD drive and boot it, for an OS that has no recipe and no unattended installer - an old distribution, or one whose installer has to be answered by hand. The boot order is disk first, DVD second, so the installer runs while the disk is blank and the installed system boots itself afterwards. The result has no golden image and therefore no credentials: env_exec will not work on it. Drive the installer with env_screenshot, env_type, env_keys and env_click, and note that env_revert puts the blank disk back and restarts the install. When the OS is up, env_promote turns it into a golden - and golden_adopt then records the account created inside it. iso_path is a path on this host, where the server runs.

NameRequiredDescriptionDefault
cpusNoCPUs, default 2
nameYesname for the new environment: letters, digits and dashes
ostypeYesVirtualBox guest type, for example Linux_64, OpenSUSE_64 or Windows10_64
disk_gbNosize of the blank disk in GB, default 32; it is dynamic and grows on demand
iso_pathYesabsolute path on THIS host to the installation ISO
memory_mbNomemory in MB, default 2048

Output Schema

NameRequiredDescription
envYes
logNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does so thoroughly. It discloses boot order (disk first, DVD second), the lack of a golden image and credentials, the fact that env_exec will not work, and the behavior of env_revert resetting the blank disk and restarting the install.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence serves a purpose: purpose, boot behavior, missing credentials, drive workflow, and post-install promotion. The description is dense but well-structured, front-loading the core use case and then explaining consequences and next steps.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity and lack of annotations, the description is complete: it explains what is created, the boot/install flow, why env_exec won't work, how to interact during installation, and what to do afterward. An output schema exists, so return-value details are not required here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all six parameters. The description adds meaningful context beyond the schema by clarifying that iso_path is on the host where the server runs, and by tying disk_gb to the concept of a blank dynamic disk.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action: create a blank environment with an installation ISO in its DVD drive and boot it. It clearly targets OSes with no recipe and no unattended installer, distinguishing this from generic environment creation and from related sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use this tool: for an OS with no recipe and no unattended installer. It also routes the agent through follow-up tools like env_screenshot, env_type, env_keys, env_click, env_revert, env_promote, and golden_adopt, and warns that env_exec will not work on the result.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

env_downA

Shut an environment down cleanly, keeping its disk and its place in the environment list. env_start brings it back with everything intact.

NameRequiredDescriptionDefault
nameYesname of the environment

Output Schema

NameRequiredDescription
logNo
nameYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral disclosure burden. It reveals that the operation is clean, non-destructive, preserves disk and list placement, and is reversible via env_start. This is meaningful context beyond the bare tool name, though it could further clarify process termination or edge cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two compact sentences that lead with the action and the key persistence guarantee. Every sentence earns its place, with no filler or redundant schema restatement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with an output schema, the description gives the essential operational context: what happens (shutdown), what is preserved (disk and list position), and how to reverse it (env_start). It is sufficiently complete for an agent to invoke it correctly without needing more detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is only one parameter, 'name', and the schema already documents it as 'name of the environment' with 100% coverage. The description adds no additional parameter-specific meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific action verb ('Shut') with a clear resource ('an environment') and adds a key differentiator: it keeps the disk and the environment's place in the list. This distinguishes it from destructive siblings like env_rm and aligns it with env_start for lifecycle management.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description conveys when to use this tool: for a clean, non-destructive shutdown that preserves state. It explicitly references env_start as the way to bring the environment back, which helps an agent choose between down, start, and remove. It does not explicitly mention destructive alternatives, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

env_execA

Run a shell command inside an environment and return its exit code and output. The command is one shell string: pipes, redirects, globs and quoting are interpreted by the guest shell, unlike the CLI's terrarium exec, which passes its arguments literally. Which shell that is: /bin/sh on Linux guests; on a Windows guest, the shell recorded for its golden, which is PowerShell for a golden terrarium built and cmd.exe for an older or adopted one, unless terrarium adopt --shell said otherwise. Pass shell (powershell, cmd or sh) to run under a different one, and script instead of command for anything multi-line or heavily quoted - a script reaches the shell on stdin, so nothing in it is re-parsed on the way. The environment must be running. Commands run as a user with passwordless sudo, so this can change or destroy anything inside the guest - the host is not affected. A command that outruns timeout_sec is killed in the guest, with its child processes, and the error says what was killed: nothing is left running where you cannot see it. On a Windows guest an ordinary command runs in session 0, which has no screen: if it opens a window or a dialog it waits there forever and env_screenshot shows nothing. Set desktop to run it in the session a user is logged into instead, where env_screenshot can see what it wants. Only works when the environment's golden has SSH credentials; without them, use env_screenshot, env_type, env_keys and env_click.

NameRequiredDescriptionDefault
nameYesname of the environment to run in
shellNorun under this shell instead of the guest's own: powershell, cmd or sh
scriptNomulti-line script to run instead of command; it reaches the shell on stdin so nothing in it is quoted or split
commandNoshell command to run in the guest; omit when passing script
desktopNoWindows guests only: run in the session a user is logged into, so env_screenshot shows the window or dialog the command opens. Without it a command runs in session 0, which has no screen
timeout_secNoseconds to wait before giving up (default 300)

Output Schema

NameRequiredDescription
outputYes
exit_codeYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral disclosure burden, and it does so thoroughly: it warns about passwordless sudo and guest-only destruction, timeout kill behavior with child processes, Windows session 0 limitations, and the required SSH credential precondition. This is exemplary transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence earns its place, covering purpose, shell semantics, command vs script, security, timeout behavior, Windows desktop mode, and prerequisites. The core action is front-loaded, and the length is justified by the tool's complexity and safety implications.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter, side-effect-capable tool with platform-specific behavior and sibling alternatives, the description covers all essential decision points: shell choice, script vs command, timeout behavior, desktop mode, SSH requirement, and fallback tools. It is fully actionable for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, but the description still adds real meaning: it explains that command is a single shell string interpreted by the guest shell, script reaches stdin and avoids re-parsing, shell overrides the guest's shell, and desktop affects Windows session visibility. These clarifications materially help an agent choose parameter values correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states the specific verb and resource: run a shell command inside an environment and return exit code and output. It clearly differentiates from screen-interaction siblings like env_screenshot, env_type, and env_click, and from the CLI's terrarium exec.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use command vs script, when to pass shell, when to set desktop for Windows guests, and states the SSH-credential prerequisite with named alternatives. This goes well beyond implied usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

env_forkA

Create a new environment from a golden image and boot it. Takes under a minute and costs tens of MB of disk. The environment is disposable: anything done inside it is lost on env_rm, and env_revert rewinds it to the state it had right after this call. If the golden has no SSH credentials recorded - env_list shows an empty ssh_user, which is normal for an old or GUI-only system - env_exec will not work on the result. Drive it with env_screenshot, env_type, env_keys and env_click instead.

NameRequiredDescriptionDefault
cpusNoCPUs, default inherits the golden image
nameYesname for the new environment: letters, digits and dashes
goldenYesname of the golden image to fork, as reported by env_list
memory_mbNomemory in MB, default inherits the golden image
ttl_secondsNoauto-remove the env this many seconds from now; env_gc collects it. Omit for no expiry
share_host_pathNoabsolute host directory to mount at /work inside the guest, read-write

Output Schema

NameRequiredDescription
envYes
logNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses execution time, disk cost, disposability, the precise semantics of env_revert on this environment, and the SSH credential caveat that affects env_exec. This is unusually thorough and directly informs agent expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tightly packed sentences, with the core action front-loaded and every subsequent sentence adding operational value. It covers cost, lifetime, revert semantics, and a critical interaction caveat without waste or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a creation tool with six parameters and no annotations, the description is impressively complete. It explains the full lifecycle, failure mode, and alternative driving tools, while the presence of an output schema means return-value details need not be duplicated in prose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all six parameters. The description adds minimal parameter-specific guidance beyond mentioning the golden image's SSH state, which is relevant to the golden parameter. This meets the baseline but does not exceed it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action: 'Create a new environment from a golden image and boot it.' It clearly identifies the resource, the source, and the post-creation behavior, which differentiates env_fork from sibling tools like env_create and env_start.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context on when to use this tool: when you need an ephemeral environment forked from a golden image and booted. It also provides a specific routing rule for the result: if the golden has no SSH credentials, use env_screenshot, env_type, env_keys, and env_click instead of env_exec. It does not explicitly exclude alternatives like env_create, but the context is strong enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

env_gcA

Remove environments that have outlived the TTL set at fork time (ttl_seconds), plus any whose VM has vanished from VirtualBox. Environments forked without a TTL are never removed by age. Pass dry_run to see what would go without removing it. Good to call before finishing a session so short-lived envs do not pile up.

NameRequiredDescriptionDefault
dry_runNolist what would be removed without removing it

Output Schema

NameRequiredDescription
dry_runYes
removedYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explains what gets removed, the age-based exclusion for environments without a TTL, and the dry-run safety path. It could mention whether removal is permanent, but the core destructive behavior and conditions are transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: it states the action and criteria first, then the exception, then the dry-run behavior, then the recommended usage. Every sentence adds necessary information without wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter tool with an output schema, the description is largely complete. It covers what is removed, when to use it, and how to preview. It does not describe return values in detail, but the presence of an output schema reduces that burden.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers the single dry_run parameter at 100%, including its meaning. The description reinforces it with 'Pass dry_run to see what would go without removing it,' but adds little beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool removes environments, specifying the exact criteria (TTL expiration or vanished VirtualBox VM). It is scoped and readable, though it does not explicitly contrast itself with the sibling env_rm, so differentiation could be stronger.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete guidance: call it before finishing a session to prevent short-lived environments from piling up. It also explains the dry_run option. It does not explicitly say when not to use it or when to prefer env_rm, but the context is clear enough for most cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

env_keysA

Press keys and chords in the environment that env_type cannot express. Each entry in the list is one keystroke, and chords land as chords. The environment must be running. Valid key names: alt-f4, alt-tab, backspace, ctrl-a..ctrl-z, ctrl-alt-del, delete, down, end, enter, esc, f1, f10, f11, f12, f2, f3, f4, f5, f6, f7, f8, f9, home, left, pgdn, pgup, right, space, tab, up, win (the ctrl run is literal: ctrl-x, ctrl-d and so on). For the mouse, use env_click and env_scroll.

NameRequiredDescriptionDefault
keysYeskey names to press in order; each entry is one keystroke or chord
nameYesname of the environment

Output Schema

NameRequiredDescription
logNo
nameYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It discloses key mechanics: each list entry is one keystroke, chords land as chords, the ctrl run is literal, and the environment must be running. It does not discuss invalid-key handling or focus requirements, but the core side-effect profile is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than minimal, but every sentence is functional: purpose, usage boundaries, prerequisite, and valid keys all earn their place. It is slightly dense due to the key-name enumeration, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with an output schema, the description is essentially complete: it provides prerequisites, valid inputs, behavioral semantics, and sibling-tool routing. Minor gaps such as error behavior are not critical for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, but the description adds significant value beyond the schema by enumerating valid key names and clarifying chord semantics. The 'name' parameter is not expanded, but that is already adequately described in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb and resource: 'Press keys and chords in the environment.' It immediately scopes itself against env_type ('that env_type cannot express') and distinguishes itself from mouse tools, so an agent can tell what it does and what it is not.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use this tool versus env_type, names env_click and env_scroll as the alternatives for mouse actions, and states the prerequisite that the environment must be running. This gives clear decision criteria for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

env_listA

List the golden images available to fork from and the environments that exist, with their SSH ports and whether each is currently running. Read-only.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
envsYes
goldensYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It explicitly states the operation is read-only, which is a key safety trait, and describes exactly what data is returned. Given the zero-parameter, read-only nature, this is sufficient behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single well-structured sentence that front-loads the action and resource, includes the key details (SSH ports, running state), and ends with the read-only note. Every word contributes value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only list tool with an output schema, the description is complete. It states what is listed, the specific attributes returned, and the safety profile. No critical information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema documents no inputs, so there is nothing for the description to add. The baseline for zero-parameter tools is 4, and the description appropriately focuses on output semantics rather than parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and clearly identifies the resources: golden images available to fork from and existing environments, including SSH ports and running status. This distinguishes it from sibling tools like env_create, env_fork, and env_snapshot without needing to open their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly communicates what the tool provides, so an agent can infer it should be used when it needs to discover available golden images or environments and their connection/running state. It does not explicitly name alternatives or exclusions, but the read-only listing purpose is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

env_promoteA

Flatten an environment's current state into a new golden image that env_fork can use, so a machine configured during this session becomes a reusable fork source. A full disk copy: takes minutes and the disk of a golden, and afterwards depends on nothing. The environment is shut down first and left in place; remove it with env_rm if it is no longer needed once promoted. Promote only when the user wants the machine kept: the result is durable and only the user can remove it.

NameRequiredDescriptionDefault
nameYesenv whose current state becomes the golden
imageYesname for the new golden image: letters, digits, dots, dashes

Output Schema

NameRequiredDescription
logNo
goldenYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description fully carries the behavioral burden. It discloses that this is a full disk copy, takes minutes, consumes a golden's disk space, shuts the environment down, leaves it in place, and creates a durable artifact only the user can remove. This is rich and actionable context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, all substantive, with the core action first followed by cost, side effects, and usage guidance. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the operation's purpose, resource cost, duration, shutdown behavior, persistence, lifecycle, and cleanup path. Combined with the output schema, an agent has enough context to invoke it correctly and set expectations with the user.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description reinforces the role of each parameter (the environment's current state becomes the image) but adds limited detail beyond the schema's own parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific operation: flatten an environment's current state into a reusable golden image for env_fork. It distinguishes itself from sibling tools by naming env_fork and env_rm and explaining the golden-image role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent when to promote ('only when the user wants the machine kept'), notes the durable result, and points to env_rm for cleanup. It also identifies that the promoted image becomes the source for env_fork, giving clear selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

env_pullA

Copy a file or directory out of an environment onto this host, over the same connection env_exec uses. guest_path is inside the guest and always uses forward slashes, Windows guests included; local_path is on the host, where this server runs, and its missing parent directories are created. Set recursive for a directory. Needs the same credentials env_exec needs.

NameRequiredDescriptionDefault
nameYesname of the environment to copy out of
recursiveNocopy a directory and everything under it
guest_pathYespath inside the guest to copy from, forward slashes even on Windows guests (C:/Users/terrarium/x)
local_pathYespath on THIS host to copy to; the server runs on the host, not in the guest

Output Schema

NameRequiredDescription
nameYes
guest_pathYes
local_pathYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It reveals non-obvious behaviors: the connection mirrors env_exec, path conventions differ between guest and host, parent directories are auto-created, and credentials are required. It doesn't mention overwrite behavior, but the output schema covers response semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences with no filler: the core operation is first, followed by path semantics, then directory handling and credentials. Every sentence contributes unique information and nothing repeats the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter tool with full schema coverage and an output schema, the description covers the operation, path conventions, directory recursion, and authentication. The only notable gap is overwrite behavior for existing local files, but the agent still has enough to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds value beyond the schema by clarifying guest vs host path semantics, the Windows forward-slash convention, automatic parent-directory creation, and the role of the recursive flag.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise operation: 'Copy a file or directory out of an environment onto this host.' This clearly distinguishes it from siblings like env_push (opposite direction) and env_rm (non-destructive copy), and anchors it to env_exec's connection for context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides concrete usage constraints: guest_path always uses forward slashes even on Windows, local_path is on the host, missing parent directories are created, recursive is needed for directories, and the same credentials as env_exec are required. It doesn't explicitly name alternatives or exclusions, but the guidance is clear and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

env_pushA

Copy a file or directory from this host into an environment, over the same connection env_exec uses. local_path is on the host, where this server runs; guest_path is inside the guest and always uses forward slashes, Windows guests included (C:/Users/terrarium/setup.exe). Missing parent directories in the guest are created. Set recursive for a directory. Needs the same credentials env_exec needs.

NameRequiredDescriptionDefault
nameYesname of the environment to copy into
recursiveNocopy a directory and everything under it
guest_pathYespath inside the guest to copy to, forward slashes even on Windows guests (C:/Users/terrarium/x)
local_pathYespath on THIS host to copy from; the server runs on the host, not in the guest

Output Schema

NameRequiredDescription
nameYes
guest_pathYes
local_pathYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the responsibility for behavioral disclosure. It does well by stating direction, connection reuse, path format behavior, automatic creation of missing parent directories, recursive behavior, and credential requirements. It leaves overwrite semantics unspecified, which is a minor but real gap for a copy operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each with distinct operational content, and the core action is front-loaded. It is efficient overall, though it slightly repeats details already present in the schema parameter descriptions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a file-transfer tool with full schema coverage and an output schema present, the description covers the action, direction, path semantics, recursive behavior, parent directory creation, and credentials. Nothing critical for calling the tool correctly appears to be missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all four parameters at 100% coverage, including host/guest path semantics and recursive meaning. The description mostly restates this per-parameter information rather than adding new parameter-specific value, though it does add tool-level context about the connection and credentials.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening verb phrase 'Copy a file or directory from this host into an environment' clearly identifies the action, resource, and direction. The reference to the same connection env_exec uses also differentiates it from sibling tools such as env_pull or env_exec itself, making the tool's role unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear contextual guidance: it explains host vs guest paths, forward-slash conventions, the need for recursive when copying directories, and the shared credential requirement with env_exec. It does not explicitly name alternative tools or say when not to use this tool, so it stops short of full exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

env_restoreA

Rewind an environment to a named snapshot taken with env_snapshot. Everything done since that snapshot is lost. Use env_revert instead to go back to the environment's original clean state.

NameRequiredDescriptionDefault
nameYesname of the environment
snapYesname of the snapshot

Output Schema

NameRequiredDescription
logNo
nameYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

It states the side effect directly: 'Everything done since that snapshot is lost.'

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with three sentences: action, consequence, and alternative. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Within the context of many sibling tools, it clearly distinguishes env_restore from env_revert and references env_snapshot for snapshot creation. The warning about data loss is also provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description does not elaborate on parameters, but the schema provides descriptions for both 'name' and 'snap' as the environment and snapshot names, respectively. Since schema coverage is 100%, baseline 3 is maintained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the purpose: rewinding an environment to a named snapshot. It distinguishes it from env_revert for original state.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says 'Use env_revert instead' for a different scenario, providing a clear alternative. It also warns about losing changes, guiding appropriate usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

env_revertA

Discard everything done inside an environment since it was forked, returning it to its clean snapshot. Files written in the guest are lost. Takes seconds, because the snapshot includes RAM and the machine resumes rather than reboots.

NameRequiredDescriptionDefault
nameYesname of the environment

Output Schema

NameRequiredDescription
logNo
nameYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description fully carries the burden of warning about destructive behavior. It explicitly states that files written in the guest are lost and that the operation discards everything since the fork, while also explaining the performance characteristics (fast because RAM snapshot resumes rather than reboots).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, with the core action front-loaded in the first sentence. Subsequent sentences add important side effects and performance context without redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter destructive tool, the description covers what the tool does, what is lost, and why it is fast. An output schema exists, so return-value details are not required. No critical information is missing for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already describes the single parameter as 'name of the environment' with 100% coverage. The description reinforces that the tool operates on an environment but does not add further details about name format, lookups, or edge cases. Baseline 3 is appropriate because the schema handles the parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Discard') and clearly identifies the resource and scope: everything done in an environment since it was forked. It also clarifies the outcome ('returning it to its clean snapshot'), which separates it from sibling tools like env_restore that handle arbitrary snapshots.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use this tool: when you want to reset an environment back to its fork state and lose all changes made inside it. It does not explicitly mention alternatives or exclusions, but the intended use is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

env_rmA

Destroy an environment and delete its disks. Everything inside it is gone for good. The golden image it was forked from is untouched.

NameRequiredDescriptionDefault
nameYesname of the environment

Output Schema

NameRequiredDescription
logNo
nameYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly warns that the environment is destroyed, its disks are deleted, everything inside is permanently gone, and the golden image remains unaffected. This is excellent transparency for a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences deliver the core action first, then the critical irreversibility warning, then the scope clarification about the golden image. Every sentence earns its place, and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter destructive tool with an output schema, the description is complete. It explains the action, the irreversible consequences, and what is not affected, giving an agent all the behavioral context needed to call this tool safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides 100% coverage for the single required parameter, 'name', described as 'name of the environment'. The description does not add further parameter-level details, but it does not need to because the schema fully documents the only input.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool destroys an environment and deletes its disks, a specific destructive action on a specific resource. It also distinguishes this from siblings like env_down, env_restore, and env_revert by emphasizing permanence and the golden image being untouched.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the usage context clear: use this when you intend to permanently destroy an environment. It does not explicitly name alternatives such as env_down or env_snapshot for non-destructive operations, but the irreversible wording strongly implies the boundary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

env_screenshotA

Capture a running machine's screen and return it as an image. This is how to see a guest that has no SSH - it needs nothing of the guest, not even a network. The name can be an environment, a golden image, or any VirtualBox VM by name: reading a screen changes nothing, so this one is safe to point at a machine terrarium does not manage. The input tools (env_type, env_keys, env_click, env_scroll) are environments only. The machine must be running. The screen lags behind keystrokes, so after env_type or env_keys take a fresh screenshot to see what actually happened.

NameRequiredDescriptionDefault
nameYesname of the environment, golden image, or VirtualBox VM

Output Schema

NameRequiredDescription
widthYes
heightYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states the operation is side-effect-free ('reading a screen changes nothing'), declares the tool needs nothing from the guest ('not even a network'), and reveals the lag behavior that could otherwise confuse an agent interpreting results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence earns its place: the first states the primary action, the second gives the key use case, the third clarifies scope and safety, the fourth distinguishes from environment-only input tools, and the last covers the running precondition and lag caveat. The description is front-loaded and free of filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with an output schema, the description is complete. It covers purpose, accepted target types, preconditions, safety, and a known timing quirk. There is no missing information an agent would need to decide whether to call this tool and how to interpret its behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents the `name` parameter as 'name of the environment, golden image, or VirtualBox VM.' The description adds a little clarity by restating accepted target kinds and emphasizing the tool works on any VirtualBox VM by name, but it does not meaningfully expand parameter semantics beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-resource pair: 'Capture a running machine's screen and return it as an image.' It also distinguishes this tool from the input-oriented sibling tools by clarifying that env_type, env_keys, env_click, and env_scroll operate only on environments, while env_screenshot can also target golden images and unmanaged VirtualBox VMs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use the tool: 'This is how to see a guest that has no SSH.' It provides clear preconditions ('The machine must be running'), notes a timing caveat ('The screen lags behind keystrokes'), and gives follow-up guidance to take a fresh screenshot after typing or key presses. It also signals a safe expansion of scope by noting the tool works for machines terrarium does not manage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

env_scrollA

Scroll the environment's mouse wheel: the pointer moves to the given pixel position, then the wheel turns there. Positive clicks scroll down, negative up. The environment must be running.

NameRequiredDescriptionDefault
xYespixel column to scroll at, 0-based
yYespixel row to scroll at, 0-based
nameYesname of the environment
clicksYeswheel clicks: positive scrolls down, negative up

Output Schema

NameRequiredDescription
logNo
nameYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does well: it discloses that the pointer moves first, then the wheel turns, and explains the sign convention for scrolling direction. It does not mention potential side effects beyond the scroll, but that is acceptable for this focused action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. It front-loads the core action, then provides the coordinate mechanics, direction semantics, and running-environment prerequisite efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description, combined with the fully documented input schema and an output schema, is complete enough for a simple pointer-scroll tool. It covers prerequisites and behavior; only a short explicit note about when to choose this over env_click would make it fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all four parameters. The description adds a bit of behavioral context around how x/y and clicks are used, but most parameter semantics already come from the schema, justifying the baseline score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool scrolls the environment's mouse wheel and explains the coordinate-based behavior. It does not explicitly contrast itself with sibling tools like env_click, but the verb and resource are specific enough to be unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used when a scroll gesture is needed at a pixel position, and it states a prerequisite: the environment must be running. However, it gives no explicit guidance on when to prefer this over related sibling tools such as env_click or env_type.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

env_snapshotA

Take a named snapshot of an environment, to come back to later with env_restore. A running environment has its RAM captured too, so restoring resumes rather than reboots. Cheap: seconds, and only the changed disk blocks.

NameRequiredDescriptionDefault
nameYesname of the environment
snapYesname of the snapshot

Output Schema

NameRequiredDescription
logNo
nameYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does well: it discloses that RAM is captured for running environments, that restore resumes rather than reboots, and that the operation is cheap and only stores changed disk blocks. These are genuinely useful behavioral details beyond the bare action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler. The core action is front-loaded, followed by a behavioral nuance (RAM capture) and a cost/performance note. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with an output schema, the description fully covers purpose, relationship to env_restore, behavioral implications, and cost. There are no significant gaps that would prevent an agent from using it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and both parameters (name, snap) are already documented in the schema. The description adds context that the snapshot is named, matching the snap parameter, but does not add new semantic detail beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb and resource: 'Take a named snapshot of an environment.' It also explicitly distinguishes the tool from its restore counterpart by naming env_restore, so an agent can tell it apart from siblings like env_revert or env_fork.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'to come back to later with env_restore' gives clear contextual guidance on how the snapshot relates to future restoration. It implies the intended use but does not explicitly state when not to use it or compare it against other snapshot-like siblings such as env_revert.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

env_startA

Boot a stopped environment and wait until SSH answers. Does nothing if it is already running. Fails if no environment by that name exists - use env_fork to create one.

NameRequiredDescriptionDefault
nameYesname of the environment

Output Schema

NameRequiredDescription
envYes
logNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It discloses idempotency ('Does nothing if it is already running'), a blocking wait until SSH answers, and a failure mode for nonexistent names. It does not mention timeout behavior or return values, but the output schema covers some of that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each carrying unique information: main action and wait, idempotent behavior, failure mode with corrective alternative. No filler and the essential behavior is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter boot tool with an output schema, the description covers the core behavior, the no-op case, the error case, and the correct fallback tool. Nothing essential for selecting and invoking it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes 'name' fully, but the description adds contextual meaning: the name must reference an existing environment, and a missing environment causes failure rather than creation. This helps the agent avoid calling env_start with a new name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-resource pair, 'Boot a stopped environment,' and clarifies the exact wait condition ('until SSH answers'). It also distinguishes itself by stating it is a no-op on a running environment and fails for missing names, so it is clearly separate from creation tools like env_fork or env_create.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states when to use the tool (start a stopped environment and wait for SSH) and explicitly routes the missing-environment case to env_fork: 'use env_fork to create one.' It does not enumerate all sibling exclusions, but the key alternative is covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

env_typeA

Type text into the environment's keyboard, as if a person were at it - the keystrokes go wherever the guest's focus happens to be, so check with env_screenshot first. Environments only: to type into a golden image, env_fork it and type into the fork. The environment must be running. Takes effect a moment after the call returns.

NameRequiredDescriptionDefault
nameYesname of the environment
textYestext to type, as if at the keyboard
press_enterNopress enter after the text

Output Schema

NameRequiredDescription
logNo
nameYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It discloses non-obvious traits: keystrokes go wherever focus is, effects appear a moment after return, and the environment must be running. This is meaningful transparency, though it stops short of describing failure modes or how special characters are handled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence earns its place: the action, focus caveat, screenshot prerequisite, golden-image routing, running requirement, and delayed effect are all packed concisely with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given an output schema and full parameter coverage, the description covers the key operational context: preconditions, focus behavior, timing, and environment vs golden-image routing. The main omission is explicit guidance on when env_type is preferable to env_keys, but this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents name, text, and press_enter. The description reinforces the 'as if at a keyboard' framing but adds little per-parameter meaning beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific action ('Type text into the environment's keyboard') and resource (the environment), and clarifies that keystrokes go to the guest's current focus. It differentiates from click/scroll tools and from golden-image usage by directing to env_fork, but it does not explicitly distinguish from the sibling env_keys, which may overlap in purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: check env_screenshot first, only use on running environments, and for golden images fork first. It also specifies the environment must be running. However, it does not state when to use env_type versus closely related alternatives like env_keys or env_exec, so the guidance is good but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

golden_adoptA

Record a VirtualBox VM that already exists on this machine as a golden image env_fork can use. The VM itself is not modified unless take_snapshot is set. Re-running it updates the record, which is how credentials are added later: adopt a machine with no user or password, fork it, read its login prompt with env_screenshot, try a guess with env_type, then adopt again with what worked. Records nothing about the guest that was not observed - never invent a user or password here.

NameRequiredDescriptionDefault
vmYesname of the existing VirtualBox VM, as shown by env_list or terrarium ls
keyNopath to an SSH private key for the guest, if there is one
userNoSSH user inside the guest, if it is known
imageNogolden image name to record it under (default: the VM name)
shellNowhat an SSH session lands in: posix, cmd or powershell; Windows guests are probed on first exec when unset
passwordNoSSH password inside the guest, if it is known
snapshotNosnapshot to fork from (default terrarium-base)
transportNohow to reach the guest: ssh (default), or guestcontrol for a Windows with no SSH server, which talks through VirtualBox Guest Additions and needs user and password
take_snapshotNocreate the snapshot if the VM does not have it yet; this modifies the user's VM

Output Schema

NameRequiredDescription
logNo
goldenYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral transparency burden. It explicitly discloses that the VM is not modified unless take_snapshot is set, that re-running updates the existing record, and that nothing unobserved is recorded ('never invent a user or password'). These are meaningful disclosures beyond schema fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no wasted words: the first gives purpose, the second gives side-effect scope, and the third gives an actionable workflow. The dense workflow sentence earns its place because it explains a non-obvious multi-step usage pattern.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter tool with no annotations, the description covers the non-obvious behavioral traits, the credential-adding workflow, and the honesty constraint. Parameter details are already in the schema, and an output schema exists. A minor gap is not explicitly contrasting with golden_import, but 'already exists on this machine' largely covers that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by explaining how user and password are intentionally optional and later populated through a second adoption after observing the guest, and by tying take_snapshot to the only modifying behavior. This goes slightly beyond the schema's per-parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb ('Record'), a specific resource ('a VirtualBox VM that already exists on this machine'), and the purpose ('as a golden image env_fork can use'). The phrase 'already exists on this machine' clearly distinguishes it from golden_import or other image-creation tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a clear workflow: adopt without credentials, fork, observe via env_screenshot, guess via env_type, and re-adopt with working credentials. It also says re-running updates the record. It does not explicitly name golden_import as the alternative, but the 'already exists' qualifier gives enough routing context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

golden_getA

Build a golden image from a recipe so environments can be forked from it. Slow and bandwidth-heavy: downloads roughly 500 MB the first time, then imports the appliance, boots it once for cloud-init, shuts it down and snapshots it. Takes minutes, and a Windows image takes closer to an hour because it runs a real installer. A recipe with from instead builds on an existing golden: it forks the base, runs the recipe's setup commands in the fork, and flattens the result into the new golden. Use recipe_list for the names that work here. Fails if the golden already exists - rebuilding one is a decision for the human.

NameRequiredDescriptionDefault
cpusNoCPUs for the golden image (default 2)
imageYesimage name from a recipe, for example ubuntu-24.04 or alma-9
memory_mbNomemory in MB for the golden image (default 2048)

Output Schema

NameRequiredDescription
logNo
goldenYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With zero annotations, the description carries the full burden and delivers: it discloses that the operation is slow and bandwidth-heavy, downloads ~500 MB, boots once for cloud-init, takes minutes (up to an hour for Windows), and fails if the golden already exists. This is exceptional behavioral disclosure covering performance, side effects, process steps, and failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core action is front-loaded in the first sentence, and every subsequent sentence earns its place: performance profile, process steps, the `from` variant, and the failure caveat. It is long (~120 words), but the tool genuinely has two modes and heavy operational consequences, so the density is justified with no wasted phrasing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, long-running, resource-heavy build operation with no annotations and an output schema present, the description covers all essential ground: purpose, step-by-step behavior, expected duration, failure condition, and how to source valid inputs. The output schema handles return values, so nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all three parameters, giving a baseline of 3. The description adds genuine value on top: pointing to recipe_list as the source for valid image values and explaining that a `from`-recipe changes the build semantics. cpus and memory_mb receive nothing extra, but they need nothing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'Build a golden image from a recipe' — and immediately explains the purpose ('so environments can be forked from it'). The workflow detail (importing, booting for cloud-init, snapshotting) clearly separates it from related siblings like golden_import and golden_adopt, so an agent can distinguish them without opening their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit direction to consult recipe_list for valid image names and warns that rebuilding an existing golden is a human decision, an implicit when-not-to-use. It also distinguishes the two recipe modes (base vs `from`). However, it never explicitly contrasts with golden_import or golden_adopt, which are the closest alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

golden_importA

Register an .ova or .ovf appliance file already on this machine as a golden image. Unlike golden_get there is no recipe and no download, and nothing is seeded: an appliance exported from somewhere else has no cloud-init to wait for. The VM is imported, snapshotted where it stands and recorded as a golden env_fork can use. Credentials are optional - import without them, then work the login out through env_fork, env_screenshot and env_type, and record it with golden_adopt. Creates something durable that only the user can remove, so do it when the task asks for it.

NameRequiredDescriptionDefault
keyNopath to an SSH private key for the guest, if there is one
userNoSSH user inside the guest, if it is known
imageYesname for the new golden image: letters, digits, dots, dashes
ova_pathYespath to the .ova or .ovf appliance file on this machine
passwordNoSSH password inside the guest, if it is known

Output Schema

NameRequiredDescription
logNo
goldenYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden and meets it: it states the side effects ('imported, snapshotted where it stands and recorded as a golden image'), lifecycle ('durable that only the user can remove'), and non-behaviors ('no recipe and no download', 'nothing is seeded', no cloud-init to wait for). This is far richer than what the tool name alone would reveal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five sentences, each with a distinct payload: core purpose, sibling contrast, side effects, credential workflow, and durability caution. It is dense and not front-loaded beyond the first sentence, but the length is earned given 5 parameters, multiple related siblings, and significant side effects to disclose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values need no explanation. The description covers purpose, alternatives, side effects, durability, and the credential-discovery workflow. Minor gaps remain—idempotency on re-import and expected duration for a VM import—but nothing that would block a correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds genuine value on top by explicitly declaring credentials (key, user, password) optional and prescribing the fallback workflow when they are unknown, which the schema only hints at with 'if it is known'/'if there is one.'

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource+outcome: 'Register an .ova or .ovf appliance file already on this machine as a golden image.' It explicitly differentiates from the closest sibling ('Unlike golden_get there is no recipe and no download') and cross-references golden_adopt, so an agent can tell this tool apart from related golden-* tools without opening their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names golden_get as the alternative and states the differentiator (recipe/download vs. local import). It also prescribes a full decision path: import without credentials, discover login via env_fork/env_screenshot/env_type, record with golden_adopt, and warns 'do it when the task asks for it' for a durable resource. Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

recipe_listA

List the images that CAN be built into golden images with golden_get. This is the catalogue of what is available to build; env_list reports what has actually been built and what can be forked right now. Read-only.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
recipesYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden, and it explicitly declares 'Read-only.' It also adds meaningful behavioral context by clarifying that the list reflects buildable images rather than existing environments. It does not mention error/empty-result behavior, but that is a minor gap for a parameterless listing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: core purpose, sibling contrast, and read-only disclosure. The main purpose is front-loaded and there is zero filler or repetition of schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless, read-only listing with an output schema available, the description is complete: it states purpose, distinguishes from env_list, and discloses side-effect behavior. Nothing an agent needs to select and invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to add; the rubric sets a baseline of 4 for parameterless tools. Schema description coverage is trivially 100% with an empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List'), a precise resource ('images that CAN be built into golden images with golden_get'), and immediately differentiates itself from env_list by scope. An agent can tell what this tool does and how it differs from siblings without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names env_list as the alternative and gives the selection condition: recipe_list is the catalogue of what is available to build, while env_list reports what has actually been built and can be forked right now. This contrast leaves no ambiguity about which tool to choose for a given intent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 24 tool updatesv0.1.2
    • First observeddoctor
    • First observedenv_click
    • First observedenv_create
    • First observedenv_down
    • First observedenv_exec
    • First observedenv_fork
    • First observedenv_gc
    • First observedenv_keys
    • First observedenv_list
    • First observedenv_promote
    • First observedenv_pull
    • First observedenv_push
    • First observedenv_restore
    • First observedenv_revert
    • First observedenv_rm
    • First observedenv_screenshot
    • First observedenv_scroll
    • First observedenv_snapshot
    • First observedenv_start
    • First observedenv_type
    • First observedgolden_adopt
    • First observedgolden_get
    • First observedgolden_import
    • First observedrecipe_list

TDQS

A4.1/5.0

Scored across 24 tools

Disambiguation5/5

Every tool maps to a distinct resource and action: golden creation (golden_get/import/adopt), environment lifecycle (fork/create/start/down/rm), state management (snapshot/restore/revert), and interaction (screenshot/type/keys/click/scroll/exec/pull/push). The closest pair, env_restore and env_revert, is clearly differentiated by snapshot vs. original state.

Naming Consistency4/5

The env_* and golden_* prefixes give a strong, predictable grouping, and most names follow an action-style pattern (env_start, env_fork, env_push). Minor deviations like env_keys, env_screenshot, and the unprefixed doctor/recipe_list keep it from being perfectly uniform.

Tool Count3/5

At 24 tools, this sits in the heavy 16–25 range, though the VM lifecycle scope is broad enough that each tool has a distinct purpose. It feels borderline rather than bloated or redundant.

Completeness4/5

The set covers the full environment lifecycle: golden image creation/import, forking, power management, screenshots, keystrokes, command execution, file transfer, snapshots, promotion, and cleanup. Minor gaps exist—no golden deletion tool and no way to list snapshots—but core workflows have no dead ends.

Maintenance

ActivitySlowing
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    A
    maintenance
    A virtual Linux desktop as an MCP server, shipped in Docker. Agents drive screen, mouse, keyboard across any GUI — browsers, IDEs, office suites, Wine/Windows apps, legacy software — many in parallel.
    12
    155
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides bounded, observable access to graphical apps, browsers, terminals, Android devices, virtual machines, and SSH hosts through MCP tools, enabling safe automation and app QA.
    109 npm
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    Provider-neutral MCP server for managing VirtualBox, VMware Fusion, and VMware Workstation, offering tools for VM lifecycle, configuration, snapshots, guest operations, networking, and artifact resolution.
    MIT