提交

提交图

103 次代码提交

作者 SHA1 备注 提交日期
Magnus Müller 16a57140b9 Update install.md
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
2026-04-18 17:44:40 -07:00
Magnus Müller b926bf24a2 Update install.md
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
2026-04-18 17:44:22 -07:00
MagMueller 34f739d81e install: error-driven decision tree, drop unconditional chrome://inspect
The previous bootstrap implied that every attach failure (and any
not-running-Chrome case) needed a chrome://inspect navigation. In
practice the remote-debugging checkbox is per-profile sticky in Chrome,
so for any profile that has ever had it toggled on, just launching
Chrome and polling is enough — chrome://inspect is only needed the
first time per profile, when DevToolsActivePort is genuinely missing.

Restructure step 3 of install.md as an explicit error-keyed decision
tree (no Chrome process / DevToolsActivePort missing / port not live
yet / stale websocket) and add a matching gotcha to SKILL.md. Also fix
a stale `uv run bh` snippet in SKILL.md — the entrypoint is
`browser-harness`.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 17:41:51 -07:00
Saurav Panda 76a69b1e97 Merge pull request #71 from browser-use/readme-contributing-section
readme: add contributing section inviting domain-skill PRs
2026-04-18 16:57:00 -07:00
Saurav Panda dd17af004d readme: add contributing section inviting domain-skill PRs 2026-04-18 16:54:05 -07:00
Saurav Panda 99b3037fa8 Merge pull request #47 from browser-use/feat/domain-skills-batch3
Add domain skills: ArXiv, Craigslist, Stack Overflow, npm/PyPI, Zillow
2026-04-18 16:40:52 -07:00
Magnus Müller 4a7f7633f1 fix tab indicator: re-enable Page + mark on session switch (#70)
The merged tab indicator only marked on Page.loadEventFired,
but Page events weren't enabled for new sessions created by
switch_tab(). Added Page.enable + immediate mark in set_session
handler so the 🟢 appears on every tab switch and survives
goto() navigation.

6/6 tests pass: new_tab, switch_tab, goto, click link,
cmd+click, switch back.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-18 16:17:15 -07:00
Saurav Panda 48773aa9f4 Merge pull request #49 from browser-use/feat/domain-skills-batch4
Add domain skills: Booking.com, Eventbrite, Etsy, eBay, CoinGecko
2026-04-18 16:12:32 -07:00
Magnus Müller d07b2c84e5 Add green dot indicator for agent-controlled tab (#69)
* try WS handshake once, not 12 times

Each retry created a new CDPClient which opened a new WebSocket
connection, triggering Chrome's "Allow debugging" dialog again.
12 retries = 12 stacked popups the user has to dismiss.

Now tries once. If it fails, tells the user to click Allow and
retry — no popup spam.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* add tab title indicator for agent-controlled tab

Prepends 🟢 to the page title on switch_tab() so the user can
see which tab the agent controls. Unmarks the previous tab first
so only one tab is marked at a time.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-18 15:40:10 -07:00
Prabir Shrestha 4e562620be Add Microsoft Edge support (#63)
* Add Microsoft Edge support

Edge is Chromium, so the daemon's CDP bootstrap works unchanged once it
knows where Edge's DevToolsActivePort lives. This adds the macOS, Linux,
and Windows Edge profile paths to the discovery list, plus a one-line
note in install.md clarifying that `chrome://inspect/#remote-debugging`
and the rest of the setup flow apply to Edge too.

* Edge Beta/Dev/Canary, drop Edge from main README

Cover the non-stable Edge channels on macOS, Linux, and Windows so
users on insider builds don't fall through to 'DevToolsActivePort not
found'. Edge SxS (Side-by-Side) is Canary's install dir on Windows.

Keep README's Chrome-only pitch; Edge stays documented in install.md
where setup details belong.

* install.md: move Edge note to bottom, one line

Top-of-section carve-out distracts from the Chrome bootstrap steps.
A one-liner in the cold-start reminders is enough for users who need it.

---------

Co-authored-by: MagMueller <mamagnus00@gmail.com>
2026-04-18 15:37:43 -07:00
Gregor Žunič bfdd7d76b3 Create LICENSE (#68) 2026-04-18 15:25:45 -07:00
Magnus Müller 65015e57fa try WS handshake once, not 12 times (#67)
Each retry created a new CDPClient which opened a new WebSocket
connection, triggering Chrome's "Allow debugging" dialog again.
12 retries = 12 stacked popups the user has to dismiss.

Now tries once. If it fails, tells the user to click Allow and
retry — no popup spam.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-18 15:20:46 -07:00
Magnus Müller 6a6081538a add 5s timeout on domain enable calls, add nuclear recovery gotcha (#66)
daemon.py: Page/DOM/Runtime/Network.enable calls now have a 5s
timeout. Previously they could hang indefinitely on heavy pages
(TikTok FYP), preventing the daemon from reaching its socket
listener.

SKILL.md: added one gotcha for when restart_daemon() itself hangs
(kill Chrome entirely and reconnect).

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-18 15:06:33 -07:00
Magnus Müller 5d06079d7f page_info: surface pending native dialog (#65)
Agents rarely know to check for open alert/confirm/prompt/beforeunload
dialogs — they freeze the JS thread, so page_info()'s Runtime.evaluate
returns a stale or misleading viewport dict while the page is blocked.

Track the latest unhandled Page.javascriptDialogOpening in the daemon
(cleared on Page.javascriptDialogClosed) and, when one is open, return
{dialog: {type, message, ...}} from page_info() instead of the usual
viewport dict. The dialogs skill now points agents at this signal.
2026-04-18 14:58:18 -07:00
Magnus Müller 7b5357190e Update section title from 'Remote browsers' to 'Free remote browsers' (#64) 2026-04-18 14:50:00 -07:00
Saurav Panda 67228da9a8 Merge pull request #50 from browser-use/feat/domain-skills-batch5
Add domain skills: SEC EDGAR, Coursera, Goodreads, DuckDuckGo, TrustPilot
2026-04-18 13:35:13 -07:00
Saurav Panda 3acddb982f Merge pull request #55 from browser-use/feat/domain-skills-batch10
Add domain skills: Wellfound, G2, Capterra, TradingView, Macrotrends
2026-04-18 13:34:57 -07:00
Saurav Panda 5adbd27a34 Merge pull request #62 from browser-use/readme-free-remote-browser
readme: promote free remote browser tier
2026-04-18 12:00:08 -07:00
Saurav Panda e8454571c2 readme: promote free remote browser tier
Call out the free tier (3 concurrent browsers, no card) in the Remote
browsers section so users know they can try it without setup friction.
2026-04-18 11:59:15 -07:00
Magnus Müller f014990f84 SKILL.md: reframe post-task ritual as "Always contribute back" (#61)
* Reframe post-task ritual as the default "contribute back" procedure

Renames the section to "Always contribute back" and turns the guidance
into an imperative default. Adds concrete examples of what's worth a PR
(private APIs, framework quirks, stable selectors, URL patterns, waits,
traps), a schema for what a domain skill should capture (the durable
shape of the site, not the run narration), and an explicit do-not-write
list — most importantly banning raw pixel coordinates.

Narrows the scope to `domain-skills/` contributions only; no longer
nudges agents to update `interaction-skills/` or `helpers.py` as part
of this loop.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Replace "hesitate" with clearer cost framing

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 11:25:53 -07:00
Magnus Müller dd95b5c459 [codex] Clarify README code size section (#56)
* Clarify README code size section

* Rename README setup heading
2026-04-18 11:13:33 -07:00
Magnus Müller 23ce2ec464 Fix daemon attaching to invisible omnibox popup (#60)
* fix daemon attaching to invisible omnibox popup on fresh Chrome

When Chrome opens fresh, the only page targets are chrome://
internal pages and the omnibox popup (1px invisible viewport).
The daemon's attach_first_page() fell back to the popup, making
all subsequent work invisible to the user.

Fix: when no real pages exist, create an about:blank tab via
Target.createTarget instead of attaching to the omnibox popup.

Tested configurations:
- Fresh start with no real tabs → creates about:blank (1112x817)
- Navigate without AppleScript → works, tab visible
- Recovery from stale socket → auto-reconnects
- Chrome restart from scratch → creates about:blank

Also adds interaction-skills/connection.md documenting the
omnibox popup problem and startup sequence.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* add connection skill reference to main SKILL.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-18 11:07:43 -07:00
Gregor Žunič f713331aee readme: remove extra spacing (#59) 2026-04-18 10:56:38 -07:00
Gregor Žunič 026666d4cd better readme (#58) 2026-04-18 10:55:33 -07:00
sauravpanda 993323457d Add browser-harness validated domain skills for batch 10
Wellfound (DataDome + Cloudflare dual stack; browser CDP resolves silently; Rails not Next.js),
G2 (DataDome blocks all http_get; browser CDP; schema.org microdata stable; data.g2.com API needs vendor key),
Capterra (ClaudeBot UA returns Markdown not HTML; Chrome UA gets Cloudflare 403),
TradingView (scanner.tradingview.com POST open; symbol-search needs Origin header; data.tradingview.com dead),
Macrotrends (iframe PHP endpoints bypass main page; stock OHLCV direct; Referer required for economic API).
2026-04-18 05:18:38 -07:00
sauravpanda 33dcd86207 Add browser-harness validated domain skills for batch 9
CoinMarketCap (internal data-api/v3 fully open, no auth; 25 calls no rate limit),
Quora (full Chrome UA required; push() payloads double-encoded JSON; 3 SSR answers only),
Itch.io (http_get works; game cards via CSS selectors; RSS feeds exist),
Steam (appdetails single appid only; price in cents; ISteamApps/GetAppList dead in 2026),
HowLongToBeat (two-step token flow /api/find/init then POST; comp_* in seconds not hours).
2026-04-18 04:59:15 -07:00
sauravpanda cfa55ed15e Add browser-harness validated domain skills for batch 8
Letterboxd (http_get works on film pages; JSON-LD CDATA gotcha; API needs OAuth),
Gutenberg (Gutendex REST API; text via /cache/epub/; .opf is 404, use .rdf),
Metacritic (internal backend API key in HTML; Nuxt __NUXT_DATA__ not __NEXT_DATA__),
RAWG (API needs key; window.CLIENT_PARAMS in HTML has full game data without key),
OpenLibrary (full free API; missing cover = 43-byte GIF not 404; description dual type).
2026-04-18 04:46:39 -07:00
sauravpanda c2167e544e Add browser-harness validated domain skills for batch 7
Glassdoor (Cloudflare managed challenge; browser only; __NEXT_DATA__ + DOM fallbacks),
Medium (?format=json strips XSSI prefix; GraphQL /_/graphql no auth; RSS 10-item cap),
SoundCloud (oEmbed no-auth; __sc_hydration apiClient.id as client_id; API v2 with pagination),
Genius (OS token in UA bypasses 403; internal /api/songs no auth; strip first lyrics div header),
Dev.to (public REST API; burst limit 6 req then 429/1s; listings empty without auth).
2026-04-18 04:31:04 -07:00
sauravpanda f897a29d17 Add browser-harness validated domain skills for batch 6
Walmart (http_get works; bare Mozilla/5.0 UA bypasses PerimeterX; __NEXT_DATA__ via id= regex not type=),
Spotify (oEmbed no-auth; embed __NEXT_DATA__ has full trackList; anonymous token burns 22h Retry-After),
Weather (wttr.in format=j1; Open-Meteo current+hourly+daily; NWS two-call flow),
OpenStreetMap (Nominatim lat/lon are strings; Overpass bbox order differs from Nominatim; POST required),
Archive.org (Wayback availability API degraded; CDX sort=closest reliable; /search?output=json returns HTML).
2026-04-18 04:16:54 -07:00
sauravpanda 40291337ce Add Goodreads domain skill (http_get works; __NEXT_DATA__ Apollo state + JSON-LD) 2026-04-18 03:52:34 -07:00
sauravpanda a034cd0021 Add browser-harness validated domain skills for batch 5 (partial)
Coursera (public API no auth, q=search is POST-only/405 on GET),
DuckDuckGo (Instant Answer API, skip_disambig=1 essential, widget answers unusable),
SEC EDGAR (company UA required for www.sec.gov; 10 req/s; XBRL frames for cross-company),
TrustPilot (http_get works; __NEXT_DATA__ has reviews; 10-page cap per filter).
2026-04-18 03:50:39 -07:00
sauravpanda ac15bc0321 Add Booking.com domain skill (AWS WAF; sitemap + GraphQL schema + browser CDP) 2026-04-18 03:48:26 -07:00
sauravpanda 7feb67a8df Add browser-harness validated domain skills for batch 4 (partial)
Eventbrite (JSON-LD ItemList, __NEXT_DATA__ for detail; public API needs auth),
Etsy (DataDome blocks http_get; browser CDP + official API v3 with free key),
CoinGecko (free API, sleep 5s between calls; /coins/list for IDs not symbols),
eBay (http_get works until rate limit; JSON-LD Product schema on detail pages).
2026-04-18 03:46:25 -07:00
sauravpanda bbef605d50 Add browser-harness validated domain skills for batch 3
ArXiv (comma-separated id_list), Craigslist (cl-static-search-result),
Stack Overflow API (filter=withbody), npm/PyPI registries, Zillow
(NEXT_DATA extraction + Redfin fallback).
2026-04-18 03:36:56 -07:00
Saurav Panda 4d483839ff Merge pull request #46 from browser-use/feat/domain-skills-validated
Replace drafted skills with browser-harness validated versions
2026-04-18 01:23:52 -07:00
sauravpanda 4f05481d2a Replace drafted skills with browser-harness validated versions
Ran actual browser-harness sessions against each site and rewrote
the skill files from live test findings. Key corrections:

GitHub: wait(2) after wait_for_load() for React hydration; search API
  separate 10 req/min limit; search/code needs auth (401 unauthed)

HackerNews: athing also matches comment rows (use 'athing submission');
  job posts break naive score-zip; html.unescape() required for titles

Amazon: .zg-item-immersion gone from Best Sellers; #priceblock_ourprice
  returns null (legacy); review count selector collides with cross-sell
  widget — use [aria-label*='ratings'] instead

News: The Verge is Atom not RSS (namespace dict required); Reuters
  hard-blocks http_get with 403 even with User-Agent; BBC shows no
  consent banner from US IP; parallel fetch is 4.3x faster (0.16s vs 0.70s)

ProductHunt: goto() ERR_ABORTED — always use new_tab(); /posts/ URLs
  don't exist (it's /products/); homepage has 30 fixed items no lazy load;
  [data-test^='post-item-'] is the correct card selector
2026-04-18 01:22:30 -07:00
Magnus Müller 0f32cbdb55 Add more spacing between README sections (#44) 2026-04-18 00:32:48 -07:00
Saurav Panda d7eb4fa4ed Merge pull request #43 from browser-use/feat/domain-skills-batch1
Add domain skills: GitHub, HN, Product Hunt, Amazon, News, Job Boards
2026-04-18 00:27:09 -07:00
sauravpanda f0f70e7362 Add domain skills for 6 public, no-login-required sites
- github/scraping.md: GitHub API + trending page patterns, rate limiting
- hackernews/scraping.md: http_get + Algolia API for search/filtering
- producthunt/scraping.md: React SPA browser scraping + GraphQL token approach
- amazon/product-search.md: ASIN extraction, price parsing, CAPTCHA handling
- news-aggregation/multi-source.md: RSS-first approach, parallel fetch, consent banners
- job-boards/indeed-glassdoor.md: URL construction, job key extraction, salary normalization

All skills derived from real user task patterns. No credentials or sensitive data included.
2026-04-18 00:16:18 -07:00
Magnus Müller e953fa6556 [codex] Add domain skill name helper (#42)
* Add domain skill name helper

* Inline domain skill lookup in goto
2026-04-17 23:49:05 -07:00
Magnus Müller 0e12dc8f17 [codex] Refine domain skill guidance (#41)
* Refine domain skill guidance

* Drop unintended skill regressions
2026-04-17 23:27:35 -07:00
Magnus Müller 239a2a45ea [codex] Document domain-skill PR ritual (#39)
* Document domain-skill PR ritual

* Tighten domain-skill PR wording

* Expand shared domain-skill guidance
2026-04-17 23:19:18 -07:00
Magnus Müller a1c35ba384 Add thetechgeeks domain-skill for Ubiquiti AU pricing (#40)
Captures three learnings from a real run that mis-reported $3,080 AUD for
a UACC-Rack-12U-Wall (real AU street ~$420-630): Tech Geeks is Shopify so
use /products/<handle>.js for canonical price and SKU; its .js `available`
flag is unreliable so cross-check the DOM for sold-out markers; and
sold-out pages there carry stale/junk prices that must never enter a
final table without a second-source sanity check.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 23:17:52 -07:00
Magnus Müller ffc0aceaba Emphasize screenshots for verification and exploration (#38) 2026-04-17 23:09:23 -07:00
Magnus Müller bfc07d37e8 Trim JS-heavy guidance from SKILL (#37) 2026-04-17 22:59:35 -07:00
Magnus Müller f87fdde0af Remove default ensure_real_tab from docs (#36) 2026-04-17 22:46:33 -07:00
Magnus Müller becec42ca4 [codex] Rename CLI to browser-harness run (#35)
* Rename CLI to browser-harness run

* Simplify browser-harness CLI
2026-04-17 22:33:05 -07:00
Magnus Müller c9910d426d Top-load browser harness usage guidance (#33)
* Top-load browser harness usage guidance

* Refine skill fast-start copy
2026-04-17 22:26:46 -07:00
Gregor Žunič e48235b32c Print usage hint when bh is run on a TTY (#34)
A bare `bh` invocation blocks forever on sys.stdin.read(). Detect a TTY
stdin and exit with a one-line usage hint instead, so the failure mode
is obvious.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 22:20:40 -07:00
Magnus Müller 6adacbf94b Tighten install durability and restart guidance (#32) 2026-04-17 22:04:58 -07:00