pi-chrome 0.14.4 → 0.14.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
All notable user-facing changes to `pi-chrome`.
|
|
4
4
|
|
|
5
|
+
## 0.14.5
|
|
6
|
+
|
|
7
|
+
- `docs/COMPARISON.md` rewritten with a three-axis landscape (drivers / agent frameworks / cloud providers). Adds Browser Use, Stagehand, Skyvern, Magnitude, Alumnium, OpenAI Operator, Project Mariner, Surfer 2, Anthropic Computer Use, Browserbase, Steel.dev, Hyperbrowser, Anchor, Browserless. Adds Interop section, public-benchmark cheat sheet (WebArena, WorkArena++, BrowseComp, Mind2Web 2, WebChoreArena, MiniWoB++, BrowserGym).
|
|
8
|
+
- README gains a one-liner pointing at the new three-axis framing.
|
|
9
|
+
- Sourced from `benchmark-search` session research. No code changes.
|
|
10
|
+
|
|
5
11
|
## 0.14.4
|
|
6
12
|
|
|
7
13
|
- Sync `manifest.json` version to match `package.json` (0.14.3 shipped with stale manifest, would trigger spurious `/chrome doctor` drift warnings). No code or behavior changes.
|
package/README.md
CHANGED
|
@@ -20,6 +20,8 @@ You: [keeps coding — agent never asked you to log in]
|
|
|
20
20
|
|
|
21
21
|
## Why pi-chrome vs. everything else
|
|
22
22
|
|
|
23
|
+
> Short version: **pi-chrome is primitives — "Playwright for the Chrome you're already signed into."** Not an agent loop. Plug it under any agent framework (Browser Use, Stagehand, LangGraph) or call its tools directly from a Pi agent. See [docs/COMPARISON.md](./docs/COMPARISON.md) for the full three-axis landscape (drivers, agents, cloud providers).
|
|
24
|
+
|
|
23
25
|
| | **pi-chrome** | Playwright / Puppeteer | CDP-based agents | Selenium / WebDriver |
|
|
24
26
|
| ------------------------------ | --------------------------------- | ----------------------------- | ----------------------------- | ----------------------------- |
|
|
25
27
|
| Uses your real signed-in Chrome | ✅ yes (extension in your profile) | ❌ throwaway profile | ⚠️ requires `--remote-debug` | ❌ throwaway profile |
|
package/docs/COMPARISON.md
CHANGED
|
@@ -1,87 +1,166 @@
|
|
|
1
|
-
# pi-chrome vs.
|
|
1
|
+
# pi-chrome vs. the rest of the browser-automation landscape
|
|
2
2
|
|
|
3
|
-
This is the "
|
|
3
|
+
This is the honest "which tool when" page. The browser-automation space has three different layers and people often compare across them — let's not do that.
|
|
4
|
+
|
|
5
|
+
We benchmark in public — see [`../test-suite/`](../test-suite). Where exact scores matter (WebVoyager, WorkArena++, BrowseComp, Mind2Web 2), check the live leaderboards; they shift monthly.
|
|
6
|
+
|
|
7
|
+
---
|
|
4
8
|
|
|
5
9
|
## TL;DR
|
|
6
10
|
|
|
7
11
|
| You are… | Use… |
|
|
8
12
|
| -------------------------------------------------------------- | ------------------------------- |
|
|
9
13
|
| A Pi agent operator who wants the agent to use **your real Chrome** (logged-in tabs, cookies, extensions) | **pi-chrome** |
|
|
14
|
+
| Building a Pi/LLM agent and want low-level browser primitives | **pi-chrome** |
|
|
10
15
|
| Writing deterministic end-to-end tests in CI | Playwright / Cypress |
|
|
11
|
-
| Building a hosted scraping fleet on isolated profiles
|
|
12
|
-
|
|
|
16
|
+
| Building a hosted scraping/agent fleet on isolated profiles | Playwright / Puppeteer + Browserbase / Steel |
|
|
17
|
+
| Want a turnkey "natural-language agent" with built-in loop | Browser Use / Stagehand / Skyvern |
|
|
18
|
+
| Want a hosted, vendor-managed agent | OpenAI Operator / Project Mariner / Surfer |
|
|
13
19
|
| Debugging your own app from your editor without leaving your real session | **pi-chrome** |
|
|
14
20
|
|
|
15
|
-
|
|
21
|
+
`pi-chrome` is **primitives**, not an opinionated agent loop. Think of it as **"Playwright for the Chrome you're already signed into"** — and pluggable under any agent framework above the line.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## The three axes you should compare on
|
|
26
|
+
|
|
27
|
+
| Axis | Examples | What it gives you |
|
|
28
|
+
| --------------------------------- | --------------------------------------------------------------------- | ----------------------------- |
|
|
29
|
+
| **1. Driver / transport** | Playwright, Puppeteer, Selenium, CDP raw, `puppeteer-stealth`, **pi-chrome** | low-level tools (click, type, navigate) |
|
|
30
|
+
| **2. Agent framework** | Browser Use, Stagehand, Skyvern, Magnitude, Alumnium, LangGraph-with-Playwright, Operator, Mariner, Surfer | LLM loop, planning, NL API |
|
|
31
|
+
| **3. Cloud browser provider** | Browserbase, Steel.dev, Hyperbrowser, Anchor, Browserless | managed Chromes, sessions, quotas |
|
|
32
|
+
|
|
33
|
+
`pi-chrome` is **axis 1**. You can wrap it with any axis-2 agent framework, or run it directly from a Pi agent's `chrome_*` tool calls. It explicitly does NOT compete with axis 3 — it runs locally inside *your* Chrome.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Axis 1 — drivers (where pi-chrome lives)
|
|
38
|
+
|
|
39
|
+
| Tool | Transport | Profile | Trusted events | Banner when controlling | Default detectable as bot |
|
|
40
|
+
| --------------------------------- | ------------------------------------------ | ---------------------------------- | -------------------- | ----------------------------------- | ------------------------- |
|
|
41
|
+
| Playwright | CDP (own driver) | throwaway by default | always | always ("controlled by test software") | yes (webdriver flag, automation flags) |
|
|
42
|
+
| Puppeteer | CDP | throwaway by default | always | always | yes |
|
|
43
|
+
| Selenium | WebDriver / BiDi | throwaway | partial (BiDi improves) | always | most detectable |
|
|
44
|
+
| puppeteer-stealth / playwright-extra | CDP + patches | throwaway | always | always | medium (patches flags) |
|
|
45
|
+
| Raw CDP | direct devtools protocol | either (needs `--remote-debugging-port`) | always | always | yes |
|
|
46
|
+
| **pi-chrome** | **Chrome extension bridge → local loopback** | **your real Chrome profile, signed-in cookies, extensions, history** | **opt-in** (`/chrome clicks on` or `trusted: true`) | **only when trusted mode is active** | **synthetic mode bypasses common detection signals**¹ |
|
|
47
|
+
|
|
48
|
+
¹ pi-chrome synthetic mode dispatches DOM events with `isTrusted=false` — most sites don't check; some anti-bot defenses do. The [`test-suite/`](../test-suite) grades both modes against common detection signals. Trusted mode uses `chrome.debugger` and shows Chrome's banner like every other CDP-based tool.
|
|
49
|
+
|
|
50
|
+
### What makes pi-chrome different on this axis
|
|
51
|
+
|
|
52
|
+
1. **Profile attach, not driver launch.** Every other driver fights cookie persistence, login walls, MFA, and extension state. pi-chrome inherits all of it because it *is* your Chrome.
|
|
53
|
+
2. **Synthetic-first, trusted-on-demand.** Two-tier event model — agents pick the right tradeoff per call. Competitors are all-trusted (CDP) and always show the banner. pi-chrome avoids it by default; you opt in when a site needs it (autoplay gate, clipboard, file picker).
|
|
54
|
+
3. **Extension bridge transport.** No `--remote-debugging-port`, no throwaway Chromium. Survives Chrome auto-updates. Works alongside your normal Chrome usage.
|
|
55
|
+
4. **Honest result envelopes.** Every action returns `pageMutated`, `defaultPrevented`, `elementVisible`, `occludedBy`, `valueMatches`. Competitors return `void` or generic acks; agents loop blindly on broken clicks.
|
|
56
|
+
5. **Multi-session shared bridge.** Planner + worker + audit Pi sessions all drive the same Chrome concurrently.
|
|
57
|
+
6. **Stable element uids.** `chrome_snapshot` returns deterministic uids you can pass to subsequent actions — similar to BrowserGym's `bid`, but built into the snapshot tool itself.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Axis 2 — agent frameworks (built on top of axis 1)
|
|
62
|
+
|
|
63
|
+
These wrap a driver with an LLM loop. They are **higher-level than pi-chrome** and **complementary**, not competitors.
|
|
64
|
+
|
|
65
|
+
| Framework | Driver underneath | Approach | Open source |
|
|
66
|
+
| ------------------------ | ------------------------------ | --------------------------------------------------------------------------------------------- | --------------- |
|
|
67
|
+
| **Browser Use** | Playwright | DOM + a11y tree → LLM → action JSON. Open-source leader; widely cited on WebVoyager. | Apache-2.0 (Python) |
|
|
68
|
+
| **Stagehand** (Browserbase) | Playwright | Natural-language `.act()` / `.observe()` / `.extract()`; deterministic + AI mix. | MIT (TypeScript)|
|
|
69
|
+
| **Skyvern** | Playwright + own DOM model | Vision-first + DOM; YAML workflows for form/workflow automation. | AGPL (Python) |
|
|
70
|
+
| **Magnitude** | Playwright | NL test authoring; QA-focused. | open |
|
|
71
|
+
| **Alumnium** | Selenium / Playwright | Test-author NL → agent. QA-focused. | open |
|
|
72
|
+
| **LangGraph / AutoGen + Playwright** | Playwright | Generic agent graph + browser tools. | open |
|
|
73
|
+
| **OpenAI Operator** | proprietary | OpenAI's own VLM + browser; ChatGPT-integrated. | closed, hosted |
|
|
74
|
+
| **Project Mariner** (Google) | proprietary Chrome integration | Google's own VLM Chrome experiment. | closed |
|
|
75
|
+
| **Surfer 2 / Surfer-H** (H Company) | proprietary | Hosted proprietary agent stack. | closed, hosted |
|
|
76
|
+
| **Anthropic Computer Use** | OS-level screenshots + mouse/keyboard | Broader than browser; trusted events at OS level. | closed (API) |
|
|
77
|
+
|
|
78
|
+
**Why pi-chrome is not on this list:** it's intentionally **not an agent**. There's no LLM loop, no `.act("click the blue button")`. Pi handles the loop; pi-chrome provides the primitives. This means:
|
|
79
|
+
|
|
80
|
+
- You can use pi-chrome under Browser Use, Stagehand, LangGraph, or any other agent framework (see [Interop](#interop)).
|
|
81
|
+
- You don't pay for an opinion you don't want.
|
|
82
|
+
- Agent improvements compound across all your workflows because the primitives stay stable.
|
|
16
83
|
|
|
17
84
|
---
|
|
18
85
|
|
|
19
|
-
##
|
|
20
|
-
|
|
21
|
-
|
|
|
22
|
-
|
|
|
23
|
-
|
|
|
24
|
-
|
|
|
25
|
-
|
|
|
26
|
-
|
|
|
27
|
-
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
| Console capture | ✅ | ✅ | ✅ | ⚠️ | ⚠️ | ⚠️ |
|
|
31
|
-
| Real touch events (mobile PWAs) | ✅ `chrome_tap` | ✅ | ✅ | ⚠️ | ⚠️ | ❌ |
|
|
32
|
-
| File upload through React/Vue controlled inputs | ✅ no native picker | ✅ | ✅ | ✅ | ⚠️ | ⚠️ |
|
|
33
|
-
| HTML5 drag/drop with `DataTransfer` | ✅ | ✅ | ⚠️ | ⚠️ | ⚠️ | ⚠️ |
|
|
34
|
-
| Multi-session shared bridge | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
|
|
35
|
-
| MIT-licensed | ✅ | Apache-2 | Apache-2 | MIT | MIT | Apache-2 |
|
|
36
|
-
| Watch the agent work, live | ✅ default | ❌ headless / new | ❌ | ❌ | ❌ | ❌ |
|
|
86
|
+
## Axis 3 — cloud browser providers (orthogonal)
|
|
87
|
+
|
|
88
|
+
| Provider | What it sells |
|
|
89
|
+
| ----------------- | -------------------------------------------------------- |
|
|
90
|
+
| **Browserbase** | Managed browsers; pairs with Stagehand. |
|
|
91
|
+
| **Steel.dev** | Managed browsers + public agent leaderboards. |
|
|
92
|
+
| **Hyperbrowser** | Managed browsers, session APIs. |
|
|
93
|
+
| **Anchor Browser**| Managed browsers. |
|
|
94
|
+
| **Browserless** | Managed Chrome, scraping focus. |
|
|
95
|
+
|
|
96
|
+
**pi-chrome doesn't compete here.** It runs locally in *your* Chrome. The right framing if someone asks: *"no cloud cost, no session-handoff, no rate limits — and the agent runs against your real logged-in state."* If you need fleets of isolated Chromes in CI, you want one of these.
|
|
37
97
|
|
|
38
98
|
---
|
|
39
99
|
|
|
40
|
-
##
|
|
100
|
+
## Interop
|
|
41
101
|
|
|
42
|
-
|
|
102
|
+
`pi-chrome` exposes tools that any Pi agent can call. If you want to use it from outside Pi:
|
|
43
103
|
|
|
44
|
-
1.
|
|
45
|
-
2.
|
|
46
|
-
3.
|
|
47
|
-
4. **Your editor / IDE / colleagues** see your real Chrome, not a hidden one. Watching an agent in a separate window is jarring.
|
|
104
|
+
1. The local bridge speaks HTTP JSON-RPC at `127.0.0.1:17318` (default). The API is internal but stable across patch versions.
|
|
105
|
+
2. Tool surface mirrors Playwright closely (click/type/navigate/snapshot/screenshot/evaluate/wait_for) so adapter code is short.
|
|
106
|
+
3. Honest envelopes (`pageMutated`, `valueMatches`, `occludedBy`) let agent harnesses skip retry/heal logic.
|
|
48
107
|
|
|
49
|
-
|
|
108
|
+
If you want a first-class pi-chrome adapter for Browser Use / Stagehand / LangGraph, file an issue with your use case.
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## "But Playwright has `storageState` / Puppeteer has user-data-dir"
|
|
113
|
+
|
|
114
|
+
Yes — you can export cookies and replay them, or point Playwright at your existing profile directory. In practice for agent workflows that breaks down fast:
|
|
115
|
+
|
|
116
|
+
1. **OAuth + SSO** providers (Okta, Google, GitHub) often pin sessions to TLS fingerprints, device IDs, and browser-extension state that doesn't survive replay or a parallel Chrome instance.
|
|
117
|
+
2. **MFA** tokens expire mid-run.
|
|
118
|
+
3. **Internal admin tools** hard-pin to your real device.
|
|
119
|
+
4. **Pointing Playwright at your real `user-data-dir`** requires closing your normal Chrome (Chrome won't share the profile lock). pi-chrome doesn't fight you for the profile because it lives *inside* it.
|
|
120
|
+
5. **Watching the agent work** in your real window is a different UX than a hidden parallel Chrome. Demos, pair-driving, and confidence-building all want axis-1-with-attach.
|
|
50
121
|
|
|
51
122
|
---
|
|
52
123
|
|
|
53
124
|
## "Is this safer than CDP?"
|
|
54
125
|
|
|
55
|
-
|
|
126
|
+
Different security boundary, not strictly safer.
|
|
56
127
|
|
|
57
|
-
- **CDP-based tools** require `chrome --remote-debugging-port
|
|
58
|
-
- **pi-chrome** runs through an extension you install yourself with broad permissions (tabs, scripting, debugger). The bridge listens on `127.0.0.1:17318` loopback only. **Only install the bundled extension if you trust the source you got the npm package from.**
|
|
128
|
+
- **CDP-based tools** require `chrome --remote-debugging-port=...`. That port is unauthenticated and exposes the whole browser to any local process. Easy to misconfigure.
|
|
129
|
+
- **pi-chrome** runs through an extension you install yourself with broad permissions (tabs, scripting, debugger, webNavigation). The bridge listens on `127.0.0.1:17318` loopback only. **Only install the bundled extension if you trust the source you got the npm package from.**
|
|
59
130
|
|
|
60
131
|
If your threat model excludes extensions with broad permissions, neither approach is a fit — you want a sandboxed CI runner.
|
|
61
132
|
|
|
62
133
|
---
|
|
63
134
|
|
|
64
|
-
##
|
|
135
|
+
## Public benchmarks worth knowing (for axis 2 / axis 3 comparison)
|
|
136
|
+
|
|
137
|
+
Pi-chrome itself ships a per-primitive benchmark suite ([`../test-suite/`](../test-suite)) covering trusted-input, pointer humanization, keyboard fidelity, drag/drop, Shadow DOM, file uploads, network observability, fingerprint leaks, and agent-safety honeypots. That's **driver-level** grading.
|
|
138
|
+
|
|
139
|
+
For **agent-level** comparison (axis 2), the public benchmarks worth citing:
|
|
140
|
+
|
|
141
|
+
| Benchmark | What it measures | Notes |
|
|
142
|
+
| ---------------- | ------------------------------------------------- | ------------------------------------------------ |
|
|
143
|
+
| **WebArena** (CMU) | Hermetic, programmatic graders | Gold standard for reproducibility. |
|
|
144
|
+
| **WorkArena++** (ServiceNow) | Enterprise SaaS workflows | Hardest realistic benchmark; <5% frontier. |
|
|
145
|
+
| **BrowseComp** (OpenAI) | Hard info-retrieval | Not saturated. |
|
|
146
|
+
| **Mind2Web 2** (NeurIPS '25) | Long-horizon, rubric-tree judge | New, well-designed. |
|
|
147
|
+
| **WebChoreArena** | Tedious cross-page workflows | Reflects real ops work. |
|
|
148
|
+
| **WebVoyager** | Live web tasks | **Saturated** — 90%+ scores common; cite only as smoke test. |
|
|
149
|
+
| **VisualWebArena** | Multimodal | |
|
|
150
|
+
| **MiniWoB++** | Classic unit-task suite | |
|
|
151
|
+
| **BrowserGym + AgentLab** | Research harness covering the above | The de-facto research API; pi-chrome's snapshot uid is comparable to BrowserGym's `bid`. |
|
|
65
152
|
|
|
66
|
-
|
|
67
|
-
- **Cross-browser testing** — pi-chrome is Chrome only by design (it's a Chrome extension). Use Playwright for Firefox/WebKit.
|
|
68
|
-
- **Untrusted page execution** — same reason. Use a sandbox.
|
|
69
|
-
- **You don't already use Chrome** — the whole value proposition is "your real Chrome". If your day is in Arc / Firefox / Brave, you'll get less out of it (though Brave/other Chromium browsers work fine technically).
|
|
153
|
+
Cite live leaderboards rather than hard-coded numbers; agent scores shift monthly.
|
|
70
154
|
|
|
71
155
|
---
|
|
72
156
|
|
|
73
|
-
## Reproducing
|
|
157
|
+
## Reproducing pi-chrome's driver-level claims
|
|
74
158
|
|
|
75
|
-
Run [`../test-suite/`](../test-suite) against
|
|
159
|
+
Run [`../test-suite/`](../test-suite) against any browser-control tool. Each challenge exposes `window.__verdict` / `window.__reason` / `window.__events`, so any tool (Playwright, Puppeteer, Selenium, Stagehand, pi-chrome) can grade itself deterministically.
|
|
76
160
|
|
|
77
|
-
|
|
78
|
-
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
- Shadow DOM + iframe targeting
|
|
82
|
-
- file attachment to `<input type=file>`
|
|
83
|
-
- console & network observability
|
|
84
|
-
- fingerprint leaks (`navigator.webdriver`, runtime flags)
|
|
85
|
-
- agent-safety honeypots
|
|
161
|
+
```bash
|
|
162
|
+
cd test-suite && python3 -m http.server 8765
|
|
163
|
+
# open http://127.0.0.1:8765/ in the Chrome window the tool controls
|
|
164
|
+
```
|
|
86
165
|
|
|
87
|
-
|
|
166
|
+
If you build a competing tool, please open a PR with your scores.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifest_version": 3,
|
|
3
3
|
"name": "Pi Chrome Connector",
|
|
4
|
-
"version": "0.14.
|
|
4
|
+
"version": "0.14.5",
|
|
5
5
|
"description": "Lets Pi control tabs in Chrome via a local connector at 127.0.0.1.",
|
|
6
6
|
"permissions": ["tabs", "scripting", "storage", "activeTab", "alarms", "webNavigation", "debugger"],
|
|
7
7
|
"host_permissions": ["<all_urls>", "http://127.0.0.1:17318/*"],
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-chrome",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.5",
|
|
4
4
|
"description": "The de-facto browser automation toolkit for Pi agents. Drive your existing logged-in Chrome — no re-login, no throwaway profile, no CDP. 20+ tools (click, type, navigate, screenshot, network capture, file upload, drag, scroll, touch) + honest result envelopes + a built-in benchmark suite.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pi",
|