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.
| Capability | Rust BashBuilder | Rust BashTool | Rust ScriptedTool | CLI | Python | NAPI JavaScript | Browser WASM | C 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
- Testing Strategy — where each surface's executable tests run
- Threat Model — security impact of silently dropped wrapper configuration
- Bashkit Architecture — public surface ownership