5.3 KiB
Optional runtime capabilities
The six Agent Skills are useful without a GStack runtime. Never install, download, build, select, update, or remove runtime capabilities merely because a skill was invoked.
Before interactive browser work, read references/BROWSER-PROVIDERS.md in full. It owns provider detection, consented host setup, the common readiness journey, and the explicit GStack fallback. Skill installation never proves browser readiness.
When an active specialist first reaches a capability it cannot use, name the exact capability and why it is needed. Offer to continue without it when the judgment-only or host-native path remains valid. Before any network preview, ask whether the user wants to check official setup options and exact sizes. Disclose that an uncached preview makes one public GitHub request for signed manifest metadata and sends no repository content, private URL, file, cookie, token, or credential; then STOP. A cached already-verified manifest may preview offline, but never silently fetch.
Only after the user approves that metadata check, run the non-mutating preview from this skill root: node references/support/runtime-bootstrap.mjs preview --capability <name> (repeat --capability for additional requested capabilities). It dependency-expands, reports already verified local components, exact missing components, and their summed compressed bytes. It never downloads components or mutates runtime state. Preview consent is not install consent.
User-facing setup capabilities are exactly browser, design, diagram, pdf, and ios. all means those five and intentionally excludes visible Chromium. The internal browser-visible capability is additive and is offered only when a workflow actually reaches a headed browser, extension, or browser-handoff step. Never offer it during ordinary headless QA.
After showing the complete preview, STOP for explicit approval. Only after approval run node references/support/runtime-bootstrap.mjs install --capability <name> --yes; install must reprint the identical dependency-closed plan before downloading. Signed internal components are core, browser-code (browse code and dependencies), browser-headless (Playwright headless shell and FFmpeg), browser-visible (full Chromium), design, diagram, pdf, and ios. Logical browser expands to browser-code + browser-headless; internal browser-visible expands to browser-code + browser-visible and does not require headless. Component dependencies are browser-code → core, browser-headless → browser-code, and browser-visible → browser-code. diagram depends on logical browser; pdf depends on diagram; ios is Darwin-only. Therefore a first-time headed flow previews core + browser-code + browser-visible, while an existing verified headless runtime downloads only missing browser-visible. The manifest schema is v2 with global capabilityComponents and componentDependencies, plus targets[target].components[id] carrying signed exact-byte artifacts.
The dependency-free Node 18+ bootstrap accepts only official GStack GitHub Release hosts, validates manifest/runtime/skill API/platform/component metadata and SHA-256, verifies a declared Cosign bundle when Cosign is available, rejects unsafe archive paths/links, and invokes the atomic managed installer. Never run ./setup inside a standard-installed skill directory, enroll a host, or treat skill installation as runtime consent.
After doctor confirms readiness, canonical launcher bindings are GSTACK_HOME=${GSTACK_HOME:-$HOME/.gstack}, GSTACK_BIN=$GSTACK_HOME/bin, BUN_CMD=$GSTACK_BIN/bun, B=$GSTACK_BIN/browse, D=$GSTACK_BIN/gstack-design, and P=$GSTACK_BIN/make-pdf. Specialist modules may bind only the launchers they use. These assignments do not install or grant consent. Never download or install a second Bun for GStack helpers; the managed runtime owns its pinned Bun executable in the active slot.
Some retained helpers are shell scripts. gstack doctor verifies Bash and, on Windows, discovers Git for Windows Bash; disclose and stop at the affected helper if that prerequisite is unavailable. Python is not a global GStack prerequisite: only a specialist flow explicitly labeled as Python-dependent may request it, at the point of use and with the user's approval.
The package/runtime compatibility tuple is schemaVersion=1, runtimeVersion=2.0.0, and skillApi=2.0; the machine-readable copy is references/support/runtime-contract.json. An incompatible active runtime is unavailable, not permission to upgrade it.
Every optional-runtime tool result must satisfy references/support/execution-result-contract.json before it is presented as success. Success requires non-empty evidence. Empty or malformed output and explicit degraded, unsupported, or failed statuses remain non-success with stable codes; human renderings must preserve that status and code.
The developer-only fallback is node references/support/runtime-bootstrap.mjs install --source <reviewed-checkout> --capability <name> --yes; show its trust warning and use it only when the user explicitly selects a checkout they reviewed. If the packaged bootstrap is unavailable, stop capability setup instead of guessing a checkout-relative command. Deferring installation records no consent and must not block pure judgment.