@ulpi/browse

browse.json

Project-level configuration file for @ulpi/browse.

Overview

Create a browse.json file in your project root to set default options. Every command respects these settings unless overridden by CLI flags.

{
  "session": "my-agent",
  "json": true,
  "context": true,
  "contentBoundaries": true,
  "allowedDomains": ["example.com", "*.api.io"],
  "idleTimeout": 3600000,
  "viewport": "1280x720",
  "device": "iPhone 14",
  "runtime": "playwright"
}

Fields

FieldTypeDefaultDescription
sessionstring"default"Named session for isolation
jsonbooleanfalseWrap output as {success, data, command}
contextbooleanfalseEnable action context on write commands
contentBoundariesbooleanfalseNonce-delimited output for LLM safety
allowedDomainsstring[][]Block navigation outside these domains
idleTimeoutnumber1800000Session auto-close timeout (ms)
viewportstring"1920x1080"Default viewport size
devicestringDevice emulation preset
runtimestring"playwright"Browser runtime (playwright, rebrowser, lightpanda, camoufox, chrome)
camoufoxobject{}Camoufox browser configuration (see below)

Camoufox Configuration

The camoufox section configures the camoufox-js anti-detection Firefox runtime. These options only take effect when using --runtime camoufox.

{
  "camoufox": {
    "geoip": true,
    "humanize": true,
    "os": ["windows", "macos", "linux"],
    "blockWebrtc": true
  }
}

All 26 supported options (camelCase in config, auto-mapped to camoufox-js snake_case):

FieldTypeDescription
osstring | string[]Target OS fingerprint. Array = random per launch.
blockImagesbooleanBlock image loading
blockWebrtcbooleanBlock WebRTC (prevents IP leak)
blockWebglbooleanBlock WebGL
disableCoopbooleanDisable COOP headers
geoipstring | booleanGeoIP spoofing. true = auto from exit IP. String = country code.
humanizeboolean | numberHuman-like interaction delays. true = default. Number = speed multiplier.
localestring | string[]Browser locale
addonsstring[]Firefox addon paths (.xpi)
fontsstring[]Custom font list
customFontsOnlybooleanOnly use custom fonts
screenobjectScreen size range: { minWidth, maxWidth, minHeight, maxHeight }
window[number, number]Window size [width, height]
fingerprintobjectFingerprint overrides
ffVersionnumberFirefox version to emulate
headlessboolean | "virtual"Headless mode. "virtual" requires Xvfb on Linux.
mainWorldEvalbooleanEnable main world evaluation
firefoxUserPrefsobjectFirefox about:config preferences
proxystring | objectProxy config. String = URL. Object = { server, username, password }
enableCachebooleanEnable disk cache
debugbooleanDebug mode
excludeAddonsstring[]Addons to exclude from default set
executablePathstringCustom Firefox binary path
argsstring[]Extra browser launch arguments
envobjectEnvironment variables for the browser process
virtualDisplaystringVirtual display (Linux, e.g. ":99")

Named Profiles

Save per-scenario presets as .browse/camoufox-profiles/<name>.json:

// .browse/camoufox-profiles/stealth-google.json
{
  "geoip": true,
  "humanize": true,
  "os": ["windows", "macos", "linux"],
  "blockWebrtc": true
}

Use with --camoufox-profile:

browse --runtime camoufox --camoufox-profile stealth-google goto https://google.com

Profile values merge over browse.json defaults — profile wins on conflict.

List available profiles:

browse profiles

Precedence

CLI flags override browse.json values. Environment variables override both.

CLI flags > Environment variables > browse.json > Built-in defaults

On this page