Cloud runtime controlled from normal ChatGPT mobile/web.
ChatGPT -> authenticated Val Town plugin -> val-scoped SQLite -> runner.ts -> provider router -> cloud browser -> verified receipt
The public HTTP endpoint is liveness-only. Provider configuration, task state, receipts, health and cost metrics are available only through authenticated status.ts execution.
Cross-provider fallback is allowed only for read_only. A write failure is never replayed automatically on another provider because failure is not proof of zero side effects.
Supported:
gotowait_forclickfillfill_secrettypeselectextract_textextract_attributeexpect_textexpect_urlArbitrary JavaScript and shell input are intentionally absent from the task schema.
The value attribute is blocked from extract_attribute to reduce accidental credential exfiltration after form fill.
read_only: normal execution.reversible_write: requires explicit approved=true.consequential: requires explicit approved=true.fill_secret: separately requires explicit approval, even during a read-oriented flow.Passwords, cookies and provider tokens must never be stored in task_json.
Use:
{"action":"fill_secret","selector":"#password","envVar":"PORTAL_PASSWORD"}
Only the environment-variable name is stored. The value is resolved in memory immediately before execution.
Provider credentials belong only in Val Town env vars:
KERNEL_API_KEYBROWSERLESS_TOKENBROWSERLESS_BASE_URLBefore any provider call, runner.ts runs a fail-closed network preflight:
allowedHosts are validated;The browser program itself also restricts main-frame navigation to the original target host plus explicit allowedHosts.
DNS preflight reduces SSRF/DNS-rebinding risk but is not a mathematical proof against DNS rebinding after the preflight. Provider isolation and post-action validation remain required.
When risk=read_only, browser network requests using methods other than GET/HEAD/OPTIONS are aborted. Popups are closed.
This prevents common POST/PUT/PATCH/DELETE side effects. It cannot guarantee zero side effects on badly designed GET endpoints.
run_id is unique/idempotent;Default is minimal:
Extracted outputs and provider session IDs are not persisted by default.
Use evidenceRetention: "full" only when the extracted output is intentionally safe to retain.
browser_attempts records per-attempt provider/status/duration and an estimated Browserless browser-time unit count.
Browserless estimates exclude CAPTCHA/proxy add-ons. Kernel usage is not estimated locally because its billing basis is GB-second; actual account usage must be observed from Kernel.
TOOL_SUCCESS_RESPONSE != BEHAVIOR_PROOF.
A browser execution with no positive expectation remains PARTIAL. PASS requires all explicit expectations to succeed.
PASS:
value attribute extraction rejection.UNVERIFIED:
/function execution.No user-created environment variables are currently configured, so no live browser provider has been promoted to OPERATIONAL.
docs/SMOKE_TASK.json is deliberately a DRAFT, not a queued task. After exactly one provider credential is configured, ChatGPT can enqueue that read-only smoke task, run runner.ts, persist the attempt and promote the provider only if the explicit expectations PASS.
See:
docs/CURRENT_STATE.mddocs/PROVIDER_CENSUS.mddocs/ACTIVATION_RUNBOOK.mddocs/TASK_SCHEMA.mddocs/SMOKE_TASK.json