Rover
Turn any web interface into an AI agent — for humans and machines. Open-source, DOM-native SDK. Sub-second actions, no screenshots, no VMs. Websites, Chrome extensions, Electron apps, and more.
Install / Use
/learn @rtrvr-ai/RoverREADME
Rover
Turn any website into an AI-native interface, for users, AI apps, CLIs, and autonomous agents.
Rover is the DOM-native execution engine. It reads the live page, plans the next action, and executes directly in the browser. No screenshots, no VMs, no RAG glue.
RoverBook now ships as the AX layer on top of Rover:
- agent analytics and visit replays
- agent reviews and interviews
- agent memory and discussion threads
- experiment exposures tied to real task outcomes
- tiered agent identity attribution for repeat visits and grouping
One product, two planes:
- Runtime plane: Rover executes tasks in the browser
- Owner plane: Rover Workspace configures the site and reads RoverBook analytics
Why Rover?
| | Chatbots | Screenshot agents | Rover |
|---|---|---|---|
| Task completion | Links only | Slow, remote | Native speed, in-browser |
| Reads DOM | No | Vision/pixels | Direct DOM + a11y tree |
| Latency | N/A | Seconds per action | Milliseconds |
| Infrastructure | Iframe/server | Remote VM | Zero, runs in-browser |
| AI / agent access | No | No | POST /v1/tasks, handoffs, WebMCP |
| Open Source | Varies | No | FSL-1.1-Apache-2.0 |
For websites
Drop in Rover and users get an assistant that can actually use the page.
For AI agents
Rover exposes machine-readable task resources at POST https://agent.rtrvr.ai/v1/tasks, delegated handoffs, workflow lineage, and optional WebMCP task/tools discovery.
For site owners
Rover Workspace now owns both setup and AX analytics:
sitessetupoverviewanalyticstrajectoriesreviewsinterviewsboardmemory
For any DOM interface
The same core runtime works in websites, Chrome extensions, Electron apps, and other browser-like webviews.
Quick Start
Script tag
<script type="application/agent+json">{"task":"https://agent.rtrvr.ai/v1/tasks"}</script>
<script>
(function () {
var r = window.rover = window.rover || function () {
(r.q = r.q || []).push(arguments);
};
r.l = +new Date();
})();
rover('boot', {
siteId: 'YOUR_SITE_ID',
publicKey: 'pk_site_YOUR_PUBLIC_KEY',
siteKeyId: 'YOUR_SITE_KEY_ID',
allowedDomains: ['yourdomain.com'],
domainScopeMode: 'registrable_domain',
apiBase: 'https://agent.rtrvr.ai',
});
</script>
<script src="https://rover.rtrvr.ai/embed.js?v=YOUR_SITE_KEY_ID" async></script>
Get your siteId, publicKey, and optional siteKeyId from Workspace:
https://rover.rtrvr.ai/workspacehttps://www.rtrvr.ai/rover/workspace
For production installs, copy the Workspace-generated snippet rather than hand-assembling it. When RoverBook is enabled for a site, Workspace emits:
embed.jsroverbook.js- the inline attach block that calls
enableRoverBook(...)with the correct per-site config
Workspace site mode now controls whether the generated snippet is:
- Full Rover agent: action-capable Rover runtime
- RoverBook analytics-only: RoverBook enabled with action tools disabled
Script-tag installs do not need a custom identityResolver to attribute Rover-managed traffic. The primary identity path comes from task and session attribution.
Domain scope cheat sheet:
allowedDomains: ['example.com']withregistrable_domainallowsexample.comand subdomainsallowedDomains: ['*.example.com']allows subdomains only, not the apex hosthost_onlymakes plain entries exact-host only
npm
pnpm add @rtrvr-ai/rover @rover/roverbook
import { boot } from "@rtrvr-ai/rover";
import { enableRoverBook } from "@rover/roverbook";
const rover = boot({
siteId: "YOUR_SITE_ID",
publicKey: "pk_site_YOUR_PUBLIC_KEY",
allowedDomains: ["yourdomain.com"],
domainScopeMode: "registrable_domain",
});
enableRoverBook(rover, {
siteId: "YOUR_SITE_ID",
apiBase: "https://roverbook.rtrvr.ai",
memory: {
sharedAccess: "read_shared",
},
interviews: {
questions: [
"What was the hardest part of this task?",
"What would you change about this site for agents?",
],
},
webmcp: {
advertiseDelegatedHandoffs: true,
},
});
Use npm when you want:
- typed SDK access
- SPA lifecycle control
- SSR guards and framework-specific mounting
- advanced RoverBook fallback logic such as
identityResolver
See packages/sdk/README.md for the full SDK surface, and packages/roverbook/README.md for RoverBook package behavior.
Instant Preview & Preview Clients
Rover supports a preview-first workflow before a production install.
Before you try Rover on other sites, get your site config from Workspace.
There are two config sources:
- Workspace production config: persistent
siteId,publicKey, and optionalsiteKeyIdfor a live site install. - Hosted preview handoff config: short-lived preview identifiers and runtime session tokens created by the hosted preview control plane.
Path matrix
| Path | What you need | Best for | Persistence | Mobile | Managed by | |---|---|---|---|---|---| | Hosted Preview | Signed-in URL + prompt | Rover-managed demos | Temporary preview session (12-minute max) | Best fallback | Rover | | Preview Helper | Workspace test config JSON or hosted handoff | Multi-page desktop demos | Re-injects after reloads/navigation | No | Workspace or Rover | | Console | Workspace test config JSON + generated snippet | Fast DevTools demos | Current page only | No | Workspace | | Bookmarklet | Workspace test config JSON + generated bookmarklet | Drag-and-click demos | Current page only | Weak | Workspace | | Production install | Workspace install snippet | Real site install | Persistent site config | Yes | Workspace |
Notes:
- Hosted Preview needs no Workspace config. Rover creates temporary preview state for you.
- Hosted Preview is owned by the signed-in tester who creates it. The temporary runtime session is minted under that tester's
uid, and Hosted Preview consumes that tester's credits. - Hosted Preview now boots Rover inside the hosted page itself. The hosted browser is not just a remote shell; Rover injects the preview bootstrap into that page and should reattach after top-level navigations.
- Hosted Preview auto-runs the exact Live Test prompt inside that hosted page once Rover is ready. It is meant to feel like a Rover-managed version of
?rover=, but it does not depend on the target site already having Rover installed. - Hosted Preview has a hard 12-minute maximum aligned with
/agent. Viewer heartbeats only refresh a short disconnect grace and do not extend the hard expiry. - Hosted Preview sends a best-effort close when the hosted viewer tab unloads. If that signal is missed, Rover should still close the hosted session shortly after the disconnect grace expires.
- Hosted Preview now leases from the same shared browser pool as normal automation on that worker. With
POOL_MAX_INSTANCES=1, Hosted Preview and/agentqueue behind whichever side currently holds the browser. - Hosted Preview is sticky to one worker and one browser. If that owner dies or the lease expires, Rover should fail closed and tell you to recreate the temporary demo.
- Hosted Preview does not try to recycle its browser after close, expiry, or failure. Rover destroys that browser before the shared pool can hand capacity back to the next request.
- Try on Other Sites starts in Workspace, then uses Helper / Console / Bookmarklet on arbitrary sites.
- Production install is the Workspace snippet on your real site, not the same thing as generic testing on other sites.
- Installed-site deep links like
?rover=remain the real site-owned/browser-first path. Hosted Preview stays separate from that billing and site-key context even if the target site is already installed. - Live Test now shows Rover's hosted browser directly on the page for Hosted Preview.
Open hosted shellis the full-screen version of that same temporary cloud-browser fallback. - Bookmarklet is a drag-only control in Rover's UI. Drag it from Live Test into your bookmarks bar, then click it on the target site.
Troubleshooting
This API key is missing capability: roverEmbedThe selected Workspace key is not embed-ready. Go back to Workspace and create or rotate an embed-enabled site key, then copy the fresh test config JSON again.Open hosted shelldoes nothing Hosted Preview should show Rover's hosted browser inline in Live Test and also open the dedicated hosted viewer route in a new tab. If neither works, recreate the temporary demo and try again.- The hosted browser opens but Rover never appears inside the page Hosted Preview should inject the same short-lived preview bootstrap into the hosted page and re-inject it after top-level navigations. If the browser opens but Rover never boots, recreate the demo after deploying the latest backend and web-agent changes.
- Hosted Preview keeps polling
/vnc/sessionsand the viewer stays blank Hosted Preview should provision a dedicated Rover-managed browser session first, then run Rover on that same browser. If you only see repeated session polling with a blank viewer, the hosted-browser session never became viewer-ready; recreate the demo after deploying the latest
Related Skills
node-connect
345.4kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
104.6kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
Writing Hookify Rules
104.6kThis skill should be used when the user asks to "create a hookify rule", "write a hook rule", "configure hookify", "add a hookify rule", or needs guidance on hookify rule syntax and patterns.
review-duplication
100.0kUse this skill during code reviews to proactively investigate the codebase for duplicated functionality, reinvented wheels, or failure to reuse existing project best practices and shared utilities.
