all repos — sz-chrome-remote-extension @ a761876b5bfe640184cb68edd7e8f3ad7296fac4

pi-chrome, patched to drive a signed-in browser on another host through a broker, with an MCP server

docs: clarify background controls and release 0.15.50
Tianren Dong tianrendong.dtr@gmail.com
Thu, 10 Sep 2026 10:36:45 -0400
commit

a761876b5bfe640184cb68edd7e8f3ad7296fac4

parent

38475fd32113a13c3a4929b458079498a644b5fc

M CHANGELOG.md → CHANGELOG.md

@@ -2,6 +2,11 @@ # Changelog

All notable user-facing changes to `pi-chrome`. +## 0.15.50 — 2026-09-10 + +- **README clarity.** Lead with workflow examples, correct setup ordering and platform-specific onboarding instructions, and clarify privacy guidance. Describe background behavior and the on/off/status controls directly. +- **Documentation-only release.** Browser behavior and permissions are unchanged. The companion version matches the npm package version. + ## 0.15.49 — 2026-09-10 - **Validation scope.** Node regression suites passed. Live browser validation remains incomplete: an input attempt encountered `Input.dispatchMouseEvent: Detached while handling command.`; a subsequent retest was blocked by a disconnected companion. No live-browser pass is claimed for these changes.
M README.md → README.md

@@ -4,12 +4,7 @@ **Give Pi the Chrome you're already signed into.**

Debug your app, inspect signed-in dashboards, and capture screenshots using your existing Chrome profile—without setting up a separate automation browser. -Built for the [Pi coding agent](https://pi.dev). Pi's Chrome tools stay locked until you authorize the current session. - -[Quick start](#quick-start) · [Examples](./docs/EXAMPLES.md) · [Safety](#safety) · [Contributing](./CONTRIBUTING.md) - -[![npm version](https://img.shields.io/npm/v/pi-chrome.svg)](https://www.npmjs.com/package/pi-chrome) -[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](./LICENSE) +Built for the [Pi coding agent](https://pi.dev). ## What you can do

@@ -84,9 +79,7 @@

- **Per-session approval.** Pi's Chrome tools require `/chrome authorize`. `/chrome revoke` locks them and requests cleanup of that session's owned automation tabs. Cleanup preserves existing user tabs. - **Separate targets by default.** Page actions without an explicit target use a session-owned automation window or tab. The agent can deliberately target an existing tab when your task calls for it. - **Local transport, not a sandbox.** The bridge binds to `127.0.0.1:17318` and rejects browser-origin command requests. It does not authenticate arbitrary non-browser local callers; it is not protection against hostile processes on your machine. -- **Background mode by default.** Tools cannot override it to explicitly focus Chrome or activate tabs. This is not a zero-focus guarantee: page scripts, trusted input, native prompts, and Chrome/OS behavior can still affect focus. Chrome may also show its debugger banner while attached. - -Read the [security policy](./SECURITY.md) and [background-mode scope and risks](./docs/ARCHITECTURE.md#scope-and-risks) before using it with sensitive accounts. +- **Background mode:** `/chrome background on` (default) blocks pi-chrome tools from directly bringing Chrome to the front or switching your selected tab. Use `/chrome background off` to allow those actions, and `/chrome background status` to check the setting. ### Limits

@@ -114,33 +107,3 @@

### Updating and troubleshooting After `pi update npm:pi-chrome`, run `/reload` in Pi and reload **Pi Chrome Connector** in `chrome://extensions`. Run `/chrome doctor` to check the connection and companion version. - -If Chrome is not responding, confirm the companion is enabled and keep Chrome open. If page checks fail on a Chrome internal page, try a regular web page and run Doctor again. Follow its version-mismatch or session-restart instructions when shown. - -### Typing into rich editors - -`chrome_type` and `chrome_fill` use one native CDP `Input.insertText` operation for focused contenteditables. This avoids per-character delays for long text and preserves Unicode/newlines. Ordinary inputs and textareas retain individual key events. - -For an editor that needs a `keydown` for every character, pass `perCharacter:true`. Bulk insertion still uses Chrome's input system, but does not emit per-character key events or a clipboard `paste` event. Use `includeSnapshot:true` to verify the result; `chrome_fill` still honors `domFallback:false` when synthetic fallback is unwanted. - -## Tests and documentation - -The [benchmark suite](./test-suite/README.md) includes **44 browser challenges**, hermetic multi-step tasks, and mocked regression tests for input, screenshots, session cleanup, and background policy. These are reproducible test cases—not a guarantee that every website or OS interaction works. - -Run mocked regressions with `npm test` (Node.js 22.13+; no live Chrome required). Follow the benchmark guide for live browser checks. - -- [Examples](./docs/EXAMPLES.md) — prompts and workflows to try. -- [FAQ](./docs/FAQ.md) — compatibility, setup questions, and limitations. -- [Architecture](./docs/ARCHITECTURE.md) — bridge, session lifecycle, and background policy. -- [Comparison](./docs/COMPARISON.md) — where pi-chrome fits among browser tools. -- [Changelog](./CHANGELOG.md) — release history. - -## Contributing - -Bug reports, reproducible browser challenges, and real workflow demos are welcome. Include `/chrome doctor` output and reproduction steps; redact private URLs and page content. See [CONTRIBUTING.md](./CONTRIBUTING.md). - -If pi-chrome is useful, consider starring the repo or sharing a workflow that worked for you. - -## License - -MIT. See [LICENSE](./LICENSE).
M extensions/chrome-profile-bridge/browser-extension/manifest.json → extensions/chrome-profile-bridge/browser-extension/manifest.json

@@ -1,7 +1,7 @@

{ "manifest_version": 3, "name": "Pi Chrome Connector", - "version": "0.15.49", + "version": "0.15.50", "description": "Lets Pi control tabs in Chrome via a local connector at 127.0.0.1.", "permissions": [ "tabs",
M package-lock.json → package-lock.json

@@ -1,12 +1,12 @@

{ "name": "pi-chrome", - "version": "0.15.49", + "version": "0.15.50", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pi-chrome", - "version": "0.15.49", + "version": "0.15.50", "license": "MIT", "peerDependencies": { "@earendil-works/pi-coding-agent": "*",
M package.json → package.json

@@ -1,6 +1,6 @@

{ "name": "pi-chrome", - "version": "0.15.49", + "version": "0.15.50", "scripts": { "test": "node test-suite/unit/csp-eval.test.mjs && node test-suite/unit/automation-target.test.mjs && node test-suite/unit/session-cleanup.test.mjs && node test-suite/unit/background-policy.test.mjs && node test-suite/unit/input-reliability.test.mjs", "version": "node scripts/sync-manifest-version.js",