项目文件夹

0
Shawn Pana 17f1640881 trim docstrings on new helpers to match house style
Collapsed multi-line docstrings on fill/clickables/field_info/type_text/press_key
to one-liners, dropped block comments above CLICKABLE_SELECTOR/FORMAT_HINTS,
and removed inline how-it-works comments in press_key.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 17:28:32 -07:00
2026-04-17 16:46:32 -07:00

bu

LLM-first browser control via CDP. No CLI, no wrappers, just Python and CDP.

Setup

  1. Install deps (uses uv):

    uv sync
    
  2. Enable Chrome remote debugging: open chrome://inspect/#remote-debugging, check the box. Chrome now listens at 127.0.0.1:9222.

  3. (Optional) For remote browsers: cp .env.example .env and fill in BROWSER_USE_API_KEY.

  4. Start the daemon:

    uv run daemon.py &
    

Usage

uv run run.py <<'PY'
goto("https://example.com")
wait(1)
screenshot("/tmp/shot.png")
print(page_info())
PY

Parallel agents / remote browsers: BU_NAME=<n> uv run run.py. See SKILL.md.

Read SKILL.md for the full LLM workflow. Read AGENTS.md if you're an agent working ON this codebase (extending helpers, debugging the daemon). Read helpers.py for every function — they're all ~5 lines each and you can edit any of them.

Files

  • daemon.py — holds the WebSocket, listens on /tmp/bu-<name>.sock
  • helpers.py — ~250 lines of transparent helpers
  • run.py — 3 lines: from helpers import *; exec(stdin)
  • SKILL.md — how an agent uses bu to drive a browser
  • AGENTS.md — how an agent modifies bu (code structure, extension points)

Stop

uv run python -c "from helpers import kill_daemon; kill_daemon()"        # default daemon
uv run python -c "from helpers import kill_daemon; kill_daemon('work')"  # named daemon (also stops remote browser)
# or
pkill -f bu/daemon.py