terrarium
terrarium
真实、可抛弃的计算机,数秒即可获得,供你和你的 AI 代理使用。
克隆一台全新的 Windows 或 Linux 机器,使用它、弄坏它,然后在读完这句话的时间内把它恢复得一尘不染。

为什么
容器是交付 Linux 服务的正确方式,但却是测试整个系统的错误方式:每个容器都借用宿主机的内核,因此在一个容器中通过的构建仍可能在真实硬件上失败。虚拟机一直能解决这个问题。它们所缺少的是容器的工作流:镜像、运行、丢弃。
terrarium 将这一工作流构建在你已有的 VirtualBox 之上。十分之一秒内克隆一个黄金镜像。弄坏克隆体,然后在几秒内恢复。从命令行操作,或通过 MCP 将同样的能力交给 AI 代理。它不附带任何虚拟化代码,只是封装 VBoxManage,并且从不触碰它未创建的虚拟机。
人们用它来做什么:
设定目标,然后走开。 通过 MCP 给代理一台真实、可抛弃的机器和一个目标;它会自行构建、失败、回滚、重试,全程无需监督,直到端到端地安装好某个东西——而且任务可以涉及屏幕,而不仅仅是命令行。
让代理在真实机器上端到端测试安装,从首次启动到应用可用。
让代理编写指南或复现 bug,并交回一步步的截图轨迹或 GIF,就像本 README 中的录制一样。
隔离、可抛弃、真实。 在一台可以丢弃的机器上做敏感或高风险的工作,这样它永远不会触及你自己的机器。
干净机器测试。 在一台从未接触过你的开发环境的机器上运行安装程序或构建,这样“在我机器上能跑”就不再是借口。
Related MCP server: windows98-mcp
目录
功能
下面的每段录制都是真实的:真实的命令、从客户机视频内存中读取的真实截图,以及显示真实挂钟秒数的计时器。docs/demo 说明了它们的制作方法。
克隆 Windows:冷启动到桌面 ~40s

克隆 Linux:SSH 响应 ~20s

变砖,然后恢复:13 秒内恢复干净

Claude 在 XP 上通关 Minesweeper:无需 SSH,无需安装任何东西

对比
terrarium | Docker | VirtualBox | Vagrant | Hyper-V | Multipass | WSL2 | |
真实、完整的机器(自己的内核) | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ |
Windows 客户机 | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ |
旧版客户机(XP 时代) | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
一条命令、数秒内获得新机器 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
数秒内重置为干净状态 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
以小型文本文件共享环境 | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
驱动仅 GUI 的客户机(屏幕、鼠标) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
内置 AI 代理工具(MCP) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
生产工作负载 | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ |
可在任何主机操作系统上运行 | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ |
如果你的工作适合放在容器里,就用 Docker。当它需要一台可以弄坏再修好的真实、完整的机器时——而且最后两行是你愿意付出的代价——第一列就是这个项目的意义所在。VirtualBox 特意拥有自己的一列:terrarium 运行在它之上,所以那一列的绿色部分是引擎,红色部分是这个项目新增的内容。
每个项目一个开发环境
# terrarium.yaml, committed in your repo
image: ubuntu-24.04
cpus: 4
memory: 4096terrarium up 会克隆一个以项目命名的环境,将项目文件夹共享到客户机的 /work,并将其添加到 ~/.ssh/config,因此 ssh <project> 可以工作,VS Code Remote-SSH 也能一键看到它。down 将其停驻,up 将其唤醒,revert 将其重置。
你的 AI 代理获得真实计算机
$ claude mcp add terrarium -- terrarium mcp同一个二进制文件也是一个 MCP 服务器:上面的每条命令都是一个工具,此外还有 screenshot、click、scroll、type 和 keys——通过虚拟机管理程序注入屏幕、鼠标和键盘,因此无需在客户机中安装任何东西,也无需网络或增强功能。这就是代理驱动安装程序、登录屏幕或太老而无法使用 SSH 的操作系统的方式——正是上面 Minesweeper 录制所展示的。连接时,服务器会告诉代理先运行 doctor,并报告缺少了什么,而不是盲目乱试。
克隆一个干净的环境,在其中构建项目,告诉我 README 遗漏了什么。
在 Windows 环境中安装我们的应用,并逐步截图。
对于启用了 SSH 的 Windows 客户机,terrarium rdp 会打开一个已登录的完整桌面。
安装
$ scoop bucket add terrarium https://github.com/chryaner/terrarium
$ scoop install terrarium或者,在 Go >= 1.25 的情况下,运行 go install github.com/chryaner/terrarium/cmd/terrarium@latest,或在克隆的仓库中运行 go build -o terrarium ./cmd/terrarium。
需要一台装有 VirtualBox 7.x 的 Windows 主机(VBoxManage 在 PATH 中)。然后检查机器是否就绪:
$ terrarium doctorLinux 镜像会自动下载。Windows 镜像则由你提供的安装 ISO 构建——有关放置位置和原因,请参阅 镜像。
快速开始
$ 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 t1down 和 start 可以停驻和唤醒环境而不丢失它。fork --ttl 2h 将环境标记为过期,terrarium gc 会移除已过期的环境(以及你手动删除其 VM 的任何环境)。
速度如何
操作 | 实测 |
克隆黄金镜像(链接克隆) | 0.1 s |
Linux 克隆到 SSH 响应(冷启动) | ~20 s |
Windows 克隆到可用桌面(冷启动) | ~40 s |
恢复到干净状态(RAM 恢复) | 8-11 s |
对运行中的机器拍摄快照(RAM) | 4 s |
每个克隆的磁盘占用 | 28-48 MB |
从零构建 Linux 黄金镜像 | ~40 s |
在一台台式机(i9-14900K、NVMe、VirtualBox 7.2)上测得。你的数字会不同;但趋势不会。克隆体是链接克隆:它们共享黄金镜像的磁盘,这就是为什么克隆只需十分之一秒和几 MB,而不是几分钟和几 GB。
镜像
黄金镜像是供应商自己发布的镜像加上几行 YAML,因此字节始终来自维护它们的发行版。添加一个镜像就是一个包含一个文件的拉取请求。
Linux:为你自动下载
terrarium get <name> 会下载官方云镜像,用生成的 SSH 密钥为其播种,启动一次,然后拍摄快照。每个大约一分钟。
配方 | 下载自 |
| cloud-images.ubuntu.com |
| cloud-images.ubuntu.com |
| cloud.debian.org |
| cloud.debian.org |
| repo.almalinux.org |
| dl.rockylinux.org |
| fedoraproject.org |
| download.opensuse.org |
Windows:自带 ISO
没有 Windows 云镜像,而且 Microsoft 的介质不能重新分发,所以你只需下载一次 ISO,terrarium 会无人值守地运行真正的安装程序:
从 Microsoft 下载安装 ISO。
将其保存在
%LOCALAPPDATA%\terrarium\isos\中,并按配方命名:win10.iso、winxp.iso。运行
terrarium get win10。完全无人值守:win10 大约十分钟,XP 七分钟。
win10 和 winxp 目前随附。XP 早于 OpenSSH,因此它的克隆体通过 screenshot、click、type 和 keys 来驱动,而不是 exec,而且它的配方需要你在本地覆盖中提供的产品密钥。配方细节、私有镜像和无人值守安装的内部机制见 docs/DESIGN.md。
叠加你自己的镜像
配方可以基于另一个镜像而不是介质来构建:from 指定基础镜像,setup 在其克隆体中运行命令,然后将结果扁平化为新的黄金镜像。YAML 文件是可共享的产物——拥有同一文件的队友可以从他们自己的基础镜像构建出等价的机器,因此无需交换任何磁盘镜像(也无需交换 Windows 许可证)。
# %LOCALAPPDATA%\terrarium\recipes\team-dev.yaml
name: team-dev
from: debian-12
setup:
- sudo apt-get update
- sudo apt-get install -y git build-essentialterrarium get team-dev 会在现有基础之上于数秒内构建它。对于你手动而非通过脚本创建的状态,terrarium promote <env> <name> 会直接将配置好的环境扁平化为黄金镜像。terrarium rm --golden <name> 会移除你不再需要的镜像。
它不是什么
尚不支持跨平台。 主机必须是装有 VirtualBox 的 Windows。按照设计,所有虚拟机管理程序调用都位于一个包之后,因此 QEMU 或 Hyper-V 驱动是一个计划中的入口,而不是一个承诺。
不用于生产。 克隆体是开发和测试用的可抛弃资源。
不是密钥管理器。 Windows 黄金镜像的密码以纯文本形式存储在本地,并且在安装过程中会短暂出现在
VBoxManage命令行上。请使用一次性密码。
许可证
Apache-2.0。欢迎提供配方、问题和现场报告,最有用的贡献是提供一个人们实际使用的镜像配方。
Available Tools
24 toolsdoctorA
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| checks | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | pixel column, 0-based, as seen in env_screenshot | |
| y | Yes | pixel row, 0-based, as seen in env_screenshot | |
| name | Yes | name of the environment | |
| button | No | left (default), right or middle | |
| double | No | double-click |
Output Schema
| Name | Required | Description |
|---|---|---|
| log | No | |
| name | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cpus | No | CPUs, default 2 | |
| name | Yes | name for the new environment: letters, digits and dashes | |
| ostype | Yes | VirtualBox guest type, for example Linux_64, OpenSUSE_64 or Windows10_64 | |
| disk_gb | No | size of the blank disk in GB, default 32; it is dynamic and grows on demand | |
| iso_path | Yes | absolute path on THIS host to the installation ISO | |
| memory_mb | No | memory in MB, default 2048 |
Output Schema
| Name | Required | Description |
|---|---|---|
| env | Yes | |
| log | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | name of the environment |
Output Schema
| Name | Required | Description |
|---|---|---|
| log | No | |
| name | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | name of the environment to run in | |
| shell | No | run under this shell instead of the guest's own: powershell, cmd or sh | |
| script | No | multi-line script to run instead of command; it reaches the shell on stdin so nothing in it is quoted or split | |
| command | No | shell command to run in the guest; omit when passing script | |
| desktop | No | Windows 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_sec | No | seconds to wait before giving up (default 300) |
Output Schema
| Name | Required | Description |
|---|---|---|
| output | Yes | |
| exit_code | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cpus | No | CPUs, default inherits the golden image | |
| name | Yes | name for the new environment: letters, digits and dashes | |
| golden | Yes | name of the golden image to fork, as reported by env_list | |
| memory_mb | No | memory in MB, default inherits the golden image | |
| ttl_seconds | No | auto-remove the env this many seconds from now; env_gc collects it. Omit for no expiry | |
| share_host_path | No | absolute host directory to mount at /work inside the guest, read-write |
Output Schema
| Name | Required | Description |
|---|---|---|
| env | Yes | |
| log | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | list what would be removed without removing it |
Output Schema
| Name | Required | Description |
|---|---|---|
| dry_run | Yes | |
| removed | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| keys | Yes | key names to press in order; each entry is one keystroke or chord | |
| name | Yes | name of the environment |
Output Schema
| Name | Required | Description |
|---|---|---|
| log | No | |
| name | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| envs | Yes | |
| goldens | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | env whose current state becomes the golden | |
| image | Yes | name for the new golden image: letters, digits, dots, dashes |
Output Schema
| Name | Required | Description |
|---|---|---|
| log | No | |
| golden | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | name of the environment to copy out of | |
| recursive | No | copy a directory and everything under it | |
| guest_path | Yes | path inside the guest to copy from, forward slashes even on Windows guests (C:/Users/terrarium/x) | |
| local_path | Yes | path on THIS host to copy to; the server runs on the host, not in the guest |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| guest_path | Yes | |
| local_path | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | name of the environment to copy into | |
| recursive | No | copy a directory and everything under it | |
| guest_path | Yes | path inside the guest to copy to, forward slashes even on Windows guests (C:/Users/terrarium/x) | |
| local_path | Yes | path on THIS host to copy from; the server runs on the host, not in the guest |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| guest_path | Yes | |
| local_path | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | name of the environment | |
| snap | Yes | name of the snapshot |
Output Schema
| Name | Required | Description |
|---|---|---|
| log | No | |
| name | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | name of the environment |
Output Schema
| Name | Required | Description |
|---|---|---|
| log | No | |
| name | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | name of the environment |
Output Schema
| Name | Required | Description |
|---|---|---|
| log | No | |
| name | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | name of the environment, golden image, or VirtualBox VM |
Output Schema
| Name | Required | Description |
|---|---|---|
| width | Yes | |
| height | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | pixel column to scroll at, 0-based | |
| y | Yes | pixel row to scroll at, 0-based | |
| name | Yes | name of the environment | |
| clicks | Yes | wheel clicks: positive scrolls down, negative up |
Output Schema
| Name | Required | Description |
|---|---|---|
| log | No | |
| name | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | name of the environment | |
| snap | Yes | name of the snapshot |
Output Schema
| Name | Required | Description |
|---|---|---|
| log | No | |
| name | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | name of the environment |
Output Schema
| Name | Required | Description |
|---|---|---|
| env | Yes | |
| log | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | name of the environment | |
| text | Yes | text to type, as if at the keyboard | |
| press_enter | No | press enter after the text |
Output Schema
| Name | Required | Description |
|---|---|---|
| log | No | |
| name | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| vm | Yes | name of the existing VirtualBox VM, as shown by env_list or terrarium ls | |
| key | No | path to an SSH private key for the guest, if there is one | |
| user | No | SSH user inside the guest, if it is known | |
| image | No | golden image name to record it under (default: the VM name) | |
| shell | No | what an SSH session lands in: posix, cmd or powershell; Windows guests are probed on first exec when unset | |
| password | No | SSH password inside the guest, if it is known | |
| snapshot | No | snapshot to fork from (default terrarium-base) | |
| transport | No | how 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_snapshot | No | create the snapshot if the VM does not have it yet; this modifies the user's VM |
Output Schema
| Name | Required | Description |
|---|---|---|
| log | No | |
| golden | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cpus | No | CPUs for the golden image (default 2) | |
| image | Yes | image name from a recipe, for example ubuntu-24.04 or alma-9 | |
| memory_mb | No | memory in MB for the golden image (default 2048) |
Output Schema
| Name | Required | Description |
|---|---|---|
| log | No | |
| golden | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | path to an SSH private key for the guest, if there is one | |
| user | No | SSH user inside the guest, if it is known | |
| image | Yes | name for the new golden image: letters, digits, dots, dashes | |
| ova_path | Yes | path to the .ova or .ovf appliance file on this machine | |
| password | No | SSH password inside the guest, if it is known |
Output Schema
| Name | Required | Description |
|---|---|---|
| log | No | |
| golden | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| recipes | Yes |
TDQS
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.
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.
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.
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.
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.
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.
24 tool updates
v0.1.2- First observed
doctor - First observed
env_click - First observed
env_create - First observed
env_down - First observed
env_exec - First observed
env_fork - First observed
env_gc - First observed
env_keys - First observed
env_list - First observed
env_promote - First observed
env_pull - First observed
env_push - First observed
env_restore - First observed
env_revert - First observed
env_rm - First observed
env_screenshot - First observed
env_scroll - First observed
env_snapshot - First observed
env_start - First observed
env_type - First observed
golden_adopt - First observed
golden_get - First observed
golden_import - First observed
recipe_list
TDQS
Scored across 24 tools
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.
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.
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.
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
Related MCP Connectors
Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.
Eyes and hands on real Windows PCs — observe, click, type via Glasswarp API.
Clean PNG/JPEG screenshots via REST or MCP, with goal-driven multi-step navigation.
Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.
Related MCP Servers
- FlicenseAqualityBmaintenanceA 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.12155-
- AlicenseBqualityBmaintenanceControls a real Windows 98 VM through 47 MCP tools, enabling screenshots, mouse/keyboard input, command execution, and file transfers.8558 npm3MIT
- AlicenseNot gradedqualityBmaintenanceProvider-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
- AlicenseAqualityAmaintenanceVerified control of the whole desktop for agents on Windows and Linux: apps with no API, windows, shell, browser. MCP server + CLI + REST API.3928MIT