提交

提交图

352 次代码提交

作者 SHA1 备注 提交日期
Magnus Müller 2c81cc99c5 [codex] Refresh remote debugging screenshot (#30)
* Trim README setup copy

* Refresh remote debugging screenshot
2026-04-17 21:55:58 -07:00
Magnus Müller 6fd06fbe80 Trim README setup copy (#29) 2026-04-17 21:53:35 -07:00
Magnus Müller 7d53eaaa9f Add remote debugging setup image (#28) 2026-04-17 21:50:30 -07:00
Magnus Müller 6a049ff9c3 Tighten install cold-start guidance (#27) 2026-04-17 21:50:30 -07:00
Magnus Müller 4543d42273 Document daemon reuse during setup (#26) 2026-04-17 21:40:15 -07:00
Magnus Müller acda8c72a0 Simplify helper surface (#23)
* Simplify helper surface

* Trim common module and restore dispatch key
2026-04-17 21:37:58 -07:00
Magnus Müller 56b89c0770 Clean up install bootstrap flow (#25) 2026-04-17 21:34:26 -07:00
Magnus Müller 0702b83759 Clarify Chrome remote debugging bootstrap (#22) 2026-04-17 21:12:50 -07:00
Magnus Müller 1a083d14df Compress README setup prompt (#21) 2026-04-17 21:00:40 -07:00
Magnus Müller 3193531a28 Split install and runtime docs (#20)
* Split install and runtime docs

* Refine install skill prompts
2026-04-17 20:57:29 -07:00
Gregor Žunič 29c4dfa8e7 changed name 2026-04-17 20:50:33 -07:00
Magnus Müller 16ddd3e630 Clarify Chrome profile setup flow (#18)
* Clarify Chrome profile setup flow

* Refine Chrome setup decision flow
2026-04-17 20:36:50 -07:00
Magnus Müller e7d43ddf37 Tighten README setup prompt (#19) 2026-04-17 19:39:50 -07:00
Magnus Müller 35ae22bdec [codex] Make setup work from anywhere (#17)
* Make setup work from anywhere

* Rename launcher to bh

* Remove extra helper commands

* Document global skill setup
2026-04-17 19:32:18 -07:00
Magnus Müller a412960746 add spacing between README sections (#16) 2026-04-17 18:23:35 -07:00
Magnus Müller feb7b66557 defer README setup to skill (#15) 2026-04-17 18:21:54 -07:00
Magnus Müller fc3be06d78 add global bu launcher and shared skill guidance (#14) 2026-04-17 18:21:50 -07:00
Magnus Müller c83d8b6e74 simplify skill setup flow (#12) 2026-04-17 18:07:29 -07:00
Magnus Müller 76cff3b573 update README tagline (#13) 2026-04-17 18:06:09 -07:00
Magnus Müller 7c68a107db Merge pull request #11 from browser-use/magnus/readme-how-it-works-lines
[codex] Clarify README title and how-it-works section
2026-04-17 18:01:28 -07:00
MagMueller b189d0dcf3 tighten README how-it-works bullets 2026-04-17 18:00:38 -07:00
MagMueller 532e2c4c7d tighten README line count wording 2026-04-17 18:00:13 -07:00
MagMueller 444ea762e7 clarify README how-it-works section 2026-04-17 17:59:10 -07:00
Magnus Müller ceaeaca8ef Merge pull request #10 from browser-use/magnus/rewrite-readme-for-humans
[codex] Rewrite README for human setup flow
2026-04-17 17:56:44 -07:00
MagMueller dc027a5180 reduce README to one example task 2026-04-17 17:56:32 -07:00
MagMueller 4383f7079c refine README setup and examples 2026-04-17 17:55:39 -07:00
MagMueller c20a7d0847 refine setup prompt in README 2026-04-17 17:53:12 -07:00
MagMueller bb40aba44f tighten README to prompt-first flow 2026-04-17 17:49:39 -07:00
MagMueller 94c8ab5aec expand README: setup prompt, features, line counts
- rename "example prompt" → "setup prompt"; coding agent handles clone,
  uv sync, opens chrome://inspect on macOS, walks user through the
  allow-debugging checkbox, verifies connection, navigates to the repo,
  then offers the first task (star the repo)
- setup prompt explicitly tells the agent to read SKILL.md end-to-end first
- add Features section: raw CDP + editable helpers, Browser Use cloud
  for parallel sub-agents (each gets its own live URL), iframe/shadow
  passthrough, http_get bulk fallback
- how-it-works now shows line counts (~580 total) to show how small it is

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 17:41:01 -07:00
MagMueller 751591eaa6 rewrite README for human setup flow 2026-04-17 17:30:15 -07:00
Magnus Müller 17bc2994e7 Merge pull request #9 from browser-use/magnus/remove-python-version-and-lock
[codex] Remove Python version and uv lock files
2026-04-17 17:23:30 -07:00
MagMueller 0753428783 remove python version and uv lock 2026-04-17 17:22:45 -07:00
Magnus Müller def7ab83be Merge pull request #8 from browser-use/magnus/merge-skill-and-agents
[codex] Merge AGENTS guidance into SKILL
2026-04-17 17:17:09 -07:00
MagMueller 552aed7087 merge AGENTS into SKILL 2026-04-17 17:16:01 -07:00
Magnus Müller ba9d6a8aac Merge pull request #7 from browser-use/magnus/interaction-skill-misc
[codex] Add misc interaction skill stubs
2026-04-17 17:14:07 -07:00
MagMueller 9325a8e14f add misc interaction skill stubs 2026-04-17 17:13:16 -07:00
Magnus Müller ad46d5fd3a Merge pull request #5 from browser-use/magnus/interaction-skill-scaffolds
[codex] Scaffold interaction skill notes
2026-04-17 17:03:42 -07:00
MagMueller ebb08d2d2d restore scaffold notes except uploads 2026-04-17 17:03:26 -07:00
MagMueller 674fd69716 tighten interaction skill scaffolds 2026-04-17 16:58:53 -07:00
MagMueller 7287837653 scaffold interaction skill notes 2026-04-17 16:53:31 -07:00
Magnus Müller d1d6b14ea7 Merge pull request #4 from browser-use/magnus/tab-interaction-notes
[codex] Document tab control and visible ordering
2026-04-17 16:47:41 -07:00
MagMueller c35657d514 trim AGENTS tab-order note 2026-04-17 16:46:32 -07:00
MagMueller 13eed1c64e default list_tabs to include chrome pages 2026-04-17 16:43:24 -07:00
MagMueller baeb317790 document tab control and visible ordering 2026-04-17 16:34:30 -07:00
Magnus Müller ac28ae7085 Merge pull request #3 from browser-use/skills-structure
Add interaction-skills and domain-skills structure
2026-04-17 13:48:47 -07:00
MagMueller d6942b61fe add interaction-skills and domain-skills structure
Two skill categories, pure markdown, no Python files:

- interaction-skills/ — generic browser patterns (dialogs, inputs, etc.)
  Flat .md files. Agent reads the relevant one before a task.

- domain-skills/ — per-site playbooks (tiktok/, linkedin/, etc.)
  Flat .md files per action (upload, schedule, post).
  Subfolders for large domains when needed.

Starting with:
- interaction-skills/dialogs.md — CDP vs JS dialog handling
- domain-skills/tiktok/upload.md — full upload flow with gotchas
- Placeholder folders for linkedin, spreadshirt, salesforce

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-17 13:46:37 -07:00
Gregor Žunič 5ab5a958bb add remote browser support (Browser Use cloud) + multi-daemon + rename to bu (#1)
* add remote browser support via Browser Use cloud + multi-daemon

HARNESLESS_NAME suffixes socket/pid/log — daemons are independent, no
supervisor. start_remote_daemon() creates a Browser Use cloud browser and
launches a daemon attached to it; kill_daemon() stops both. Local Chrome
path is unchanged.

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

* rename env vars to BU_ prefix (shorter, less noisy in tool calls)

HARNESLESS_NAME → BU_NAME
HARNESLESS_CDP_WS → BU_CDP_WS
HARNESLESS_REMOTE_BROWSER_ID → BU_BROWSER_ID

Socket/pid/log files keep the harnesless- prefix on disk so they're
recognizable in /tmp. BROWSER_USE_API_KEY unchanged (external convention).

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

* rename project from harnesless to bu

Socket/pid/log paths now /tmp/bu-<name>.{sock,pid,log}. pyproject package
name updated, uv.lock regenerated. Slash command now /bu.

Note: the repo directory itself is still named harnesless on disk. Rename
manually (mv harnesless bu) so the absolute paths in docs line up.

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-17 00:28:02 -07:00
Gregor Žunič 4552e7b42f prune eval-specific helpers; keep primitives + document gotchas
Previous commit added fill_form / mui_select_first / is_success which are
eval-harness logic, not harnesless primitives (task-specific defaults like
"dumbledore"/"Harry Potter", MUI-only shim). Per AGENTS.md — "could the LLM
rewrite this from scratch after reading it once" — the LLM should pick field
values + the submit strategy per-task, not inherit eval defaults.

Removed: fill_form, _FILL_JS, mui_select_first, is_success (~100 lines)
Kept: dispatch_key, upload_file, capture_dialogs/dialogs (universal needs)

Insights from the eval captured as gotchas in SKILL.md instead:
- React controlled inputs need native-setter + input event
- Radios/checkboxes: el.click() over el.checked=true for React
- MUI / UI-library overlays: real CDP click, not JS .click()
- CDP char event ≠ DOM keypress for special keys → dispatch_key
- Same-origin iframes: contentDocument walk, not CDP targets
- Shadow DOM: querySelector doesn't pierce, walk .shadowRoot
- Form success signals vary: element / alert / body text

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-16 19:42:29 -07:00
Gregor Žunič 2366c226e9 self-managing daemon + document post-task self-improvement ritual
Connection management (addresses "shit ton of daemons" problem):
- Socket is the lock. Daemon refuses to start if another is already
  listening (5-line check).
- PID file at /tmp/harnesless.pid written on start, removed on exit.
- ensure_daemon() / kill_daemon() / daemon_alive() helpers.
- run.py auto-calls ensure_daemon() before exec — users never manage
  the daemon manually.
- kill_daemon uses PID file (robust) instead of pkill pattern matching
  (was silently missing because the process command line didn't contain
  the "harnesless/" prefix).

Post-task ritual added to SKILL.md: after every browser task, extract
ONE generalizable friction point and make the simplest possible
improvement (2-line helper, one-line gotcha, recipe correction).
This is how the harness sharpens itself over time.

Verified end-to-end: kill_daemon → 0 processes + files cleaned → next
run.py → auto-starts exactly one daemon. Second `uv run daemon.py`
exits with "daemon already running" message instead of racing.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-16 19:00:38 -07:00
Gregor Žunič df92b0c4e7 handle stale sessions + add iframe support (Azure billing admin task)
Observed friction during an Azure portal task:
- Daemon's default session went stale (user closed the attached tab),
  which broke every subsequent call including browser-level Target.*.
- new_tab() had been removed in the previous simplification pass but
  was needed to recover.
- Azure portal renders blade panels in iframes; js() on the main page
  returned nothing for picker contents.

Changes:
- daemon: browser-level Target.* calls now bypass self.session entirely
  (so a stale session doesn't poison them). On "Session with given id
  not found" for session-scoped calls, clear + re-attach + retry once.
  Merged start() and the new recovery path into attach_first_page().
- helpers: add new_tab(); js() accepts target_id for iframe queries;
  iframe_target(substr) to find blade iframes; ensure_real_tab() now
  resilient to stale-session exceptions.
- SKILL.md: one-line note on iframe-site workflow.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-16 18:56:35 -07:00