v1.0.0 — PolterTab
PolterTab lets any AI assistant drive and scrape your existing Chrome profile — no headless browser, no separate automation setup, no re-logging into anything.
A Chrome extension plus an MCP server. The AI acts inside the browser you already use: your real profile, your cookies, your logged-in sessions.
Install
1. The extension
Download poltertab-extension-v1.0.0.zip below and unzip it. Then:
- Open Chrome →
chrome://extensions/ - Enable Developer mode (top right)
- Click Load unpacked
- Select the unzipped
chrome-extension/directory
2. The MCP server
Requires Node 18+. Clone the repo, install deps, and point your MCP client at the server over stdio:
git clone https://github.com/abhinav162/poltertab.git
cd poltertab && npm install{
"mcpServers": {
"poltertab": {
"command": "node",
"args": ["/absolute/path/to/poltertab/mcp-server/index.js"]
}
}
}Restart your AI tool afterwards.
A guided installer —
npm install -g poltertab && poltertab setup— is in review and lands in the next release. It configures the MCP server, installs a browser-navigation skill, and updates yourCLAUDE.mdin one command.
What it does
21 tools, all prefixed browser_: navigate, click, fill, hover, scroll, snapshot, scrape, screenshot, network capture, named tab sessions, and per-site memory. Full table in the README.
Several agents can point at the same browser at once. The first server to claim the WebSocket port serves the extension; the rest proxy through it.
Handles the pages that usually break automation
This release includes the fixes that make real applications reachable rather than just simple pages:
- Shadow DOM — including closed roots — is pierced automatically, so selectors match inside web components.
browser_snapshotdescends into them too, so the agent can see what it is expected to target. - Cross-frame search — child frames are searched in parallel when the top frame misses, so an element inside a sandboxed iframe is reachable by plain selector. Tested at 21 frames without burning the timeout budget.
- Late-rendering modals get retried for ~3s, so a dialog that mounts a beat after the click that opened it does not need a manual wait.
browser_fillworks on textareas and contenteditable, not just<input>. The DOM's value setters are branded to their own interface, and the old code always read the setter offHTMLInputElement— so filling a textarea threw "Illegal invocation" everywhere, and chat composers were unreachable.
Also fixed
- Content script injection is idempotent. Re-injection compounded: one command fired N clicks and every intercepted response was captured N times over.
- stdout is pure JSON-RPC. Two
console.logcalls were corrupting the MCP channel. - Fast pages no longer hang for 30s. The load listener was registered after navigation had already started, so a page that finished quickly was never observed completing.
output_fileworks on secondary servers, not just the one holding the port.- The options page is reachable, so the WebSocket port is actually configurable.
Tests
65 tests, no framework and no browser needed: npm test. Covers injection idempotence, shadow DOM piercing, cross-frame search, the navigation load race, and the MCP server end to end against a fake extension on a separate port.