{"_id":"@botmux-ai/plugin-agent-chrome","_rev":"3-3d80941026a87549cb6db9c36b129fba","name":"@botmux-ai/plugin-agent-chrome","dist-tags":{"latest":"0.2.1"},"versions":{"0.1.1":{"name":"@botmux-ai/plugin-agent-chrome","version":"0.1.1","keywords":["botmux-plugin"],"license":"MIT","_id":"@botmux-ai/plugin-agent-chrome@0.1.1","maintainers":[{"name":"tgggbone","email":"1124414621@qq.com"},{"name":"deepcold","email":"deepcoldy@gmail.com"}],"dist":{"shasum":"ea1e8f9c06bf73d4d963946c3d71b9790f4f7915","tarball":"https://registry.npmjs.org/@botmux-ai/plugin-agent-chrome/-/plugin-agent-chrome-0.1.1.tgz","fileCount":372,"integrity":"sha512-UA3EfPgPpqGR2OhJa2mhJtR8uXdmNnkh4KjOjI8uTif2mVF46VbsQH0V7ng7aVHrsVI2w8dXQyhDrAHladEL/A==","signatures":[{"sig":"MEQCIFYi4VzL9+26TxkBKeRbN5p9jztQRrUfFmHjd7FTMPdCAiBt55gVryZl4ifZWyfarHET8Fj2N9Ynp7m2/z9j4I0qEQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17346097},"type":"commonjs","botmux":{"id":"agent-chrome","service":{"mode":"auto"},"displayName":"Agent Chrome","schemaVersion":1},"gitHead":"3f5f53b02cbf5fc7f2505d17c700c6be71228e74","scripts":{"test":"npm run build && npm run validate && node ./test/check-launcher-runtime.js","build":"node ./scripts/build.mjs","validate":"node ./scripts/validate.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"tgggbone","email":"1124414621@qq.com"},"_npmVersion":"10.9.8","description":"Agent Chrome Stack plugin for botmux.","directories":{},"_nodeVersion":"22.22.3","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.0","esbuild":"^0.28.0","puppeteer-core":"^25.2.1","chrome-devtools-mcp":"1.5.0"},"_npmOperationalInternal":{"tmp":"tmp/plugin-agent-chrome_0.1.1_1783924556330_0.010159949216681508","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@botmux-ai/plugin-agent-chrome","version":"0.2.0","keywords":["botmux-plugin"],"license":"MIT","_id":"@botmux-ai/plugin-agent-chrome@0.2.0","maintainers":[{"name":"tgggbone","email":"1124414621@qq.com"},{"name":"deepcold","email":"deepcoldy@gmail.com"}],"dist":{"shasum":"5397f2fb5dd7a1857c437e533b294c448eb82805","tarball":"https://registry.npmjs.org/@botmux-ai/plugin-agent-chrome/-/plugin-agent-chrome-0.2.0.tgz","fileCount":372,"integrity":"sha512-eDM662NsSjMXYqe86EVliuvucThq4w0C5i4G35zpYPNiFrbLA5X+K8tc06Y916iGmmHxIpPaQM5ixQyMUYgweg==","signatures":[{"sig":"MEUCIQDSvzMkcfHFEM1HRH3r1i/L/oIYY7CvCC6imcZr35OBvgIgT/7iga4QVyRhj2k6sw2W3EEDZamqUB3jXYyMfLahAIw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17426910},"type":"commonjs","botmux":{"id":"agent-chrome","service":{"mode":"auto"},"displayName":"Agent Chrome","schemaVersion":1},"gitHead":"069923d2e27763f44bbf1193331ada41fb9fa60b","scripts":{"test":"npm run build && npm run validate && node ./test/check-launcher-runtime.js","build":"node ./scripts/build.mjs","validate":"node ./scripts/validate.mjs","prepublishOnly":"npm test"},"_npmUser":{"name":"tgggbone","email":"1124414621@qq.com"},"_npmVersion":"10.9.8","description":"Agent Chrome Stack plugin for botmux.","directories":{},"_nodeVersion":"22.22.3","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"ws":"^8.18.0","react":"^19.2.7","esbuild":"^0.28.0","puppeteer-core":"^25.2.1","chrome-devtools-mcp":"1.5.0"},"_npmOperationalInternal":{"tmp":"tmp/plugin-agent-chrome_0.2.0_1783934564972_0.8067352422321927","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@botmux-ai/plugin-agent-chrome","version":"0.2.1","description":"Agent Chrome Stack plugin for botmux.","type":"commonjs","keywords":["botmux-plugin"],"scripts":{"build":"node ./scripts/build.mjs","validate":"node ./scripts/validate.mjs","test":"npm run build && npm run validate && node ./test/check-cursor-scale.mjs && node ./test/check-runtime-home.js && node ./test/check-launcher-runtime.js && node ./test/check-session-context.js && node ./test/check-broker-binding.js && node ./test/check-dashboard-copy.js","prepublishOnly":"npm test"},"devDependencies":{"@novnc/novnc":"1.7.0","chrome-devtools-mcp":"1.5.0","esbuild":"^0.28.0","puppeteer-core":"^25.2.1","react":"^19.2.7","ws":"^8.18.0"},"botmux":{"schemaVersion":1,"id":"agent-chrome","displayName":"Agent Chrome","service":{"mode":"auto"}},"publishConfig":{"registry":"https://registry.npmjs.org/","access":"public"},"license":"MIT","_id":"@botmux-ai/plugin-agent-chrome@0.2.1","_integrity":"sha512-B+7r8H3nApVzBWc9R0/8S2q1Irv8768lru1Qj9xr/Of1hbcTHirCxCRS1CFco6rGxm0uO4pk4H5B185uuBhoiQ==","_resolved":"/data00/home/wanghao.muchen/ai-workspace/artifacts/agent-chrome-botmux-plugin-0.2.1.tgz","_from":"file:/data00/home/wanghao.muchen/ai-workspace/artifacts/agent-chrome-botmux-plugin-0.2.1.tgz","_nodeVersion":"22.22.3","_npmVersion":"12.0.1","dist":{"integrity":"sha512-B+7r8H3nApVzBWc9R0/8S2q1Irv8768lru1Qj9xr/Of1hbcTHirCxCRS1CFco6rGxm0uO4pk4H5B185uuBhoiQ==","shasum":"d0f9e4a3e90b277ff16e815e31f3449fbb18f8a8","tarball":"https://registry.npmjs.org/@botmux-ai/plugin-agent-chrome/-/plugin-agent-chrome-0.2.1.tgz","fileCount":376,"unpackedSize":17845517,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDdrfB9zcDJETcbUdZa3JKK09B+yUTFSDIVyO1SpDrszAIhAKmd/fqtqaVorxeuTG0K8j9eDFEHNOGslz+gfU5fYj90"}]},"_npmUser":{"name":"tgggbone","email":"1124414621@qq.com"},"directories":{},"maintainers":[{"name":"tgggbone","email":"1124414621@qq.com"},{"name":"deepcold","email":"deepcoldy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/plugin-agent-chrome_0.2.1_1785231868137_0.7364120694372929"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-13T06:35:56.160Z","modified":"2026-07-28T09:44:28.568Z","0.1.1":"2026-07-13T06:35:56.555Z","0.2.0":"2026-07-13T09:22:45.190Z","0.2.1":"2026-07-28T09:44:28.334Z"},"license":"MIT","keywords":["botmux-plugin"],"description":"Agent Chrome Stack plugin for botmux.","maintainers":[{"name":"tgggbone","email":"1124414621@qq.com"},{"name":"deepcold","email":"deepcoldy@gmail.com"}],"readme":"# Agent Chrome Plugin\n\nBotmux plugin packaging for ACS — Agent Chrome Stack. It provides one shared\nheadful Chrome instance, per-session CDP isolation, and two noVNC viewing modes\nfor each agent CLI session: Follow Agent and Free Browsing.\n\nGitHub: https://github.com/botmux-ai/botmux-plugin-agent-chrome\n\nThe original ACS scripts are kept under `bin/` and `lib/`. Runtime state such as\nChrome profile, logs, screenshots, and manifests is intentionally excluded from\nthis repository and generated under the installed plugin directory.\n\n## Requirements\n\n- Linux with Node.js 20+, npm, Botmux, and Chrome or Chromium.\n- Xvfb, openbox, xcompmgr, wmctrl, x11vnc, websockify, xdotool,\n  ImageMagick, and curl.\n\nThe noVNC browser client is bundled into the plugin so its low-latency cursor\ncan be scaled with the embedded Dashboard viewport.\n\n`chrome-devtools-mcp@1.5.0` is a pinned build input vendored into the plugin's\nself-contained `dist/`. MCP startup uses that bundled runtime and does not keep\n`node_modules`, run `npx`, or access the npm registry on each Codex session. The launcher also selects a Node.js\n`>=20.19.0` executable instead of inheriting a potentially stale Node.js from a\nlong-running Codex daemon. Set `ACS_NODE_BIN` to override that selection.\n\nOn Debian or Ubuntu, install the system tools with:\n\n```bash\nsudo apt-get update\nsudo apt-get install -y xvfb openbox xcompmgr wmctrl x11vnc websockify \\\n  xdotool imagemagick curl\n```\n\nChrome is detected from the machine-local `/data00/google/chrome/chrome` first,\nthen from common Chrome/Chromium command names. Override it when needed:\n\n```bash\nexport ACS_CHROME_BIN=/path/to/chrome\n```\n\n## Install From npm\n\nBotmux expands the official short id to `@botmux-ai/plugin-agent-chrome`:\n\n```bash\nbotmux plugin install agent-chrome\nbotmux plugin enable agent-chrome\nbotmux plugin service start agent-chrome\nbotmux agent-chrome:status\n```\n\n## Install From The `.tgz`\n\nUse a `file:` URL so Botmux lets npm unpack the tarball and persist only its\nself-contained `dist/` runtime:\n\n```bash\nbotmux plugin install \"file:/absolute/path/botmux-ai-plugin-agent-chrome-0.2.0.tgz\"\nbotmux plugin enable agent-chrome\nbotmux plugin service start agent-chrome\nbotmux plugin service status\nbotmux agent-chrome:status\n```\n\nIf Chrome was not auto-detected, pass the override when starting or restarting\nthe service:\n\n```bash\nACS_CHROME_BIN=/path/to/chrome botmux plugin service restart agent-chrome\n```\n\nAfter enable, botmux materializes:\n\n- Skill: `agent-chrome`\n- MCP server: `agent-chrome`\n- CLI command: `botmux agent-chrome:status`\n- Dashboard page under Plugins\n- Auto PM2 service that can also be controlled by CLI/Dashboard\n\nThe service uses `auto` mode. `botmux start` and the start phase of\n`botmux restart` ensure the Xvfb + Chrome + broker stack is running. A normal\n`botmux stop` leaves it running; use `botmux stop --with-plugin` when the plugin\nservice should stop with the core. It remains controllable from Dashboard and\nwith `botmux plugin service start|stop|restart agent-chrome`.\n\nProfile, session manifests, and logs live under `~/.agent-chrome` by default,\nseparate from the replaceable plugin runtime. Before reinstalling, updating, or\nuninstalling the plugin, stop its service explicitly:\n\n```bash\nbotmux plugin service stop agent-chrome\n```\n\nBotmux rejects the lifecycle operation while the service is still running; it\ndoes not stop the service implicitly.\n\nStart a new Codex/agent session after enabling the plugin so it reloads the\n`agent-chrome` MCP configuration and skill.\n\nOpen the Agent Chrome page from the Botmux Dashboard after an agent creates its\nfirst browser page. The page joins each browser connection to its Botmux CLI\nsession and provides:\n\n- A session list, with the Bot name and CLI shown as secondary context.\n- **Follow Agent**, which tracks the page currently operated by the agent.\n- **Free Browsing**, which keeps one stable noVNC URL while you switch among the\n  pages owned by that session.\n- View-only mode by default, with an explicit switch for keyboard and mouse\n  input.\n- Copy-link and independent-window actions for the current noVNC stream.\n\nThe independent-window action currently opens the raw noVNC view. A dedicated\nstandalone viewer with its own page switcher is intentionally deferred.\n\n## Local Development\n\n```bash\nnpm install\nnpm test\nbotmux plugin install . --link\nbotmux plugin enable agent-chrome\nbotmux plugin service start agent-chrome\nbotmux agent-chrome:status\n```\n\nPublish from the repository root with `npm publish`. The root `package.json` is\nthe npm envelope; Botmux discards it after reading the manifest and installs\nonly `dist/`.\n\n## ACS Architecture\n\nACS provides:\n\n- Single shared Chrome profile for live login reuse.\n- Stable Botmux session binding and per-session target filtering.\n- Per-session kiosk windows and noVNC views.\n- MCP connection through `bin/mcp-launch.sh`.\n- Structured native browser-session tools through the Agent Chrome MCP.\n\nDefault ports:\n\n- Xvfb: `:77`\n- Chrome DevTools: `127.0.0.1:9223`\n- ACS broker: `9300`\n- per-session VNC: `5910+`\n- per-session noVNC: `6090+`\n\n## Runtime Commands\n\n```bash\nbash bin/acs-up.sh\nbash bin/acs-down.sh --all\ncurl http://127.0.0.1:9300/health\ncurl http://127.0.0.1:9300/sessions\n```\n\nThe Agent Chrome MCP adds two session-scoped tools alongside the standard Chrome\nDevTools tools:\n\n- `browser_session_info`\n- `browser_session_set_writable`\n\nFour entry tools require the exact current Botmux `<session_id>` in a\n`sessionId` argument: `list_pages`, `new_page`, `browser_session_info`, and\n`browser_session_set_writable`. The wrapper consumes that argument, binds its\nshort-lived MCP transport to the stable Botmux session, and does not forward the\nextra argument to the upstream Chrome DevTools MCP. All other Chrome tools reuse\nthe established binding. The stable session id is identity only; broker access\ncontinues to use a separate random transport token.\n\nIf the CLI/MCP process reconnects, a new transport can rebind to the same\n`sessionId` during the broker grace period, preserving its pages and noVNC view.\n`browser_session_info` includes both follow and free-view noVNC URLs.\n\n`bin/browser-session` remains available for operator diagnostics only and\nrequires an explicit `ACS_SESSION_TOKEN`. Agents should use the MCP tools.\n\nStop or restart the browser stack with:\n\n```bash\nbotmux plugin service stop agent-chrome\nbotmux plugin service restart agent-chrome\n```\n\nThe broker overview and per-session noVNC ports expose browser-session metadata\nand interactive views. Keep ports `9300` and `6090+` on a trusted network or\nrestrict them with the host firewall.\n\n## Test Coverage From ACS\n\nThe original ACS test scripts are preserved under `test/`:\n\n- `check-dpr.js`\n- `check-window-map.js`\n- `check-isolation.js`\n- `check-vnc.js`\n- `check-puppeteer.js`\n- `check-writable-toggle.js`\n- `check-view-modes.js`\n- `check-3session.js`\n- `check-mcp-e2e.js`\n\nThese tests require Chrome, Xvfb, xdotool, x11vnc, websockify, and the\nlocal machine runtime environment.\n","readmeFilename":"README.md"}