aboutsummaryrefslogtreecommitdiff
path: root/README.md
AgeCommit message (Collapse)Author
2026-07-26docs: replace real emails with example.com placeholders in READMEamankumarsingh77
2026-07-25feat: pin the agent to a chosen browser profile (#16)Aman Kumar
* feat: pin the agent to a chosen browser profile (#15) Harness tabs were created with a bare Target.createTarget, which places them in Chrome's defaultBrowserContextId — and that value follows window focus. Which profile the agent acted as therefore depended on which browser window the user last clicked, so the same task could run as a work account on one run and a personal account on the next. /browser-profile lists the connected browser's profiles as "Name (email)" and pins one to ~/.pi/agent/browser-harness.json, so the choice outlives the session. The same picker appears on first browser_setup when nothing is pinned; with no interactive UI, or on cancel, setup continues with a note and the previous behavior. Chrome offers no direct route to another profile: Target.createTarget rejects a foreign browserContextId, and openerId does not inherit the opener's context. The window is opened through the browser's own command line (--profile-directory, handed to the running browser by Chromium's ProcessSingleton) and identified by a unique file:// sentinel page, since a bare about:blank#token argument is discarded. Further tabs come from window.open evaluated with userGesture: true — the only CDP-reachable way to place a tab in a non-default browser context — correlated by a unique token so concurrent isolated tabs stay distinct. A failed handshake is reported, never silently redirected to another profile. All four tab-creation sites now funnel through cdp/target-factory, so open_urls and the isolated tabs behind web_search / read_page cannot run with a different profile's cookies than the visible tabs. Also fixed along the way: snap Chromium is discovered, Windows uses %LOCALAPPDATA%, browsers launched with an explicit --user-data-dir are found, the running browser is chosen by ranking candidates against the connected user-data-dir rather than taking the first process found, and an installed-but-closed browser no longer reads as running. CI runs the profile suites and a real-browser end-to-end test on ubuntu, macOS, and Windows — profile discovery is the one part of the harness whose behavior genuinely differs per OS. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: single-flight harness window creation Isolated tabs run concurrently (browser_read_page is registered unserialized), so several could each find "no harness window" and create one — two blank windows before this feature, two LAUNCHED profile windows after it. ensureHarnessWindow now shares one in-flight creation per client. Sharing introduces a second hazard: freshlyCreated is a claim on the seed tab, and if every waiter received it, they would all drive the same tab. Only the caller that started the creation keeps the claim; the rest open their own tab beside it. Covered by test/manual/profile-concurrency-test.ts (five concurrent isolated tabs, pinned and unpinned: distinct targets, one window, correct profile), wired into CI on Linux only — the coordination is pure JS and identical across platforms. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix: tilde expansion differs by purpose on Windows CI on windows-latest caught this: join("~", "x") yields "~\x" there, and expandTilde only handled "~/". The two uses are not the same, so they no longer share a helper. The agent dir stays byte-compatible with pi's own expandTildePath ("~/" only, every platform) — being more lenient would put the pin file somewhere pi never looks. $CHROME_USER_DATA_DIR is ours to interpret, so it accepts "~\" as well, which is what a Windows user would type. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-24docs: rewrite README for accuracy and readabilityamankumarsingh77
The README taught the coordinate-first interaction model that the harness replaced with stable [eN] refs, and documented 22 of the 38 registered tools. Restructured so each section answers one question, and rewrote the content against the actual tool registry. - Teach the ref-first model: snapshot yields [eN] handles that re-resolve at action time, with coordinates as the fallback rather than the default. - Document the 16 missing tools: the forms path (fill/select_option/focus), console, wait_for, dispatch_key, drag_and_drop, upload_file, download, print_to_pdf, viewport_resize, close_tab, and setup. - Rebuild the comparison table as prose cells grouped by dimension. Drops the unverifiable "unknown" rows and the duplicated click/dispatch claims, and adds a provenance line so competitor claims stay correctable. - Remove stale guidance: /browser-reload-daemon as the fix for a Chrome restart (auto-reconnect landed in 0.6.0), and the unbenchmarked "10-50x faster" claim on http_get. - Add sections for concurrency and tab isolation, flags and environment variables (BU_CDP_WS, BU_CDP_PORTS, BH_SCRIPT_DIR), and a troubleshooting table keyed to the errors the harness actually emits. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-08feat: add deep-research skill, /deep-research command, fix web-search-researcheramankumarsingh77
deep-research skill fans out to isolated web-search-researcher subagents (now using browser_web_search + browser_read_page instead of the non-existent web_search/web_fetch), coverage-driven loop with a hard ceiling, synthesizes a cited Markdown report. /deep-research command as explicit entry point. Docs updated. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-06docs: rewrite README for v0.4.0 — comparison table, snapshot-first patternsamankumarsingh77
Adds a "Why pi-browser-harness?" comparison table (vs Playwright MCP, Stagehand, Puppeteer MCP) at the top, surfacing the differentiators a chooser actually cares about: real Chrome, coordinate clicks through iframes/shadow DOM, inline TUI rendering, AX tree with @(x,y) coords, parallel execution, scripts. Tool list reorganized into "Page inspection (use these by default)" / "Visual (last resort)" / Navigation / Interaction / Utility — adds browser_snapshot, browser_network_requests, browser_close_tab. Patterns rewritten snapshot-first; form filling and research no longer screenshot. New sections for parallel execution and tab ownership. Temporary scripts example fixed to use the actual daemon.session().call() binding. Three explicit anti-screenshot rules in "What NOT to do". Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02docs: rewrite README — add hero image, condense tools, fix accuracyamankumarsingh77
- Add hero image banner at top - Merge 4 tool tables into 1 compact reference table - Fix tool syntax to match actual parameter schemas - Add Core Patterns section (navigation, form fill, extraction, research) - Add Dialogs, SPAs, Keyboard modifiers subsections - Add What NOT to do section - Add Architecture diagram - Add Contributing link - Remove verbose/duplicate usage examples
2026-05-02chore: prepare v0.1.0 releaseamankumarsingh77
- Add hero image for pi package gallery - Update CHANGELOG with release date - Update README with npm install instructions - Add assets/ to npm package files - Add CONTRIBUTING.md and GitHub templates - Add CI workflow for typecheck and pack validation
2026-04-30Replace dynamic tool registration with browser_run_scriptamankumarsingh77
Remove register_tool/remove_tool/list_dynamic_tools and the entire dynamic-tools.ts module. Replace with a single browser_run_script tool that executes temporary scripts from disk with daemon access. Scripts are now written to disk before execution, making them auditable and re-runnable. Same bindings (daemon, require, params, etc.) as before via the same AsyncFunction mechanism.
2026-04-29Replace socket daemon with direct CDP WebSocket connectionamankumarsingh77
Drops the Unix socket subprocess in favor of talking CDP directly over WebSocket from the extension. Removes the protocol's send/health helpers, simplifies setup to just verifying Chrome's remote debugging port, and tightens types in dynamic-tools. Bumps Node engine to >=22 and adds the ws dependency.
2026-04-29Fix repo/bug URLs to point to amankumarsingh77/pi-browser-harnessamankumarsingh77
2026-04-29Initial release: pi-browser-harnessamankumarsingh77
Browser control extension for pi — 20 browser_* tools for navigating, clicking, typing, screenshotting, and extracting data from real Chrome via CDP. Includes self-extending harness (register_tool/remove_tool), guided /browser-setup, session persistence, and custom TUI renderers.