control-browser
Browser automation (agent.browsers)
Use this skill for browser / web-UI tasks: opening and navigating pages, inspecting or reading rendered content, testing local apps, clicking, typing, filling, taking screenshots, and verifying visible page state.
If this skill is available in the session, treat it as required reading before browser work. Follow it before saying the browser is unavailable and before falling back to bash (curl/open), webfetch, or any other tool for a browser task.
How it works
The browser registry is driven from the Node REPL MCP js tool. In this environment its callable id normally appears as mcp__node_repl__js. The MCP frontend is shared for a workspace, but every js call runs in a fresh JavaScript kernel, so variables, imports, module cache, browser, and tab bindings do not persist. Persistent BrowserControl tabs are the continuity boundary and must be recovered from current tab facts.
Bootstrap every JavaScript call
The browser-client module is the browser entry point and is available at scripts/browser-client.mjs under this plugin's root. Resolve that root only from process.env.ZCODE_PLUGIN_ROOT (with CLAUDE_PLUGIN_ROOT as a compatibility fallback), then convert the joined path with pathToFileURL. Never derive the plugin root from this skill's base directory or leave a synthetic root placeholder for the model to resolve. If the host root is unavailable or the resolved module cannot be imported, stop and report the exact setup error.
Initialize at the start of every mcp__node_repl__js call that uses the browser. The bootstrap deliberately does not select a backend; apply the user's existing backend choice or the selection rules below after setup.