Use this project as a tiny browser pipe, not an agent framework.
Quick loop:
browser-control launch about:blank
export BROWSER_CONTROL_CDP_URL=http://127.0.0.1:9222
browser-control open https://example.com
browser-control inspect # compact title/url/text/headings/actions/links
browser-control snapshot # observe also works
browser-control click @e1
browser-control eval 'document.title'
browser-control events
browser-control network
browser-control console
browser-control cdp Browser.getVersionRules:
- Use
snapshotbefore ref actions. - Use
inspectfirst when you need compact page text + candidate links/actions. - Use refs for simple actions, selectors/coordinates when needed.
- Use
--wait Nonclick/fillfor late-rendered elements;wait-elementfor explicit polling. - Use
press ctrl+a/press cmd+shift+tstyle combos; editing combos (select-all/copy/paste/undo) work headless and on macOS. - Use
scroll --at x,yfor inner scrollable containers; plainscrollfor the window. - Use
screenshot --fullfor full-page captures;click --clicks 2/--button rightfor double/context clicks. page-inforeports a pending{dialog}instead of hanging; clear it withdialog accept|dismiss.evalaccepts top-levelreturn(auto-wrapped in an IIFE).- Use
evalorcdpas the raw escape hatch. - Use
events,network, andconsolewhen diagnosing flaky waits/pages. - Use
--frame <target-id|url-substring>oneval,click, orfillfor OOPIF/frame targets. - Put reusable scripts in
.browser-control/scripts. - Verify with
text,eval,screenshot, or raw CDP before saying done. - Check
.browser-control/traces/*after failures. - Short env aliases
BU_CDP_WSandBU_CDP_URLare accepted.
Lifecycle:
browser-control stop # stop browser launched by browser-control
browser-control reload # same minimal lifecycle reset