extension_start
Run the PRODUCTION build in a browser: build the project, serve it, and launch.
Quick start
Launch the production build in Edge
Asked for the production build, the agent builds it and launches it in Chrome.
How the agent uses it
There is no hot module replacement and no control channel, so your edits are not picked up and extension_eval, extension_storage, extension_reload, extension_open and extension_dom_snapshot cannot attach to this session. Use extension_dev while writing code, and this to check what actually ships. Pass build:false to launch an existing dist/<browser> without rebuilding, or outputPath to launch any prebuilt unpacked extension directory, one another toolchain produced included, which implies build:false. The answer says what it confirmed (the engine process, and the browser pid the launcher recorded once the contract lands) and what a production session cannot confirm (that the browser loaded the extension: it opens no debug port and has no console stream), and names extension_dev for a proven load.
Reference
| Group | local, on by default |
| Tier | Run |
| Needs | none |
| Read only | no |
| Destructive | no |
| Idempotent | no |
| Reaches the open web | no |
Inputs
| Input | Type | Required | Default | What it does |
|---|---|---|---|---|
projectPath | string | yes | Extension project root | |
browser | "chrome" | "chromium" | "edge" | "brave" | "opera" | "vivaldi" | "yandex" | "firefox" | "waterfox" | "librewolf" | "zen" | "floorp" | "safari" | "chromium-based" | "gecko-based" | "firefox-based" | "webkit-based" | no | "chrome" | |
build | boolean | no | true | Build before serving. false serves the existing dist/<browser> as-is and fails when there is none. |
polyfill | boolean | no | true | Apply cross-browser polyfill (build only) |
port | number | no | Passed to the engine as --port (0 for auto-assign). A production start serves nothing over it today; it matters only to a toolchain that reads it. | |
noBrowser | boolean | no | false | Build (or, with build:false, check the dist) without launching a browser. A production start serves nothing, so with no browser the engine process ends once the build does; read the result with extension_build rather than a session. |
outputPath | string | no | An existing unpacked extension directory to launch as it is (a manifest.json at its root), for an artifact built by another toolchain or an exact release candidate. Implies build:false; projectPath still names the project the session belongs to. Relative paths resolve against projectPath. | |
profile | string | no | Profile path, or "false" to reuse the real user profile. Omit for a throwaway one. | |
startingUrl | string | no | URL the browser opens on launch | |
chromiumBinary | string | no | Custom Chromium-based binary to launch; browser still names the target family the engine builds for (chromium-based when none is given). | |
geckoBinary | string | no | Custom Gecko/Firefox binary to launch; browser still names the target family the engine builds for (gecko-based when none is given). | |
host | string | no | Bind host, default 127.0.0.1. Use 0.0.0.0 in Docker or devcontainers. | |
publicHost | string | no | Host the browser dials for HMR and reload when it differs from the bind host | |
extensions | array of string | no | Extra extension paths or store URLs to load alongside the project |
Next
- MCP server: install, the two groups and the session gates
- Install in your client
extension_dev: Run the extension while you edit it: dev build, hot module replacement, and a browser with the extension loaded.extension_stop: Stop a session that extension_dev or extension_start is running: terminate the server and the browser it launched, and remove the live-preview carrier if extension_dev placed one.extension_wait: Wait for a running dev or start session to be ready.