leeguooooo 007fd1b27f fix(refs): verify identity before using cached backendNodeId
Closes the "click @e20 hits the sibling element" bug. Real-world
example: snapshot shows @e20=[button "Add post"] next to
@e17=[button "Post all"]. By the time you click @e20, React has
re-rendered — and React often re-uses the same <button> DOM node
across renders, just updating its accessible name. The cached
backendNodeId still resolves to a real, well-positioned node, so
the click lands cleanly. It just lands on what is now the "Post all"
button, silently submitting the entire thread instead of adding a
draft row.

Before every ref-based interaction (click / fill / type / hover /
select / drag — anything routing through resolve_element_center or
resolve_element_object_id), call Accessibility.getPartialAXTree for
the cached backendNodeId and check role + name still match the
snapshot entry. On mismatch, abort with an error that names both
labels:

  Ref @e20 no longer matches its snapshot. Was [button "Add post"],
  now [button "Post all"].
  ...Take a fresh snapshot, then re-target.

If the node is gone (CDP fails / no AX node), we silently fall
through to the existing "find by role+name" recovery path, so this
guard never makes a working flow worse.

Adds one CDP roundtrip per ref interaction (~5–20ms). Disable with
AGENT_BROWSER_VERIFY_REF=0 if you control the page lifecycle and
need the latency back.
2026-05-09 03:26:20 +09:00
2026-01-10 13:08:22 -06:00
2026-01-10 23:40:54 -06:00

agent-browser-stealth

Stealth fork of agent-browser — connects to your real Chrome, shares your login sessions, and is undetectable by anti-bot systems.

For basic usage, commands, and API reference, see the upstream documentation.

Why this fork?

agent-browser launches a fresh browser with an empty profile. You need to log in again, and websites can detect it's automated.

agent-browser-stealth connects to your existing Chrome. Your cookies, sessions, and browser fingerprint are all real — because it IS your real browser.

agent-browser agent-browser-stealth
Browser Launches new Chrome Connects to your Chrome
Login state Empty, need to re-login Your existing sessions
Fingerprint Automation markers present Your real fingerprint
User collaboration Separate window Same window, take over anytime
CAPTCHA Agent stuck You solve it, agent continues

Install

npm install -g agent-browser-stealth

Install the AI agent skills

The repo ships SKILL.md files for Claude Code, Cursor, etc. Pull them into the current project with skills.sh:

npx skills add leeguooooo/agent-browser-stealth

This drops skills/agent-browser (and the specialized skill-data/{core,electron,slack,dogfood,agentcore,vercel-sandbox}) into your project so your AI agent gets the right usage patterns and pre-approved bash permissions for agent-browser, agent-browser-stealth, and abs.

Setup (one time)

Enable Chrome DevTools Protocol in your Chrome:

  1. Open chrome://inspect/#remote-debugging in Chrome
  2. Toggle the switch on

That's it. This setting persists across Chrome restarts.

Usage

# Connect to your Chrome and navigate
agent-browser open https://example.com

# Everything works through your logged-in browser
agent-browser click "Post"
agent-browser fill "Title" "Hello World"
agent-browser screenshot ./page.png

The agent operates in your Chrome — you'll see tabs opening, pages loading, clicks happening in real time. You can take over at any point (e.g. solve a CAPTCHA), then let the agent continue.

Standalone mode

If you need a separate browser (CI, testing, etc.):

agent-browser --launch open https://example.com

In CI environments, standalone mode is used automatically.

Anti-detection

When connected to your real Chrome, we inject zero JavaScript patches. Your browser's fingerprint is completely genuine.

The only thing we do is call Emulation.setAutomationOverride via CDP to set navigator.webdriver = false at the native Chrome level — undetectable by lie-detection systems like CreepJS.

Test results (connected to real Chrome):

Test site Result
CreepJS 0% stealth, 0% headless
bot.sannysoft.com All green
Cloudflare Turnstile Passed

When using --launch mode (standalone browser), a full suite of 32 stealth patches is applied for headless Chrome.

Differences from upstream

Based on agent-browser v0.27.0. Changes:

  • Auto-connect is defaultagent-browser open <url> connects to your Chrome instead of launching a new one
  • CDP-native stealthEmulation.setAutomationOverride instead of JS patches
  • Dual stealth mode — zero patches for real Chrome, full patches for --launch mode
  • --launch / --new flag — explicitly start a standalone browser
  • CI auto-detection — standalone mode when CI env var is set

All upstream features (commands, snapshots, screenshots, recordings, tabs, sessions, etc.) work the same. See the upstream repo for full documentation.

License

Apache-2.0 (same as upstream)

S
Description
chrome-use — fast browser automation CLI for AI agents (mirror from github.com/leeguooooo/chrome-use)
Readme
29 MiB
Languages
Rust 89.6%
JavaScript 8%
HTML 1.2%
Shell 1.1%
CSS 0.1%