← All articles

Human Takeover for Browser Agents: Browser Use, Playwright and Computer Use Compared

TL;DR

All three stacks can hand over to a person; what differs is where the session lives. Browser Use and Playwright drive a browser you control, so a person can take that exact browser through a live view. A screen-driving model works on a whole desktop, so the takeover is the desktop. In every case the pattern is the same: detect the wall, ask once with the page attached, let the person act on the live session, resume from the same state, and keep the fix as a skill.

A browser agent hits a wall it cannot pass, a login, a consent dialog, a two-factor prompt, a moved button, and the only good answer is a person on the same session, not a retry loop. The mechanics depend on the stack: with Browser Use or Playwright the person takes over the browser the agent is already driving; with a screen-driving model the person takes over the desktop. The pattern is identical, and the second time the wall appears nobody should be involved.

What "the same session" buys you

If the person logs in on their own laptop, the agent's browser still has no session. If the person solves the dialog in a fresh tab, the agent's tab is still blocked. Takeover has to happen on the agent's own browser or desktop, with the agent paused, and hand back exactly that state. Anything else is a screenshot with advice.

Browser Use

Browser Use runs the agent loop around a browser it launches. Wrap the step: when the page looks like a wall, request a fix with the URL and the task, wait, then let the loop continue. The person acts on the live browser through the fix link; the agent's context is untouched.

from doubleoh import DoubleOh
oo = DoubleOh()

async def step_with_takeover(agent, task):
    page = await agent.browser.get_current_page()
    if hint := oo.skills_for(task, url=page.url):
        return await agent.run(task=f"{task}\nFollow this procedure:\n{hint[0].instructions}")
    result = await agent.run(task=task)
    if is_wall(page):                       # login form, consent dialog, 2FA prompt
        fix = oo.request_fix(url=page.url, task=task)
        wait_for(fix)                       # a person acts on this same browser
        return await agent.run(task=task)
    return result

Playwright

With plain Playwright you own the page object, so the check is a selector or a URL test rather than a model's opinion. Run the browser where a person can be given a live view, or run the DoubleOh runtime next to it; the fix link opens that browser for the person.

import { DoubleOh } from "@doubleoh/sdk";
const oo = new DoubleOh({ apiKey: process.env.DOUBLEOH_API_KEY });

async function withTakeover(page, task, act) {
  const known = await oo.skillsFor(task, { url: page.url() });
  if (known.length) return act(known[0]);
  try {
    return await act();
  } catch (error) {
    if (!(await looksLikeWall(page))) throw error;
    const fix = await oo.requestFix({ url: page.url(), task });
    await fix.wait();                    // the person signs in, dismisses, approves
    return act();
  }
}

Screen-driving models (Computer Use and similar)

Here the agent does not hold a page object; it holds a screen. Takeover means a person drives that desktop for a minute. The DoubleOh runtime runs natively on Linux, macOS or Windows, the fix link shows the live desktop, and the person's actions are recorded as steps without their typed text. This is also how internal desktop applications, an ERP client or a legacy tool, get the same treatment as web pages.

What is the same across all three

StepRule
DetectRead the URL and the DOM or screen, not the model's transcript.
Ask onceOne request with the page attached. Retrying a login five times locks the account.
Act on the live sessionNever on a separate browser or a screenshot.
Resume from the same stateThe agent continues with the session the person left.
Keep the fixIt compiles into a skill with a boundary; the next agent is answered from it.

Questions people ask

Can a person take over a Browser Use agent mid-run?

Yes, if the browser is one a person can be given a live view of. The agent pauses at the wall, the person acts on that browser, and the loop continues with the same context.

Does this work with headless Playwright?

The browser must be viewable for a takeover. Run it headed in a sandbox with a live view, or run the DoubleOh runtime, which hosts the browser and provides the view.

How is Computer Use different for takeover?

There is no page object, only a screen, so the person takes over the desktop rather than a tab. The DoubleOh runtime does this natively on Linux, macOS and Windows.

Does the human's password end up in the skill?

No. Typed text is never recorded. The skill keeps the steps around the secret and states that the credential step requires a human.

DoubleOh is the authority layer for AI agents. When one gets stuck, a person fixes it once in a live browser, and the fix becomes a skill the whole fleet follows from then on.

Start free