Skip to content

Configuration

browxai is configured through an MCP-managed config store. No environment variables and no hand-edited files are required. You read and write config with tools, and it takes effect for sessions opened after the change.

Config resolves across layers, lowest to highest:

built-in defaults < env (legacy BROWX_*) < user < project < session (open_session)
  • get_config({ scope? }) returns the resolved merged view by default. Pass a scope of defaults, env, user, project, session, or resolved to read one raw layer.
  • set_config({ scope: "user" | "project", patch }) is the only supported way to persist config. It writes config.json under the workspace, which is machine-managed (do not hand-edit it). Arrays replace; the unstable.* namespace shallow-merges. Changes apply to sessions opened after the call.
  • reset_config({ scope: "user" | "project" }) clears that persistent layer.

A session scope is set per call through open_session, and wins over the persisted layers for that session only.

KeyWhat it does
testAttributesHTML attributes treated as tier-1 selector anchors. Order-sensitive: the first match on a node wins.
capabilitiesThe enabled capability set. See Capabilities and safety.
confirmRequiredWhich policy hooks route through human confirmation before dispatch.
allowedOrigins / blockedOriginsOrigin allow and block lists for navigate. Wildcards allowed; block overrides allow.
headlessLaunch managed Chromium headless.
defaultDevice / defaultViewportApplied when open_session does not specify a device or viewport.
actionTimeoutMsThe anti-wedge hard deadline on every action and read path. Default 5000.
disableWebSecurityTurn off the same-origin policy and CORS for managed and incognito sessions. Dangerous; off by default.
hideOverlaySelectorsCSS selectors for chrome or overlay elements to neutralize non-destructively on every navigation.
unstableA free-form namespace for experimental knobs. Not stable across versions.

actionTimeoutMs applies to every action body, eval_js, and the read CDP paths. The default of 5000 ms is deliberate: an action that needs longer is almost always a no-op or a wedged page op. Every action and read tool also takes a per-call timeoutMs override; raise that for one known-slow call rather than raising the global default. The value is clamped to a one-hour ceiling.

disableWebSecurity cannot be set from any environment variable. Set it only through set_config or the managed config file, so it can never be ambiently enabled. It applies to managed and incognito sessions; an attached Chrome keeps whatever flags it was launched with.

hideOverlaySelectors injects a CSS-only init script that applies pointer-events: none; display: none to matches on every navigation. It is non-destructive (no node removal, so assertions still see the DOM) and uses no agent JavaScript. Prefer it over hand-rolled per-session removal.

The BROWX_* variables below still work as a compatibility layer, one notch above built-in defaults and below the user and project layers. They are documented but no longer the recommended path. BROWX_WORKSPACE is the exception: it anchors where the config store itself lives, so it is a location, not config.

Env varDefaultWhat
BROWX_WORKSPACE~/.browxai/Workspace root. All transient state lives here. Never cwd.
BROWX_ATTACH_CDPunsetAttach to an externally launched Chrome over CDP (BYOB). Loopback hostnames only.
BROWX_HEADLESS0Managed mode only. 1 launches headless.
BROWX_TEST_ATTRIBUTESdata-testid,data-test,data-cy,data-qaSelector-anchor attributes, order-sensitive.
BROWX_CAPABILITIESread,navigation,action,humanCapability categories enabled at server start.
BROWX_CONFIRM_REQUIREDnavigate_off_allowlist,byob_actionPolicy hooks that route through human confirmation.
BROWX_ALLOWED_ORIGINSunsetAllow list for navigate. Wildcards allowed.
BROWX_BLOCKED_ORIGINSunsetBlock list; overrides the allow list.

For the complete configuration and session surface, see the tool reference.

Made by Kalebtec · GitHub · MIT licensed