Instant Preview
Try Rover on a live site — yours or one you don't control — before installing the production snippet.
Instant Preview is the preview-first path: prove Rover on a live page before anything is installed. Start at Instant Preview. The website hosts preview creation and documents every path — Hosted Preview, the Preview Helper extension, console snippets, and bookmarklets — in one place.
Two config sources
Every preview path boots Rover from one of two config sources.
- Hosted preview handoff config — temporary preview identifiers and runtime tokens created by the hosted preview backend under the signed-in tester's account. No Workspace setup needed.
- Workspace site config (test config JSON) — persistent
siteId,publicKey(pk_site_*), optionalsiteKeyId, plusallowedDomainsanddomainScopeMode, copied from Workspace and pasted into the preview page, the SDK, or the Preview Helper.
Workspace config comes in two shapes. The reusable wildcard config is auto-loaded or created when you sign in on the preview page: allowedDomains: ["*"], owned by the signed-in tester, with a 90-day TTL you can extend with Renew 90 days or kill with Revoke. Use it to test any domain. The exact site-scoped config carries a real Workspace site key and its real allowed domains — the advanced path for validating one site key's domain policy.
Path matrix
| Path | What you need | Persistence | Best for |
|---|---|---|---|
| Hosted Preview | Sign in, target URL, and a prompt — Rover creates temporary preview state for you | Rover-managed preview session owned by the signed-in tester | Fast demos, auto-run proof, and the mobile fallback |
| Preview Helper | Test config JSON or hosted handoff | Re-injects after reloads and navigation | Best live desktop path for multi-page demos |
| Console | Test config JSON, then the generated snippet | Current page only | DevTools demos and debugging |
| Bookmarklet | Test config JSON, then the generated bookmarklet | Current page only | Drag-and-click demos |
| Script tag | Test config JSON, then the generated snippet | Persistent where installed — the site loads Rover directly | Sites whose code you can edit |
| Production install | Workspace install snippet (siteId + publicKey) | Persistent site config | Your real site — Workspace config is the source of truth for every other path |
On mobile, use Hosted Preview — Helper, Console, and Bookmarklet are desktop-first. Script-tag and production installs work everywhere.
Config shape
Reusable wildcard config (recommended for testing)
{
"siteId": "...",
"publicKey": "pk_site_...",
"siteKeyId": "...",
"apiBase": "https://agent.rtrvr.ai",
"allowedDomains": ["*"],
"domainScopeMode": "registrable_domain",
"sessionScope": "shared_site",
"openOnInit": true,
"mode": "full",
"allowActions": true,
"capabilities": {
"roverEmbed": true,
"cloudAgent": true,
"cloudScrape": true,
"externalWebContextScrape": true
},
"ui": {
"voice": { "enabled": true },
"experience": {
"audio": {
"narration": { "enabled": true, "rate": 1, "language": "en-US" }
},
"motion": {
"actionSpotlight": true,
"actionSpotlightColor": "#c6f24e"
}
}
}
}Exact site-scoped config
{
"siteId": "site_123",
"publicKey": "pk_site_123",
"siteKeyId": "key_123",
"apiBase": "https://agent.rtrvr.ai",
"allowedDomains": ["example.com"],
"domainScopeMode": "registrable_domain",
"openOnInit": true,
"mode": "full",
"allowActions": true,
"capabilities": { "roverEmbed": true },
"ui": { "voice": { "enabled": true } }
}Required fields for the generic path: siteId plus either publicKey or sessionToken. siteKeyId, apiBase, allowedDomains, domainScopeMode, openOnInit, mode, allowActions, and capabilities.roverEmbed are optional. The website tool validates the JSON before generating anything, so missing fields or bad domain scope surface early.
Preview sessions use Rover's built-in tab behavior: external pages open in a new tab with notice, and allowed-host hops use smart tab selection.
Get config from Workspace
- 1.Open Workspace and create a Rover site, or reuse one whose domains and policy already fit. Workspace keeps the owner-readable
pk_site_*install material available whenever you reopen Install. Rotate the production key only when you need new public install material. - 2.Select the site, open Install, and use Copy test config JSON on the Try Rover on Other Sites card.
- 3.Open Instant Preview and stay on the Use Workspace config path. For testing arbitrary domains, skip Workspace and let the preview page auto-load or create the reusable wildcard config instead.
- 4.Paste the JSON, enter the website URL you want to test, then choose Helper, Console, or Bookmarklet — the tool generates the exact artifact.
See Workspace docs for install material, site keys, and production setup.
Choose a client
Preview Helper (recommended)
An MV3 Chrome extension, public at rtrvr-ai/rover-preview-helper. It injects Rover from the reusable wildcard config, an exact site-scoped config, or a hosted preview handoff, and re-injects across reloads and history navigation while the page still matches allowedDomains — the most reliable live-inject path.
- 1.Clone and build the extension (commands below), then open
chrome://extensions, enable Developer mode, choose Load unpacked, and select the generateddistfolder. - 2.From the preview page, enter the target site URL and click Open target with helper — config hands off automatically, no manual paste.
- 3.If Rover does not inject, paste the test config JSON into the helper popup and click Inject Rover into this tab.
- 4.Use Reconnect preview after reloads or navigation if needed.
git clone https://github.com/rtrvr-ai/rover-preview-helper.git
cd rover-preview-helper
pnpm install
pnpm buildThe handoff uses a private URL fragment — #rover_helper_payload=<base64url(JSON)> — so config stays out of target-site query params and request logs. The helper reads the fragment, strips it from the URL, and injects Rover. It also remembers your last-used config: after the first handoff or manual paste, later sessions reuse the saved config automatically.
Console snippet
Best when DevTools is already open — fast demos, screen-sharing, and debugging. Generate the snippet from the preview page or the SDK, open DevTools on the target page, paste it into the Console, and press Enter. Injected JavaScript is lost on a full page reload.
Bookmarklet
Best for the drag-to-bookmarks moment and repeated one-click demos. Show the bookmarks bar (Cmd+Shift+B / Ctrl+Shift+B), then drag the Rover button from the preview page into it — drag from the dedicated drag control, never click it on the Rover page itself. Open the target site and click the bookmark. Still current-page only: reloads need another click, and some browsers and sites restrict bookmarklet behavior.
Script tag and SDK helpers
When you can edit the target site's code, generate a script tag instead — paste it into the site's head or body, reload, and Rover stays available on later pages because the site loads it directly. The SDK exports the same generators for your own tooling: console snippet, bookmarklet, and script-tag snippet, straight from Rover config. The SDK does not create the config; Workspace does.
Hosted Preview
Hosted Preview is the Rover-managed demo path. Use it when you do not want to think about site config yet, when you need a temporary demo token, or when mobile, CSP, or reload behavior makes live injection unreliable.
- Flow — sign in at Instant Preview and stay on the Hosted Preview tab. Rover creates a temporary preview, shows the hosted browser inline, injects a short-lived preview bootstrap into the hosted page (re-injected after top-level navigations), and auto-runs your exact prompt inside it. Helper, Console, Bookmarklet, and full-screen hosted-shell options stay available below.
- 12-minute cap — hosted sessions have a hard 12-minute maximum. The dedicated hosted viewer extends the hosted-browser TTL while you watch: its heartbeats refresh a short disconnect grace, but never the absolute expiry. Generic preview refreshes extend nothing.
- Billing — Hosted Preview runs on the signed-in tester's credits. It does not inherit billing from a Workspace-installed site key on the target website.
- Shared capacity — Hosted Preview leases from the same browser pool as normal automation on that worker. If the only browser is busy, the preview waits instead of creating a second browser.
- Lifecycle — closing the viewer tab sends a best-effort close; if that signal is missed, a short server-side disconnect grace closes the session. On close, expiry, or failure the hosted browser is destroyed, never recycled, so no storage or cookies bleed between preview and normal automation. Sessions are sticky to one worker: if the owner lease goes stale, Rover fails closed and asks you to recreate the demo.
To drive the hosted service directly: create with signed-in Firebase bearer auth via POST /v2/rover/previews; the follow-on get/events/input/cancel/share/bootstrap routes take the preview token in query or body, or bearer auth. Instant Preview API is the source of truth for the contract — auth model, curl examples, response fields, and the OpenAPI spec.
Preview tokens vs site keys
Hosted preview tokens are short-lived demo credentials tied to the signed-in tester's temporary preview session. Workspace site keys are persistent production install credentials. Never treat preview tokens as production keys.
- Test config JSON — portable Rover boot config for Helper, Console, Bookmarklet, and SDK testing on other sites.
- Production install snippet — the snippet you put on your real website.
- Hosted preview token — short-lived demo state created by Hosted Preview, not a replacement for site config.
- Preview flow — temporary token, exact-host demo scope, tester billing, and the exact prompt auto-runs inside Rover's hosted page.
- Production flow — Workspace-managed site config, persistent public key, generated install snippet.
Troubleshooting
- Not sure what JSON to paste — use the Workspace test config JSON, not the install snippet and not a random code sample.
- **
This API key is missing capability: roverEmbed** — the Workspace key you copied is not embed-ready. Create or replace with an embed-enabled key, then copy the fresh test config JSON. - **The target host is outside
allowedDomains** — with the reusable wildcard config, make sureallowedDomainscontains["*"]. With exact site-scoped config, test on a host that matches the key's domains, fix the domain policy in Workspace, or switch to the wildcard config. - Preview Helper rejects a host despite wildcard config — update the extension. Older versions do not recognize the
*wildcard pattern. - Console or Bookmarklet worked only once — expected. Both are current-page only; a full reload drops the injected JavaScript. Use the Preview Helper for multi-page testing, or the script tag if you can edit the site.
- **
React has blocked a javascript: URL** — delete any old Rover bookmarklet and recreate it from the current preview page. The bookmarklet must be dragged from the drag control, not clicked on the Rover page. - Rover appears but takes no actions — the config is likely
analytics_only,safemode, orallowActions: false. - A site still blocks injection — some sites enforce strict CSP or reload aggressively. Use the Preview Helper or Hosted Preview.
- Hosted Preview says you have no credits — it runs on the signed-in tester's credits. Sign in first, then add credits or upgrade before creating or continuing the demo.
- **
Open hosted shelldoes nothing** — Hosted Preview should show the hosted browser inline and open the dedicated hosted viewer route in a new tab. If it still fails, recreate the temporary demo. On the Workspace-config path this button does not apply — switch to the Hosted Preview tab. - The viewer stays blank and keeps polling — the hosted-browser session was never marked viewer-ready. Rover provisions the hosted browser first and mounts the viewer only after that session is ready; recreate the demo after the latest backend and website deploy.
- Hosted Preview is slow to start — it shares the browser pool with normal automation on that worker and waits until the browser is released.
- Hosted Preview expired while the viewer was open — expected at the hard 12-minute maximum. Heartbeats refresh only the disconnect grace, never the absolute expiry.
- Hosted browser asks for a restart — Rover fails closed when the hosted browser owner dies or loses its lease. Recreate the demo instead of waiting for the old browser.
- Mobile feels broken — use Hosted Preview on mobile. Helper, Console, and Bookmarklet are desktop-first.