vercel-labs/agent-browser · error
renders recording not active - run `react renders start` fir
Error message
renders recording not active - run `react renders start` first
What it means
RENDERS_STOP reads window.__AB_RENDERS_ACTIVE__, which only 'react renders start' sets on that document (and which stop itself deletes). The error means no recording is live: either start was never called, or the page navigated/reloaded since start and the window globals were wiped.
Source
Thrown at cli/src/native/react/scripts.rs:390
const ch = getChanges(fiber);
for (const c of ch) {
if (data[name].changes.length < 50) data[name].changes.push(c);
}
}
}
}
}
walkFiber(fiber.child);
walkFiber(fiber.sibling);
}
})()
"#;
/// Stop script for fiber profiler. Returns the collected profile as JSON.
pub const RENDERS_STOP: &str = r#"
(() => {
const active = window.__AB_RENDERS_ACTIVE__;
if (!active) throw new Error("renders recording not active - run `react renders start` first");
const data = window.__AB_RENDERS__;
const startTime = window.__AB_RENDERS_START__;
const elapsed = performance.now() - startTime;
const fpsData = window.__AB_RENDERS_FPS__;
let fpsStats = { avg: 0, min: 0, max: 0, drops: 0 };
if (fpsData) {
cancelAnimationFrame(fpsData.rafId);
if (fpsData.frames.length > 0) {
const fpsSamples = fpsData.frames.map((dt) => (dt > 0 ? 1000 / dt : 0));
const sum = fpsSamples.reduce((a, b) => a + b, 0);
fpsStats = {
avg: Math.round(sum / fpsSamples.length),
min: Math.round(Math.min(...fpsSamples)),
max: Math.round(Math.max(...fpsSamples)),
drops: fpsSamples.filter((f) => f < 30).length,
};View on GitHub (pinned to 548b159b30)
Solutions
- Run 'agent-browser react renders start' first, exercise the page, then 'react renders stop'
- If the page reloaded mid-recording, re-run start on the new document and reproduce the interaction again
- Guard double-stop flows by checking the flag (see validation) or tracking state in your own code
Example fix
# before agent-browser react renders stop # not active # after agent-browser react renders start # ... interact with the page ... agent-browser react renders stop
Defensive patterns
Strategy: validation
Validate before calling
agent-browser eval "window.__AB_RENDERS_ACTIVE__ === true" # run before 'react renders stop'
Type guard
function rendersActive(win: Window): boolean {
return (win as any).__AB_RENDERS_ACTIVE__ === true;
} Prevention
- Always pair start/stop in the same automation block
- Track 'started' state in your own code so you never double-stop
- Avoid full page navigations while a renders recording is live — they wipe the recording globals
When it happens
Trigger: Running 'react renders stop' before any 'react renders start'; navigating (or the app triggering a full reload) between start and stop; calling stop twice — the second call fails because the first already deleted the flag.
Common situations: Agent workflows that assume recording persists across navigation; SPA full-page redirects; retrying a stop after a timeout when the first stop actually succeeded.
Related errors
- React DevTools hook not installed - relaunch with --enable r
- No React renderer attached - the page has not booted React y
- No React renderer attached
- inspect failed: ${result && result.type}
- agent-browser ${args[0] ?? ""} failed: ${envelope.error ?? "
AI-assisted analysis of vercel-labs/agent-browser@548b159b30 (2026-08-16).
Data as JSON: /api/errors/e606e62b8d073716.
Report an issue: GitHub.