Skip to main content
Glama

Server Details

Linux microVM sandboxes for AI agents: run commands, files, processes, pause and wake.

Ownership verified

The last two health checks of this connector failed. If this server requires authentication, missing or expired test credentials may be the cause. A test profile lets Glama authenticate for health checks and discover tools; it is separate from your personal connections.

If you are the author, claim ownership, then add or update a test profile under Admin → Test Profile.

Status
Unhealthy
Uptime
0.0% over the last 24 hours
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
withruntime/runtime
GitHub Stars
1
Server Listing
Runtime
ChatGPT
–
Claude
–

TDQS

A3.7/5.0

Scored across 52 tools

Disambiguation4/5

Tools mostly target distinct resources and actions, and descriptions carefully differentiate similar ones (previews vs ports vs domains, org-level runtime_networks_* vs per-sandbox runtime_sandboxes_network, interpreter_run vs exec). A handful of multi-action umbrella tools (runtime_sandboxes_manage, runtime_sandboxes_inspect, runtime_images) overlap conceptually with the action-named tools, but boundaries remain learnable.

Naming Consistency4/5

Names follow a predictable runtime_<resource>[_<subresource>]_<action> snake_case pattern throughout (runtime_sandboxes_files_read, runtime_images_build, runtime_volumes_backup). Minor inconsistency: some names bake the action in (create, build, list, manage) while others take an action parameter (runtime_account, runtime_images, runtime_sandboxes_inspect, runtime_sandboxes_manage), so the verb is not always in the same place.

Tool Count2/5

52 tools is a heavy surface for a single server, well above the 25+ threshold where selection burden and context cost dominate. The platform is broad, but families like files (list/read/write/manage/watch/link) and networks (five separate tools) could arguably be consolidated into action-parameterized tools.

Completeness5/5

Coverage is unusually thorough: sandbox lifecycle, exec, files, desktop, browser, images/builds, volumes/backups, snapshots, jobs with cron and import, secrets, egress/network/proxy/WireGuard, ports, previews, custom domains, webhooks, OTel export, reservations, billing/account, audit, support and feedback. No obvious lifecycle dead ends for the stated domain.

Available Tools

52 tools
runtime_accountA
Read-only
Inspect

Read the account. Money is integer microdollars (1,000,000 = $1). get: Who you are (organization, agent, credential) and the account's usage: balance, open holds, free usage left and per-resource charges. limits: Whether this key is read-only; the daily spending limit an owner set on your agent (the limit, what you committed in the last 24 hours and what is left; owners set it at https://withruntime.com/account/keys); and the machine time the account can still run without credit, in milliseconds (free hours given before 5 October 2026: total, used, reserved; available, which counts this month's free usage too), or null with none; and every limit the account is held to with what it uses of each (sandbox.count, sandbox.vcpu, sandbox.memory_mib and the rest), the numbers a create past one is refused quota_exceeded by; and the account's credit: what is left, the days it lasts at this month's pace (state low under 5, empty at none), and who adds more (addedBy agent: no person pays for this account, so add credit yourself with npx withruntime billing topup <usd>). referrals: The referral link, the companies that signed up with it and the credit each earned. compare(provider, days?): What this key's sandboxes would have cost at a rival (e2b, daytona, vercel, modal, cloudflare, fly-sprites, fly-machines, blaxel, codesandbox, morph, northflank, runloop, lambda-microvms, freestyle, prime, fly for Sprites): the account's settled usage over the last days (default 30), priced at Runtime's rates (what free usage paid for at the standard rates) and at the rival's published list rates, with the date they were checked. Returns the saving, a 30-day projection, a note on what was left out, the switch on record and the welcome match's state; with no usage yet, a stated example workload is priced. sso: Identity providers (OIDC or SAML), the email domains they answer for and whether each is proven, the role new people join with, whether SSO is required, and SCIM sync. Needs an owner or admin key; changed on the website. emails: Which of Runtime's optional emails your person gets for this account (own-deletions, billing, usage, tips). Read only: change them with POST /v1/account/emails:update, runtime account emails, or Settings, Emails.

NameRequiredDescriptionDefault
daysNo
actionYes
providerNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, yet the description still adds real behavioral context: sso requires an owner or admin key and is changed on the website, emails is explicitly read-only with where to mutate it, and the credit paragraph explains addedBy agent and the topup command. This is useful context beyond the safety annotations.

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

Conciseness3/5

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

Front-loaded with a short "Read the account", but each action then becomes a dense run-on with nested parentheticals, URLs and asides (e.g. the credit/topup clause inside limits). Most content does earn its place given there is no output schema, but the wall-of-text structure makes it hard to scan.

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

Completeness4/5

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

There is no output schema, so the description rightly describes what each action returns (balance, holds, free usage, quota_exceeded limits, referral credit, cost comparison, SSO state, email flags). Coverage is strong for all six actions, with only minor gaps like pagination and general error behavior.

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

Parameters4/5

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

With 0% schema coverage the description must carry the params, and it does: each action enum value is defined in prose, compare documents its provider and days arguments, and it states the days default (30) which the schema does not. The provider list is largely mirrored from the schema rather than adding meaning, keeping it short of a 5.

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

Purpose4/5

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

Opens with a specific verb+resource ("Read the account") and then enumerates each of the six actions with what it returns, so an agent knows exactly what is on offer. It is distinguishable from sandbox/volume siblings by being the account-wide introspection tool, though it never explicitly names a sibling to contrast with.

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

Usage Guidelines3/5

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

Usage is implied through the per-action breakdown and a few conditional hints ("with no usage yet, a stated example workload is priced", "Needs an owner or admin key" for sso). The only alternative routing is for emails, where it points at POST /v1/account/emails:update and the Settings UI; there is no general when-to-use/when-not guidance.

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

runtime_audit_listA
Read-only
Inspect

The account's audit log, newest first: members, keys, connections, credit, network rules, secrets and deletions, with the time, client address and request id. action filters by an action or a group ending in a dot. Page with before. Needs an owner or admin key.

NameRequiredDescriptionDefault
limitNoPage size, 1 to 200.
actionNoAn action (key.created), or a group ending in a dot: member., invitation., key., connection., limit., credit., network., secret., preview., resource., account., sso., scim..
beforeNoA next from the previous page.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description still adds real value beyond them: it discloses the required authorization level ('Needs an owner or admin key') and the newest-first ordering, both of which shape whether and how an agent calls it.

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

Conciseness4/5

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

Two dense sentences with no filler; the resource and ordering are front-loaded, followed immediately by filtering, pagination and the auth requirement. It is compact and front-loaded, though the single run-on inventory of record types is slightly heavy.

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

Completeness4/5

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

With no output schema, the description usefully names the returned fields (time, client address, request id) and the auth requirement, so an agent knows what it gets and what it needs. Coverage is solid for a read-only list tool; only explicit sibling routing is missing.

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

Parameters4/5

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

Schema description coverage is already 100%, so the baseline is 3. The description nonetheless adds meaning: it clarifies that 'before' is a pagination cursor tied to the previous page's next value, and that 'action' accepts either a specific action or a dotted group prefix, reinforcing the schema's semantics in task terms.

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

Purpose4/5

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

States a specific resource (the account's audit log) and its ordering (newest first), plus the record types it contains. An agent can tell it apart from most siblings, though it never explicitly contrasts with runtime_events_list, which is the closest potential confusable.

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

Usage Guidelines3/5

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

Gives concrete operational guidance for filtering (action or group ending in a dot) and pagination (page with before), which implies how to use it. However, it never states when to reach for this tool versus runtime_events_list, and offers no exclusions or prerequisites beyond the key requirement.

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

runtime_docs_readA
Read-only
Inspect

Read a Runtime documentation page as Markdown: the same text as https://withruntime.com/docs. Topics include start, javascript, python, cli, mcp, api, sandbox-environment, migrate, pricing and troubleshooting.

NameRequiredDescriptionDefault
topicYesThe page: start, cli, mcp, pricing and so on.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover safety (readOnlyHint, openWorldHint=false, destructiveHint=false), so the bar is lower. The description still adds real value by disclosing the return format (Markdown) and fidelity ('the same text as https://withruntime.com/docs'), which is the main behavioral question for a docs tool. It stops short of stating caching, auth, or length constraints.

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

Conciseness4/5

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

Two sentences, zero filler, and the core action plus source is front-loaded before the topic examples. The topic enumeration is somewhat duplicative of the enum and could be trimmed, but it aids fast scanning.

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

Completeness4/5

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

For a single-parameter read tool with no output schema, the description covers what is returned and what can be requested; the remaining gap is only the 'when to use it' routing, which belongs to usage guidance rather than completeness.

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

Parameters3/5

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

Schema coverage is 100% and the topic parameter has a full 57-value enum, so the schema already carries the semantics. The description echoes a subset of those values ('start, javascript, python, cli, mcp, api...'), which is redundant rather than additive; no extra meaning (case sensitivity, aliases, fallback behavior for an invalid topic) is provided.

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

Purpose4/5

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

States a specific verb and resource ('Read a Runtime documentation page as Markdown') and identifies the source URL, so the agent knows exactly what comes back. It does not need to name siblings because none of the runtime_* tools are documentation readers, but it also never explicitly says so.

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

Usage Guidelines3/5

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

Usage is implied by the topic list (start, migrate, pricing, troubleshooting), which hints at when to reach for it, but there is no explicit 'use this when' or 'prefer this over runtime_support' guidance. The agent must infer the trigger condition.

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

runtime_domainsA
Destructive
Inspect

Serve a sandbox port at your own hostname with automatic HTTPS. add(hostname, sandboxId, port): Returns the DNS records to set: a TXT record proving ownership and a CNAME (an A record for an apex). Needs a kept top-up. verify(hostname): Check the TXT record now and activate the domain when it matches; also says whether the name points at Runtime yet. list: Each domain with its state and DNS records. remove(hostname): Stop serving it, open connections included, before this answers; remove its DNS records at your DNS provider too.

NameRequiredDescriptionDefault
portNoThe port your server listens on inside the sandbox.
actionYes
hostnameNo
sandboxIdNoThe sandbox that serves it.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and openWorldHint=true, yet the description adds substantial detail beyond them: remove kills open connections before responding and requires the agent to delete DNS records at the external provider, verify reports whether the name currently points at Runtime, and add requires a funded top-up. These side effects and prerequisites are exactly the kind of context an agent cannot infer from annotations.

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

Conciseness4/5

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

One front-loaded purpose sentence followed by compact per-action clauses; every sentence carries information. The signature-style notation (add(...), verify(...)) is terse but readable, though the run-on quality of some clauses slightly reduces scanability.

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

Completeness4/5

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

With no output schema, the description does the work of describing returns: DNS records for add, activation status plus pointing state for verify, state and records per domain for list. It covers all four actions adequately, with only minor gaps (e.g. possible domain states, whether list paginates).

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

Parameters4/5

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

Schema coverage is only 50% (hostname and action undocumented), but the description compensates by showing the per-action signatures — add(hostname, sandboxId, port), verify(hostname), remove(hostname) — which tells the agent which parameters apply to which action. It adds real meaning over the bare enum, though it doesn't clarify the shape of 'list' input.

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

Purpose5/5

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

The opening sentence names a specific verb and resource — serving a sandbox port at a custom hostname with automatic HTTPS — and the per-action breakdown (add/verify/list/remove) makes each capability explicit. No sibling tool covers custom-domain mapping, so the resource itself is disambiguating.

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

Usage Guidelines4/5

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

It lays out the workflow conditions: add returns records to configure, verify must be run and only activates when the TXT matches, remove stops serving. The prerequisite 'Needs a kept top-up' is stated. It does not name alternative tools (e.g. previews/ports) or say when not to use this one, but the resource is niche enough that the forward path is clear.

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

runtime_events_listA
Read-only
Inspect

Recent lifecycle events of your sandboxes, snapshots and volumes, and changes to your egress secrets and upstream proxy, newest first: created, running, paused, woken, stopped, start_failed and the rest, each with the resource as it was (stopReason says why a sandbox stopped). Pass resourceId for one sandbox's history. Kept 14 days.

NameRequiredDescriptionDefault
typeNo
limitNoPage size, 1 to 100.
cursorNo
resourceIdNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/ non-destructive/closed-world, so the bar is lower, and the description still adds substantive context: 14-day retention, newest-first ordering, and that each event carries the resource state as it was at the time, with stopReason explaining sandbox stops. It omits anything about pagination limits or result size, which matters for a list tool.

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

Conciseness5/5

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

Two tightly packed sentences: scope and ordering first, then the event taxonomy, then the resourceId routing hint and retention. No filler, and the most decision-relevant facts are front-loaded.

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

Completeness4/5

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

For a read-only list tool with annotations covering safety and no output schema, the description covers scope, ordering, event semantics, filtering, and retention. The remaining gap is pagination behavior (how cursor works, what happens past the limit), which an agent would need for large histories.

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

Parameters3/5

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

Schema coverage is only 25% (only limit is documented), so the description must carry weight. It explains resourceId and gestures at the type enum via example event names, but cursor is never mentioned and the enum's meanings (e.g. host_unreachable vs unreachable) are left unexplained. Partial compensation only.

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

Purpose4/5

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

States a specific verb-and-resource: recent lifecycle events across sandboxes, snapshots, volumes, egress secrets and upstream proxy, ordered newest first. The event examples (created, running, paused, stopped) make the content concrete. It does not distinguish itself from the sibling runtime_audit_list, which an agent could plausibly confuse it with.

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

Usage Guidelines4/5

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

"Pass resourceId for one sandbox's history" gives clear conditional usage for the main filtering axis, and "Kept 14 days" sets expectations on reach. No explicit when-not or alternative-tool routing (e.g. vs runtime_audit_list) is offered, so it stops short of a 5.

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

runtime_feedbackAInspect

Reports go straight to the Runtime team, and whoever asked is told when a fix ships. submit(kind, summary, detail?, competitor?, resourceId?, requestId?, context?): A bug, a limit or missing feature, a workaround, unclear docs, something slow, or something another provider does better; praise too. Give what was tried, what happened and the requestId, never credentials, private files or user data. Duplicates merge. list(limit?): This organization's reports, newest first, with the status (new, planned, shipped, declined) and ship note of the item each merged into; one not yet sorted is waiting to be sorted, which runs every hour.

NameRequiredDescriptionDefault
kindNobug | missing_feature | competitor_gap (something another provider does better) | migration_blocker (what stops a move to Runtime) | docs | pricing | praise | other
limitNo
actionYes
detailNoWhat happened, what you expected, how to reproduce.
contextNoAnything else useful, at most 4 KB of JSON.
summaryNoOne line.
requestIdNoFrom the error you are reporting.
competitorNoE.g. E2B, Daytona, Modal, Vercel Sandbox.
resourceIdNo
idempotencyKeyNoOptional: left out, one is made and returned as idempotencyKey. Send it back only to retry this exact call after a temporary error.

TDQS

A4.2/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=false, openWorldHint=true), the description discloses real behavior: reports go to the Runtime team, the requester is notified when a fix ships, duplicates merge, and list returns status plus ship note with an hourly sorting cycle. It also states a data-safety boundary. This is rich context that annotations alone do not convey.

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

Conciseness4/5

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

It is dense but front-loads the value proposition ('Reports go straight to the Runtime team...') and then walks the two actions in order. Some clauses are run-on (the kind enumeration, the sorting note), but each sentence carries information.

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

Completeness4/5

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

For a 10-parameter tool with no output schema and mutation semantics, the description covers both actions, the lifecycle of a report, and submission constraints. It stops short of stating what submit returns (the schema notes an idempotencyKey is returned), leaving a small gap in the round-trip picture.

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

Parameters4/5

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

Schema coverage is 70%, so much is already documented, but the description adds routing meaning by grouping the 'kind' categories under the submit action and clarifying that 'requestId' comes from the error being reported and 'competitor' names another provider. The action enum (submit vs list) is only made meaningful here, which is the required parameter.

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

Purpose4/5

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

The description states specific verbs and resources across two actions: 'submit(...)' for filing a bug/gap/idea and 'list(limit?)' for viewing this organization's reports. An agent can distinguish the two modes immediately, but no sibling tool (e.g. runtime_support, runtime_notices) is named to differentiate this feedback channel from adjacent support paths.

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

Usage Guidelines4/5

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

It gives clear context for each action: submit when you hit a bug, limit, missing feature, doc gap, slowness or competitor gap (and praise), list to see org reports. It also states submission hygiene ('give what was tried, what happened and the requestId, never credentials, private files or user data'). What's missing is explicit routing against the sibling support/reporting tools.

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

runtime_imagesA
Destructive
Inspect

List, read, tag and delete the images sandboxes start from; runtime_images_build makes them. list(cursor?, limit?, state?, name?): Your images, newest first, each as get gives it without the log. name gives that name's versions. Pass nextCursor back as cursor. get(id, logsAfter?): State (queued, building, ready, failed), version, tags, size, error and the last build log lines. tag(id, tag, remove?): Point a tag (prod, v2) at one version, moving it, or take it off with remove: true. delete(id): Delete a version and its tags; sandboxes started from it keep running. One an App still needs (its live, previous or deploying version) is refused with image_in_use.

NameRequiredDescriptionDefault
idNoAn image id, a name (its latest tag), name:tag or name@version.
tagNo
nameNoYour own handle for the resource. Letters, digits, dot, dash, underscore.
limitNoPage size, 1 to 100.
stateNo
actionYes
cursorNo
removeNo
logsAfterNo
idempotencyKeyNoOptional: left out, one is made and returned as idempotencyKey. Send it back only to retry this exact call after a temporary error.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, and the description adds substantial operational detail beyond that: delete removes the version and its tags, running sandboxes are unaffected, and an image still needed by an App is refused with image_in_use. It also clarifies tag movement/removal and list-versus-get log behavior.

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

Conciseness5/5

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

The description is front-loaded with the overall scope, then compact action-specific clauses. Every sentence carries operational information, and there is no filler despite covering four actions and ten parameters.

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

Completeness4/5

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

For a complex four-action, destructive tool with no output schema, the description provides list/get return shape, pagination behavior, deletion effects, and a key error case. It does not describe tag/delete return values or every optional parameter in detail, but it is sufficient for an agent to invoke the tool correctly.

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

Parameters4/5

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

With only 40% schema description coverage, the description compensates well by spelling out action signatures and explaining cursor back-passing, tag movement and removal, and logsAfter as build-log lines. It still leaves state filtering and some optional parameter semantics implicit, so it is not fully exhaustive.

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

Purpose5/5

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

The description states specific actions (list, read/get, tag, delete) on a specific resource (images sandboxes start from), and explicitly names runtime_images_build as the sibling that creates them. An agent can distinguish this tool from the build tool without opening either schema.

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

Usage Guidelines4/5

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

The per-action descriptions make clear what each action does and implicitly when to choose it, and the build sibling is explicitly named as the alternative for creating images. There is no explicit exclusion guidance against runtime_images_registries or sandbox-creation tools, so it falls short of a full when/when-not treatment.

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

runtime_images_buildAInspect

Build a sandbox image with your dependencies preinstalled, from exactly one of: image (a public or private image such as python:3.12-slim or ghcr.io/you/app:1), dockerfile (any Dockerfile: multi-stage, COPY --from, ARG, heredocs; COPY reads files), or recipe ({base, apt, pip, npm, commands, files, env}). Each build of a name is its next version, tagged latest (or tags). start sets what a sandbox from it runs and when its create answers; a Dockerfile's CMD and HEALTHCHECK fill it in. Returns the image queued; runtime_images action get says when it is ready, and sandboxes start from its id or name:tag. A rebuild reuses unchanged steps.

NameRequiredDescriptionDefault
envNoEnvironment every sandbox from it starts with.
nameNoYour handle for it; each build is its next version.
tagsNoTags it takes when ready; default latest.
buildNo{vcpu?, memoryMiB?, diskMiB?, maxImageMiB?, timeoutSeconds?, cacheMiB?} for the build.
cacheNofalse builds every step afresh.
filesNoThe Dockerfile's context: [{path, content, encoding?: utf8 or base64, mode?}], 1 MiB in all.
imageNoAn image, such as python:3.12-slim.
startNo{command | argv, cwd?, env?, readyPort? | readyCommand?, readyTimeoutSeconds?}: run as a sandbox starts; its create waits until ready.
labelsNo
recipeNo{base?, apt?, pip?, npm?, commands?, files?, env?, workdir?}: packages and steps on Runtime's base or an image.
regionNo
targetNoA stage to build instead of the last.
buildArgsNo
dockerfileNoA Dockerfile, multi-stage allowed; COPY reads files.
dockerignoreNo
idempotencyKeyNoOptional: left out, one is made and returned as idempotencyKey. Send it back only to retry this exact call after a temporary error.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=false, destructiveHint=false and openWorldHint=true; the description adds substantial context beyond that: builds are queued asynchronously, each build of a `name` becomes the next version tagged latest (or `tags`), `start` controls sandbox runtime and readiness, a Dockerfile's CMD/HEALTHCHECK fills it in, and rebuilds reuse unchanged layers unless `cache` is false.

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

Conciseness4/5

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

The source-selection constraint and the async/versioning behavior are front-loaded, and every sentence carries information rather than filler. It is a dense block of many clauses in one paragraph, which slightly taxes parseability, but nothing is wasted.

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

Completeness4/5

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

With 16 parameters, nested objects, no output schema and only 75% schema coverage, the description supplies the missing lifecycle context: return value ('returns the image queued'), how to poll readiness, and how sandboxes consume the result by id or name:tag. A handful of auxiliary parameters remain unexplained, but the core workflow is complete.

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

Parameters4/5

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

Schema coverage is 75%, so the schema carries much of the load, but the description adds real meaning for the highest-risk parameters: the semantics of `recipe` fields, that COPY reads `files`, that `start` is what a sandbox runs at launch, and that `tags` defaults to latest. It does not document several declared params (`labels`, `region`, `dockerignore`, `buildArgs`, `build`), so it does not fully compensate for the coverage gap.

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

Purpose5/5

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

States a specific verb and resource ('Build a sandbox image') and immediately enumerates the three mutually exclusive sources (`image`, `dockerfile`, `recipe`) with examples. It also names the related sibling (`runtime_images` action get) that reports readiness, so an agent can distinguish this build tool from the list/manage image tools without opening schemas.

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

Usage Guidelines4/5

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

The 'exactly one of' constraint plus per-source descriptions make it clear which input to pick for a given situation, and it tells the agent where to check readiness afterward. It stops short of explicit when-not-to-use guidance (e.g., when a public image alone suffices and no build is needed), so it is clear context rather than full routing.

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

runtime_images_registriesA
Destructive
Inspect

List, store or forget the credentials builds use to pull private images. set: {registry, username, password} (Google: username _json_key, the key as password) or {registry, accessKeyId, secretAccessKey} for Amazon ECR. Never returned.

NameRequiredDescriptionDefault
actionYes
passwordNoA token or password; for _json_key, the service account's JSON key.
registryNoThe registry host: docker.io, ghcr.io, gcr.io, us-docker.pkg.dev, 123456789012.dkr.ecr.us-east-1.amazonaws.com, or any other.
usernameNoDocker Hub or GitHub user, oauth2accesstoken or _json_key for Google.
accessKeyIdNoAmazon ECR: an AWS access key id.
secretAccessKeyNoAmazon ECR: its secret.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is partly covered. The description adds genuinely new behavior: credentials are 'Never returned', which tells the agent that list output cannot expose secrets and that set is a write-only store. It omits confirmation behavior for delete and any auth requirements.

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

Conciseness5/5

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

Three short sentences, front-loaded with the purpose, then the payload variants, then the 'Never returned' caveat. No filler or repetition of the schema.

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

Completeness4/5

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

For a 6-parameter mutation/read tool with no output schema, the description covers purpose, per-provider payload formats, and the secrecy of the values. It does not explain list return shape (acceptable, since 'Never returned' covers the security-relevant part) or delete semantics beyond the annotation's destructiveHint.

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

Parameters4/5

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

Schema coverage is 83%, so the baseline is 3, but the description goes further by spelling out the two distinct set payload shapes ({registry, username, password} vs {registry, accessKeyId, secretAccessKey}) and the Google _json_key convention. This tells the agent which parameters are mutually exclusive per provider, information not fully conveyed by flat schema fields.

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

Purpose4/5

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

States specific verbs (list/store/forget) and a precise resource: the credentials builds use to pull private images. An agent can distinguish this from runtime_images_build or runtime_images without opening the schema. It stops short of naming siblings explicitly, but the scope is unambiguous.

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

Usage Guidelines3/5

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

The action enum (list/set/delete) is mirrored in prose, so the mapping between operation and tool is implied. However, there is no guidance on when to prefer this over runtime_secrets or runtime_images_build, and no stated prerequisites (e.g., permissions) for storing credentials.

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

runtime_ipsA
Destructive
Inspect

Your organization's dedicated outbound addresses, for allow-lists. list: The organization's reserved addresses. reserve(family?): Every sandbox of the organization then sends from its own address; family 4 (default) or 6. Needs credit on the account. release(addressId): Give one back by addressId; sandboxes send from the shared addresses again at once.

NameRequiredDescriptionDefault
actionYes
familyNo
addressIdNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already flag the mutating/destructive profile (readOnlyHint=false, destructiveHint=true), and the description adds real context beyond them: reserve requires credit on the account, and release immediately causes all sandboxes to send from shared addresses again. This discloses side effects and prerequisites not present in the structured fields.

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

Conciseness4/5

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

Purpose is front-loaded, then each action is covered in a compact clause with no filler. Slightly dense run-on phrasing and the redundant 'list: The organization's reserved addresses' restatement cost it the top score.

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

Completeness4/5

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

For a three-action mutation tool with no output schema and no parameter descriptions, the description covers operations, prerequisites, and side effects well. It does not describe what list returns, but with no output schema that is a minor gap.

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

Parameters4/5

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

Schema coverage is 0%, so the description must carry the meaning: it explains family values (4 default, 6), the addressId role (give one back by addressId), and the three action values. It meaningfully compensates for the missing schema descriptions, though it omits format details like the UUID nature of addressId.

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

Purpose5/5

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

States a specific resource (the organization's dedicated outbound addresses) and then names all three actions with concrete verbs and effects. An agent can tell what each action does without opening the schema, and the tool is clearly distinct from all siblings.

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

Usage Guidelines4/5

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

Each action is given a clear context for selection (list = reserved addresses, reserve = per-sandbox addresses, release = return to shared), and the credit prerequisite for reserve is disclosed. There are no named exclusions or alternatives, but none exist among the siblings, so the guidance is effectively complete.

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

runtime_jobsA
Destructive
Inspect

Jobs run a command in a fresh sandbox, once or on a cron schedule. Each run spends the free usage first while it fits the limits without credit, then credit at the sandbox rates, within your spending limits. An unknown outcome is never retried by itself. A run that cannot start says why in blockedReason (credits, capacity, cost_cap, permission, volume) and tries again every 30 seconds. To keep data between runs, attach a volume (compute.volumes). create(input), list, get, pause, resume and cancel(id), trigger(id): run it now, once, beside its schedule (a paused job stays paused; refused with run_in_progress while a run is starting or going), reschedule(id, schedule): a new schedule, the next run at its next time, update(id, input): change command, image, compute, secrets, alert, timeoutSeconds or retry in place (the next run uses them; history stays), runs(id, order?: newest): a job's attempts, oldest first or newest first, run(id): one attempt, logs(id of a run, cursor?): its output.

NameRequiredDescriptionDefault
idNo
inputNocreate: {name, schedule: {kind: once, at (Unix ms; a past time runs at once)} or {kind: cron, expression (five fields), timezone? (IANA, default UTC)}, compute: {region (us-east), vcpu (1-16, usually 2), cpuMode (shared), cpuFloorMillis (50), memoryMiB (up to 65536, usually 4096), diskMiB (at least 3072), durationSeconds (the paid time per run, at most 3600, at least timeoutSeconds), volumes?: [{volumeId, path (such as /data), mode? (rw, the default: one run at a time, so the next run reads what the last wrote; or snapshot: a read-only copy)}] (at most 4, in the same region as the job)}, command: {argv (no shell: ["bash", "-lc", "..."]), cwd? (under /workspace)}, timeoutSeconds, retry?: {maxAttempts (1-5), backoffSeconds}, secrets?: [{name, secretId}] (from runtime_secrets action jobs_put), maxTotalCostMicros?, image? (an image of the account: id, name, name:tag or name@version; default the standard image), alert?: {afterFailures? (runs in a row, default 1), webhook?: {url (https), secretId? (a jobs secret that signs it; the key must be allowed to reveal it, not only use it)}, email? (true: mail the job's person)}}. update: any of command, image (null: the standard image), compute (the fields given), secrets, alert (null: none), timeoutSeconds, retry, maxTotalCostMicros.
limitNo
orderNoruns: oldest first (the default) or newest first
actionYes
cursorNo
scheduleNoreschedule: {kind: once, at (Unix ms; a past time runs at once)} or {kind: cron, expression (five fields), timezone? (IANA, default UTC)}.
limitBytesNo
idempotencyKeyNoOptional: left out, one is made and returned as idempotencyKey. Send it back only to retry this exact call after a temporary error.

TDQS

A4.1/5.0
Behavior5/5

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

Discloses far more than the annotations: billing order (free usage first, then credit at sandbox rates within spending limits), no automatic retry on unknown outcomes, blockedReason enum values (credits, capacity, cost_cap, permission, volume) with a 30-second retry cadence, run_in_progress refusal on trigger, paused jobs staying paused, and volume rw vs snapshot semantics. Nothing here contradicts readOnlyHint=false / destructiveHint=true.

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

Conciseness3/5

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

The front-loaded first two sentences are strong and every clause carries real information, but the back half degenerates into a comma-spliced run-on enumerating ten actions, which is hard to parse at a glance. Content-dense but poorly structured.

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

Completeness4/5

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

For a 9-parameter, deeply nested, 12-action tool with no output schema, the description covers execution, billing, failure and mutation semantics thoroughly. The gap is return values — list/get/runs/logs output shapes are never described, and the output schema's absence means the agent learns nothing about them here.

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

Parameters5/5

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

Schema coverage is only 44%, but the description compensates by mapping each action to the parameters it consumes — create(input), cancel(id), trigger(id), reschedule(id, schedule), update(id, input), runs(id, order?), run(id), logs(id of a run, cursor?). That action-to-parameter mapping is nowhere in the schema and is exactly what an agent needs to call this multi-action tool correctly.

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

Purpose4/5

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

Opens with a specific verb+resource+scope: jobs run a command in a fresh sandbox, once or on a cron schedule. That distinguishes it from runtime_sandboxes_exec (one-off execution) by the scheduling dimension, and it points at runtime_volumes semantics for persistence. It never explicitly names the sibling it replaces, so it stops short of a 5.

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

Usage Guidelines3/5

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

Usage conditions are implied through the action enumeration (pause/resume/cancel/trigger/reschedule/update/runs/run/logs) and a few cross-references (runtime_secrets action jobs_put, compute.volumes). It explains trigger's refusal behavior precisely, but gives no explicit 'use this instead of X when Y' guidance against sibling sandbox tools.

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

runtime_jobs_importA
Read-only
Inspect

Read another platform's job into the Runtime jobs that run the same container: a Google Cloud Run job's YAML with the Cloud Scheduler job that runs it, or an AWS Batch job definition (API JSON, describe-job-definitions output or a CloudFormation template) with the EventBridge schedule or rule that submits it. Image, command and args, environment, secrets, CPU and memory, timeout, retries and schedule (EventBridge cron and rate expressions in five fields, in the schedule's time zone) are carried over; each job's image is a Dockerfile FROM the container image. Every setting that could not be carried over is a note that says why, and a job that would not run as it did (several tasks at once, a GPU, a mounted volume) is blocked. Changes nothing: runtime jobs import builds and creates the plan. Pass files as [{path, text}]. Returns from, jobs (each with name, sourceImage, dockerfile, env, secrets, compute, timeoutSeconds, retry, schedule, blocked) and notes (unmapped, changed, info). Then build each job's image from its dockerfile with runtime_images_build and create it with runtime_jobs action create, its command the image's start command.

NameRequiredDescriptionDefault
fromNoRead the files as this platform's. Detected from the files when omitted.
filesYesThe platform's files, each with its name: a Cloud Run job's YAML (`gcloud run jobs describe --format export`) and the Cloud Scheduler job that runs it (`gcloud scheduler jobs describe --format yaml`); or an AWS Batch job definition (`register-job-definition` input, `describe-job-definitions` output or a CloudFormation template) and the EventBridge Scheduler schedule or EventBridge rule that submits it. At most 1 MiB of text in all.
parametersNoValues for a CloudFormation template's parameters and pseudo parameters, such as {"AWS::Region": "us-east-1", "AWS::AccountId": "123456789012"}, so values built with Ref, Fn::Join and Fn::Sub can be read.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, non-destructive) and the description is consistent with them via 'Changes nothing.' It adds real behavior the annotations don't: blocked jobs (multiple tasks, GPU, mounted volumes), per-setting notes explaining what couldn't carry over, and the fact that the output is a plan rather than a created job.

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

Conciseness3/5

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

One long run-on paragraph with heavy enumerations (compute, secrets, schedule, five-field cron, return fields). The purpose is front-loaded, but the middle sentences are dense and hard to parse, and some detail (Dockerfile FROM phrasing) is buried rather than structured into steps.

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

Completeness5/5

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

No output schema exists, so the description carries the return-shape burden and does so fully: from, jobs with named subfields including blocked, and notes split into unmapped/changed/info. Combined with the next-step guidance, an agent has everything needed to call and act on the result.

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

Parameters3/5

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

Schema coverage is 100%, so `from`, `files` and `parameters` are already fully documented with pairings and the 1 MiB limit. The description restates the [{path, text}] shape and which file pairs go together, but adds little syntax or semantics beyond the schema. Baseline 3 applies.

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

Purpose5/5

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

Opens with a specific verb and resource: read another platform's job (Cloud Run or AWS Batch) into Runtime jobs that use the same container. It names the two source platforms, the file types accepted, and the sibling tools (runtime_images_build, runtime_jobs action create) that follow, so an agent can separate it from runtime_jobs alone.

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

Usage Guidelines4/5

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

Explicitly says it changes nothing and that `runtime jobs import` builds and creates the plan, then routes to the build-then-create sequence with the other tools. Missing an explicit when-not (e.g., importing an already-Runtime job), but the workflow context is clear.

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

runtime_networks_privateA
Destructive
Inspect

Let your sandboxes reach each other at .sandbox.internal over TCP (an account with a kept top-up, free), or stop them. get: On or off, and whether this account may turn it on (it must have a kept top-up). set(enabled): enabled true: each of your sandboxes reaches the others at .sandbox.internal: over TCP. Needs a kept top-up; free. false cuts open connections.

NameRequiredDescriptionDefault
actionYes
enabledNotrue: your sandboxes reach each other by name. false: they stop, and open connections between them are cut within seconds.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and readOnlyHint=false. The description adds real behavioral detail beyond the annotations: `false` cuts open connections 'within seconds' and requires a kept top-up (billing/auth requirement) while being free. This is useful context the structured fields do not convey.

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

Conciseness3/5

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

The first sentence is front-loaded and states the core capability, but the text is a dense run-on with 'kept top-up' repeated three times and the get/set explanations folded awkwardly into one paragraph. It is understandable but could be tightened and split into clearer labeled lines.

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

Completeness4/5

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

With no output schema, the description helpfully states what `get` returns (on/off plus account eligibility) and what `set` does in each state, and it discloses the destructive cut-off from the annotations. Only minor gaps remain, such as nothing about how `<name>` is chosen or response error cases.

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

Parameters4/5

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

Schema coverage is 50% and the description compensates: it explains what `action: get` versus `action: set` do, which the schema leaves undocumented, and reinforces the `enabled` true/false semantics (including the connection-cutting consequence). It adds meaning beyond the schema's terse descriptions.

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

Purpose4/5

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

The description states a concrete verb and resource: enabling/disabling name-based (`<name>.sandbox.internal`) TCP reachability between sandboxes, plus the `get`/`set` duality. It is clear and specific, but it does not explicitly distinguish itself from networking siblings like runtime_networks_upstream_proxy or runtime_networks_wireguard, which an agent might otherwise confuse it with.

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

Usage Guidelines4/5

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

It clearly separates the two actions: `get` reports current on/off state and account eligibility, while `set(enabled)` toggles reachability with explicit true/false outcomes. The 'Needs a kept top-up' condition tells the agent a prerequisite. However, it offers no guidance on when to prefer this over the other network tools.

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

runtime_networks_signed_requestsA
Destructive
Inspect

Let your sandboxes get Runtime's Web Bot Auth signature for outbound HTTP requests (an account with credit, free), or stop them. get: On or off, and whether this account may turn it on (it must have credit). set(enabled): enabled true: a sandbox can get Runtime's Web Bot Auth signature for its outbound HTTP requests, so Cloudflare and other bot managers recognise them as Runtime's agents. Needs credit; free. false stops new signatures at once; ones already given expire within 5 minutes.

NameRequiredDescriptionDefault
actionYes
enabledNotrue: your sandboxes may get Runtime's request signature. false: new signatures stop at once, and ones already given expire within 5 minutes.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=true, openWorldHint=true), and the description adds real behavioral context beyond that: credit requirement, that it's free, that disabling stops new signatures immediately but existing ones expire within 5 minutes, and that signed traffic is recognized by Cloudflare and other bot managers. It does not, however, describe auth/permission requirements for enabling.

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

Conciseness4/5

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

Purpose is front-loaded in the opening sentence, then structured by action (get, set). There is mild redundancy: the signature/outbound-request phrasing, the 'free' qualifier, and the 5-minute expiry are each effectively stated more than once across description and schema.

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

Completeness4/5

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

No output schema exists, yet the description notes what 'get' returns (on/off state and whether the account may enable it), and the mutation lifecycle for 'set' is covered, including the 5-minute expiry grace. Adequate for an agent to call this toggle correctly.

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

Parameters4/5

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

Schema coverage is only 50% (action has no schema description), but the description compensates by explaining the get/set semantics and the effect of enabled=true vs false. It meaningfully adds meaning beyond the enum and the enabled field description, which are the only structured cues.

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

Purpose4/5

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

States a specific verb+resource: letting sandboxes obtain Runtime's Web Bot Auth signature for outbound HTTP requests, or stopping them. This is a distinct capability from siblings like runtime_networks_wireguard or runtime_networks_upstream_proxy, though it does not name them explicitly.

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

Usage Guidelines3/5

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

The description splits behavior by the 'get' and 'set' actions and explains what each does, which implies when to invoke each. However, it gives no explicit when-to-use guidance, no prerequisites beyond 'needs credit', and no comparison to alternative networking tools an agent might reach for instead.

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

runtime_networks_upstream_proxyA
Destructive
Inspect

Send the organization's sandboxes' outbound connections through your own HTTP or HTTPS proxy. get: The proxy in use, if any. set(url, secret?, hosts?): Needs a kept top-up. A proxy that fails fails the connection; nothing goes around it. remove: Connections leave directly again, within seconds.

NameRequiredDescriptionDefault
urlNohttp://host:port or https://host:port. An https proxy's certificate must verify against the public roots.
hostsNoOptional. Only connections to these hosts (or *.domain) go through the proxy; the rest leave as before. Every connection when absent.
actionYes
secretNoOptional. One of your secrets, sent as the Proxy-Authorization header's whole value. Its hosts must name the proxy's host.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already flag destructive=true, readOnlyHint=false and openWorld=true, but the description adds real behavioral context beyond them: fail-closed semantics ('A proxy that fails fails the connection; nothing goes around it') and removal latency ('within seconds'). The only weak spot is the vague 'kept top-up' requirement.

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

Conciseness4/5

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

Front-loads the overall purpose, then structures the three actions compactly in a single block with no wasted sentences. The cryptic 'kept top-up' clause is the one element that costs it a perfect score.

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

Completeness4/5

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

For a mutation tool with no output schema, the description covers what each action does, the fail-closed safety behavior, and removal timing, and annotations handle the safety profile. It lacks any auth/permission or billing detail (what 'kept top-up' actually requires), leaving a small gap.

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

Parameters3/5

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

Schema description coverage is 75%, so the schema already documents url, hosts, secret, and the action enum in detail. The description's 'set(url, secret?, hosts?)' merely restates the parameter list without adding format or meaning beyond the schema, fitting the baseline 3 for a well-covered schema.

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

Purpose4/5

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

States a specific verb+resource: routing the organization's sandboxes' outbound connections through a user-supplied HTTP/HTTPS proxy, and enumerates all three actions (get/set/remove) with their effect. The resource is distinct from sibling network tools like runtime_networks_wireguard and runtime_networks_private, though it never names them to draw the contrast explicitly.

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

Usage Guidelines3/5

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

The per-action breakdown (get = show current proxy, set = configure, remove = connections leave directly) implies when each mode applies. However, it gives no explicit guidance on when to choose this tool over alternatives such as wireguard or private networks, and the phrase 'Needs a kept top-up' is opaque rather than actionable.

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

runtime_networks_wireguardA
Destructive
Inspect

A WireGuard private network from your own network into your sandboxes. create(subnet?): Create it; subnet defaults to 10.250.0.0/16. Needs a kept top-up. get: Its endpoint, gateway key, peers and each sandbox's private address. add_peer(name, publicKey?, routes?): Add a machine or router of yours and get its wg-quick config; without publicKey Runtime generates the pair and the private key is in config, shown once. rotate_peer(peerId, publicKey?): A new key and config; the old key stops working within seconds. remove_peer(peerId): Revoke a peer; its tunnel and connections end within seconds.

NameRequiredDescriptionDefault
nameNoYour own handle for the resource. Letters, digits, dot, dash, underscore.
actionYes
peerIdNo
routesNoPrivate IPv4 ranges on your side of this peer that sandboxes may reach, such as 10.0.0.0/16.
subnetNo
publicKeyNoThe peer's WireGuard public key. Leave it out and Runtime generates the pair.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and openWorldHint=true, and the description goes further by quantifying destruction: the old key stops working and tunnels/connections end 'within seconds'. It also discloses a genuine hidden behavior — the generated private key appears in the config and is 'shown once'. It does not cover permission/auth requirements or rate limits.

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

Conciseness4/5

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

The overall purpose is front-loaded, then a compact action-by-action breakdown follows, with no filler sentences. It is dense to the point of being a single run-on paragraph, but every clause carries information an agent needs.

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

Completeness4/5

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

With six parameters, no output schema, and a mutation-heavy surface, the description carries the return-value burden itself and does so: get returns endpoint, gateway key, peers and per-sandbox addresses; add_peer returns a wg-quick config. The main remaining gap is account/prerequisite detail behind 'Needs a kept top-up' and any preconditions for create.

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

Parameters4/5

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

With only 50% schema description coverage, the description compensates well: it gives the subnet default (10.250.0.0/16), explains that omitting publicKey makes Runtime generate the pair, ties peerId to rotate/remove, and contextualizes name for add_peer. The only under-specified parameter is the action enum itself, whose values are only implied by the per-action prose.

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

Purpose5/5

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

Opens with a specific resource (a WireGuard private network connecting the user's own network into sandboxes) and then names every action verb explicitly: create, get, add_peer, rotate_peer, remove_peer. This clearly separates it from sibling network tools such as runtime_networks_private and runtime_networks_upstream_proxy.

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

Usage Guidelines4/5

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

Each action is given a usage context (create it, get endpoint/keys, add a machine or router of yours, rotate to get a new key, revoke a peer), which tells an agent which action to pick for a given intent. It stops short of naming alternatives or stating when-not to use this tool versus its network siblings, and 'Needs a kept top-up' is left unexplained.

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

runtime_noticesB
Destructive
Inspect

Account notices: pause expiry, unpaid storage, deletion deadlines. get does not mark one read; read does, keeping the first read time.

NameRequiredDescriptionDefault
idNo
limitNo
actionYes
cursorNo

TDQS

B3.3/5.0
Behavior4/5

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

With destructiveHint=true and readOnlyHint=false, the annotations only signal that something here mutates; the description pinpoints exactly which action mutates ('read does, keeping the first read time') and which does not ('get'). That is the crucial side-effect disclosure the annotations cannot express. It still omits auth requirements, whether acknowledgement is reversible, and any rate limits.

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

Conciseness4/5

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

Two dense sentences with no filler, and the highest-value fact (which action mutates) is front-loaded in the second sentence. The clipped, note-like phrasing reads as slightly fragmentary but wastes nothing.

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

Completeness2/5

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

For a 4-parameter tool with 0% schema coverage and no output schema, the description leaves too much open: no mention of pagination via cursor/limit, no description of what a notice record contains, and no coverage of the 'list' action. Adequate only for the narrow get-vs-read decision.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry parameter meaning, and it explains only the 'action' enum for two of its three values. The 'id', 'limit', and 'cursor' parameters receive no explanation anywhere, leaving pagination and targeting semantics undocumented.

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

Purpose4/5

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

The first sentence names the resource concretely (account notices) and enumerates what they cover: pause expiry, unpaid storage, deletion deadlines. The second sentence distinguishes two of the three actions, so an agent knows this is the notice retrieval/acknowledgement tool. It falls short of a clean verb+resource statement for the 'list' action.

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

Usage Guidelines3/5

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

It gives a real when-to-use distinction between 'get' (non-mutating) and 'read' (marks as read), which is the most consequential choice for the caller. However, it says nothing about when to use 'list' vs 'get', when paging is needed, or the broader context in which notices matter.

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

runtime_otel_manageB
Destructive
Inspect

Exports that push sandbox events (OTLP logs), readings (OTLP metrics) and API call spans (OTLP traces) to an OpenTelemetry endpoint over OTLP/HTTP JSON. create takes endpoint, the OTLP base URL, headers for its authentication and signals; flush pushes now. Header values are never shown back.

NameRequiredDescriptionDefault
idNo
actionYes
enabledNo
headersNoSent with every push, for the endpoint's authentication: Authorization, DD-API-KEY, x-honeycomb-team and so on. Stored where only the sender reads them; never shown again.
signalsNoWhat to send: "logs" (events), "metrics" (CPU, memory, disk, network), "traces" (a span per API call). "logs" and "metrics" when omitted.
endpointNoThe OTLP/HTTP base URL, as OTEL_EXPORTER_OTLP_ENDPOINT: logs go to <endpoint>/v1/logs, metrics to <endpoint>/v1/metrics and traces to <endpoint>/v1/traces.
idempotencyKeyNoOptional: left out, one is made and returned as idempotencyKey. Send it back only to retry this exact call after a temporary error.

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, so the agent knows this mutates and reaches outside. The description adds genuinely useful behavior beyond that: header values are never shown back and flush pushes immediately. It does not disclose the consequences of delete (does removing an export stop telemetry?) or whether existing exports keep pushing while modified, which are the traits an agent most needs for a destructive tool.

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

Conciseness4/5

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

Three sentences, purpose first, then action-specific notes; no filler. The noun-phrase opening ('Exports that push...') is slightly awkward but the information density is good and nothing is redundant.

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

Completeness2/5

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

This is a seven-parameter, six-action mutation tool flagged destructive with no output schema. The description covers only create and flush while list, get, update and delete are invisible, and return behavior is never described. An agent would have to guess at most of the action surface before calling it.

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

Parameters2/5

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

Schema coverage is only 57%, so the description should fill gaps, but it only touches endpoint, headers and signals, and mostly restates what the schema already says (OTLP base URL, auth headers). Parameters id, enabled and the action-specific meanings of list/get/update/delete receive no explanation anywhere, leaving half the interface undocumented.

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

Purpose4/5

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

The first sentence names the resource and what it does: configures exporters that push sandbox events, metrics and API spans over OTLP/HTTP JSON to an external endpoint. That is specific enough to separate it from siblings like runtime_sandboxes_metrics or runtime_webhooks_manage. It falls short of a 5 because the multi-action scope (list/get/update/delete) is never stated, only the create and flush semantics appear.

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

Usage Guidelines3/5

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

The description implies usage for two actions: create needs endpoint, headers and signals; flush pushes immediately. It says nothing about when to use list/get/update/delete, when not to use the tool, or what prerequisites exist for pushing to an endpoint. Usage is inferable from generic CRUD naming rather than explained.

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

runtime_portsA
Destructive
Inspect

Public address:port pairs for raw TCP to a sandbox (databases, game servers, anything not HTTP). open(sandboxId, port): Returns the public address:port. Idempotent per sandbox and port. Needs a kept top-up. list(sandboxId?): The open ports, or one sandbox's. close(portId): Close one by portId; its open connections are closed before this answers.

NameRequiredDescriptionDefault
portNoThe port your server listens on inside the sandbox.
actionYes
portIdNo
sandboxIdNoThe sandbox that serves it.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, so the bar is lower, and the description still adds real behavioral facts: open is idempotent per sandbox and port, it requires a kept top-up, and close terminates existing connections before it returns. These are non-obvious traits not carried by the annotations. It could say more about failure modes or quota behavior, but this is solid added value.

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

Conciseness4/5

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

Front-loaded with the resource definition, then one compact clause per action; there is little waste. The phrasing is telegraphic in places ('Needs a kept top-up', 'or one sandbox's'), which briefly costs clarity but keeps the definition short.

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

Completeness4/5

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

With four parameters, no output schema, and annotations already covering the safety profile, the description is nearly sufficient: it scopes the tool, enumerates all three actions, maps their parameters, and even states the open return value. Only minor gaps remain, such as the return shape for list and the error behavior when a top-up is missing.

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

Parameters4/5

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

Schema coverage is only 50% (action and portId are undescribed in the schema). The description compensates by mapping parameters to actions — open(sandboxId, port), list(sandboxId?), close(portId) — which the schema cannot express, and by noting that port is the in-sandbox listening port. That is meaningfully beyond the structured fields, though it adds no format or constraint detail for portId.

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

Purpose5/5

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

The opening sentence names the concrete resource (public address:port pairs for raw TCP into a sandbox) and scopes it precisely with parenthetical examples (databases, game servers) plus the discriminating phrase 'anything not HTTP', which separates it from the HTTP-serving preview/domain siblings. Each of the three actions is then named with its verb and resource, so an agent can tell what the tool does without opening the schema.

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

Usage Guidelines4/5

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

It gives clear per-action usage context: open for exposing a listening port, list with an optional sandboxId to scope results, and close by portId. It also implies when this tool is the right choice ('anything not HTTP'). It does not, however, explicitly name an alternative sibling (e.g. the HTTP preview tool) or state when not to use it, so it stops short of full routing guidance.

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

runtime_reservationsA
Destructive
Inspect

Hold room for many sandboxes, for a window or as standing room; creates in it are never refused for room or limits up to what was booked. create(sandboxes, startsAt?, endsAt?, standing?, snapshots?, forKey?, vcpu?, memoryMiB?, diskMiB?, region?): Book room for many sandboxes at once: sandboxes (1 to 10000), startsAt and endsAt (ISO 8601; up to 24 hours, starting now or within 14 days), and optionally vcpu, memoryMiB, diskMiB (the size you will create, default 2 vCPU / 4096 MiB / 4096 MiB) and region. In the window your sandbox limits rise by what you booked and the room is kept from everyone else, so creates are never no_capacity or quota_exceeded up to it; create as usual, nothing to name. Sandboxes you run bill at the usual per-second rates; booked room none of them uses costs a quarter of the memory rate (unusedRateMicros per GiB-hour, no CPU), at most unusedMaxMicros if nothing runs, and nothing if you cancel at least an hour before the start. Booking needs a balance covering the estimate; with auto top-up on, what you paid more than a week ago counts too. A decline says why, the most that fit, and the nearest window that takes them all. At the end nothing is stopped. Use it before a batch of evals, rollouts or browser runs. Standing room (standing: true) is held from now until you cancel it: for a pool that deletes a sandbox after each use and makes another, so a replacement is never refused up to it. Name its snapshots and the room is held on the servers holding them, where their forks start; forKey keeps it for this key's sandboxes alone. Keep a few more than the pool runs, for deletes still finishing. Room none of its sandboxes uses costs a quarter of the memory rate every hour it is held (unusedPerHourMicros at most), until you cancel. Change its number or snapshots in place with :update. list(limit?, cursor?): This account's room bookings and declines, newest first, each with its window, status, phase (upcoming, active, ended) and what it runs. Pass nextCursor as cursor for older ones. get(id): A room booking by id: its status, window, phase, sandboxes in use now and at most. update(id, sandboxes?, snapshots?): Change standing room in place: sandboxes (how many it holds) or snapshots (new ones of the same size; the room moves to their servers). It moves or grows only when all of it fits now; otherwise nothing changes and the answer says what fits. cancel(id): Cancel a room booking: its room goes back to everyone at once. Sandboxes running keep running.

NameRequiredDescriptionDefault
idNoThe booking's id.
vcpuNoEach sandbox's vCPUs, as you will create them.
limitNoAt most this many, newest first.
actionYes
cursorNonextCursor from the page before.
endsAtNoWhen it ends: after startsAt, at most 24 hours later. Not for standing room.
forKeyNoStanding room only: hold it for this key's sandboxes alone, so the account's other work never takes it. Default: the whole account's.
regionNoThe region; the default region when absent.
diskMiBNoEach sandbox's disk.
standingNoStanding room: held from now until you cancel it, with no startsAt or endsAt. For a pool that deletes a sandbox after each use and makes another.
startsAtNoWhen the window starts: now, or within 14 days. A time within the minute is now. Not for standing room.
memoryMiBNoEach sandbox's memory.
sandboxesNoHow many sandboxes to hold room for now.
snapshotsNoStanding room only: the snapshots its sandboxes fork from. The room is held on the servers holding them, where their forks start, at their size (leave vcpu, memoryMiB and diskMiB out). All of one size.
idempotencyKeyNoOptional: left out, one is made and returned as idempotencyKey. Send it back only to retry this exact call after a temporary error.

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the annotations (destructiveHint=true, openWorldHint=true) by disclosing the economics and side effects: unused room bills at a quarter of the memory rate, cancellation at least an hour before start costs nothing, a balance covering the estimate is required, declarations of what happens on decline, and that cancelling returns room while running sandboxes keep running and 'at the end nothing is stopped'.

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

Conciseness3/5

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

Content is front-loaded on create, the most important action, but the body is a dense semicolon-chained block of roughly 500 words with repeated material (the unused-room rate is stated twice) and no per-action structure, which makes the list/get/update/cancel guidance hard to scan.

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

Completeness5/5

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

For a 15-parameter, five-action mutation tool with no output schema, the description still explains what each action yields — list returns bookings and declines newest first with window, status, phase and nextCursor; get returns status, window, phase and in-use counts; update and cancel describe their outcomes and failure behavior. Nothing essential to invoking it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 93%, so the schema already documents ranges, defaults and per-field meanings for sandboxes, vcpu, memoryMiB, diskMiB, forKey, snapshots and region. The description restates most of this (1 to 10000 sandboxes, default 2 vCPU / 4096 MiB, 24-hour and 14-day limits) and only marginally adds, so baseline 3 applies.

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

Purpose5/5

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

The opening line states a specific verb and resource — hold/book room for many sandboxes, either for a time window or as standing room — and enumerates the five actions (create, list, get, update, cancel). An agent can tell this apart from runtime_sandboxes_create because the description explains room is booked in advance and creates are then never refused up to the booked amount.

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

Usage Guidelines4/5

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

Explicitly says when to reach for it — 'Use it before a batch of evals, rollouts or browser runs' — and gives the condition for standing room (a pool that deletes a sandbox after each use and makes another). It does not name a sibling alternative or state a when-not condition (e.g. single sandbox creation should use runtime_sandboxes_create), so it falls short of full routing guidance.

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

runtime_sandboxes_browserA
Destructive
Inspect

Chromium in a sandbox for browsing agents. start (headless?, width?, height?) returns cdpUrl, a private wss address to give Playwright connectOverCDP, Puppeteer, browser-use or Stagehand; headless false shows it on the sandbox's desktop with a live view. get returns the state and a fresh cdpUrl; stop ends it. A start takes about 1 to 2 seconds: Chromium comes from the host. Only a custom image that is not Ubuntu 24.04 x86_64 installs it on the first start, about a minute. Inside the sandbox it is at http://127.0.0.1:9222.

NameRequiredDescriptionDefault
idYes
widthNoWindow width in pixels. Default 1280.
actionYes
heightNoWindow height in pixels. Default 800.
headlessNotrue (the default): no window. false: on the sandbox's desktop, which this starts, with a live view.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint/openWorldHint/readOnlyHint=false, but the description adds real context beyond them: start latency of 1-2s, a ~1 minute first-start penalty only on custom non-Ubuntu-24.04 x86_64 images because Chromium comes from the host, and the fact that get mints a fresh cdpUrl. It does not say whether stop is idempotent or what happens to an already-stopped browser.

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

Conciseness4/5

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

Purpose is front-loaded in the first clause and every subsequent sentence carries load-bearing detail (return values, timing, image caveat, internal address). The middle sentence is long and semicolon-chained, which slightly hurts scannability but not content quality.

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

Completeness4/5

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

With no output schema, the description steps up and documents the key return (cdpUrl) for both start and get, plus the practical latency and image caveats an agent needs before calling. Only peripheral details (id meaning, stop idempotency, behavior on second start) are absent.

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

Parameters4/5

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

Schema coverage is 60% (headless, width, height documented; id and action bare), and the description adds meaning: headless=false 'shows it on the sandbox's desktop with a live view', plus the semantics of each action enum value. It still never explains what the required id refers to, leaving the agent to infer it is a sandbox id.

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

Purpose5/5

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

States a specific resource (a Chromium browser running inside a sandbox, reachable over CDP) and its three lifecycle actions. It is clearly distinguishable from the desktop_* siblings and exec, since it names the CDP/Puppeteer/Playwright use case rather than generic desktop control.

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

Usage Guidelines4/5

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

Explains what each action does in context: start returns a cdpUrl to hand to Playwright/Puppeteer/browser-use/Stagehand, get refreshes state and the cdpUrl, stop ends it, and headless=false selects the live-view desktop mode. It never names an alternative sibling or an explicit when-not condition, so it stops short of a 5.

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

runtime_sandboxes_createA
Idempotent
Inspect

Create a Linux sandbox (Ubuntu with python3, node, bun, git, gcc and sudo). The free usage is spent first, then prepaid credit, with nothing to choose. Defaults: 2 vCPU / 4096 MiB / 4096 MiB disk, no time limit: it runs while it works and pauses after 300 idle seconds. Waits up to 60 seconds and returns its state; run commands once it is running. Without credit: 4 running sandboxes at once (a paused one holds no slot), each up to 2 vCPU / 4 GiB, 8 vCPU / 16 GiB in all, at most 5 sandboxes kept and 50 made a day; once the account holds credit, its sandboxes have paid limits and still spend the free usage first.

NameRequiredDescriptionDefault
cpuNoshared
envNoEnvironment variables for every command, terminal and SSH session in it (up to 32). Values are never shown again.
nameNoYour handle for it.
userNoroot: its commands and terminals run as root unless one names user sandbox. Default sandbox.
vcpuNoAt most 16 (2 without credit).
waitNo
imageNoStart from this ready image: id, name, name:tag or name@version. Waits for its ready check.
labelsNoUp to 32 key: value tags to filter by.
regionNo
diskMiBNoAt least 3072; at most 409600, 400 GiB (10240 without credit).
fundingNoAccepted and ignored: free usage first, then credit.
networkNoRules from the first start: {internet, allow?, deny?, connect?}, as runtime_sandboxes_network_set.
secretsNoThe egress secrets it may use, by name (at most 64): only these of the secrets that reach it; [] none; omit for all. Fixed for its life.
volumesNoUp to 4 volumes: [{volumeId, path, mode?: rw or snapshot}].
autoWakeNoA request to a paused sandbox wakes it.
pausableNoIgnored since 5 October 2026: every sandbox can pause.
snapshotNoStart as a copy of a ready snapshot, on the snapshot's host; not with image. A memory snapshot's copy is its size; a disk snapshot's is the size asked, its disk at least the saved one.
memoryMiBNoAt most 65536, 64 GiB (4096 without credit).
onTimeoutNopause
tailscaleNoPaid: join your tailnet once running: {authKeySecret (a job secret's name), hostname?, tags?}.
onLeaseEndNoonTimeout's older name.
persistentNoPaid: never pause it for idleness or a time limit.
getOrCreateNoWith name: return the sandbox holding that name (woken if paused) instead of name_taken.
wakeOnTimersNoA process's timer (a sleep, a timeout) wakes it from an idle pause.
maxCostMicrosNoDeprecated, still accepted: use maxTotalCostMicros.
cpuFloorMillisNoGuaranteed CPU, thousandths of a vCPU.
idempotencyKeyNoOptional: left out, one is made and returned as idempotencyKey. Send it back only to retry this exact call after a temporary error.
timeoutSecondsNoA time limit, 60 to 86400 s (24 h); 0, the default, is none: it runs while it works.
idlePauseSecondsNoPause after this many idle seconds (no request, no command or terminal still running, no open preview, port, SSH or tunnel connection, no network traffic and no CPU use by its processes). Default 300; 0 never; otherwise 60 to 86400, a shorter time raised to 60.
maxTotalCostMicrosNoThe most it may cost over its whole life.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only declare the generic write/open-world/idempotent profile, while the description adds substantive behavior: billing order (free usage then credit, 'nothing to choose'), idle-pause at 300 seconds, quota caps for uncredited accounts, and that a paused sandbox holds no slot. Nothing here conflicts with the annotations, and the funding/pausable no-op notes explain surprising parameters.

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

Conciseness4/5

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

Front-loaded with purpose, image contents, and defaults before the quota caveats, and every sentence carries information. The final quota sentence is dense and hard to parse on one read ('8 vCPU / 16 GiB in all, at most 5 sandboxes kept and 50 made a day'), which costs it the top score.

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

Completeness4/5

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

For a 30-parameter, nested-object creation tool with no output schema, the description covers the essentials an agent needs before calling: defaults, wait behavior, what is returned ('returns its state', plus idempotencyKey), and quota limits. Remaining gaps (region, image resolution, volumes) are largely handled by schema descriptions.

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

Parameters4/5

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

Schema coverage is already 87%, so the baseline is 3, but the description adds real meaning the schema lacks: the effective default shape (2 vCPU / 4096 MiB / 4096 MiB disk), no time limit by default, and the credit-dependent ceilings on vcpu/memory/disk and sandbox counts. Region, cpu, volumes, and tailscale are still left entirely to the schema.

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

Purpose5/5

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

States a specific verb and resource with concrete content: 'Create a Linux sandbox (Ubuntu with python3, node, bun, git, gcc and sudo)'. That clearly distinguishes it from creation-adjacent siblings such as runtime_sandboxes_fork, runtime_sandboxes_list, or runtime_sandboxes_manage.

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

Usage Guidelines4/5

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

Tells the agent the creation lifecycle: it waits up to 60 seconds, returns its state, and 'run commands once it is running' points at the exec sibling. No explicit when-not or direct alternative (fork, snapshot) is named, so it stops short of full routing guidance.

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

runtime_sandboxes_desktop_actA
Destructive
Inspect

Drive a sandbox's Linux desktop like a person: start (width,height) returns a live view URL; move/click/drag/scroll the mouse by pixel coordinates; type text; press keys (xdotool names like ctrl+l, Return); list or focus windows; open a URL in Chromium; launch a program. Take runtime_sandboxes_desktop_screenshot to see the result.

NameRequiredDescriptionDefault
xNo
yNo
dxNoscroll: wheel clicks, positive is right.
dyNoscroll: wheel clicks, positive is down.
idYes
toNodrag: [x, y] to release at.
urlNoopen: an http(s) address to open in Chromium.
argvNolaunch: a program and its arguments.
fromNodrag: [x, y] to press at.
keysNokey: xdotool names, e.g. "ctrl+l", "Return", "alt+Tab".
textNotype: the text to type.
widthNo
actionYes
buttonNo
doubleNoclick: a double click.
heightNo
delayMsNotype: pause between keystrokes.
windowIdNofocus: an id from the window list.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly=false, destructive=true, and openWorld=true, so the safety profile is covered. The description adds real operational context beyond them: start returns a live view URL, input is by pixel coordinates, keys use xdotool names, and open/launch spawn external programs.

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

Conciseness4/5

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

Front-loads the purpose, then a compact semicolon-delimited enumeration of capabilities. Dense but well organized for a 16-action tool, with the screenshot note last as a natural follow-up.

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

Completeness4/5

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

With no output schema, the description carries value by noting that start yields a live view URL and that screenshot reveals results. It does omit several enum actions (stop, cursor, status, mouseDown/mouseUp), leaving minor gaps for a multi-action tool.

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

Parameters4/5

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

Schema coverage is 61%, and the description compensates by mapping parameters to actions ('start (width,height)', mouse via pixel coordinates, keys, url, argv/launch). This action-to-parameter mapping is not present in the schema itself, so it adds genuine value despite coverage gaps on x/y/width/height/button.

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

Purpose5/5

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

States a specific verb+resource ('Drive a sandbox's Linux desktop') and enumerates the concrete operations it supports, so an agent immediately knows this is the interactive input tool. It explicitly distinguishes itself from the sibling runtime_sandboxes_desktop_screenshot, which it delegates result inspection to.

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

Usage Guidelines4/5

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

Gives clear context ('like a person') and names the complementary tool to use for results ('Take runtime_sandboxes_desktop_screenshot'). It does not, however, state when to prefer this over runtime_sandboxes_browser or runtime_sandboxes_exec, which are plausible alternatives.

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

runtime_sandboxes_desktop_recordA
Destructive
Inspect

Record a sandbox's desktop to an MP4 file. start returns the recording id; stop (recordingId) finishes the file at path in the sandbox; list; delete (recordingId). Download it with runtime sandboxes desktop record fetch. One at a time; at most 8192 MiB kept per sandbox; it stops before the disk fills.

NameRequiredDescriptionDefault
idYes
crfNoQuality: 18 is sharp and large, 45 small. Default 30.
fpsNoFrames a second. Default 10.
actionYes
maxMiBNoThe file never grows past this. Default 512.
maxSecondsNoStop after this much video. Default 1800.
recordingIdNoA recording's id.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, so safety is covered. The description adds genuinely new operational context: only one recording at a time, an 8192 MiB per-sandbox retention cap, and automatic stop before the disk fills. These constraints are useful and not derivable from the structured fields.

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

Conciseness4/5

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

Front-loads the core purpose, then the action workflow, then constraints, with no redundant sentences. The semicolon-heavy telegraphic style is dense but every clause carries distinct information.

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

Completeness4/5

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

With no output schema, the description appropriately explains what start returns (a recording id) and how to retrieve the finished file. For a 7-parameter, four-action tool the coverage is solid, though it could briefly note default behaviors per action.

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

Parameters4/5

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

Schema coverage is 71% and crf/fps/maxMiB/maxSeconds already carry schema descriptions, so the schema does much of the work. The description nonetheless adds meaning by mapping action values to parameters (start returns an id; stop/delete take recordingId), clarifying the otherwise opaque enum-to-argument relationship.

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

Purpose5/5

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

Names a specific verb (record) and resource (a sandbox's desktop to an MP4 file), clearly distinguishing it from siblings like runtime_sandboxes_desktop_screenshot and runtime_sandboxes_desktop_act. An agent knows immediately this tool captures desktop video rather than a still frame or input action.

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

Usage Guidelines4/5

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

Describes the multi-step workflow precisely: start returns a recording id, stop (recordingId) finalizes the file, and list/delete round out the actions, plus the exact fetch command for download. It stops short of stating when to prefer this over the screenshot sibling, but the action semantics give clear usage context.

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

runtime_sandboxes_desktop_screenshotA
Read-only
Inspect

A screenshot of a sandbox's desktop, as base64 image data. Needs a started desktop (runtime_sandboxes_desktop_act action start).

NameRequiredDescriptionDefault
idYes
formatNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds meaningful behavior beyond that: the result is base64-encoded image bytes and the tool fails without a started desktop, which the agent needs to sequence calls correctly.

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

Conciseness4/5

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

Two short sentences, value and precondition front-loaded, with no filler. It is efficient; a brief clause on parameter format would not have hurt but the current length is defensible.

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

Completeness3/5

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

With no output schema, the description usefully states the return type (base64 image data), and it notes the runtime prerequisite. However, for a two-parameter tool at 0% schema coverage it leaves parameter meaning undocumented, so it is only marginally complete.

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

Parameters2/5

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

Schema description coverage is 0% for two parameters, so the description carries the full burden, yet it never explains the required 'id' (presumably the sandbox/desktop identifier) nor the 'format' enum (png/jpeg) even though the output format is mentioned generically. An agent cannot infer valid values for 'format' or what 'id' refers to from the description alone.

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

Purpose4/5

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

States a specific resource (a sandbox's desktop) and the output form (base64 image data), which is enough to distinguish it from siblings like runtime_sandboxes_desktop_act and runtime_sandboxes_desktop_record. It never uses an explicit verb, but 'screenshot' functions as the action.

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

Usage Guidelines4/5

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

Gives a concrete precondition — the desktop must be started via runtime_sandboxes_desktop_act action start — naming the specific sibling and action needed to enable this tool. It does not state when to prefer this over related desktop tools, but the prerequisite guidance is unusually actionable.

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

runtime_sandboxes_execA
Destructive
Inspect

Run a shell command (bash -c) or an argv in a sandbox and get exitCode, stdout and stderr. Output over 16,000 characters in all keeps each stream's first line and its end, with outputCut and a note on reading the rest from a file. Waits for a sandbox that is still starting. A timeout returns timedOut: true with the output so far. background: true returns a processId at once, for servers, watchers and interactive programs; runtime_sandboxes_process reads and controls it. Runs as the sandbox user with passwordless sudo, HOME=/workspace; user root runs it as root instead, with no sudo needed. env sets environment variables and keeps their values out of the command line.

NameRequiredDescriptionDefault
idYes
cwdNoWorking directory. Default /workspace.
envNoEnvironment for this command, merged over the sandbox's. Put secrets here, never in the command line: env is never echoed back.
argvNoOr the program and its arguments, run without a shell.
userNoWho runs it: the sandbox user (uid 1000, HOME=/workspace), or root, through the sandbox's passwordless sudo with the same environment and PATH and HOME=/root. Saves prefixing every command with sudo. Default: the sandbox's own user setting, which is the sandbox user unless it was created or updated with user root.
stdinNoText given to the command's standard input, which is then closed.
commandNoA shell command, run as `bash -c "<command>"` (pipes, &&, redirection and globs work), or a list of the program and its arguments, run without a shell.
timeoutMsNoDefault 60000. Up to 24 h.
backgroundNoStart it and return at once with a processId.
stdinBase64NoBytes for standard input, base64.
idempotencyKeyNoOptional: left out, one is made and returned as idempotencyKey. Send it back only to retry this exact call after a temporary error.

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the destructive/openWorld annotations: 16,000-char per-stream truncation with first line plus tail and outputCut, timeout returning timedOut: true with partial output, background returning a processId immediately, and the execution identity (sandbox user with passwordless sudo, HOME=/workspace, root alternative). It also notes env values are never echoed back, which is meaningful secret-handling context.

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

Conciseness4/5

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

Front-loaded with the core action and result shape, then progressive detail on truncation, timeout, background and identity. Dense but nearly every clause adds information; the closing env sentence partially restates the schema description.

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

Completeness5/5

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

With 11 parameters and no output schema, the description supplies what's missing: the result fields (exitCode, stdout, stderr, timedOut, outputCut, processId, idempotencyKey) and the truncation/timeout behaviors that change how an agent must parse output. Nothing essential for correct invocation is absent.

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

Parameters4/5

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

Schema coverage is already 91%, so the baseline would be 3; the description earns above that by explaining the observable effect of user/root, the sudo-saving intent, timeout semantics, and the security rationale for env. Minor overlap with schema text (env, timeoutMs) keeps it from a 5.

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

Purpose5/5

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

Opening sentence names a specific verb (run), the resource (a command in a sandbox), both invocation modes (bash -c or argv) and the return values (exitCode, stdout, stderr). It also routes background work to runtime_sandboxes_process, distinguishing it from that sibling.

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

Usage Guidelines4/5

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

Explicitly states when to use background: true (servers, watchers, interactive programs) and which sibling controls the resulting process. It also notes the tool waits for a still-starting sandbox. It doesn't cover when to prefer runtime_sandboxes_interpreter_run or files_write over a raw shell command, so it stops short of full when/when-not guidance.

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

runtime_sandboxes_files_listA
Read-only
Inspect

List a directory in a sandbox (default /workspace): name, path, type, size, mode, modifiedAt. depth goes deeper (up to 10); glob filters (e.g. **/*.py). At most 2,000 entries; truncated says when there were more.

NameRequiredDescriptionDefault
idYes
globNo
pathNoAbsolute path in the sandbox, e.g. /workspace/app/main.py. Any path the sandbox user may use.
depthNo
limitNo
hiddenNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so safety is covered. The description adds genuinely useful operational context beyond that: the 2,000-entry cap and an explicit truncation indicator, plus the depth ceiling of 10. It does not describe pagination mechanics or the exact truncation field name, keeping it short of a 5.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the core action and return shape, then the modifiers, then the hard limit. No filler or restatement of the title.

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

Completeness4/5

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

With no output schema, the description usefully enumerates return fields and the truncation signal, and annotations cover the safety profile. It stops short of explaining the 'hidden' parameter or how to page past a truncated result, which leaves a minor hole for a 6-parameter listing tool.

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

Parameters4/5

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

Schema description coverage is only 17% (path alone), so the description has to carry the load, and it does for most parameters: path default (/workspace), depth semantics ('goes deeper', up to 10), and glob filtering with a concrete pattern example. limit is implied by the 2,000-entry mention, but 'hidden' and 'id' get no explanation, leaving a gap.

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

Purpose5/5

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

States a specific verb and resource ('List a directory in a sandbox') and even enumerates the returned fields (name, path, type, size, mode, modifiedAt), which cleanly separates it from siblings like runtime_sandboxes_files_read, files_write and files_watch. An agent can identify the operation without opening the schema.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: it notes the default path (/workspace) and how depth/glob behave, but never says when to use this versus runtime_sandboxes_files_read or files_manage, nor any exclusion. Adequate context, no routing guidance.

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

runtime_sandboxes_files_manageA
Destructive
Inspect

stat: whether a path exists and what it is. mkdir: make a directory and its parents. rename: move from path to 'to' (overwrite to replace). remove: delete a file or link, or a directory with recursive. Missing paths are not errors for remove and mkdir.

NameRequiredDescriptionDefault
idYes
toNoAbsolute path in the sandbox, e.g. /workspace/app/main.py. Any path the sandbox user may use.
pathYesAbsolute path in the sandbox, e.g. /workspace/app/main.py. Any path the sandbox user may use.
actionYes
overwriteNo
recursiveNo

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, and the description adds real behavioral context beyond that: overwrite replaces an existing target, recursive is required to remove a directory, and remove/mkdir are tolerant of missing paths. It stops short of stating permission requirements or what stat actually returns.

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

Conciseness5/5

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

Four terse action-prefixed clauses, front-loaded by action name, with zero filler. Every sentence contributes a distinct semantic detail.

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

Completeness3/5

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

For a 6-parameter mutation tool with no output schema, the action semantics are covered but the return behavior of stat ('what it is') is left vague and the sandbox-id parameter and authorization model are untouched. Adequate but with visible gaps.

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

Parameters4/5

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

Schema coverage is only 33%, so the description carries meaningful weight, and it does: 'to' is tied to rename, 'overwrite' is explained as the replace toggle, and 'recursive' is tied to directory removal. The 'id' and 'action' parameters are self-evident, so the ambiguous booleans are the ones that matter and they are covered.

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

Purpose4/5

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

The description enumerates the four actions (stat, mkdir, rename, remove) with a concrete effect for each, so an agent knows exactly what the tool does. It distinguishes the tool from read/write/list siblings via the action vocabulary, though it does not name alternatives explicitly.

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

Usage Guidelines3/5

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

Usage is implied by the per-action breakdown rather than stated as when-to-use guidance, and no sibling alternative (e.g. files_read, files_write) is named as a fallback. The note that missing paths are not errors for remove/mkdir is a useful operational hint but not routing guidance.

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

runtime_sandboxes_files_readA
Read-only
Inspect

Read a file in a sandbox as text (UTF-8) or base64. Text reads can take a line range (startLine, lineCount) so large files come in pieces; the reply says the total line count. At most 1 MiB per read; any path the sandbox user may read.

NameRequiredDescriptionDefault
idYes
pathYesAbsolute path in the sandbox, e.g. /workspace/app/main.py. Any path the sandbox user may use.
encodingNotext
lineCountNo
startLineNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: a 1 MiB per-read limit, that the reply includes total line count, and that any path the sandbox user may read is allowed. It omits error/oversize behavior, but the added constraints are substantive.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the core action and immediately followed by the encoding and paging mechanics. No filler; every clause conveys an operational detail.

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

Completeness4/5

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

With no output schema, the description does note the reply carries the total line count, and it covers size limits, encoding, paging, and permission scope. A little more on the returned content structure (e.g., how base64 vs text is surfaced, truncation signaling) would make it fully complete.

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

Parameters4/5

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

Schema description coverage is low (20%), so the description carries real weight: it explains encoding (text/base64), the startLine/lineCount line-range semantics, and the path access permission scope. Only 'id' remains unexplained, but its UUID type makes it self-evident, so the description compensates well for the coverage gap.

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

Purpose5/5

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

States a specific verb (read) and resource (a file in a sandbox) with the scope of what it returns (text UTF-8 or base64). This clearly separates it from siblings like files_list, files_write, files_manage, and files_watch without needing to open any schema.

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

Usage Guidelines3/5

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

It implies usage through the encoding and line-range mechanics but never states when to choose this over alternatives such as files_list or files_manage, nor any prerequisites. Usage is inferable from context rather than explicitly guided.

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

runtime_sandboxes_files_watchAInspect

Watch a sandbox file or directory for changes. start (path, recursive, events, include and exclude globs, timeoutMs, webhook: true to have Runtime send the changes to the account's webhooks) returns the watch and a cursor; read (watchId, cursor, waitMs) returns the events since it, repeated writes folded with a count, and nextCursor; list; stop (watchId). Access events are opt-in. At most 4 watches per sandbox; a watch ends after timeoutMs (1 h by default, zero until stopped). Reading never wakes a paused sandbox.

NameRequiredDescriptionDefault
idYes
pathNo
actionYes
cursorNo
eventsNoOnly these event types. Default: all of create, write, remove, rename, chmod.
waitMsNo
batchMsNoGather events this long and send them as one batch, folding repeated writes to a file into one event with a count. Default 100.
excludeNoSkip paths matching these globs. A directory excluded (`node_modules`, `dist/**`) is not watched at all.
includeNoReport only paths matching one of these globs, relative to path (`**/*.py`; a bare `*.py` matches at any depth).
watchIdNoA watch's id.
webhookNoAlso send its changes to the account's webhooks as sandbox.files.changed events, read by Runtime without waking the sandbox: at most one event every 2 s a watch, 16 such watches an account. Default false.
recursiveNoWatch every directory under it too. Default false.
timeoutMsNoThe watch ends by itself after running this long; 0 lasts until stopped or the sandbox ends. Default 3600000 (1 h).
maxWatchesNoDirectories watched at most; past it a `limit` notice. Default 10000.
idempotencyKeyNoOptional: left out, one is made and returned as idempotencyKey. Send it back only to retry this exact call after a temporary error.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only supply the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false); the description goes well beyond them by disclosing the 4-watch cap, webhook rate limit (one event per 2 s, 16 watches per account), timeout behavior (1 h default, 0 = until stopped), and the key operational fact that reading never wakes a paused sandbox.

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

Conciseness4/5

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

Dense, front-loaded and organized by action with semicolon-separated clauses, so no sentence is wasted. It is information-rich rather than bloated, though the action list runs long enough that an agent must parse several clauses to find the one it needs.

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

Completeness4/5

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

For a 15-param mutation-capable tool with no output schema, the description supplies the return contract for read (events since cursor, folded writes with count, nextCursor) and the lifecycle constraints. It leaves the semantics of batchMs, maxWatches and idempotencyKey to the schema, but overall an agent has enough to call it correctly.

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

Parameters4/5

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

With 67% schema coverage across 15 params, the description carries real weight by mapping arguments to actions (path/recursive/events/include/exclude/timeoutMs/webhook for start; watchId/cursor/waitMs for read) and explaining folded write counts. It omits batchMs, maxWatches and idempotencyKey, which only the schema documents, but the core semantics are covered.

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

Purpose5/5

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

The description states a specific verb+resource ('Watch a sandbox file or directory for changes') and then enumerates the four sub-actions (start/read/list/stop) with their arguments and return shapes. An agent can distinguish this watch-based change-notification tool from the sibling runtime_sandboxes_files_read/write tools without opening the schema.

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

Usage Guidelines4/5

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

It clearly delineates when each action applies: start returns a watch plus cursor, read consumes the cursor, list enumerates watches, stop terminates one. It also notes access events are opt-in and that watches cap at 4 per sandbox. It never names an alternative tool or an explicit 'use this instead of X' condition, so it stops short of a 5.

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

runtime_sandboxes_files_writeA
DestructiveIdempotent
Inspect

Create or replace a file in a sandbox, atomically, making parent directories. content is text unless encoding is base64. Up to 1 MiB; for bigger files use the SDK or npx withruntime sandboxes cp.

NameRequiredDescriptionDefault
idYes
pathYesAbsolute path in the sandbox, e.g. /workspace/app/main.py. Any path the sandbox user may use.
contentYes
encodingNotext

TDQS

A4.1/5.0
Behavior5/5

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

Annotations declare destructiveHint=true and idempotentHint=true, and the description reinforces this with "create or replace" and adds value beyond them: the write is atomic, parent directories are created automatically, content is interpreted as text unless encoding is base64, and there is a hard 1 MiB size ceiling. Atomicity, implicit directory creation, and the size cap are all behavioral facts an agent cannot get from the annotations.

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

Conciseness5/5

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

Two sentences, zero padding. The core action and its atomic/replace semantics come first, the encoding rule and size limit follow, and the escalation path for large files closes it out. Everything earns its place.

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

Completeness4/5

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

For a 4-parameter mutation tool with no output schema and a sparse schema, the description covers the important behavior (atomicity, overwrite semantics, directory creation, size limit, encoding). It does not mention permission/auth requirements or what a successful call returns, but the absence of an output schema means return-value detail is not required.

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

Parameters3/5

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

Schema description coverage is only 25% (only `path` is documented in the schema). The description compensates for the undocumented `encoding` parameter by stating "content is text unless encoding is base64," which is genuinely useful. However, it says nothing about `id` (presumably the sandbox UUID) or about path constraints beyond what the schema already states, so the low coverage is only partially offset.

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

Purpose4/5

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

The description states a specific verb+resource pair: "Create or replace a file in a sandbox," which tells an agent exactly what the tool does and implicitly separates it from the read/list/watch siblings. It does not explicitly name or contrast with any sibling (e.g. files_manage, files_read), so it stops short of full routing clarity.

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

Usage Guidelines4/5

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

It gives an explicit fallback condition and alternative: files over 1 MiB should use the SDK or `npx withruntime sandboxes cp`. That is a clear when-to-use-something-else rule. It offers no guidance on when to prefer this over runtime_sandboxes_files_manage or other file siblings.

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

runtime_sandboxes_forkA
Idempotent
Inspect

Start count (1 to 100 on prepaid credit, 1 to 8 without credit) running copies of a sandbox, with its files, memory and processes, on its host. Copies keep its size and CPU, and run on the free usage first, then credit. Returns {sandboxes, snapshot}; on an error, details.startedSandboxIds names copies that started, which are deleted (billed only on a 4xx). fork_unavailable means forks are switched off; do not retry it.

NameRequiredDescriptionDefault
idYes
nameNoYour own handle for the resource. Letters, digits, dot, dash, underscore.
countNoHow many copies: 1 to 100 on prepaid credit, 1 to 4 without credit. One fork takes at most a quarter of its server's free memory.
labelsNoYour own key/value tags, at most 32. Filter lists with label=key:value.
fundingNoAccepted and not read: copies run on what the account's new sandboxes run on, as for a create. On an account without credit, each copy must fit the limits without credit (it has the source's size) and takes one of its running slots.
secretsNoThe egress secrets the copies may use: a narrower list than the source's. Omit it and each copy keeps the source's list (every secret that reaches it, when the source names none). A name the source may not use is refused.
keepSnapshotNoKeep the snapshot the copies started from, to start more later (it is billed as snapshot storage). By default it is deleted when the fork ends, whether every copy started or not, and nothing is billed for it.
idempotencyKeyNoOptional: left out, one is made and returned as idempotencyKey. Send it back only to retry this exact call after a temporary error.

TDQS

A4/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: copies run on free usage first then credit, copies that started before an error are deleted and billed only on a 4xx, the source snapshot is deleted when the fork ends unless keepSnapshot is set, and details.startedSandboxIds names partial results. That is exactly the operational detail an agent needs and the annotations (non-readonly, idempotent, non-destructive) cannot supply.

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

Conciseness4/5

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

Front-loaded with the core action and its limits, and every sentence carries operational information with no filler. The second half is packed into long run-on clauses, which makes it dense to parse, but nothing is wasted.

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

Completeness5/5

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

With no output schema, the description steps in and documents the return shape ({sandboxes, snapshot}) as well as error semantics (details.startedSandboxIds, fork_unavailable). For an 8-parameter mutation with partial-failure behavior, nothing essential is missing.

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

Parameters3/5

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

Schema coverage is 88%, so the schema already documents count, funding, secrets, keepSnapshot and idempotencyKey well; baseline is 3. The description adds useful framing (copies keep the source's size and CPU, rollover order), but it also states '1 to 8 without credit' while the schema says '1 to 4 without credit' — an inconsistency that could mislead a caller choosing count.

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

Purpose4/5

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

The description uses a specific verb and resource — it starts running copies of a sandbox including files, memory and processes on the host — which clearly separates it from runtime_sandboxes_create (new sandbox) and runtime_snapshots. It never names a sibling explicitly, so the differentiation comes from the nature of the operation rather than from routing guidance.

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

Usage Guidelines3/5

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

Retry behavior is stated precisely ('fork_unavailable means forks are switched off; do not retry it'), which is genuinely useful. But there is no guidance on when to fork versus creating a new sandbox or restoring a snapshot, and no prerequisites are given. Usage is implied by the operation itself rather than explained.

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

runtime_sandboxes_inspectA
Read-only
Inspect

One aspect of a sandbox. storage: reserved disk, price and charges. paused_storage: what a paused one occupies and costs. lifetime: persistence, spending cap and retained-data deadline. recovery: the latest file recovery point.

NameRequiredDescriptionDefault
idYes
whatYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description goes further by disclosing what data each aspect returns (reserved disk/price/charges, spending cap/retained-data deadline, latest recovery point), which helps the agent predict results. It still omits error/edge behavior and requires the id to resolve to an existing sandbox.

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

Conciseness4/5

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

It is compact and every clause is a value-to-output mapping that earns its place. The opening fragment 'One aspect of a sandbox.' is fairly empty, but the enum listing is dense and front-loaded after it.

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

Completeness4/5

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

For a two-parameter read-only inspect tool with no output schema, the description is close to sufficient: it tells the agent exactly what each aspect yields. Remaining gaps are the meaning of `id` and any relation to sibling inspection tools, which are minor.

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

Parameters4/5

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

Schema coverage is 0%, so the description must carry the weight, and it fully explains all four values of the `what` enum, which is the enum parameter. The `id` parameter is left unexplained, presumably because it is self-evident, so it falls just short of full compensation.

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

Purpose4/5

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

The enum breakdown ('storage: reserved disk, price and charges', 'lifetime: persistence, spending cap...') makes it clear the tool retrieves one facet of a sandbox's state, matching the inspect verb in the title. It does not, however, differentiate itself from siblings like runtime_sandboxes_metrics or runtime_sandboxes_list. The leading fragment 'One aspect of a sandbox' is weak but the enum glosses carry the meaning.

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

Usage Guidelines3/5

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

The per-value descriptions implicitly guide which enum to pick for which question (want disk cost -> storage, want retention -> lifetime), but there is no explicit when-to-use versus alternatives or when-not-to-use guidance. An agent must infer that this is a scoped read compared to broader siblings.

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

runtime_sandboxes_interpreter_contextsA
Destructive
Inspect

List, create, restart, interrupt or remove a sandbox's interpreter contexts, each an isolated interpreter with its own variables. restart clears a context's variables; interrupt stops the running cell and keeps them.

NameRequiredDescriptionDefault
idYes
envNoEnvironment variables for the context's process.
actionYes
contextNoA context's id; each language's name is its default context, started on first use.
languageNopython by default. R, Java and Go are installed on first use (tens of seconds, once) when the image lacks them.
idempotencyKeyNoOptional: left out, one is made and returned as idempotencyKey. Send it back only to retry this exact call after a temporary error.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare destructiveHint=true and readOnlyHint=false, and the description usefully goes beyond them by specifying exactly what restart destroys (variables) versus interrupt (keeps them). This is real behavioral context beyond the safety flags, though it doesn't cover permissions or the isolation model in more depth.

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

Conciseness5/5

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

Two sentences, dense and front-loaded: the operation list leads, followed by the resource definition, then the restart/interrupt clarifications. No filler.

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

Completeness4/5

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

For a six-parameter destructive multi-action tool with no output schema, the description conveys the key lifecycle semantics an agent needs before invoking it. It omits return-value expectations and per-action parameter requirements, but the absence of an output schema and the strong action semantics keep it largely complete.

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

Parameters4/5

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

The description adds meaning for the 'action' parameter's variants, explaining restarts/interrupts in terms of variable lifecycle, which the enum alone does not convey. Schema coverage is 67% and parameters like env, context, and idempotencyKey are documented in-schema, so the description mostly complements rather than compensates.

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

Purpose5/5

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

The description names a specific resource ('a sandbox's interpreter contexts') and enumerates the exact operations (list, create, restart, interrupt, remove), matching the action enum. It also distinguishes the resource from siblings like runtime_sandboxes_interpreter_run by defining a context as 'an isolated interpreter with its own variables.'

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

Usage Guidelines3/5

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

The two semantic clauses tell the agent what restart and interrupt do, which implicitly guides action choice, but there is no explicit when-to-use guidance versus siblings such as interpreter_run, nor does it state which action requires which parameter (e.g., create needing language/context).

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

runtime_sandboxes_interpreter_runA
Destructive
Inspect

Run code in a stateful interpreter inside a running sandbox: variables and imports persist per context, like notebook cells (Go keeps declarations, not values). Returns stdout, stderr, results (text, HTML, PNG charts, tables for DataFrames) and any error with its traceback; values over 48 KiB come back as refs to files. For data analysis, charts and quick computations; runtime_sandboxes_exec runs shell commands. timeoutMs defaults to 300000.

NameRequiredDescriptionDefault
idYes
codeYes
contextNoA context's id; each language's name is its default context, started on first use.
languageNopython by default. R, Java and Go are installed on first use (tens of seconds, once) when the image lacks them.
timeoutMsNo
idempotencyKeyNoOptional: left out, one is made and returned as idempotencyKey. Send it back only to retry this exact call after a temporary error.
interruptOnDisconnectNo

TDQS

A4.3/5.0
Behavior5/5

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

Annotations only declare write/destructive/open-world characteristics; the description adds substantial context beyond them: per-context state persistence (with the Go declaration caveat), the full return surface (stdout/stderr/results/errors with traceback), a 48 KiB size threshold that switches to file refs, and the timeout default.

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

Conciseness4/5

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

Front-loads the action and scope, then behavior, then sibling routing, then a trailing default. Dense but every clause carries information; no filler sentences.

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

Completeness4/5

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

With no output schema, the description correctly takes on the burden of explaining return values and error shape, and it discloses the destructive nature beyond annotations. Remaining gap is the partial parameter coverage (43%), but the description is complete enough for correct invocation.

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

Parameters3/5

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

Schema coverage is only 43%. The description compensates partially, adding the timeoutMs default (300000) and elaborating the persistence semantics of 'context', but idempotencyKey semantics live only in the schema and several parameters lack description-level detail. Baseline-to-marginal value given the coverage gap.

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

Purpose5/5

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

States a specific verb (Run) and resource (code in a stateful interpreter inside a sandbox), and explicitly distinguishes itself from the sibling runtime_sandboxes_exec ('runs shell commands'). An agent can tell them apart without opening either schema.

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

Usage Guidelines4/5

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

Names the alternative tool and its distinguishing purpose ('For data analysis, charts and quick computations; runtime_sandboxes_exec runs shell commands'), giving a clear selection condition. It lacks explicit when-not exclusions, but the routing guidance is strong.

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

runtime_sandboxes_listA
Read-only
Inspect

List your sandboxes (live ones and stopped ones that keep their disk, unless includeStopped), filtered by state, name or label (key:value), 50 a page; pass nextCursor back as cursor. Give id to read one.

NameRequiredDescriptionDefault
idNo
nameNoYour own handle for the resource. Letters, digits, dot, dash, underscore.
labelNo
limitNoPage size, 1 to 100.
stateNo
cursorNoOpaque cursor from the previous page's nextCursor.
includeStoppedNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds meaningful behavior beyond that: default page size of 50, the nextCursor/cursor round-trip, and the fact that stopped sandboxes still appear unless includeStopped is set. It does not describe the response shape, but the pagination contract is the important disclosure here.

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

Conciseness4/5

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

A single dense sentence with the primary action and the most important constraint front-loaded. It is packed but nearly every clause carries information (filtering, pagination, stopped behavior, read-by-id). Slightly run-on, costing it a point.

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

Completeness5/5

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

With no output schema, the description supplies the return-value contract an agent needs: paginated results with a nextCursor. It covers filtering, defaults, pagination, and the read-by-id mode, and the annotations cover safety. Nothing essential to correct invocation is missing.

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

Parameters4/5

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

Schema description coverage is only 43%, so the description must compensate, and it does: it clarifies includeStopped semantics, the 'key:value' label filter syntax, the cursor round-trip, page size, and that id switches to single-resource read. State, limit bounds and name format are left to the schema, which covers them, so the gap is minor.

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

Purpose4/5

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

Starts with a specific verb+resource ('List your sandboxes') and scopes it precisely with the live/stopped distinction. It also notes the dual read mode ('Give id to read one'), which is useful but slightly muddles whether this is a list tool or a getter. It does not name the sibling that handles single-resource reads (runtime_sandboxes_inspect).

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

Usage Guidelines3/5

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

Usage is implied through the includeStopped toggle and the state/name/label filters, giving the agent context for when to use it. However, it never explicitly routes to alternatives like runtime_sandboxes_inspect for a single sandbox, nor does it state exclusions. Adequate but leaves the sibling selection to inference.

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

runtime_sandboxes_manageA
DestructiveIdempotent
Inspect

stop: end it and its compute charges, keeping its disk (billed as paused storage) for restart. delete: stop it, delete its disk and paused memory, revoke its previews and ports, and remove it from lists for good (its snapshots stay). pause: keep memory and disk, stop compute charges. wake: continue a paused one (seconds: its new time limit, if it has one; no_capacity means retry); a paused one with autoWake also wakes by itself on the next exec, file, terminal or preview request. extend: seconds more for one with a time limit (one without needs none). retention: days (1 to 365) a paused or stopped one is kept; null, the default, keeps it while your account has credit. persist: policy {persistent, maxTotalCostMicros?} keeps it running until stopped, never idle-paused. restart: start a stopped one from its disk. switch-image: move it to image, keeping only /workspace (its home), volumes, env, name and previews; processes restart and everything else on its disk is lost (snapshot first to keep everything); undone if anything fails. update: change name, labels, env (values are never shown again), autoWake, wakeOnTimers, user, idlePauseSeconds (counted from the last activity), timeoutSeconds or onTimeout. resize: diskMiB alone grows a running one's disk live, nothing restarted; vcpu and/or memoryMiB change by a restart on its own server; the whole disk stays and every running program stops (a paused one's memory is discarded); no_capacity means its server has no room for the new size, and nothing changed. Waits until done.

NameRequiredDescriptionDefault
idYes
envNoupdate: environment for every later command; a value sets a variable, null removes it.
daysNoretention: days to keep a paused sandbox, or null to keep it while your account has credit.
keepNoswitch-image: optional, only "workspace", the only thing a switch keeps; older clients send it.
nameNoupdate: a new name, unique in the account.
userNoupdate: who later commands and terminals run as when they name no one.
vcpuNoresize: the new vCPUs, 1 to 16 (without credit 2).
waitNoWait until the change is done (default).
imageNoswitch-image: the image to move to: id, name, name:tag or name@version.
actionYes
labelsNoYour own key/value tags, at most 32. Filter lists with label=key:value.
policyNo
diskMiBNoresize: the new disk in MiB, only larger, at most 409600 (without credit 10240); asked alone of a running sandbox it grows live, otherwise at the restart.
restartNoresize: optional; false grows a running sandbox's disk live or refuses, never restarting (diskMiB alone).
secondsNoextend: move its time limit this many seconds later. wake: its new time limit, for a sandbox that has one.
autoWakeNoupdate: whether a request wakes it when paused.
memoryMiBNoresize: the new memory in MiB, 128 to 65536 (without credit 4096).
onTimeoutNoupdate: what its time limit's end does.
wakeOnTimersNoupdate: whether a process's timer wakes it from an idle pause.
idempotencyKeyNoOptional: left out, one is made and returned as idempotencyKey. Send it back only to retry this exact call after a temporary error.
timeoutSecondsNoupdate: a new time limit from now, 60 to 86400 seconds, sooner or later than before; 0 removes it.
idlePauseSecondsNoupdate: pause after this many idle seconds, 60 to 86400 (a shorter time raised to 60); 0 never.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only declare destructive/idempotent hints, but the description adds cost behavior (compute charges stop, paused storage billing), irreversible data loss for delete and switch-image, the 'snapshot first' mitigation, rollback on failure, live-vs-restart disk growth, and no_capacity outcomes. 'Waits until done' is disclosed too.

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

Conciseness3/5

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

It is front-loaded with the most-used actions and every clause carries information, but it reads as one dense run-on block with no line breaks and repeats several schema parameter descriptions (seconds, days, diskMiB, keep). Structure, not length, is the weakness.

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

Completeness5/5

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

For an 11-action, 22-parameter mutation tool with nested policy and no output schema, the description covers destructive outcomes, cost implications, failure modes, and waiting behavior. An agent has what it needs to act safely.

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

Parameters4/5

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

Schema coverage is already 86%, so the baseline is 3; the description adds value by tying parameters to actions and by clarifying interactions the schema states piecemeal (diskMiB alone growing live, restart=false refusing instead of restarting, seconds meaning extend vs. wake's time limit, keep only 'workspace'). Some parameter text is duplicated from the schema rather than adding new meaning.

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

Purpose4/5

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

The description enumerates concrete verbs and resources per action (stop, delete, pause, wake, extend, retention, persist, restart, switch-image, update, resize), so an agent knows this is the sandbox lifecycle-management tool. It does not name sibling tools (e.g. runtime_sandboxes_exec, runtime_sandboxes_create) to sharpen that boundary, keeping it short of a 5.

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

Usage Guidelines5/5

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

Each action's consequence is stated in a way that directly selects between alternatives: stop keeps the disk for restart, pause keeps memory and disk, delete removes disk and paused memory for good, retention sets keep-days, persist prevents idle pausing. The agent can choose an action without guessing.

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

runtime_sandboxes_mcpA
Destructive
Inspect

Run well-known MCP servers in a sandbox. catalog lists them (GitHub, Postgres, Playwright browser, filesystem, fetch, git, Notion, search...) with their settings and the hosts they call. start returns each one's URL and Authorization header (public: true for URLs that never expire, to configure an agent with once); get shows their state and fresh URLs; stop ends them. Secret settings name Runtime secrets (runtime_secrets), so a server never holds the value, and servers keep to the sandbox's network rules.

NameRequiredDescriptionDefault
idNoSandbox id. Required for start, get and stop; omit for catalog.
portNo
actionYes
publicNo
replaceNo
serversNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare openWorldHint=true and destructiveHint=true, but the description adds real behavioral value beyond them: secrets are resolved by the egress proxy so "a server never holds the value", and "servers keep to the sandbox's network rules". It also distinguishes expiring vs permanent (public) URLs. It stops short of what stop actually tears down.

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

Conciseness4/5

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

Dense but front-loaded: the core purpose leads, then actions are covered in a compact sequence of clauses. The semicolon-heavy packing is efficient, though the final sentence bundles two unrelated facts (secret resolution and network rules) somewhat awkwardly.

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

Completeness3/5

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

For a multi-action tool with six parameters and no output schema, the description covers the return shape of start and get but gives little on catalog or stop, and omits the semantics of replace and port entirely. It is adequate to invoke the common paths but leaves several parameters and one action under-specified.

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

Parameters3/5

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

Schema description coverage is only 17%, so the description must carry the load; it clarifies the action dimension and the meaning of public (URLs that never expire), but leaves replace, port, and options unspecified in both schema and prose. The secrets mapping it explains is already documented in the schema, so it adds limited net value.

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

Purpose5/5

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

Starts with a concrete verb+resource ("Run well-known MCP servers in a sandbox") and then enumerates the four actions (catalog/start/get/stop), so an agent can tell exactly what this does and distinguish it from runtime_sandboxes_create and runtime_sandboxes_exec. The catalog examples (GitHub, Postgres, Playwright, filesystem, fetch, git, Notion) make the scope unambiguous.

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

Usage Guidelines4/5

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

The description gives per-action context (catalog to list, start to provision, get to inspect, stop to end) and notes that public URLs are configured "once", which is genuine routing guidance. It also points the secret flow at the sibling runtime_secrets. What it lacks is an explicit when-not or a contrast with alternatives like runtime_sandboxes_exec for custom servers.

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

runtime_sandboxes_metricsA
Read-only
Inspect

A sandbox's measured CPU (percent of its vCPUs, and cores), resident memory, CPU wait, memory stalls, disk use, disk I/O and network per second over a range (15m, 1h, 6h, 24h, 7d, 30d; 1h when omitted), with the latest reading: to size a sandbox or find what drove a bill. Waiting is the measured wall-time percentage; null where the host did not provide complete same-run readings.

NameRequiredDescriptionDefault
idYes
rangeNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: the default range when omitted (1h), the meaning of 'Waiting' as measured wall-time percentage, and the null semantics where the host lacked complete same-run readings. Return shape and pagination/aggregation behavior are not covered.

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

Conciseness4/5

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

A single dense sentence that front-loads the metric list and the range option, then appends the two caveats (default range, waiting/null semantics). It is efficient, though the run-on structure makes the trailing caveats easy to skim past.

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

Completeness4/5

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

With no output schema, the description does the work of enumerating return content and the 'latest reading' inclusion plus null semantics. For a read-only two-parameter metrics tool with annotations covering safety, this is close to complete; only the response structure/series format and the id target are left implicit.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry parameter meaning. It fully documents the range parameter including the default ('1h when omitted'), which the schema does not encode. The id parameter is only implied ('A sandbox's...') and never states that it is the sandbox UUID required to identify the target.

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

Purpose4/5

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

The description enumerates the specific resource (a sandbox) and the exact measured quantities returned (CPU percent/cores, resident memory, CPU wait, memory stalls, disk use, disk I/O, network per second). It is unambiguous what the tool returns, though it omits an explicit verb like 'get' and does not name the sibling it differs from (e.g. runtime_sandboxes_inspect).

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

Usage Guidelines3/5

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

It states an intended purpose ('to size a sandbox or find what drove a bill'), which implies when to reach for it. However, it names no alternatives and gives no when-not guidance, so an agent must still infer how this differs from runtime_sandboxes_inspect or runtime_sandboxes_list.

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

runtime_sandboxes_mountsA
Destructive
Inspect

S3, Cloudflare R2 and Google Cloud Storage buckets mounted in a running sandbox. mount(id, provider, bucket, path, prefix?, region?, endpoint?, accountId?, secret?, readOnly?): Mount a bucket at path; secret keeps the key out of the sandbox. list(id): Each mount and whether it is mounted now. unmount(id, path): What was written stays in the bucket.

NameRequiredDescriptionDefault
idNo
pathNoWhere it appears in the sandbox, such as /data.
actionYes
bucketNoThe bucket's name.
prefixNoMount only the keys under this prefix.
regionNoThe bucket's region; us-east-1 for S3 when omitted.
secretNoThe name of the secret holding ACCESS_KEY_ID:SECRET_KEY, stored with header Authorization and format "AWS4-HMAC-SHA256 {value}" for the endpoint's host. The sandbox never sees the key: the egress proxy signs each request. Omit for a public bucket.
endpointNoAn https:// URL for any other S3-compatible store (MinIO, Backblaze B2...).
providerNos3 for Amazon S3 (or any S3-compatible store with endpoint), r2 for Cloudflare R2, gcs for Google Cloud Storage through its S3-compatible XML API with HMAC keys.
readOnlyNoMount it read-only.
accountIdNoFor r2: your Cloudflare account id.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, but the description adds real behavioral context: 'secret keeps the key out of the sandbox' (credential handling via the egress proxy) and 'What was written stays in the bucket' (unmount does not delete remote data). These are useful disclosures beyond the structured fields, though permission/rate-limit details are absent.

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

Conciseness4/5

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

Front-loaded with the resource statement, then compact per-action signatures. Dense and mostly waste-free, though the parentheses-style signatures are terse enough that some clarity is traded for brevity.

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

Completeness4/5

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

For an 11-parameter, multi-action tool with no output schema, the description covers all three actions and even summarizes the list() return ('each mount and whether it is mounted now'). Combined with 82% schema coverage, it is largely complete, with only cross-tool guidance missing.

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

Parameters3/5

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

Schema description coverage is 82%, so the schema already documents nearly all parameters including endpoint, provider enum, and secret. The description largely restates the mount parameter list with optional markers, adding little beyond what the schema provides; baseline 3 applies when the schema does the heavy lifting.

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

Purpose5/5

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

The description names a specific resource (S3/R2/GCS bucket mounts in a running sandbox) and decomposes the tool into three clearly labeled operations (mount/list/unmount) with signatures. It is easily distinguished from siblings like runtime_volumes or runtime_sandboxes_files_manage.

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

Usage Guidelines4/5

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

Each action's purpose is spelled out via its signature, giving clear context for when each applies. However, it never states when to prefer this over alternatives such as runtime_volumes or the files tools, so the routing decision is left implicit.

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

runtime_sandboxes_networkA
Destructive
Inspect

A sandbox's internet access and its allow, deny and connect rules. get(id): The rules, whether the sandbox's host enforces the latest version, and whether host:port reach is open to this organization. set(id, internet, allow?, deny?, connect?): Applies at once, to open connections too. A paid sandbox of an organization with a paid purchase reaches every port and one without credit ports 80 and 443; allow and deny narrow every port, and connect adds host:port pairs. Private addresses are always refused.

NameRequiredDescriptionDefault
idNo
denyNo
allowNo
actionYes
connectNo
internetNo

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already flag this as destructive, non-read-only and open-world, and the description adds rich behavioral detail beyond them: changes apply immediately including to already-open connections, allow/deny narrow every port while connect adds host:port pairs, paid orgs reach every port versus ports 80/443 without credit, and private addresses are always refused.

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

Conciseness4/5

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

Dense but well organized, front-loading the resource and then splitting into get/set signatures with the rules that follow. Sentences are long and somewhat run-on, but nearly every clause adds usable information rather than filler.

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

Completeness4/5

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

With no output schema, the description correctly explains what get returns (rules, host version enforcement, host:port reach), and for the mutation path it covers the scope of effect. Per-permission error behavior and prerequisites are not stated, but for a two-action rules tool this is largely complete.

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

Parameters4/5

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

Top-level schema coverage is 0% (only the array item strings are documented), so the description carries real weight: it explains id, internet's interaction with the org's paid status, and the distinct semantics of allow/deny (narrow every port) versus connect (adds host:port). It adds meaning beyond the schema, though action's enum itself is only shown by example rather than described.

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

Purpose5/5

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

The description names the resource (a sandbox's internet access and its allow/deny/connect rules) and cleanly separates the two operations it exposes, get(id) and set(id, internet, allow?, deny?, connect?). Unlike the sibling network tools (private, upstream_proxy, wireguard), it is clearly scoped to a single sandbox's egress rules, so an agent can route correctly.

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

Usage Guidelines4/5

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

It gives clear context for each action: get retrieves the rules and enforcement/reach status, set applies changes. However, it never explicitly contrasts this tool with sibling network tools (runtime_networks_private, runtime_networks_upstream_proxy), so an agent must infer that this is the sandbox-level variant.

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

runtime_sandboxes_previewsA
Destructive
Inspect

HTTPS addresses for ports inside a sandbox, https://-./. create(id, port, visibility?, ttlSeconds?, expiresAt?, embedOrigins?): private (default) needs the token as the x-runtime-preview-token header, or urlWithToken; public (an account with a kept top-up only) needs none and shows browsers a one-time warning. WebSockets work. embedOrigins limits which sites may show it in an iframe. Idempotent per port. list(id): Each shared port, with a fresh day-long token if private; tokens signed before keep their own expiry. rotate(id, port): A new token; the old ones stop working, as when a link leaked. delete(id, port): Stop sharing the port. session_create(id, sessionSeconds?, origins?): A web page's token for this sandbox's commands, files and previews; shown once. session_list(id): Without tokens. session_revoke(id, sessionId): Ends it now.

NameRequiredDescriptionDefault
idNo
portNoThe port inside the sandbox.
actionYes
originsNo
expiresAtNoAn absolute private-token deadline, at least a minute and at most a week ahead. The token never outlives it.
sessionIdNo
ttlSecondsNoThe token's lifetime in seconds.
visibilityNoprivate (default): a token is needed. public: anyone with the address; only for an account with a kept top-up.
embedOriginsNoThe sites that may show this preview in an iframe, as origins: https://app.example.com, https://*.example.com for its subdomains, or http://localhost:3000. Up to 16. Any other site's iframe is refused, and a private link's token works in an iframe only on these. Omitted on a preview that exists: kept as it is. [] or null: any site (the default).
sessionSecondsNo

TDQS

A4.1/5.0
Behavior5/5

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

Goes well beyond the annotations (destructiveHint=true, openWorldHint=true) by disclosing that private previews need the x-runtime-preview-token header, that public visibility requires a kept top-up and shows a one-time browser warning, that WebSockets work, that create is idempotent per port, that rotate invalidates old tokens, and that session tokens are shown only once. These are the exact behavioral facts an agent needs for a multi-action mutation surface.

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

Conciseness4/5

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

Front-loads the resource definition before the per-action breakdown, and every clause maps to a distinct action or constraint, so little is wasted. The dense run-on packing of all seven actions into one paragraph makes it harder to scan than a bulleted layout would be.

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

Completeness4/5

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

With no output schema, the description carries the return burden and does describe what list returns (ports plus a fresh private token) and that session_create's token is shown once. All seven actions and the key visibility/embedding behaviors are covered, leaving only minor gaps such as the meaning of origins/sessionSeconds.

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

Parameters3/5

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

Schema description coverage is 50% (port, ttlSeconds, expiresAt, visibility, embedOrigins documented in-schema). The description reinforces visibility/embedOrigins semantics and implies a day-long default ttl, but origins, sessionSeconds and sessionId are only named in the action signatures, not explained, so the description does not fully compensate for the coverage gap.

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

Purpose4/5

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

Opens with a concrete resource and format ('HTTPS addresses for ports inside a sandbox, https://<port>-<sandbox>.<domain>/') and then names a specific verb for every one of the seven actions (create, list, rotate, delete, session_create, session_list, session_revoke). The purpose is unmistakable, though it never explicitly distinguishes itself from adjacent siblings like runtime_ports or runtime_sandboxes_browser.

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

Usage Guidelines4/5

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

Each action carries usage context: 'rotate... as when a link leaked', 'delete: Stop sharing the port', 'list: Each shared port, with a fresh day-long token if private'. This tells the agent when each action applies, but there is no explicit when-not guidance or named alternative tools for the cases where a sibling (e.g. runtime_ports) would be the better choice.

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

runtime_sandboxes_processA
Destructive
Inspect

Work with a process started by runtime_sandboxes_exec background: true. action read: output after cursor (pass the returned nextCursor next time; waitMs up to 8000 holds the call until there is output), with state and exitCode. write: send input text (the process needs stdinMode pipe or a pty). signal: SIGTERM by default, SIGKILL for the whole tree. list: every running and recent process in the sandbox.

NameRequiredDescriptionDefault
idYes
eofNo
dataNo
actionYes
cursorNo
signalNo
waitMsNo
processIdNoResource identifier.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false and openWorldHint=true. The description adds behavior beyond that: signal defaults to SIGTERM and SIGKILL terminates the entire process tree, the long-poll nature of waitMs (holds the call up to 8000ms), and the stdinMode/pty prerequisite for write. It still omits what 'list' returns or the meaning of state/exitCode.

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

Conciseness4/5

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

Dense but organized action-by-action with the critical scoping fact (process must come from exec background:true) front-loaded. Every clause carries information; the only nit is that the single long sentence is somewhat run-on and could be split for scannability.

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

Completeness3/5

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

For an 8-parameter, multi-mode tool with no output schema, the description covers the action semantics well but is incomplete: eof and processId are never mentioned, the id vs processId relationship is unexplained, and the read-state/exitCode values are named without defining them.

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

Parameters3/5

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

Schema coverage is only 13% (8 params, essentially one described), so the description must carry the load. It does add real meaning for cursor ('pass the returned nextCursor next time'), waitMs ('up to 8000 holds the call until there is output'), data and signal (SIGTERM default, SIGKILL for the whole tree), but leaves eof, processId and the required id/processId distinction completely unexplained.

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

Purpose5/5

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

States a specific verb and resource ('Work with a process started by runtime_sandboxes_exec background: true') and enumerates the exact operations (read, write, signal, list). It explicitly ties itself to the sibling runtime_sandboxes_exec, so an agent can tell which tool starts a process and which one follows it.

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

Usage Guidelines4/5

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

Gives clear context for each action and a precondition for write ('the process needs stdinMode pipe or a pty'), plus the routing hint that the process must have been started with exec background: true. It lacks explicit when-not guidance or a direct alternative comparison, but the usage context is solid.

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

runtime_sandboxes_tailscaleA
Destructive
Inspect

Join a paid sandbox to your Tailscale network with your auth key, see its addresses there, or take it off. up(id, authKeySecret?, hostname?, tags?): Paid sandboxes. authKeySecret names a job secret holding a Tailscale auth key. status(id): Whether it is on one, and its tailnet addresses. down(id): Logs the machine out; it leaves the tailnet at once.

NameRequiredDescriptionDefault
idNo
tagsNoTailscale tags to advertise; the key must be allowed them.
actionYes
hostnameNoThe machine's name on the tailnet, a DNS label. Default: the sandbox's name, or runtime- and its id's first eight characters.
authKeySecretNoThe name of a job secret holding a Tailscale auth key (runtime secrets set NAME --jobs). Use an ephemeral, tagged key; a reusable one lets the sandbox log in again by itself after a long pause.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, so the safety profile is covered, but the description goes beyond them: down 'leaves the tailnet at once' (immediate destructive effect) and authKeySecret warns to use an ephemeral key because 'a reusable one lets the sandbox log in again by itself after a long pause' — a real persistence/security trait. Missing only permission/reversibility detail.

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

Conciseness4/5

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

Front-loaded with a one-sentence summary of the resource, then a compact per-action map. Minor inefficiency from the 'Paid sandboxes.' fragment and some phrasing overlap, but no filler and every clause carries operational meaning.

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

Completeness4/5

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

For a multiplexed, destructive, no-output-schema tool this is close to sufficient: each action's effect, the key mechanism, and the immediate leave-on-down behavior are stated. It could say a bit more about what status returns and any permission requirements, but nothing critical for correct invocation is absent.

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

Parameters4/5

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

Schema coverage is 60% and the description adds meaning the flat schema lacks by mapping parameters to actions — up(id, authKeySecret?, hostname?, tags?) versus status(id) and down(id). It also clarifies authKeySecret names a job secret and carries the ephemeral-key caveat, exceeding the schema's own text.

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

Purpose5/5

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

States a specific resource (a sandbox's Tailscale network membership) and enumerates the three operations: join with an auth key, view tailnet addresses, or remove the machine. Each action verb is explicit, so an agent can tell this apart from generic network siblings like runtime_sandboxes_network or runtime_networks_wireguard without opening a schema.

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

Usage Guidelines3/5

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

The per-action breakdown (up/status/down) implies when each sub-operation applies, and 'Paid sandboxes' is a useful eligibility constraint for up. However, there is no explicit when-not guidance, no prerequisites, and no routing to alternative network tools for an agent unsure whether this is the right tool.

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

runtime_secretsA
Destructive
Inspect

Secrets such as API keys: sandboxes see a placeholder, and the egress proxy adds the value on HTTPS to the hosts you name. exposed: true gives named machines the value itself. set(name, value, hosts?, header?, format?, rules?, only?, githubApp?, git?, api?, env?, exposed?, expectedVersion?): Store or replace one. Sandboxes see a placeholder in the environment variable of this name; the egress proxy swaps in the value in a credential header (Authorization, x-api-key and the like) of HTTPS requests to hosts, or sets header on each; never in the URL or another header. rules (an account with credit) limit it by method and path. exposed: true gives the machines only names by id the value itself. The value is never returned. list(after?, limit?): Names, kind (exposed), version, hosts, header and placeholder; never values. By name, limit at a time (default 50); pass the answer's next as after for the next page. get(name): One by name, as list shows it; never its value. delete(name): Erase one by name; its placeholder stops being replaced. It does not revoke the key at its provider. jobs_ actions: the copy a scheduled job puts in its run's environment. jobs_list(after?, limit?), jobs_get(id), jobs_put(name, value), jobs_rotate(id, value, expectedVersion), jobs_delete(id, expectedVersion), jobs_share(id, agents), jobs_reveal(id, version?). Bind one with runtime_jobs create input.secrets: [{name: ENV_NAME, secretId}]. It belongs to the person whose key stored it and is versioned; a deleted name cannot be reused. Only the key that stored it, the agents it names and its person may list, bind, reveal, rotate or delete it; share(id, agents) replaces the agents named (only its person or the key that stored it). delete stops future use, not the provider's token; reveal shows a value and needs its own permission, so prefer binding.

NameRequiredDescriptionDefault
idNo
apiNoOptional. Each sandbox's hour with the secret, the far end's reserve, GraphQL's mutations and shared copies.
envNoOptional. The variable the placeholder (or the real value) is in, when not the secret's name. Secrets whose scopes (only) share no sandbox may share one, such as one GITHUB_TOKEN per repository; two in one sandbox is 409. The secret's own name gives the name back; absent on a replacement, the variable stays.
gitNoOptional. What a git push over HTTPS carrying the secret may update. A push to any other ref, a tag, or a delete is refused before it leaves the server, in git's own words (! [remote rejected]). The API is held to the same: with git, the secret makes an API write only when its rules name it (none without rules) and a GraphQL mutation only when api.graphql lists it; even then it makes no REST call that writes a file, merges, makes or deletes a ref, renames or protects a branch, or makes a release, moves by PATCH only a branch its patterns allow, and makes no GraphQL mutation that does any of these (createCommitOnBranch, updateRef, mergePullRequest and the like). With githubApp, git needs githubApp.permissions, without admin, administration or secrets, and workflows, actions and environments at most read.
nameNoThe secret's name, unique in the organization, and the environment variable its placeholder is in unless env names another. Upper case letters, digits and underscores.
onlyNoOptional. Which sandboxes get the secret: those matching labels, those named in sandboxes, and every copy of the Apps in apps; any other sees no placeholder and never sends the value. {} is every sandbox. Absent: a replacement keeps its scope, a new secret goes to every sandbox. A real value (exposed) needs sandboxes or apps, no labels.
afterNoThe next of the previous page: the secrets named after it.
hostsNoWhere the value may go: the proxy puts it only into HTTPS requests to these hosts. Required unless exposed.
limitNoPage size, 1 to 100.
rulesNoOptional, for an account with credit. The value goes only into requests a rule allows, by method and path. A request whose path could be read two ways (an encoded slash, a semicolon, a backslash) gets no secret that has rules. Absent: every request to the hosts. Replacing a secret without rules clears them.
valueNoThe secret. Visible ASCII and spaces, at most 8 KiB; with githubApp, the App's PEM private key; with exposed, any text up to 64 KiB, several lines too. Stored sealed and never returned.
actionYes
agentsNoshare: the principalId of each agent (GET /v1/me) that may use it besides the key that stored it; [] leaves only that key.
formatNoOptional, with header. The header's value, with {value} where the secret goes. Default "{value}".
headerNoOptional. Set this header on every request to the hosts, replacing the sandbox's, so code needs no placeholder; the value goes into it and nowhere else. Without it, the placeholder is replaced only in a credential header: Authorization, x-api-key, x-goog-api-key, api-key, xi-api-key, x-subscription-token, private-token.
exposedNoOptional. true: the machines only names by id get the value itself, no hosts. The key needs exec in each; give it on every write.
versionNo
githubAppNoOptional. The value is this GitHub App's private key (PEM), and the servers make its installation tokens themselves, each for an hour: the key goes into no request, and each request the rules allow carries the current token, as Authorization: Bearer to the API and as git's x-access-token to git over HTTPS. Takes no header or format.
idempotencyKeyNoOptional: left out, one is made and returned as idempotencyKey. Send it back only to retry this exact call after a temporary error.
expectedVersionNoOptional. Write only over this version (0: a new one); else 409.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only say destructive/openWorld/readOnly false; the description carries the real burden and does so richly: values are never returned, delete does not revoke the provider token, reveal needs its own permission, versioning and expectedVersion 409 behavior, exposed requires exec on each write, and the exact permission model (storing key, named agents, person) for list/bind/reveal/rotate/delete. It is consistent with destructiveHint.

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

Conciseness3/5

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

The content is mostly relevant and front-loads the core concept, but it is delivered as a single dense run-on paragraph with no line breaks or per-action structure, making it hard to scan for 11 actions and 20 parameters. It is adequately sized for the complexity but poorly structured.

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

Completeness5/5

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

With no output schema, the description still explains what list and get return (names, kind, version, hosts, header, placeholder; never values) and how pagination works via next/after. Combined with coverage of permissions, version conflicts, and the jobs_* lifecycle, it is sufficient for an agent to invoke the tool correctly.

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

Parameters4/5

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

Schema coverage is already 85%, but the description adds the crucial action-to-parameter mapping (e.g. set(name, value, hosts?, header?, format?, rules?, only?, githubApp?, git?, api?, env?, exposed?, expectedVersion?)) and explains cross-field constraints like header/format pairing and exposed requiring sandboxes or apps rather than labels. This is meaningfully more than the schema alone, though several parameter details are duplicated from the schema.

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

Purpose5/5

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

The description states the resource (secrets/API keys), the core mechanism (placeholder in sandbox, egress proxy injects the value on HTTPS to named hosts), and then enumerates every action (set, list, get, delete, jobs_*) with a specific verb. It explicitly distinguishes the jobs_* family and points to runtime_jobs for binding, so an agent can tell it apart from siblings like runtime_sandboxes or runtime_jobs.

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

Usage Guidelines4/5

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

It gives concrete usage context per action (e.g. delete does not revoke at the provider, reveal requires its own permission so 'prefer binding', share replaces the agents named) and names an alternative workflow via runtime_jobs create input.secrets. It lacks a broad 'use this when / not when' exclusion statement across the whole tool, so not a 5.

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

runtime_snapshotsA
Destructive
Inspect

Kept copies of a paused sandbox's files, memory and processes, to start copies from. create(sandboxId, mode?, name?, retentionDays?): Keep a running or paused sandbox, also copied off its host: a running one is paused for the moment it takes and woken again. A sandbox with volumes cannot be snapshotted; an image, not a snapshot, is the way to preinstall dependencies. fork_unavailable means snapshots are switched off; do not retry it. list(cursor?, limit?, state?, name?, sandboxId?): Your snapshots, newest first, each as get gives it; sandboxId gives one sandbox's. Pass nextCursor back as cursor. get(id): Its state, shape, stored bytes and expiry. update(id, name?, labels?, ifLabels?): Replace the supplied labels or change the name; omitted fields stay unchanged. Null clears the name. Captured bytes and billing are unchanged. delete(id): Delete it and free its storage; sandboxes started from it keep running.

NameRequiredDescriptionDefault
idNo
modeNomemory (default) saves the whole machine; disk saves files for a fresh boot, without old processes.
nameNoYour own handle for the resource. Letters, digits, dot, dash, underscore.
limitNoPage size, 1 to 100.
stateNo
actionYes
cursorNo
labelsNoYour own key/value tags, at most 32. Filter lists with label=key:value.
ifLabelsNoOnly update if the current complete labels equal these; otherwise snapshot_metadata_changed. Omit for an unconditional update.
sandboxIdNo
retentionDaysNoDays to keep it, 1 to 365, never past a year from when it was taken. Omit it to keep the snapshot while your account has credit, up to a year from when it was taken (seven days without credit).
idempotencyKeyNoOptional: left out, one is made and returned as idempotencyKey. Send it back only to retry this exact call after a temporary error.

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the annotations (readOnly=false, destructive=true, openWorld=false): create momentarily pauses a running sandbox and wakes it, the volume restriction, the non-retryable fork_unavailable state, delete freeing storage while derived sandboxes keep running, and update leaving captured bytes and billing unchanged. This is the kind of side-effect disclosure a mutation tool needs.

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

Conciseness4/5

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

Front-loads the resource definition, then structures the rest per action with parenthesized signatures, which scans well for a five-action tool. It is dense but nearly every clause carries information (constraints, side effects, pagination). Slightly verbose in the retention explanation but nothing wasted.

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

Completeness4/5

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

For a 12-parameter, no-output-schema, destructive multi-action tool, the description covers every action, the key constraint, pagination, update semantics and deletion consequences, and even sketches get's return fields. Minor gaps remain, such as the meaning of the state enum values (capturing/ready/failed/deleting), but it is close to complete.

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

Parameters4/5

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

Schema coverage is 58%, and the description compensates by mapping parameters to actions and adding semantics the schema omits: "omitted fields stay unchanged. Null clears the name" for update, and "Pass nextCursor back as cursor" for list pagination. mode, limit, ifLabels and retentionDays are largely already covered by the schema, so it does not fully carry the parameter burden, but it adds real value.

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

Purpose5/5

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

Opens with a precise verb/resource definition ("Kept copies of a paused sandbox's files, memory and processes, to start copies from") and then enumerates each action with its arguments. It distinguishes itself from siblings by naming images as the alternative for preinstalling dependencies. An agent can tell exactly what this tool does and each sub-action's scope.

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

Usage Guidelines4/5

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

Gives concrete when/when-not guidance: volumes cannot be snapshotted and images are the route for preinstalled dependencies; fork_unavailable means snapshots are disabled and must not be retried. It also clarifies that delete leaves sandboxes started from the snapshot running. It lacks a broad routing statement against the many other runtime_* siblings, but the key exclusions and alternatives are present.

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

runtime_supportAInspect

Runtime's support agent, for an error, a sandbox that will not start, billing or a how-to; it can escalate to a person. message(conversationId?, message?, approveActionId?, approveInputHash?, denyActionId?): Start with message; continue with the returned conversationId. While status is working, the reply arrives within about a minute through read. A proposed action runs only when approveActionId is passed with its approveInputHash; denyActionId declines it. read(conversationId): A conversation's status, newest reply and any actions awaiting approval.

NameRequiredDescriptionDefault
actionYes
messageNo
denyActionIdNo
conversationIdNoFrom a previous reply.
approveActionIdNo
approveInputHashNo

TDQS

A4.3/5.0
Behavior4/5

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

With annotations covering the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true), the description adds real context beyond them: human escalation is possible, replies arrive within about a minute while status is 'working', and proposed actions are gated behind an id+hash approval pair. It does not say what happens to a conversation if abandoned or whether approvals are single-use.

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

Conciseness4/5

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

Front-loads what the tool is before the per-action mechanics, and every sentence carries information. The compressed semicolon-clause style makes the message/read split slightly harder to parse than it needs to be, but nothing is padded.

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

Completeness4/5

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

For a 6-parameter tool with no output schema, the description still explains the read return shape (status, newest reply, actions awaiting approval) and the full approval lifecycle. Missing only edge behavior such as what an expired or unknown conversationId does.

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

Parameters4/5

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

Schema description coverage is only 17%, so the description must compensate, and it largely does: conversationId is sourced ('from the returned conversationId'), message is the entry point, and the approveActionId/approveInputHash pairing plus denyActionId are explained as an approve/deny mechanic. The 'message' vs 'read' action enum values are not individually defined, which is the residual gap.

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

Purpose5/5

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

Names a specific resource (Runtime's support agent) and the concrete situations it handles: errors, a sandbox that will not start, billing, how-to, plus escalation to a person. This is clearly distinguishable from the surrounding runtime_sandbox_*, runtime_billing-adjacent and docs siblings.

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

Usage Guidelines4/5

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

Gives an actionable flow: 'Start with message; continue with the returned conversationId', and states the precondition for running a proposed action (approveActionId together with its approveInputHash) versus declining it (denyActionId). It does not compare against siblings such as runtime_docs_read for how-to questions, which is the one obvious alternative left unaddressed.

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

runtime_switching_recordA
Idempotent
Inspect

Record that this organization is switching from a rival. Once per organization, before its first top-up. Credit added within 30 days of signing up is matched, up to $1,000 in total, as each payment settles (a referral, which matches the same payments, applies instead, never both). Call it once the project's real job runs on Runtime: it records the move, it does not make it.

NameRequiredDescriptionDefault
providerYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already establish write, idempotent, non-destructive semantics, but the description adds the business consequences: the 30-day window, the $1,000 cap, per-settlement matching, and the referral exclusivity rule. The 'records the move, does not make it' line guards against the misconception that this performs the migration. It does not discuss auth or failure behavior, keeping it just short of a 5.

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

Conciseness4/5

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

Front-loads the action and the key constraint, then adds rules and a closing scope clarification. It is dense but several clauses (matching mechanics, cap, referral overlap) serve the business outcome more than correct invocation, leaving some trimmable weight.

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

Completeness4/5

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

No output schema exists, and the description does not indicate what is returned, though for a one-shot recording tool the timing, exclusivity, and effect details cover the practical decision. The one gap is that parameter meaning must be inferred rather than stated.

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

Parameters3/5

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

Schema description coverage is 0% for the single required 'provider' enum parameter. The description implies its meaning ('switching from a rival'), so the agent can infer provider = the rival being left, but it never names the parameter or explains the enum values, which is the minimum needed when the schema provides no prose.

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

Purpose5/5

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

States a specific verb and resource: 'Record that this organization is switching from a rival,' and then sharply bounds the scope with 'it records the move, it does not make it.' No sibling in this large runtime_* set does anything comparable, so an agent can identify the tool's unique job immediately.

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

Usage Guidelines5/5

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

Gives explicit timing conditions: 'Once per organization, before its first top-up' and 'Call it once the project's real job runs on Runtime.' It also names the mutually exclusive alternative ('a referral ... applies instead, never both'), which is exactly the when-not-to-use guidance most definitions omit.

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

runtime_volumesA
Destructive
Inspect

Persistent disks that outlive sandboxes, attached at create with volumes: [{volumeId, path}]. create(sizeMiB?, fromBackup?, name?, region?): Give sizeMiB, or fromBackup to restore one. One sandbox at a time mounts it read-write; mode "snapshot" gives any number a read-only copy as it is now. It is backed up off its host daily, or on its own schedule, unless turned off; backedUp is true once a checked copy is off the host. list(cursor?, limit?, state?, name?): Your volumes, newest first, each as get gives it. Pass nextCursor back as cursor. get(id): Its state, size, space used, attachments and backups. delete(id): Delete it and all its data; refused while a sandbox holds it. Its backups are kept for their retention.

NameRequiredDescriptionDefault
idNo
nameNoYour own handle for the resource. Letters, digits, dot, dash, underscore.
limitNoPage size, 1 to 100.
stateNo
actionYes
cursorNo
regionNo
sizeMiBNo
fromBackupNo
idempotencyKeyNoOptional: left out, one is made and returned as idempotencyKey. Send it back only to retry this exact call after a temporary error.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations flag destructiveHint and this description earns credit by specifying exactly what is destroyed ('Delete it and all its data'), the safety guard (refused while a sandbox holds it), and the retention carve-out for backups. It also discloses non-obvious runtime behavior: single read-write mounter at a time, read-only snapshot copies, and off-host daily backups with backedUp flipping only after a checked copy. Loses a point only because the 'mode "snapshot"' and 'volumes' attach mechanics reference surfaces not present in this schema, leaving their applicability unclear.

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

Conciseness4/5

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

Front-loaded with the resource definition, then action-by-action in the same order as the action enum, so an agent can scan to the relevant clause. The prose is dense and telegraphic ('Give sizeMiB, or fromBackup to restore one') but nearly every sentence carries an operational fact.

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

Completeness4/5

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

With 10 parameters at 30% schema coverage, no output schema, and a destructive annotation, the description does the heavy lifting on lifecycle, attachment, backup, and deletion semantics. Remaining gaps are the undocumented state/region parameters and the dangling references to volumes/mode that this tool's schema cannot satisfy.

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

Parameters3/5

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

Schema coverage is only 30%, so the description must compensate; it does explain sizeMiB-vs-fromBackup exclusivity, id for get/delete, and cursor round-tripping via nextCursor. However it says nothing about the state filter values (creating/ready/failed/deleting), region, or idempotencyKey, and it introduces 'volumes: [{volumeId, path}]' and a snapshot 'mode' that have no corresponding schema properties, which risks misleading the agent.

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

Purpose4/5

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

Opens with a concrete definition of the resource ('Persistent disks that outlive sandboxes') and then enumerates the four dispatched actions (create/list/get/delete) with their inputs. An agent can tell this manages volume lifecycle rather than sandboxes or snapshots, though it never names the nearby siblings (runtime_volumes_backup, runtime_snapshots) it might be confused with.

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

Usage Guidelines3/5

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

Gives per-action usage hints (give sizeMiB or fromBackup to restore; pass nextCursor back as cursor; delete is refused while a sandbox holds it), which is more than implied. But it never states when to choose this tool over runtime_volumes_backup or runtime_snapshots, and no preconditions or alternatives are spelled out.

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

runtime_volumes_backupA
Destructive
Inspect

Crash-consistent backups of a volume, kept off its host. create(volumeId, name?, retentionDays?): Back it up now, kept retentionDays (the volume's retention, 7 unless set); waits up to a minute. Restore with runtime_volumes action create and fromBackup. list(volumeId?, cursor?, limit?, state?): Your backups, newest first, each as get gives it; volumeId gives one volume's. Pass nextCursor back as cursor. get(id): Its state, size, stored bytes and expiry. policy(volumeId, daily?, retentionDays?, schedule?, keep?): Turn automatic backups on or off, keep daily ones retentionDays, or back up on a schedule with keep counts: schedule { "everyMinutes": 60 } or { "cron": "0 */6 * * *" } (UTC), keep { "hourly": 24, "daily": 7, "weekly": 4 }. schedule null goes back to daily. delete(id): Delete it and its copy off the host.

NameRequiredDescriptionDefault
idNo
keepNoWhich backups made on the schedule are kept: any one a count keeps is kept, and the newest ready backup always is. Counts not given are 0. While the account has no credit, each is also kept at most seven days.
nameNoYour own handle for the resource. Letters, digits, dot, dash, underscore.
dailyNo
limitNoPage size, 1 to 100.
stateNo
actionYes
cursorNo
scheduleNoWhen backups are made, instead of daily: everyMinutes or cron. Null takes it off: the volume goes back to daily backups kept retentionDays.
volumeIdNo
retentionDaysNoDays to keep it, 1 to 365; the volume's backup retention (7 unless set) when omitted.
idempotencyKeyNoOptional: left out, one is made and returned as idempotencyKey. Send it back only to retry this exact call after a temporary error.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds meaningful behavior beyond annotations: backups are crash-consistent and off-host, create waits up to a minute, list returns newest first with cursor paging, policy controls automatic retention/schedules, and delete removes both the backup and its off-host copy. It does not describe authorization requirements or failure/error behavior, which keeps it from a 5.

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

Conciseness5/5

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

The description is dense but well organized: one front-loaded summary sentence, then each action introduced by its signature and a compact behavior note. Multiple complex actions are covered without filler or repetition, and each sentence contributes operational meaning.

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

Completeness4/5

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

For a 12-parameter, multi-action, nested-schema tool with no output schema, the description is substantially complete: it explains get/list outputs, create timing and retention, policy schedule semantics, and delete scope. It still leaves create's return shape, idempotencyKey usage, state transitions, and error handling to the schema or inference, so it is not fully complete.

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

Parameters4/5

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

Schema description coverage is only 50%, so the description carries real weight and mostly succeeds: it maps volumeId, name, retentionDays, cursor, limit, state, schedule, daily, and keep to specific actions, and gives schedule and keep examples plus the default retention behavior. It omits idempotencyKey and does not explain state enum meanings or limit handling in detail, so some parameter semantics remain schema-only.

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

Purpose5/5

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

The description opens with a specific verb-and-resource statement: crash-consistent backups of a volume kept off its host. It then names all five actions (create, list, get, policy, delete), making the backup scope clearly distinct from volume-management siblings. An agent can identify the tool's purpose without opening the schema.

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

Usage Guidelines4/5

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

The action signatures implicitly define when to use create, list, get, policy, and delete, and the description explicitly routes restore usage to runtime_volumes action create with fromBackup. It does not give explicit exclusions or decision rules for every case, such as when to use list versus get or when policy is preferable to ad-hoc create, so it is strong but not fully exhaustive.

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

runtime_webhooks_manageA
Destructive
Inspect

The account's webhooks, which POST signed lifecycle events to an https URL. create returns the signing secret once; keep it. update changes url, events, description or enabled; rotate_secret can keep the old one keepPreviousSeconds; test sends a signed webhook.test and returns your endpoint's answer; deliveries lists recent ones; retry takes a deliveryId. Verify signatures with verifyWebhook from the withruntime SDK.

NameRequiredDescriptionDefault
idNo
urlNoAn https URL on the public internet.
actionYes
eventsNoWhich events to send; ["*"], the default, sends every type, including ones added later.
enabledNo
deliveryIdNo
descriptionNo
idempotencyKeyNoOptional: left out, one is made and returned as idempotencyKey. Send it back only to retry this exact call after a temporary error.
keepPreviousSecondsNo

TDQS

A4/5.0
Behavior3/5

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

The description adds real value beyond annotations: the signing secret is returned only once at create, rotate_secret can preserve the old secret for keepPreviousSeconds, and test returns the endpoint's answer. But the destructiveHint=true annotation is never honored in text — delete is an available action and the description never says what it destroys or whether in-flight deliveries survive, which is exactly the kind of context the annotation alone does not supply.

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

Conciseness4/5

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

Dense and front-loaded with the core concept, and nearly every clause carries information the schema does not. The action semantics are strung together in one semicolon-chained sentence, which makes scanning harder than grouping them by action would be.

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

Completeness3/5

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

For a 9-action multiplexer with no output schema, three actions — list, get, and the destructive delete — receive no explanation at all, and the return shapes of list/deliveries are unstated. It is strong on the write-path actions but leaves a meaningful portion of the surface undocumented.

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

Parameters4/5

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

With only 33% schema description coverage across 9 parameters, the description does meaningful compensation: it maps url/events/description/enabled to update, ties deliveryId to retry, and explains keepPreviousSeconds behavior. Gaps remain for id (which actions need it) and how keepPreviousSeconds is meant to be used, but the major action-parameter bindings are spelled out.

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

Purpose5/5

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

The opening sentence names the resource and its behavior precisely: account webhooks that POST signed lifecycle events to an https URL. Combined with the action breakdown, an agent can distinguish this from siblings like runtime_events_list or runtime_sandboxes_manage without opening the schema.

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

Usage Guidelines4/5

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

Each action is given a role (create/update/rotate_secret/test/deliveries/retry), and it explicitly redirects signature verification to verifyWebhook from the SDK, which is an alternative-tool pointer. However, there is no 'use this instead of X when Y' framing, no ordering advice (e.g. create before test), and no prerequisites such as owning the account.

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

Tool Schema Changelog

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

  1. 2 tool updates
    • Changedruntime_sandboxes_create1 field changed
      • addedInput schema / properties / wakeOnTimers
        Added value: +{
        +  "default": true,
        +  "description": "A process's timer (a sleep, a timeout) wakes it from an idle pause.",
        +  "type": "boolean"
        +}
    • Changedruntime_sandboxes_manage1 field changed
      • addedInput schema / properties / wakeOnTimers
        Added value: +{
        +  "description": "update: whether a process's timer wakes it from an idle pause.",
        +  "type": "boolean"
        +}
  2. 2 tool updates
    • Changedruntime_events_list1 field changed
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "sandbox.created",
        -  "sandbox.running",
        -  "sandbox.paused",
        -  "sandbox.woken",
        -  "sandbox.stopped",
        -  "sandbox.start_failed",
        -  "sandbox.wake_failed",
        -  "sandbox.host_unreachable",
        -  "sandbox.host_reachable",
        -  "sandbox.recovered",
        -  "sandbox.recovery_failed",
        -  "sandbox.files.changed",
        -  "sandbox.out_of_memory",
        -  "sandbox.oom_kill",
        -  "sandbox.secret_not_applied",
        -  "sandbox.network.limited",
        -  "snapshot.ready",
        -  "snapshot.failed",
        -  "snapshot.deleted",
        -  "volume.ready",
        -  "volume.failed",
        -  "volume.deleted",
        -  "volume.recovered",
        -  "egress_secret.created",
        -  "egress_secret.updated",
        -  "egress_secret.deleted",
        -  "upstream_proxy.set",
        -  "upstream_proxy.removed",
        -  "credit.low",
        -  "credit.empty",
        -  "job.run.failed",
        -  "job.recovered",
        -  "agent.call.held"
        -]New value: +[
        +  "sandbox.created",
        +  "sandbox.running",
        +  "sandbox.paused",
        +  "sandbox.woken",
        +  "sandbox.stopped",
        +  "sandbox.start_failed",
        +  "sandbox.wake_failed",
        +  "sandbox.host_unreachable",
        +  "sandbox.host_reachable",
        +  "sandbox.unreachable",
        +  "sandbox.reachable",
        +  "sandbox.recovered",
        +  "sandbox.recovery_failed",
        +  "sandbox.files.changed",
        +  "sandbox.out_of_memory",
        +  "sandbox.oom_kill",
        +  "sandbox.secret_not_applied",
        +  "sandbox.network.limited",
        +  "snapshot.ready",
        +  "snapshot.failed",
        +  "snapshot.deleted",
        +  "volume.ready",
        +  "volume.failed",
        +  "volume.deleted",
        +  "volume.recovered",
        +  "egress_secret.created",
        +  "egress_secret.updated",
        +  "egress_secret.deleted",
        +  "upstream_proxy.set",
        +  "upstream_proxy.removed",
        +  "credit.low",
        +  "credit.empty",
        +  "job.run.failed",
        +  "job.recovered",
        +  "agent.call.held"
        +]
    • Changedruntime_webhooks_manage1 field changed
      • changedInput schema / properties / events / items / enum
        Previous value: -[
        -  "*",
        -  "sandbox.created",
        -  "sandbox.running",
        -  "sandbox.paused",
        -  "sandbox.woken",
        -  "sandbox.stopped",
        -  "sandbox.start_failed",
        -  "sandbox.wake_failed",
        -  "sandbox.host_unreachable",
        -  "sandbox.host_reachable",
        -  "sandbox.recovered",
        -  "sandbox.recovery_failed",
        -  "sandbox.files.changed",
        -  "sandbox.out_of_memory",
        -  "sandbox.oom_kill",
        -  "sandbox.secret_not_applied",
        -  "sandbox.network.limited",
        -  "snapshot.ready",
        -  "snapshot.failed",
        -  "snapshot.deleted",
        -  "volume.ready",
        -  "volume.failed",
        -  "volume.deleted",
        -  "volume.recovered",
        -  "egress_secret.created",
        -  "egress_secret.updated",
        -  "egress_secret.deleted",
        -  "upstream_proxy.set",
        -  "upstream_proxy.removed",
        -  "credit.low",
        -  "credit.empty",
        -  "job.run.failed",
        -  "job.recovered",
        -  "agent.call.held"
        -]New value: +[
        +  "*",
        +  "sandbox.created",
        +  "sandbox.running",
        +  "sandbox.paused",
        +  "sandbox.woken",
        +  "sandbox.stopped",
        +  "sandbox.start_failed",
        +  "sandbox.wake_failed",
        +  "sandbox.host_unreachable",
        +  "sandbox.host_reachable",
        +  "sandbox.unreachable",
        +  "sandbox.reachable",
        +  "sandbox.recovered",
        +  "sandbox.recovery_failed",
        +  "sandbox.files.changed",
        +  "sandbox.out_of_memory",
        +  "sandbox.oom_kill",
        +  "sandbox.secret_not_applied",
        +  "sandbox.network.limited",
        +  "snapshot.ready",
        +  "snapshot.failed",
        +  "snapshot.deleted",
        +  "volume.ready",
        +  "volume.failed",
        +  "volume.deleted",
        +  "volume.recovered",
        +  "egress_secret.created",
        +  "egress_secret.updated",
        +  "egress_secret.deleted",
        +  "upstream_proxy.set",
        +  "upstream_proxy.removed",
        +  "credit.low",
        +  "credit.empty",
        +  "job.run.failed",
        +  "job.recovered",
        +  "agent.call.held"
        +]
  3. 2 tool updates
    • Changedruntime_events_list1 field changed
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "sandbox.created",
        -  "sandbox.running",
        -  "sandbox.paused",
        -  "sandbox.woken",
        -  "sandbox.stopped",
        -  "sandbox.start_failed",
        -  "sandbox.wake_failed",
        -  "sandbox.host_unreachable",
        -  "sandbox.host_reachable",
        -  "sandbox.recovered",
        -  "sandbox.recovery_failed",
        -  "sandbox.files.changed",
        -  "sandbox.out_of_memory",
        -  "sandbox.secret_not_applied",
        -  "sandbox.network.limited",
        -  "snapshot.ready",
        -  "snapshot.failed",
        -  "snapshot.deleted",
        -  "volume.ready",
        -  "volume.failed",
        -  "volume.deleted",
        -  "volume.recovered",
        -  "egress_secret.created",
        -  "egress_secret.updated",
        -  "egress_secret.deleted",
        -  "upstream_proxy.set",
        -  "upstream_proxy.removed",
        -  "credit.low",
        -  "credit.empty",
        -  "job.run.failed",
        -  "job.recovered",
        -  "agent.call.held"
        -]New value: +[
        +  "sandbox.created",
        +  "sandbox.running",
        +  "sandbox.paused",
        +  "sandbox.woken",
        +  "sandbox.stopped",
        +  "sandbox.start_failed",
        +  "sandbox.wake_failed",
        +  "sandbox.host_unreachable",
        +  "sandbox.host_reachable",
        +  "sandbox.recovered",
        +  "sandbox.recovery_failed",
        +  "sandbox.files.changed",
        +  "sandbox.out_of_memory",
        +  "sandbox.oom_kill",
        +  "sandbox.secret_not_applied",
        +  "sandbox.network.limited",
        +  "snapshot.ready",
        +  "snapshot.failed",
        +  "snapshot.deleted",
        +  "volume.ready",
        +  "volume.failed",
        +  "volume.deleted",
        +  "volume.recovered",
        +  "egress_secret.created",
        +  "egress_secret.updated",
        +  "egress_secret.deleted",
        +  "upstream_proxy.set",
        +  "upstream_proxy.removed",
        +  "credit.low",
        +  "credit.empty",
        +  "job.run.failed",
        +  "job.recovered",
        +  "agent.call.held"
        +]
    • Changedruntime_webhooks_manage1 field changed
      • changedInput schema / properties / events / items / enum
        Previous value: -[
        -  "*",
        -  "sandbox.created",
        -  "sandbox.running",
        -  "sandbox.paused",
        -  "sandbox.woken",
        -  "sandbox.stopped",
        -  "sandbox.start_failed",
        -  "sandbox.wake_failed",
        -  "sandbox.host_unreachable",
        -  "sandbox.host_reachable",
        -  "sandbox.recovered",
        -  "sandbox.recovery_failed",
        -  "sandbox.files.changed",
        -  "sandbox.out_of_memory",
        -  "sandbox.secret_not_applied",
        -  "sandbox.network.limited",
        -  "snapshot.ready",
        -  "snapshot.failed",
        -  "snapshot.deleted",
        -  "volume.ready",
        -  "volume.failed",
        -  "volume.deleted",
        -  "volume.recovered",
        -  "egress_secret.created",
        -  "egress_secret.updated",
        -  "egress_secret.deleted",
        -  "upstream_proxy.set",
        -  "upstream_proxy.removed",
        -  "credit.low",
        -  "credit.empty",
        -  "job.run.failed",
        -  "job.recovered",
        -  "agent.call.held"
        -]New value: +[
        +  "*",
        +  "sandbox.created",
        +  "sandbox.running",
        +  "sandbox.paused",
        +  "sandbox.woken",
        +  "sandbox.stopped",
        +  "sandbox.start_failed",
        +  "sandbox.wake_failed",
        +  "sandbox.host_unreachable",
        +  "sandbox.host_reachable",
        +  "sandbox.recovered",
        +  "sandbox.recovery_failed",
        +  "sandbox.files.changed",
        +  "sandbox.out_of_memory",
        +  "sandbox.oom_kill",
        +  "sandbox.secret_not_applied",
        +  "sandbox.network.limited",
        +  "snapshot.ready",
        +  "snapshot.failed",
        +  "snapshot.deleted",
        +  "volume.ready",
        +  "volume.failed",
        +  "volume.deleted",
        +  "volume.recovered",
        +  "egress_secret.created",
        +  "egress_secret.updated",
        +  "egress_secret.deleted",
        +  "upstream_proxy.set",
        +  "upstream_proxy.removed",
        +  "credit.low",
        +  "credit.empty",
        +  "job.run.failed",
        +  "job.recovered",
        +  "agent.call.held"
        +]
  4. 2 tool updates
    • Changedruntime_otel_manage3 fields changed
      • changedInput schema / properties / endpoint / description
        Previous value: -"The OTLP/HTTP base URL, as OTEL_EXPORTER_OTLP_ENDPOINT: logs go to <endpoint>/v1/logs and metrics to <endpoint>/v1/metrics."New value: +"The OTLP/HTTP base URL, as OTEL_EXPORTER_OTLP_ENDPOINT: logs go to <endpoint>/v1/logs, metrics to <endpoint>/v1/metrics and traces to <endpoint>/v1/traces."
      • changedInput schema / properties / signals / description
        Previous value: -"What to send: \"logs\" (events as log records) and \"metrics\" (CPU and memory gauges). Both when omitted."New value: +"What to send: \"logs\" (events), \"metrics\" (CPU, memory, disk, network), \"traces\" (a span per API call). \"logs\" and \"metrics\" when omitted."
      • changedInput schema / properties / signals / items / enum
        Previous value: -[
        -  "logs",
        -  "metrics"
        -]New value: +[
        +  "logs",
        +  "metrics",
        +  "traces"
        +]
    • Changedruntime_secrets10 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "set",
        -  "list",
        -  "delete",
        -  "jobs_list",
        -  "jobs_get",
        -  "jobs_put",
        -  "jobs_rotate",
        -  "jobs_delete",
        -  "jobs_share",
        -  "jobs_reveal"
        -]New value: +[
        +  "set",
        +  "list",
        +  "get",
        +  "delete",
        +  "jobs_list",
        +  "jobs_get",
        +  "jobs_put",
        +  "jobs_rotate",
        +  "jobs_delete",
        +  "jobs_share",
        +  "jobs_reveal"
        +]
      • changedInput schema / properties / env / description
        Previous value: -"Optional. The environment variable the placeholder is in, when not the secret's name. Several secrets may share one, each scoped (only) to sandboxes no other of them reaches, such as one GITHUB_TOKEN per repository; a write that would put two in one sandbox is refused (409). The secret's own name gives the name back. Absent when replacing a secret: the variable it has stays."New value: +"Optional. The variable the placeholder (or the real value) is in, when not the secret's name. Secrets whose scopes (only) share no sandbox may share one, such as one GITHUB_TOKEN per repository; two in one sandbox is 409. The secret's own name gives the name back; absent on a replacement, the variable stays."
      • addedInput schema / properties / expectedVersion / description
        Added value: +"Optional. Write only over this version (0: a new one); else 409."
      • changedInput schema / properties / expectedVersion / minimum
        Previous value: -1New value: +0
      • addedInput schema / properties / exposed
        Added value: +{
        +  "description": "Optional. true: the machines only names by id get the value itself, no hosts. The key needs exec in each; give it on every write.",
        +  "type": "boolean"
        +}
      • changedInput schema / properties / header / description
        Previous value: -"Optional. Set this header on every request to the hosts, replacing one the sandbox sent, so code needs no placeholder at all; the value then goes into this header and nowhere else. Without it, the placeholder is replaced only in a credential header: Authorization, x-api-key, x-goog-api-key, api-key, xi-api-key, x-subscription-token, private-token."New value: +"Optional. Set this header on every request to the hosts, replacing the sandbox's, so code needs no placeholder; the value goes into it and nowhere else. Without it, the placeholder is replaced only in a credential header: Authorization, x-api-key, x-goog-api-key, api-key, xi-api-key, x-subscription-token, private-token."
      • changedInput schema / properties / hosts / description
        Previous value: -"Where the value may go. The proxy puts it only into HTTPS requests to these hosts."New value: +"Where the value may go: the proxy puts it only into HTTPS requests to these hosts. Required unless exposed."
      • changedInput schema / properties / only / description
        Previous value: -"Optional. Which sandboxes get the secret: those matching labels, those named in sandboxes, and every copy of the Apps named in apps. Any other sandbox of the organization sees no placeholder and its requests never carry the value. {} gives it back to every sandbox. Absent when replacing a secret: the scope it has stays, so a new value never widens who gets it. Absent on a new secret: every sandbox, as before."New value: +"Optional. Which sandboxes get the secret: those matching labels, those named in sandboxes, and every copy of the Apps in apps; any other sees no placeholder and never sends the value. {} is every sandbox. Absent: a replacement keeps its scope, a new secret goes to every sandbox. A real value (exposed) needs sandboxes or apps, no labels."
      • changedInput schema / properties / only / properties / apps / description
        Previous value: -"Every copy of these Apps or Functions (their ids) gets the secret, whatever its version: copies made by later deploys, restarts and scaling too. A deploy names the secrets its copies see as environment variables (secrets on POST /v1/apps/{id}/deploys)."New value: +"Every copy of these Apps or Functions (their ids), whatever its version, later ones too. A deploy names the secrets its copies see (secrets on POST /v1/apps/{id}/deploys)."
      • changedInput schema / properties / value / description
        Previous value: -"The secret. Visible ASCII and spaces, at most 8 KiB; with githubApp, the App's PEM private key. Stored sealed and never returned."New value: +"The secret. Visible ASCII and spaces, at most 8 KiB; with githubApp, the App's PEM private key; with exposed, any text up to 64 KiB, several lines too. Stored sealed and never returned."
  5. 1 tool update
    • Addedruntime_jobs_import
  6. 7 tool updates
    • Changedruntime_events_list1 field changed
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "sandbox.created",
        -  "sandbox.running",
        -  "sandbox.paused",
        -  "sandbox.woken",
        -  "sandbox.stopped",
        -  "sandbox.start_failed",
        -  "sandbox.wake_failed",
        -  "sandbox.host_unreachable",
        -  "sandbox.host_reachable",
        -  "sandbox.recovered",
        -  "sandbox.recovery_failed",
        -  "sandbox.files.changed",
        -  "sandbox.out_of_memory",
        -  "sandbox.secret_not_applied",
        -  "sandbox.network.limited",
        -  "snapshot.ready",
        -  "snapshot.failed",
        -  "snapshot.deleted",
        -  "volume.ready",
        -  "volume.failed",
        -  "volume.deleted",
        -  "volume.recovered",
        -  "egress_secret.created",
        -  "egress_secret.updated",
        -  "egress_secret.deleted",
        -  "upstream_proxy.set",
        -  "upstream_proxy.removed",
        -  "credit.low",
        -  "credit.empty",
        -  "job.run.failed",
        -  "job.recovered"
        -]New value: +[
        +  "sandbox.created",
        +  "sandbox.running",
        +  "sandbox.paused",
        +  "sandbox.woken",
        +  "sandbox.stopped",
        +  "sandbox.start_failed",
        +  "sandbox.wake_failed",
        +  "sandbox.host_unreachable",
        +  "sandbox.host_reachable",
        +  "sandbox.recovered",
        +  "sandbox.recovery_failed",
        +  "sandbox.files.changed",
        +  "sandbox.out_of_memory",
        +  "sandbox.secret_not_applied",
        +  "sandbox.network.limited",
        +  "snapshot.ready",
        +  "snapshot.failed",
        +  "snapshot.deleted",
        +  "volume.ready",
        +  "volume.failed",
        +  "volume.deleted",
        +  "volume.recovered",
        +  "egress_secret.created",
        +  "egress_secret.updated",
        +  "egress_secret.deleted",
        +  "upstream_proxy.set",
        +  "upstream_proxy.removed",
        +  "credit.low",
        +  "credit.empty",
        +  "job.run.failed",
        +  "job.recovered",
        +  "agent.call.held"
        +]
    • Changedruntime_sandboxes_create1 field changed
      • addedInput schema / properties / user
        Added value: +{
        +  "description": "root: its commands and terminals run as root unless one names user sandbox. Default sandbox.",
        +  "enum": [
        +    "sandbox",
        +    "root"
        +  ],
        +  "type": "string"
        +}
    • Changedruntime_sandboxes_exec2 fields changed
      • removedInput schema / properties / user / default
        Removed value: -"sandbox"
      • changedInput schema / properties / user / description
        Previous value: -"Who runs it: the sandbox user (uid 1000, HOME=/workspace), or root, through the sandbox's passwordless sudo with the same environment and PATH and HOME=/root. Saves prefixing every command with sudo."New value: +"Who runs it: the sandbox user (uid 1000, HOME=/workspace), or root, through the sandbox's passwordless sudo with the same environment and PATH and HOME=/root. Saves prefixing every command with sudo. Default: the sandbox's own user setting, which is the sandbox user unless it was created or updated with user root."
    • Changedruntime_sandboxes_manage1 field changed
      • addedInput schema / properties / user
        Added value: +{
        +  "description": "update: who later commands and terminals run as when they name no one.",
        +  "enum": [
        +    "sandbox",
        +    "root"
        +  ],
        +  "type": "string"
        +}
    • Changedruntime_secrets3 fields changed
      • addedInput schema / properties / after / description
        Added value: +"The next of the previous page: the secrets named after it."
      • addedInput schema / properties / limit / default
        Added value: +50
      • addedInput schema / properties / limit / description
        Added value: +"Page size, 1 to 100."
    • Changedruntime_volumes_backup2 fields changed
      • addedInput schema / properties / keep
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Which backups made on the schedule are kept: any one a count keeps is kept, and the newest ready backup always is. Counts not given are 0. While the account has no credit, each is also kept at most seven days.",
        +  "properties": {
        +    "daily": {
        +      "description": "The newest in each of the newest this many days (UTC).",
        +      "maximum": 1000,
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    "hourly": {
        +      "description": "The newest backup in each of the newest this many hours.",
        +      "maximum": 1000,
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    "last": {
        +      "description": "The newest this many backups.",
        +      "maximum": 1000,
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    "monthly": {
        +      "description": "The newest in each of the newest this many months.",
        +      "maximum": 1000,
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    "weekly": {
        +      "description": "The newest in each of the newest this many weeks, from Monday.",
        +      "maximum": 1000,
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    "yearly": {
        +      "description": "The newest in each of the newest this many years.",
        +      "maximum": 1000,
        +      "minimum": 0,
        +      "type": "integer"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / schedule
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "When backups are made, instead of daily: everyMinutes or cron. Null takes it off: the volume goes back to daily backups kept retentionDays.",
        +  "properties": {
        +    "cron": {
        +      "description": "Five fields in UTC: minute hour day-of-month month day-of-week, each a number, *, a list, a range or a step, such as \"0 */6 * * *\".",
        +      "type": "string"
        +    },
        +    "everyMinutes": {
        +      "description": "A backup every this many minutes, at whole multiples from 1970-01-01 UTC.",
        +      "maximum": 525600,
        +      "minimum": 15,
        +      "type": "integer"
        +    }
        +  },
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
    • Changedruntime_webhooks_manage1 field changed
      • changedInput schema / properties / events / items / enum
        Previous value: -[
        -  "*",
        -  "sandbox.created",
        -  "sandbox.running",
        -  "sandbox.paused",
        -  "sandbox.woken",
        -  "sandbox.stopped",
        -  "sandbox.start_failed",
        -  "sandbox.wake_failed",
        -  "sandbox.host_unreachable",
        -  "sandbox.host_reachable",
        -  "sandbox.recovered",
        -  "sandbox.recovery_failed",
        -  "sandbox.files.changed",
        -  "sandbox.out_of_memory",
        -  "sandbox.secret_not_applied",
        -  "sandbox.network.limited",
        -  "snapshot.ready",
        -  "snapshot.failed",
        -  "snapshot.deleted",
        -  "volume.ready",
        -  "volume.failed",
        -  "volume.deleted",
        -  "volume.recovered",
        -  "egress_secret.created",
        -  "egress_secret.updated",
        -  "egress_secret.deleted",
        -  "upstream_proxy.set",
        -  "upstream_proxy.removed",
        -  "credit.low",
        -  "credit.empty",
        -  "job.run.failed",
        -  "job.recovered"
        -]New value: +[
        +  "*",
        +  "sandbox.created",
        +  "sandbox.running",
        +  "sandbox.paused",
        +  "sandbox.woken",
        +  "sandbox.stopped",
        +  "sandbox.start_failed",
        +  "sandbox.wake_failed",
        +  "sandbox.host_unreachable",
        +  "sandbox.host_reachable",
        +  "sandbox.recovered",
        +  "sandbox.recovery_failed",
        +  "sandbox.files.changed",
        +  "sandbox.out_of_memory",
        +  "sandbox.secret_not_applied",
        +  "sandbox.network.limited",
        +  "snapshot.ready",
        +  "snapshot.failed",
        +  "snapshot.deleted",
        +  "volume.ready",
        +  "volume.failed",
        +  "volume.deleted",
        +  "volume.recovered",
        +  "egress_secret.created",
        +  "egress_secret.updated",
        +  "egress_secret.deleted",
        +  "upstream_proxy.set",
        +  "upstream_proxy.removed",
        +  "credit.low",
        +  "credit.empty",
        +  "job.run.failed",
        +  "job.recovered",
        +  "agent.call.held"
        +]
  7. 1 tool update
    • Changedruntime_docs_read1 field changed
      • changedInput schema / properties / topic / enum
        Previous value: -[
        -  "api",
        -  "aws-lambda-microvms-alternative",
        -  "blaxel-alternative",
        -  "changelog",
        -  "choosing-agent-sandbox",
        -  "claude-managed-agents",
        -  "cli",
        -  "cloudflare-sandbox-alternative",
        -  "codesandbox-alternative",
        -  "company-rollout",
        -  "computesdk",
        -  "daytona-alternative",
        -  "e2b-alternative",
        -  "editors",
        -  "egress",
        -  "feedback-and-support",
        -  "fly-alternative",
        -  "frameworks",
        -  "freestyle-alternative",
        -  "go",
        -  "harbor",
        -  "identity-tokens",
        -  "images",
        -  "included-usage",
        -  "inspect",
        -  "java",
        -  "javascript",
        -  "jobs",
        -  "langchain",
        -  "limits",
        -  "mcp",
        -  "migrate",
        -  "modal-sandbox-alternative",
        -  "morph-alternative",
        -  "networking",
        -  "northflank-alternative",
        -  "observability",
        -  "openai-agents-sdk",
        -  "plans",
        -  "pricing",
        -  "prime-sandboxes-alternative",
        -  "products",
        -  "python",
        -  "referrals",
        -  "reservations",
        -  "ruby",
        -  "runloop-alternative",
        -  "sandbox-environment",
        -  "security",
        -  "single-sign-on",
        -  "speed",
        -  "start",
        -  "storage",
        -  "teams",
        -  "troubleshooting",
        -  "trust",
        -  "vercel-ai-sdk",
        -  "vercel-sandbox-alternative"
        -]New value: +[
        +  "api",
        +  "aws-lambda-microvms-alternative",
        +  "blaxel-alternative",
        +  "changelog",
        +  "choosing-agent-sandbox",
        +  "claude-managed-agents",
        +  "cli",
        +  "cloudflare-sandbox-alternative",
        +  "codesandbox-alternative",
        +  "company-rollout",
        +  "computesdk",
        +  "daytona-alternative",
        +  "e2b-alternative",
        +  "editors",
        +  "egress",
        +  "feedback-and-support",
        +  "fly-alternative",
        +  "frameworks",
        +  "freestyle-alternative",
        +  "go",
        +  "harbor",
        +  "identity-tokens",
        +  "images",
        +  "included-usage",
        +  "inspect",
        +  "java",
        +  "javascript",
        +  "jobs",
        +  "langchain",
        +  "limits",
        +  "mcp",
        +  "migrate",
        +  "modal-sandbox-alternative",
        +  "morph-alternative",
        +  "networking",
        +  "northflank-alternative",
        +  "observability",
        +  "openai-agents-sdk",
        +  "plans",
        +  "pricing",
        +  "prime-sandboxes-alternative",
        +  "products",
        +  "python",
        +  "referrals",
        +  "reservations",
        +  "ruby",
        +  "runloop-alternative",
        +  "sandbox-environment",
        +  "security",
        +  "single-sign-on",
        +  "speed",
        +  "start",
        +  "storage",
        +  "teams",
        +  "troubleshooting",
        +  "trust",
        +  "vercel-ai-sdk",
        +  "vercel-sandbox-alternative",
        +  "versioning"
        +]
  8. 1 tool update
    • Changedruntime_jobs1 field changed
      • addedInput schema / properties / order
        Added value: +{
        +  "description": "runs: oldest first (the default) or newest first",
        +  "enum": [
        +    "oldest",
        +    "newest"
        +  ],
        +  "type": "string"
        +}
  9. 1 tool update
    • Changedruntime_sandboxes_manage3 fields changed
      • changedInput schema / properties / diskMiB / description
        Previous value: -"resize: the new disk in MiB, only larger, at most 409600 (without credit 10240); the filesystem grows at the restart."New value: +"resize: the new disk in MiB, only larger, at most 409600 (without credit 10240); asked alone of a running sandbox it grows live, otherwise at the restart."
      • removedInput schema / properties / restart / const
        Removed value: -true
      • changedInput schema / properties / restart / description
        Previous value: -"resize: optional, only true; a resize always restarts. Older clients send it."New value: +"resize: optional; false grows a running sandbox's disk live or refuses, never restarting (diskMiB alone)."
  10. 7 tool updates
    • Changedruntime_docs_read1 field changed
      • changedInput schema / properties / topic / enum
        Previous value: -[
        -  "api",
        -  "aws-lambda-microvms-alternative",
        -  "blaxel-alternative",
        -  "changelog",
        -  "choosing-agent-sandbox",
        -  "claude-managed-agents",
        -  "cli",
        -  "cloudflare-sandbox-alternative",
        -  "codesandbox-alternative",
        -  "company-rollout",
        -  "computesdk",
        -  "daytona-alternative",
        -  "e2b-alternative",
        -  "editors",
        -  "egress",
        -  "feedback-and-support",
        -  "fly-alternative",
        -  "frameworks",
        -  "freestyle-alternative",
        -  "go",
        -  "harbor",
        -  "identity-tokens",
        -  "images",
        -  "included-usage",
        -  "inspect",
        -  "java",
        -  "javascript",
        -  "jobs",
        -  "langchain",
        -  "limits",
        -  "mcp",
        -  "migrate",
        -  "modal-sandbox-alternative",
        -  "morph-alternative",
        -  "networking",
        -  "northflank-alternative",
        -  "observability",
        -  "openai-agents-sdk",
        -  "pricing",
        -  "prime-sandboxes-alternative",
        -  "products",
        -  "python",
        -  "referrals",
        -  "ruby",
        -  "runloop-alternative",
        -  "sandbox-environment",
        -  "security",
        -  "single-sign-on",
        -  "speed",
        -  "start",
        -  "storage",
        -  "teams",
        -  "troubleshooting",
        -  "trust",
        -  "vercel-ai-sdk",
        -  "vercel-sandbox-alternative"
        -]New value: +[
        +  "api",
        +  "aws-lambda-microvms-alternative",
        +  "blaxel-alternative",
        +  "changelog",
        +  "choosing-agent-sandbox",
        +  "claude-managed-agents",
        +  "cli",
        +  "cloudflare-sandbox-alternative",
        +  "codesandbox-alternative",
        +  "company-rollout",
        +  "computesdk",
        +  "daytona-alternative",
        +  "e2b-alternative",
        +  "editors",
        +  "egress",
        +  "feedback-and-support",
        +  "fly-alternative",
        +  "frameworks",
        +  "freestyle-alternative",
        +  "go",
        +  "harbor",
        +  "identity-tokens",
        +  "images",
        +  "included-usage",
        +  "inspect",
        +  "java",
        +  "javascript",
        +  "jobs",
        +  "langchain",
        +  "limits",
        +  "mcp",
        +  "migrate",
        +  "modal-sandbox-alternative",
        +  "morph-alternative",
        +  "networking",
        +  "northflank-alternative",
        +  "observability",
        +  "openai-agents-sdk",
        +  "plans",
        +  "pricing",
        +  "prime-sandboxes-alternative",
        +  "products",
        +  "python",
        +  "referrals",
        +  "reservations",
        +  "ruby",
        +  "runloop-alternative",
        +  "sandbox-environment",
        +  "security",
        +  "single-sign-on",
        +  "speed",
        +  "start",
        +  "storage",
        +  "teams",
        +  "troubleshooting",
        +  "trust",
        +  "vercel-ai-sdk",
        +  "vercel-sandbox-alternative"
        +]
    • Changedruntime_events_list1 field changed
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "sandbox.created",
        -  "sandbox.running",
        -  "sandbox.paused",
        -  "sandbox.woken",
        -  "sandbox.stopped",
        -  "sandbox.start_failed",
        -  "sandbox.wake_failed",
        -  "sandbox.host_unreachable",
        -  "sandbox.host_reachable",
        -  "sandbox.recovered",
        -  "sandbox.recovery_failed",
        -  "sandbox.files.changed",
        -  "sandbox.out_of_memory",
        -  "sandbox.secret_not_applied",
        -  "snapshot.ready",
        -  "snapshot.failed",
        -  "snapshot.deleted",
        -  "volume.ready",
        -  "volume.failed",
        -  "volume.deleted",
        -  "volume.recovered",
        -  "egress_secret.created",
        -  "egress_secret.updated",
        -  "egress_secret.deleted",
        -  "upstream_proxy.set",
        -  "upstream_proxy.removed",
        -  "credit.low",
        -  "credit.empty"
        -]New value: +[
        +  "sandbox.created",
        +  "sandbox.running",
        +  "sandbox.paused",
        +  "sandbox.woken",
        +  "sandbox.stopped",
        +  "sandbox.start_failed",
        +  "sandbox.wake_failed",
        +  "sandbox.host_unreachable",
        +  "sandbox.host_reachable",
        +  "sandbox.recovered",
        +  "sandbox.recovery_failed",
        +  "sandbox.files.changed",
        +  "sandbox.out_of_memory",
        +  "sandbox.secret_not_applied",
        +  "sandbox.network.limited",
        +  "snapshot.ready",
        +  "snapshot.failed",
        +  "snapshot.deleted",
        +  "volume.ready",
        +  "volume.failed",
        +  "volume.deleted",
        +  "volume.recovered",
        +  "egress_secret.created",
        +  "egress_secret.updated",
        +  "egress_secret.deleted",
        +  "upstream_proxy.set",
        +  "upstream_proxy.removed",
        +  "credit.low",
        +  "credit.empty",
        +  "job.run.failed",
        +  "job.recovered"
        +]
    • Changedruntime_jobs2 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "create",
        -  "list",
        -  "get",
        -  "pause",
        -  "resume",
        -  "cancel",
        -  "trigger",
        -  "reschedule",
        -  "runs",
        -  "run",
        -  "logs"
        -]New value: +[
        +  "create",
        +  "list",
        +  "get",
        +  "pause",
        +  "resume",
        +  "cancel",
        +  "trigger",
        +  "reschedule",
        +  "update",
        +  "runs",
        +  "run",
        +  "logs"
        +]
      • changedInput schema / properties / input / description
        Previous value: -"create: {name, schedule: {kind: once, at (Unix ms; a past time runs at once)} or {kind: cron, expression (five fields), timezone? (IANA, default UTC)}, compute: {region (us-east), vcpu (1-16, usually 2), cpuMode (shared), cpuFloorMillis (50), memoryMiB (up to 65536, usually 4096), diskMiB (at least 3072), durationSeconds (the paid time per run, at most 3600, at least timeoutSeconds)}, command: {argv (no shell: [\"bash\", \"-lc\", \"...\"]), cwd? (under /workspace)}, timeoutSeconds, retry?: {maxAttempts (1-5), backoffSeconds}, secrets?: [{name, secretId}] (from runtime_secrets action jobs_put), maxTotalCostMicros?}."New value: +"create: {name, schedule: {kind: once, at (Unix ms; a past time runs at once)} or {kind: cron, expression (five fields), timezone? (IANA, default UTC)}, compute: {region (us-east), vcpu (1-16, usually 2), cpuMode (shared), cpuFloorMillis (50), memoryMiB (up to 65536, usually 4096), diskMiB (at least 3072), durationSeconds (the paid time per run, at most 3600, at least timeoutSeconds), volumes?: [{volumeId, path (such as /data), mode? (rw, the default: one run at a time, so the next run reads what the last wrote; or snapshot: a read-only copy)}] (at most 4, in the same region as the job)}, command: {argv (no shell: [\"bash\", \"-lc\", \"...\"]), cwd? (under /workspace)}, timeoutSeconds, retry?: {maxAttempts (1-5), backoffSeconds}, secrets?: [{name, secretId}] (from runtime_secrets action jobs_put), maxTotalCostMicros?, image? (an image of the account: id, name, name:tag or name@version; default the standard image), alert?: {afterFailures? (runs in a row, default 1), webhook?: {url (https), secretId? (a jobs secret that signs it; the key must be allowed to reveal it, not only use it)}, email? (true: mail the job's person)}}. update: any of command, image (null: the standard image), compute (the fields given), secrets, alert (null: none), timeoutSeconds, retry, maxTotalCostMicros."
    • Addedruntime_reservations
    • Addedruntime_sandboxes_files_link
    • Changedruntime_secrets7 fields changed
      • addedInput schema / properties / api
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Optional. Each sandbox's hour with the secret, the far end's reserve, GraphQL's mutations and shared copies.",
        +  "properties": {
        +    "callsPerHour": {
        +      "description": "Optional. The most requests each sandbox makes with the secret in an hour; past it, 429 with Retry-After.",
        +      "maximum": 1000000,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    "copies": {
        +      "description": "Optional. Reads (GET over HTTP/2) answered from the server's copy while the far end answers 304 to its ETag, shared by every sandbox the secret reaches on that server; past a sandbox's hour, from the copy unasked. Answers carry x-runtime-copy.",
        +      "type": "boolean"
        +    },
        +    "fresh": {
        +      "description": "Optional, with copies. Seconds a copy is answered without asking the far end, a GraphQL query's included (GraphQL has no ETag): a read within them may be that much older.",
        +      "maximum": 300,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    "graphql": {
        +      "additionalProperties": false,
        +      "description": "Optional. A GraphQL query always goes; a mutation only when every one is listed.",
        +      "properties": {
        +        "mutations": {
        +          "description": "The mutations a request may make; any other is refused with 403.",
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "path": {
        +          "description": "Optional. Default /graphql.",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "mutations"
        +      ],
        +      "type": "object"
        +    },
        +    "keep": {
        +      "description": "Optional. Calls the far end keeps for others: none is sent while its x-ratelimit-remaining says this many or fewer are left, until its reset.",
        +      "maximum": 1000000,
        +      "minimum": 0,
        +      "type": "integer"
        +    },
        +    "writesPerHour": {
        +      "description": "Optional. The most writes (any method but GET, HEAD and OPTIONS; a GraphQL mutation) each sandbox makes in an hour. 0: none.",
        +      "maximum": 1000000,
        +      "minimum": 0,
        +      "type": "integer"
        +    }
        +  },
        +  "type": "object"
        +}
      • addedInput schema / properties / env
        Added value: +{
        +  "description": "Optional. The environment variable the placeholder is in, when not the secret's name. Several secrets may share one, each scoped (only) to sandboxes no other of them reaches, such as one GITHUB_TOKEN per repository; a write that would put two in one sandbox is refused (409). The secret's own name gives the name back. Absent when replacing a secret: the variable it has stays.",
        +  "type": "string"
        +}
      • addedInput schema / properties / git
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Optional. What a git push over HTTPS carrying the secret may update. A push to any other ref, a tag, or a delete is refused before it leaves the server, in git's own words (! [remote rejected]). The API is held to the same: with git, the secret makes an API write only when its rules name it (none without rules) and a GraphQL mutation only when api.graphql lists it; even then it makes no REST call that writes a file, merges, makes or deletes a ref, renames or protects a branch, or makes a release, moves by PATCH only a branch its patterns allow, and makes no GraphQL mutation that does any of these (createCommitOnBranch, updateRef, mergePullRequest and the like). With githubApp, git needs githubApp.permissions, without admin, administration or secrets, and workflows, actions and environments at most read.",
        +  "properties": {
        +    "push": {
        +      "description": "The branches a push may update: refs/heads/ then a name, with * only at the end for any name that begins so, and {label.<key>} for the sandbox's own label of that key, right below a fixed first segment (refs/heads/task/{label.task}), then /, -- or the end; a first segment takes one label key across the organization's secrets. A value names the branch of the first sandbox made with it, deleted or not, and a sandbox's value of such a label can't change once it is made. A sandbox pushes nothing a label names when it lacks the label, when its value holds /, *, -- or ends in -, when an earlier sandbox had it, or when a compartment's key made it. Empty: no push at all.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "push"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / githubApp
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Optional. The value is this GitHub App's private key (PEM), and the servers make its installation tokens themselves, each for an hour: the key goes into no request, and each request the rules allow carries the current token, as Authorization: Bearer to the API and as git's x-access-token to git over HTTPS. Takes no header or format.",
        +  "properties": {
        +    "api": {
        +      "description": "Optional. The App's API on GitHub Enterprise Server: https://<host>/api/v3, a public name that is one of hosts. Default https://api.github.com. Its tokens are asked for only at an address a sandbox could reach.",
        +      "type": "string"
        +    },
        +    "id": {
        +      "description": "The App's id.",
        +      "maximum": 9007199254740991,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    "installation": {
        +      "description": "The installation's id: where the App is installed.",
        +      "maximum": 9007199254740991,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    "permissions": {
        +      "additionalProperties": {
        +        "enum": [
        +          "read",
        +          "write",
        +          "admin"
        +        ],
        +        "type": "string"
        +      },
        +      "description": "Optional. What each token may do, at most what the App holds; all the App's permissions when absent.",
        +      "minProperties": 1,
        +      "type": "object"
        +    },
        +    "repositories": {
        +      "description": "Optional. The repositories each token reaches, by name; every repository of the installation when absent.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "installation"
        +  ],
        +  "type": "object"
        +}
      • changedInput schema / properties / name / description
        Previous value: -"The environment variable the placeholder is in, inside every sandbox of the organization. Upper case letters, digits and underscores."New value: +"The secret's name, unique in the organization, and the environment variable its placeholder is in unless env names another. Upper case letters, digits and underscores."
      • changedInput schema / properties / rules / items / properties / paths / description
        Previous value: -"Exact paths, or prefixes ending in /* for every path under them. Written canonically: starting with /, no . or .. segments, no ; or \\, no encoded slash. An escaped character other than a letter, digit, -, ., _ or ~ matches only the same escape: a client that sends %3A needs a rule with %3A, not :."New value: +"Exact paths, or prefixes ending in /* for every path under them; a segment that is * alone names any one segment (/repos/acme/app/pulls/*/comments). Written canonically: starting with /, no . or .. segments, no ; or \\, no encoded slash. An escaped character other than a letter, digit, -, ., _ or ~ matches only the same escape: a client that sends %3A needs a rule with %3A, not :."
      • changedInput schema / properties / value / description
        Previous value: -"The secret. Visible ASCII and spaces, at most 8 KiB. Stored sealed and never returned."New value: +"The secret. Visible ASCII and spaces, at most 8 KiB; with githubApp, the App's PEM private key. Stored sealed and never returned."
    • Changedruntime_webhooks_manage1 field changed
      • changedInput schema / properties / events / items / enum
        Previous value: -[
        -  "*",
        -  "sandbox.created",
        -  "sandbox.running",
        -  "sandbox.paused",
        -  "sandbox.woken",
        -  "sandbox.stopped",
        -  "sandbox.start_failed",
        -  "sandbox.wake_failed",
        -  "sandbox.host_unreachable",
        -  "sandbox.host_reachable",
        -  "sandbox.recovered",
        -  "sandbox.recovery_failed",
        -  "sandbox.files.changed",
        -  "sandbox.out_of_memory",
        -  "sandbox.secret_not_applied",
        -  "snapshot.ready",
        -  "snapshot.failed",
        -  "snapshot.deleted",
        -  "volume.ready",
        -  "volume.failed",
        -  "volume.deleted",
        -  "volume.recovered",
        -  "egress_secret.created",
        -  "egress_secret.updated",
        -  "egress_secret.deleted",
        -  "upstream_proxy.set",
        -  "upstream_proxy.removed",
        -  "credit.low",
        -  "credit.empty"
        -]New value: +[
        +  "*",
        +  "sandbox.created",
        +  "sandbox.running",
        +  "sandbox.paused",
        +  "sandbox.woken",
        +  "sandbox.stopped",
        +  "sandbox.start_failed",
        +  "sandbox.wake_failed",
        +  "sandbox.host_unreachable",
        +  "sandbox.host_reachable",
        +  "sandbox.recovered",
        +  "sandbox.recovery_failed",
        +  "sandbox.files.changed",
        +  "sandbox.out_of_memory",
        +  "sandbox.secret_not_applied",
        +  "sandbox.network.limited",
        +  "snapshot.ready",
        +  "snapshot.failed",
        +  "snapshot.deleted",
        +  "volume.ready",
        +  "volume.failed",
        +  "volume.deleted",
        +  "volume.recovered",
        +  "egress_secret.created",
        +  "egress_secret.updated",
        +  "egress_secret.deleted",
        +  "upstream_proxy.set",
        +  "upstream_proxy.removed",
        +  "credit.low",
        +  "credit.empty",
        +  "job.run.failed",
        +  "job.recovered"
        +]
  11. 2 tool updates
    • Changedruntime_sandboxes_create1 field changed
      • changedInput schema / properties / idlePauseSeconds / description
        Previous value: -"Pause after this many idle seconds (no request, no command or terminal still running, no open preview, port, SSH or tunnel connection, no network traffic and no CPU use by its processes). Default 60; 0 never; otherwise 10 to 86400."New value: +"Pause after this many idle seconds (no request, no command or terminal still running, no open preview, port, SSH or tunnel connection, no network traffic and no CPU use by its processes). Default 300; 0 never; otherwise 60 to 86400, a shorter time raised to 60."
    • Changedruntime_sandboxes_manage1 field changed
      • changedInput schema / properties / idlePauseSeconds / description
        Previous value: -"update: pause after this many idle seconds, 10 to 86400; 0 never."New value: +"update: pause after this many idle seconds, 60 to 86400 (a shorter time raised to 60); 0 never."
  12. 1 tool update
    • Changedruntime_secrets2 fields changed
      • changedInput schema / properties / only / description
        Previous value: -"Optional. Which sandboxes get the secret: those matching labels, and those named in sandboxes. Any other sandbox of the organization sees no placeholder and its requests never carry the value. {} gives it back to every sandbox. Absent when replacing a secret: the scope it has stays, so a new value never widens who gets it. Absent on a new secret: every sandbox, as before."New value: +"Optional. Which sandboxes get the secret: those matching labels, those named in sandboxes, and every copy of the Apps named in apps. Any other sandbox of the organization sees no placeholder and its requests never carry the value. {} gives it back to every sandbox. Absent when replacing a secret: the scope it has stays, so a new value never widens who gets it. Absent on a new secret: every sandbox, as before."
      • addedInput schema / properties / only / properties / apps
        Added value: +{
        +  "description": "Every copy of these Apps or Functions (their ids) gets the secret, whatever its version: copies made by later deploys, restarts and scaling too. A deploy names the secrets its copies see as environment variables (secrets on POST /v1/apps/{id}/deploys).",
        +  "items": {
        +    "format": "uuid",
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  13. 1 tool update
    • Changedruntime_secrets2 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "set",
        -  "list",
        -  "delete",
        -  "jobs_list",
        -  "jobs_get",
        -  "jobs_put",
        -  "jobs_rotate",
        -  "jobs_delete",
        -  "jobs_reveal"
        -]New value: +[
        +  "set",
        +  "list",
        +  "delete",
        +  "jobs_list",
        +  "jobs_get",
        +  "jobs_put",
        +  "jobs_rotate",
        +  "jobs_delete",
        +  "jobs_share",
        +  "jobs_reveal"
        +]
      • addedInput schema / properties / agents
        Added value: +{
        +  "description": "share: the principalId of each agent (GET /v1/me) that may use it besides the key that stored it; [] leaves only that key.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  14. 2 tool updates
    • Changedruntime_sandboxes_create1 field changed
      • addedInput schema / properties / secrets
        Added value: +{
        +  "description": "The egress secrets it may use, by name (at most 64): only these of the secrets that reach it; [] none; omit for all. Fixed for its life.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedruntime_sandboxes_fork1 field changed
      • addedInput schema / properties / secrets
        Added value: +{
        +  "description": "The egress secrets the copies may use: a narrower list than the source's. Omit it and each copy keeps the source's list (every secret that reaches it, when the source names none). A name the source may not use is refused.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
  15. 1 tool update
    • Changedruntime_account1 field changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "get",
        -  "limits",
        -  "referrals",
        -  "compare",
        -  "sso"
        -]New value: +[
        +  "get",
        +  "limits",
        +  "referrals",
        +  "compare",
        +  "sso",
        +  "emails"
        +]
  16. 3 tool updates
    • Changedruntime_events_list1 field changed
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "sandbox.created",
        -  "sandbox.running",
        -  "sandbox.paused",
        -  "sandbox.woken",
        -  "sandbox.stopped",
        -  "sandbox.start_failed",
        -  "sandbox.wake_failed",
        -  "sandbox.host_unreachable",
        -  "sandbox.host_reachable",
        -  "sandbox.recovered",
        -  "sandbox.recovery_failed",
        -  "sandbox.files.changed",
        -  "sandbox.out_of_memory",
        -  "sandbox.secret_not_applied",
        -  "snapshot.ready",
        -  "snapshot.failed",
        -  "snapshot.deleted",
        -  "volume.ready",
        -  "volume.failed",
        -  "volume.deleted",
        -  "volume.recovered",
        -  "egress_secret.created",
        -  "egress_secret.updated",
        -  "egress_secret.deleted",
        -  "upstream_proxy.set",
        -  "upstream_proxy.removed"
        -]New value: +[
        +  "sandbox.created",
        +  "sandbox.running",
        +  "sandbox.paused",
        +  "sandbox.woken",
        +  "sandbox.stopped",
        +  "sandbox.start_failed",
        +  "sandbox.wake_failed",
        +  "sandbox.host_unreachable",
        +  "sandbox.host_reachable",
        +  "sandbox.recovered",
        +  "sandbox.recovery_failed",
        +  "sandbox.files.changed",
        +  "sandbox.out_of_memory",
        +  "sandbox.secret_not_applied",
        +  "snapshot.ready",
        +  "snapshot.failed",
        +  "snapshot.deleted",
        +  "volume.ready",
        +  "volume.failed",
        +  "volume.deleted",
        +  "volume.recovered",
        +  "egress_secret.created",
        +  "egress_secret.updated",
        +  "egress_secret.deleted",
        +  "upstream_proxy.set",
        +  "upstream_proxy.removed",
        +  "credit.low",
        +  "credit.empty"
        +]
    • Changedruntime_sandboxes_manage5 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "stop",
        -  "pause",
        -  "wake",
        -  "extend",
        -  "retention",
        -  "persist",
        -  "restart",
        -  "update",
        -  "delete",
        -  "switch-image"
        -]New value: +[
        +  "stop",
        +  "pause",
        +  "wake",
        +  "extend",
        +  "retention",
        +  "persist",
        +  "restart",
        +  "update",
        +  "delete",
        +  "switch-image",
        +  "resize"
        +]
      • addedInput schema / properties / diskMiB
        Added value: +{
        +  "description": "resize: the new disk in MiB, only larger, at most 409600 (without credit 10240); the filesystem grows at the restart.",
        +  "maximum": 409600,
        +  "minimum": 3072,
        +  "type": "integer"
        +}
      • addedInput schema / properties / memoryMiB
        Added value: +{
        +  "description": "resize: the new memory in MiB, 128 to 65536 (without credit 4096).",
        +  "maximum": 65536,
        +  "minimum": 128,
        +  "type": "integer"
        +}
      • addedInput schema / properties / restart
        Added value: +{
        +  "const": true,
        +  "description": "resize: optional, only true; a resize always restarts. Older clients send it.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / vcpu
        Added value: +{
        +  "description": "resize: the new vCPUs, 1 to 16 (without credit 2).",
        +  "maximum": 16,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Changedruntime_webhooks_manage1 field changed
      • changedInput schema / properties / events / items / enum
        Previous value: -[
        -  "*",
        -  "sandbox.created",
        -  "sandbox.running",
        -  "sandbox.paused",
        -  "sandbox.woken",
        -  "sandbox.stopped",
        -  "sandbox.start_failed",
        -  "sandbox.wake_failed",
        -  "sandbox.host_unreachable",
        -  "sandbox.host_reachable",
        -  "sandbox.recovered",
        -  "sandbox.recovery_failed",
        -  "sandbox.files.changed",
        -  "sandbox.out_of_memory",
        -  "sandbox.secret_not_applied",
        -  "snapshot.ready",
        -  "snapshot.failed",
        -  "snapshot.deleted",
        -  "volume.ready",
        -  "volume.failed",
        -  "volume.deleted",
        -  "volume.recovered",
        -  "egress_secret.created",
        -  "egress_secret.updated",
        -  "egress_secret.deleted",
        -  "upstream_proxy.set",
        -  "upstream_proxy.removed"
        -]New value: +[
        +  "*",
        +  "sandbox.created",
        +  "sandbox.running",
        +  "sandbox.paused",
        +  "sandbox.woken",
        +  "sandbox.stopped",
        +  "sandbox.start_failed",
        +  "sandbox.wake_failed",
        +  "sandbox.host_unreachable",
        +  "sandbox.host_reachable",
        +  "sandbox.recovered",
        +  "sandbox.recovery_failed",
        +  "sandbox.files.changed",
        +  "sandbox.out_of_memory",
        +  "sandbox.secret_not_applied",
        +  "snapshot.ready",
        +  "snapshot.failed",
        +  "snapshot.deleted",
        +  "volume.ready",
        +  "volume.failed",
        +  "volume.deleted",
        +  "volume.recovered",
        +  "egress_secret.created",
        +  "egress_secret.updated",
        +  "egress_secret.deleted",
        +  "upstream_proxy.set",
        +  "upstream_proxy.removed",
        +  "credit.low",
        +  "credit.empty"
        +]
  17. 1 tool update
    • Changedruntime_sandboxes_exec1 field changed
      • addedInput schema / properties / user
        Added value: +{
        +  "default": "sandbox",
        +  "description": "Who runs it: the sandbox user (uid 1000, HOME=/workspace), or root, through the sandbox's passwordless sudo with the same environment and PATH and HOME=/root. Saves prefixing every command with sudo.",
        +  "enum": [
        +    "sandbox",
        +    "root"
        +  ],
        +  "type": "string"
        +}

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Provides a local, isolated Linux VM sandbox for AI agents using Apple's Virtualization.framework, enabling fast command execution (~60ms) and package management without cloud costs.
    35
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Gives an AI agent its own fleet of disposable Linux microVMs on hardware you control, with tools to spawn, execute commands in, fork from identical disk states, list, and destroy them. Enables safe parallel exploration and cleanup all within an isolated VM boundary.
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI coding agents to create disposable, isolated Firecracker MicroVM sandboxes on AWS Lambda, execute commands, transfer files, and tear them down when done.
    2
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.