提交

提交图

272 次代码提交

作者 SHA1 备注 提交日期
Alezander9 a2443d1d51 docs: standardize harness docs against canonical browser connection reference
Cross-checked AGENTS.md, README.md, SKILL.md, install.md, and profile-sync.md for accuracy. Tightened the sync_local_profile docstring and the chrome://inspect stderr message to match. Cloud-bootstrap test updated to set BU_AUTOSPAWN. All unit tests pass.
2026-05-02 18:02:36 -07:00
Alezander9 6ca4c49bcf remove old --setup flag now that install.md is the source of truth 2026-05-02 16:57:17 -07:00
Alezander9 2a1939da4f Full proofread of install.md, fix small formatting issues 2026-05-02 16:51:45 -07:00
Alezander9 007301b7a9 Update setup guide to be clear, precise and accurate 2026-05-02 16:37:52 -07:00
Alezander9 1c77fc2a0a remove information now redundant with new connection info block 2026-05-02 15:46:16 -07:00
Alezander9 ed86e2f4c7 add canonical browser connection notes to install.mc 2026-05-02 15:41:47 -07:00
Saurav Panda 56eb057456 Merge pull request #259 from zhanning68-stack/domain-skills/cn-hotels
domain-skills: add ly.com, ctrip, wehotel (Chinese hotel sites)
2026-05-02 12:20:09 -07:00
Saurav Panda 318e3f01cc address cubic feedback on cn-hotels skills
- ly-com: read Vue ref via stable .value with _rawValue fallback
  rather than the brittle internal _rawValue path.
- wehotel: ancestor walk now identifies the hotel-name anchor by
  identity/innerText instead of an href-based negation against text
  (查看详情 lives on the link body, not in href), which previously
  let the loop stop on the detail anchor itself.
- ctrip: raise an explicit error when the destination input or 搜索
  button isn't found, instead of dereferencing None and crashing
  with a confusing TypeError.
2026-05-02 12:03:44 -07:00
Saurav Panda 059407785c Merge pull request #267 from jamster/domain-skills/claude-ai-share-export
domain-skills: add claude-ai/share-export
2026-05-02 12:01:25 -07:00
Saurav Panda 9ce945026d fix utf-8 encoding and document source_url in json schema
- write_text calls now pin encoding="utf-8" so non-ASCII transcripts
  don't depend on the locale default.
- share-export.md schema now lists source_url, matching what the script
  actually emits.
2026-05-02 11:40:04 -07:00
Saurav Panda 756fa93a5c Merge pull request #268 from vedantggwp/domain-skills/articulate-rise-code-blocks
domain-skills: articulate-rise — code blocks
2026-05-02 11:36:21 -07:00
Saurav Panda 2b88cf40cb move articulate-rise skill under agent-workspace/domain-skills/
Match the canonical location used by all other domain-skills.
2026-05-02 11:32:13 -07:00
MAX0MAX d7986fdb97 domain-skills: add bilibili navigation and structure skill (#270)
* domain-skills: add bilibili navigation and structure skill

Covers site architecture, URL patterns, content channels, video
interaction features (三连/投币/弹幕), and navigation quirks for
the Chinese video platform.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* domain-skills: fix PR review — correct history URL and ranking tab count

- Fix history URL from bilibili.com/history to https://www.bilibili.com/account/history
- Remove incorrect "also contains 稍后再看 tab" note (watch later is a separate SPA)
- Fix ranking category tab count from 23 to 24

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-02 11:30:19 -07:00
MAX0MAX de55c38e90 domain-skills: add BOSS直聘 (zhipin.com) navigation, job search, and chat skills (#271)
* domain-skills: add BOSS直聘 (zhipin.com) navigation and job search skills

Verified content only — navigation structure and job card extraction
confirmed via browser CDP.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* domain-skills: verify zhipin job search with API-first approach

Browser-verified: the /wapi/zpgeek/pc/recommend/job/list.json API
returns real salary numbers ("18-22K") unlike the DOM which uses
font-encoded PUA characters. Added full API reference for job list,
job detail, and filter conditions endpoints.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* domain-skills: verify zhipin chat with WebSocket + REST API

Browser-verified: conversation list loads via WebSocket (ws6.zhipin.com),
message history via /wapi/zpchat/geek/historyMsg API. Documented message
body types (text=1, job card=8, system=16), DOM selectors, pagination,
and bossId extraction.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* domain-skills: add zhipin chat filter tabs with clickable UI control

Browser-verified: 全部/未读/新招呼/更多/有交换/有面试/不感兴趣/AI筛选
filters with click_filter() and click_more_filter() functions.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* domain-skills: browser-verify job-search.md and fix API field names

Verified all functions against live zhipin.com. Fixed brandInfo→brandComInfo
with correct sub-fields (brandName/logo/industryName), corrected city codes
(101280100=Guangzhou not Shenzhen), documented page-based pagination as
unreliable, added encryptExpectId default params, and noted anti-bot timing.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* domain-skills: fix PR review — add API response validation, narrow bossId extraction, clarify city slug

- Guard all d.zpData accesses with d.code !== 0 checks across job-search.md and chat.md
- Filter bossId extraction to /wapi/zpchat/geek/historyMsg URLs only
- Correct "Chinese" to "pinyin" for city slug and add API code cross-reference

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-02 11:28:54 -07:00
Larsen Cundrič f10856b920 Merge pull request #277 from browser-use/fix/respect-bu-cdp-ws
fix(run): make cloud auto-bootstrap opt-in via BU_AUTOSPAWN
2026-05-02 11:28:39 -07:00
Larsen Cundric 4e8d42a720 fix(run): make cloud auto-bootstrap opt-in via BU_AUTOSPAWN
#266 made `browser-harness -c '...'` auto-provision a Browser Use cloud browser
whenever BROWSER_USE_API_KEY was set and no local Chrome / daemon was alive.
That gating signal is too broad — the API key is commonly set for unrelated
reasons (profile sync, cloud API calls, parent agents managing their own
session), so users with the key in env quietly got a *new* (billed) browser
spawned every time they ran a script.

Make auto-bootstrap opt-in via BU_AUTOSPAWN. Setting it alongside
BROWSER_USE_API_KEY restores #266's behaviour for fresh headless boxes;
anyone else is unaffected.

Refs #181, #183, #266.
2026-05-02 18:27:09 +00:00
Alexander Yue 43da6234da Merge pull request #276 from browser-use/feat/win-ipc-ping-token
harden Windows IPC: ping handshake, token auth, atomic port file
2026-05-01 21:23:20 -07:00
Alexander Yue adeccb4297 Merge pull request #275 from browser-use/docs/domain-skills-readme-section
docs: add concise Domain skills section to README
2026-05-01 21:11:24 -07:00
Alezander9 63b876cad3 harden Windows IPC: ping handshake, token auth, atomic port file
Three improvements to the cross-platform IPC layer, lifted from #104:

- meta:'ping' handshake replaces bare TCP connect in daemon_alive() and already_running(). A connect-only check on Windows can succeed against an unrelated process that grabbed our ephemeral port after a daemon crash; the ping/pong response confirms the listener is actually our daemon.

- Per-daemon random token (secrets.token_hex(32)) gates every request on Windows. AF_UNIX + chmod 600 is the boundary on POSIX, but TCP loopback has no chmod-equivalent; without a token any local process could connect and issue CDP commands.

- Atomic .port write (write .port.tmp, os.replace) so a concurrent reader never sees a half-written file.

Adds rohitdutt108 to VOUCHED.td.

Co-authored-by: Rohit Dutt <rohit.dutt@iyc.ishafoundation.org>
2026-05-01 20:57:46 -07:00
Alezander9 9b6bf51f81 docs: add concise Domain skills section to README 2026-05-01 20:53:59 -07:00
Alexander Yue 9e00ffff9a Merge pull request #274 from browser-use/feat/opt-in-domain-skills
Gate domain skills behind BH_DOMAIN_SKILLS env (default off)
2026-05-01 20:51:05 -07:00
Alezander9 84da63313d Soften skill-toggle wording; drop redundant =0 test 2026-05-01 20:44:14 -07:00
Alezander9 7e9a7db8c5 feat: gate domain skills behind BH_DOMAIN_SKILLS env (default off)
Domain skills auto-injected by goto_url() are community-contributed and quality varies; defaulting them off avoids polluting the average run while preserving the contribution loop. Set BH_DOMAIN_SKILLS=1 to opt in.
2026-05-01 20:34:01 -07:00
Alexander Yue ed0c2cdd7c Merge pull request #273 from browser-use/docs/add-vouched
docs: add VOUCHED.td (vouch list)
2026-05-01 11:50:23 -07:00
Alezander9 fcd9fbae12 add VOUCHED.td seeded with two recent contributors 2026-05-01 11:46:16 -07:00
Alexander Yue ff5eea44fc Merge pull request #272 from browser-use/docs/issue-templates
docs: add issue templates; route questions to Discussions
2026-05-01 11:42:45 -07:00
Alezander9 24fc314065 add issue templates and route questions to Discussions
bug-report.yml: 4 required fields plus a 4-box preflight (searched issues, ran --doctor, read install.md, this is a bug not a question/FR/cloud issue). feature-request.yml: 3 required fields plus a 2-box preflight. config.yml disables blank issues and links to Discussions Q&A and install.md.
2026-05-01 11:38:27 -07:00
Alexander Yue faac614bc1 Merge pull request #269 from browser-use/docs/add-agents-md
docs: add AGENTS.md
2026-05-01 11:36:06 -07:00
Alezander9 b124b56c42 list agent-workspace contents; clarify SKILL.md scope 2026-04-30 16:16:29 -07:00
Alezander9 f3a011b988 docs: add AGENTS.md with repo orientation for coding agents 2026-04-30 16:13:51 -07:00
Alexander Yue 013097aaa7 Merge pull request #265 from molesza/fix/chrome147-default-profile-cdp-fallback
fix(daemon): fall back to DevToolsActivePort ws path when /json/version 404s
2026-04-30 16:13:40 -07:00
Alezander9 fb2571ab8e inline 404 fallback; drop saw_http_404 flag
Same behavior matrix: HTTPError 404 with a ws_path returns the file's ws URL immediately; 404 without ws_path or any other error keeps polling until the 30s deadline. Removes the flag, the break, the post-loop check, and shrinks the explanatory comment.
2026-04-30 16:10:52 -07:00
vedantggwp c07efe3a17 domain-skills: articulate-rise — code blocks 2026-05-01 00:04:50 +01:00
Jason Amster 7740c2e42d domain-skills: add claude-ai/share-export
Captures durable selectors and gotchas for exporting transcripts from
claude.ai/share/<uuid> URLs:

- [data-testid=user-message] for user turns, .font-claude-response for
  assistant turns, [data-testid=page-header] for the chat title
- Container-walk pattern (no semantic wrapper — turns are alternating
  siblings of a common ancestor)
- The H2.sr-only "Claude responded:" trap that pollutes innerText if you
  select the outer turn div instead of .font-claude-response
- Auth requirement: share pages render the conversation only for
  signed-in viewers; logged-out sessions get an empty app shell

Includes a working extract-share-transcript.py that emits both JSON and
LLM-friendly Markdown ({Human|Assistant} headers).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-30 18:53:12 -04:00
Alexander Yue 9cddcc1f59 Merge pull request #266 from shaunandrewjackson1977/fix/headless-cloud-auto-bootstrap
fix: auto-bootstrap cloud daemon on headless servers when BROWSER_USE_API_KEY is set
2026-04-30 15:45:20 -07:00
Alezander9 49355ba7a8 probe /json/version instead of bare TCP; trim redundant gate tests
Cubic flagged that the original socket.create_connection probe matches any process on 9222/9223, not just Chrome. Mirror daemon.py's fallback by hitting /json/version, so a stale or unrelated listener does not skip the cloud bootstrap.

Drop the three boolean-table tests that mocked every collaborator and re-asserted the literal if-condition. Add a focused test for _local_chrome_listening that covers the false-positive case directly.
2026-04-30 15:34:35 -07:00
Shaun Jackson 79e1ce9ff6 fix: auto-bootstrap cloud daemon on headless servers when BROWSER_USE_API_KEY is set
On headless servers (VPS, Docker) with no local Chrome, ensure_daemon() fires
before any user script runs and raises immediately — start_remote_daemon() can
never be reached from within a -c script.

Add a pre-check in main(): if no daemon is alive, Chrome is not listening on
known debugging ports (9222/9223), and BROWSER_USE_API_KEY is set, auto-
provision a Browser Use cloud browser before falling through to ensure_daemon().

_local_chrome_listening() probes ports 9222/9223 with a 0.3s timeout rather
than relying on _is_local_chrome_mode(), which only checks for absence of
BU_CDP_WS and would incorrectly trigger cloud bootstrap on a local machine
where Chrome is running but BROWSER_USE_API_KEY is also set (e.g. for profile
sync).

Fixes the behaviour reported in issues #181 and #183.

Tested on a headless Hostinger VPS running hermes-agent in Docker — browser-
harness -c '...' now works without any manual daemon setup when BROWSER_USE_API_KEY
is set.
2026-04-30 22:27:18 +10:00
molesza 5dfa89fa66 fix(daemon): fall back to DevToolsActivePort ws path when /json/version 404s
Chrome 147+ silently disables /json/* HTTP discovery when remote debugging
runs on the default user-data-dir (IsUsingDefaultDataDirectory). The websocket
itself still works and DevToolsActivePort still holds the live ws path, but
get_ws_url() polls /json/version for 30s and dies with a misleading
"DevTools is not live yet" error.

PR #260 deliberately stopped trusting the path stored in DevToolsActivePort
because a stale port file (left behind after switching --user-data-dir on the
same port) had a dead UUID. That fix is correct, but it never falls back to
the file's UUID even when Chrome just wrote the file in the current run.

Read both port and ws path. Try /json/version first (preserves #260's
stale-UUID behavior). On HTTP 404 specifically — which is distinct from
connection-refused/timeout meaning "Chrome still starting" — fall back to
ws://127.0.0.1:{port}{ws_path} from the file. The file's UUID is fresh
because Chrome rewrites it on every launch, and the only persistent reason
/json/version 404s on a live port is the default-profile lockdown. If the WS
upgrade then 404s (true stale UUID), the existing CDP handshake error
surfaces unchanged.

Closes #264.
2026-04-30 12:55:10 +02:00
Alexander Yue d1209ab99c Merge pull request #261 from browser-use/fix/shopify-admin-skills-location
fix: move shopify-admin skills to agent-workspace/domain-skills/
2026-04-30 00:04:10 -07:00
alex e1eabc4584 fix: move shopify-admin skills to agent-workspace/domain-skills/
PR #247 added these under domain-skills/ at the repo root, but the
canonical location for domain skills is agent-workspace/domain-skills/
(referenced in README.md, SKILL.md, and helpers.py).
2026-04-29 23:39:22 -07:00
Alexander Yue 660827d7d4 Merge pull request #260 from Alezander9/fix/stale-devtools-active-port
fix(daemon): ignore stale DevToolsActivePort path; resolve WS via /json/version
2026-04-29 23:23:38 -07:00
Alezander9 9a87de27f4 fix(daemon): resolve WS via /json/version to avoid stale DevToolsActivePort path
Chrome leaves DevToolsActivePort behind across runs. If the user previously
launched Chrome with one --user-data-dir on a debug port, then later launches
Chrome with a different --user-data-dir on the same port, the file in the
first profile keeps a stale browser UUID. The TCP probe to that port
succeeds against the new Chrome, but the WS upgrade returns HTTP 404
because the cached UUID is dead -- daemon dies with
'CDP WS handshake failed: HTTP 404'.

Resolve the WS URL via /json/version on the port from DevToolsActivePort
instead of trusting the path stored alongside it. /json/version is
authoritative for whatever Chrome is currently bound to that port, so
stale paths no longer matter. The 9222/9223 fallback below already used
this approach -- now both paths agree.

Reproduced on Windows 11 with one Chrome running on port 9222 with a custom
--user-data-dir while a stale DevToolsActivePort sat in
~/AppData/Local/Google/Chrome/User Data from a prior debug session.
2026-04-29 23:21:38 -07:00
zhanning eb8b708f49 domain-skills: add ly.com, ctrip, wehotel (Chinese hotel sites)
Field-tested 2026-04-29. First batch covering Chinese hotel-booking sites:

- ly-com (同程旅行): hotels.md — prices gated behind login; Nuxt SSR
  state holds metadata. Documents the ¥? placeholder pattern, Nuxt data
  key randomization, login flow via passport.ly.com.
- ctrip (携程): hotels.md — anonymous price extraction works *only*
  with the canonical 6-param URL schema. Documents the schema gate,
  homepage-form fallback, phantom-¥ regex trap, no-href-on-cards
  reality.
- wehotel (锦江): hotels.md — fully anonymous; covers all Jin Jiang
  sub-brands (J酒店/锦江/维也纳/7天/IU etc). Documents the
  inconsistent checkinDate vs checkInDate capitalization between list
  and detail URLs.

All three include URL patterns, list/detail extraction JS, traps, and
quick-start snippets per the SKILL.md "durable site map" guidance.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-30 13:55:02 +08:00
Alexander Yue c8f09ebf67 Merge pull request #256 from browser-use/docs/install-profile-sync-c-flag
docs: replace remaining heredoc examples with -c flag
2026-04-29 13:59:50 -07:00
Alezander9 db41106662 docs: replace remaining heredoc examples with -c flag
PR #229 (src layout refactor) updated SKILL.md and run.py to the -c form
when the CLI dropped stdin support, but missed install.md (steps 2 and 7)
and interaction-skills/profile-sync.md. Sync them up.

Picks up the still-relevant hunks from #215 (closes #215, refs #213).

Co-authored-by: Andres Gonzalez <62394570+FVTVLIX@users.noreply.github.com>
2026-04-29 13:55:44 -07:00
Alexander Yue 7ce5ba7ca4 Merge pull request #255 from browser-use/docs/readme-operator-framing-rebase
docs: lead README with first-buyer job (rebased from #170)
2026-04-29 13:53:11 -07:00
Alexander Yue c95a512891 Merge pull request #254 from browser-use/fix/connection-status-error-on-cdp-failure
fix(daemon): report error on stale CDP in connection_status
2026-04-29 13:51:13 -07:00
Matt Van Horn 9e609f2674 docs: lead README with first-buyer job
Rebased from #170 (authored by @mvanhorn) onto current main.
The original branch was based on a stale README; only the two
intentional lines from that PR are reapplied here.
2026-04-29 13:51:12 -07:00
Alezander9 e52992ad80 fix(daemon): report cdp_disconnected on stale CDP probe in connection_status
When the browser dies but the daemon process keeps running, target_id and session stay cached on the Bridge. Pre-fix, connection_status swallowed the Target.getTargetInfo failure and returned the cached IDs with page=null, so admin counted the daemon as healthy. Now it returns {error: cdp_disconnected} and admin's existing error-check skips it. Also returns {error: not_attached} when target_id is unset.
2026-04-29 13:45:16 -07:00
FuLin 1c5a5681bb domain-skills: add Xiaohongshu scraping skill (web search, sorting, and note-opening) (#246)
* Add Xiaohongshu search and note-opening skill

* Clarify Xiaohongshu search URL encoding
2026-04-29 11:46:32 -07:00