Web-App Verification (Obscura)
When an agent builds you a web app, this feature lets it functionally verify that the app actually works before it says it is done, using Obscura, a lightweight Rust headless browser, instead of installing full Chrome. The agent gets one tool that checks the page loads, elements exist, forms accept input, and no console errors appear.
What it is
Status: shipped — available to all users. The verify tool activates once you install Obscura (Settings → "Set it up for me").
When you have an Omniscio coding session build you a web app, this feature lets the agent functionally verify that the app actually works before it says "done" — the way a careful developer would click through their own work. It does this with Obscura, a lightweight Rust headless browser, instead of installing full Chrome/Chromium.
The agent gets a single tool, verify_web_app, that opens the running app in
Obscura and checks things like: does the page load, is the login button present,
does clicking it go to the right place, do forms accept input, are there any
JavaScript errors in the console.
Where to find it
Obscura is opt-in and installed on demand through the toolchain "Set it up for me" flow, and the capability itself is enabled at Settings → Lab (Web-app verification). After that there is no button per run: the agent gets the tool on a web-app project and uses it by itself.
How it behaves
What it is NOT
Obscura has no rendering/layout engine (it runs JavaScript and builds the page in memory, but never draws pixels). So this is a functional test tool, not a visual one:
- ✅ It checks: page loads, elements exist, text is present, navigation works, forms accept input, no console errors.
- ❌ It cannot: take screenshots, do visual/pixel comparison, or judge how the page looks. Asking it for a screenshot returns a clear "functional-only" message rather than silently passing.
"Like Playwright" is achieved by literally using Playwright (playwright-core)
and pointing it at Obscura over the Chrome DevTools Protocol — so the checks run
through the real Playwright engine, just against a lighter browser.
How it works (under the hood)
- Omniscio detects the project is a web app (Next.js, Vite, SvelteKit, Nuxt, Astro, Remix, Gatsby, Angular).
- If Obscura is installed and you've enabled the capability, Omniscio adds a
built-in
webapp-verifytool server to that session — all three conditions must hold (shouldMountWebappVerify). - The agent starts the dev server itself (e.g.
npm run dev) and learns its URL. - The agent calls
verify_web_app({ url, checks }). - Omniscio launches Obscura on a private loopback port, connects
playwright-core, runs each check, and returns a structured pass/fail report (plus any console errors). A green run posts a visible "✓ Verified working" row.
The checks
| Check | Asserts |
|---|---|
loads |
the app reaches the URL without crashing |
selectorPresent |
an element matching a CSS selector exists |
textContains |
the page body contains some text |
clickNavigates |
clicking an element leads to an expected element/page |
fill |
a form field accepts a value |
noConsoleErrors |
no console.error or uncaught errors occurred |
Setup
Obscura is opt-in and installed on demand (it is not bundled with Omniscio):
- Install it via the toolchain "Set it up for me" flow — Omniscio downloads the pinned Obscura release for your OS and verifies its SHA-256 checksum before use.
- Enable Web-app verification in Settings → Lab.
Proactive nudge: the first time you build a web app without Obscura installed, Omniscio drops a single dismissible inbox card offering one-click setup (once per install, never nags). It only appears once the feature is visible to you, so a still-in-development build never markets it broadly.
For agents
Key code
src/main/services/webapp-verify/— the engine:check-types.ts(Zod schema, enforces functional-only),check-runner.ts(pure check logic),obscura-process.ts(launch Obscura on an ephemeral port + health wait),obscura-harness.ts(connectOverCDPglue),gate.ts(shouldMountWebappVerify),is-web-app-project.ts,checksum.ts.src/main/services/webapp-verify-mcp-server/— the built-in stdio MCP server exposing the singleverify_web_apptool.- Setting: (retired 2026-09-19 with the rest of the per-session MCP composition) —
the
webAppVerifyEnabledtoggle and thewebapp-verifyMCP server are gone from sessions. Thewebapp-verifyfeature id stays inUNRELEASED_FEATURESmarkedretired(hidden for everyone), and the engine + server source stay in the tree, unwired.
Design + plan: docs/superpowers/specs/2026-06-16-obscura-webapp-testing-design.md,
docs/superpowers/plans/2026-06-16-obscura-webapp-verify.md.
Related
MCP Servers covers how a built-in tool server like this one is mounted into a session and managed. Running Apps covers the preview surface for the dev server an agent starts before it verifies the app.
Last verified 2026-09-23