Public Capability Parity

August 6, 2026 · View on GitHub

Generated from contracts/capability-parity.json. Do not edit this file by hand. Run just regen-capability-parity.

A check means the surface has an end-to-end test selector in the manifest. A dash means the feature is intentionally unsupported and has a recorded reason below.

CapabilityRust BashBuilderRust BashToolRust ScriptedToolCLIPythonNAPI JavaScriptBrowser WASMC ABI
Host-configurable execution resource limits
Host-triggered cancellation of in-flight execution
Execution deadlines or timeouts
Bounded stdout and stderr with truncation reporting
Initial virtual working directory
Initial virtual environment
Host-provided stdin for an execution
Host callbacks registered as shell builtins
Host-visible process-local builtin suspension and resume
Named host tool callbacks composed through shell scripts
Explicit outbound-network policy
Host-provided HTTP transport or egress hook
Host-visible virtual filesystem state
Filesystem mounts beyond seeded virtual files
Snapshot and restore of interpreter state
Explicit embedded Python opt-in
Explicit embedded TypeScript opt-in
Explicit embedded SQLite opt-in

Intentional exclusions

Rust BashBuilder

  • tool_callbacks: Use ScriptedTool for named tool callbacks; BashBuilder exposes lower-level custom builtins.

Rust BashTool

  • cancellation: ToolExecution has no host cancellation handle; callers can drop the future or set a deadline.
  • stdin: ToolRequest accepts commands and timeout_ms only; scripts can still create internal pipelines.
  • host_call_suspension: BashTool drives each fresh Bash execution to completion and exposes no event handle.
  • tool_callbacks: BashTool accepts shell builtins, not the named tool-callback contract.
  • snapshots: Each BashTool execution creates an isolated fresh Bash instance and exposes no persistent snapshot state.

Rust ScriptedTool

  • cancellation: No cancellation handle is exposed; per-call timeout_ms is the abort boundary.
  • cwd: ScriptedTool intentionally uses a logic-only shell without filesystem-backed cwd configuration.
  • custom_builtins: Only registered ToolDef callbacks become commands; arbitrary Bash builtins are not accepted.
  • host_call_suspension: ScriptedTool invokes registered callbacks directly and exposes no suspended execution handle.
  • network_policy: The logic-only orchestration shell has no network builtins.
  • transport_hooks: The logic-only orchestration shell has no HTTP transport.
  • virtual_filesystem: Filesystem commands and redirections are intentionally rejected.
  • mounts: Filesystem commands and redirections are intentionally rejected.
  • snapshots: Each execution uses a fresh logic-only shell.
  • runtime_python: Language runtimes are intentionally absent from the logic-only shell.
  • runtime_typescript: Language runtimes are intentionally absent from the logic-only shell.
  • runtime_sqlite: Language runtimes are intentionally absent from the logic-only shell.

CLI

  • cancellation: No programmatic cancellation API exists at the process boundary.
  • cwd: The CLI exposes no initial virtual-cwd flag.
  • env: The CLI deliberately does not inherit or expose host environment injection flags.
  • custom_builtins: A standalone process cannot receive in-process host callbacks.
  • host_call_suspension: A standalone process has no in-process event and resume boundary.
  • tool_callbacks: A standalone process cannot receive in-process host callbacks.
  • transport_hooks: The CLI exposes allow-all/default-deny policy, not a host transport callback.
  • snapshots: The CLI exposes no snapshot commands.
  • runtime_typescript: The CLI build does not register the TypeScript runtime.

Python

  • stdin: execute() accepts a command string and optional output callback, not top-level host stdin.
  • host_call_suspension: Python custom builtins await callbacks directly; no request and resume handle is exposed.
  • transport_hooks: Python exposes network policy and credentials but no custom HttpTransport implementation hook.
  • runtime_typescript: The Python package does not compile or expose the TypeScript runtime.

NAPI JavaScript

  • stdin: execute() accepts a command string and output callback, not top-level host stdin.
  • host_call_suspension: NAPI custom builtins await callbacks directly; no request and resume handle is exposed.
  • transport_hooks: NAPI exposes network policy and credentials but no JavaScript HttpTransport hook.
  • runtime_typescript: The NAPI package does not compile or expose the TypeScript runtime.

Browser WASM

  • stdin: execute() accepts only a command string; pipelines still provide builtin stdin.
  • host_call_suspension: Browser custom builtins await JavaScript callbacks directly; no request and resume handle is exposed.
  • tool_callbacks: The slim browser package exposes custom builtins but no ScriptedTool class.
  • network_policy: The slim browser build has no network builtin or host socket access.
  • transport_hooks: The slim browser build has no HTTP transport.
  • mounts: Browser WASM exposes one in-memory VFS and no host filesystem mounts.
  • runtime_python: The slim browser build omits embedded language runtimes.
  • runtime_typescript: The slim browser build omits embedded language runtimes.
  • runtime_sqlite: The slim browser build omits embedded language runtimes.

C ABI

  • cancellation: ABI v1 exposes synchronous execute with no cancellation handle.
  • stdin: ABI v1 execute accepts script bytes only.
  • custom_builtins: ABI v1 has no callback registration table.
  • host_call_suspension: ABI v1 has no asynchronous event and resume API.
  • tool_callbacks: ABI v1 has no tool-callback registration table.
  • network_policy: ABI v1 deliberately ships only git, jq, and VFS capabilities.
  • transport_hooks: ABI v1 has no host HTTP transport vtable.
  • mounts: ABI v1 supports seeded and mutable VFS files, not filesystem mounts.
  • snapshots: ABI v1 has no snapshot functions.
  • runtime_python: ABI v1 omits embedded language runtimes.
  • runtime_typescript: ABI v1 omits embedded language runtimes.
  • runtime_sqlite: ABI v1 omits embedded language runtimes.

Enforcement

just check-capability-parity validates complete matrix coverage, non-empty unsupported reasons, and every supported capability's path#test-selector evidence. The language/package test jobs execute those selectors; deleting or renaming evidence breaks the central check instead of silently weakening the contract.

See also