browse-config

v2026.09.24

Generate camoufox configuration for the `browse` CLI by INTERVIEW, not hand-edited JSON — an AskUserQuestion-guided flow that turns a chosen preset (stealth, fast-scraping, Google-safe, or a fully custom walkthrough) into a valid `browse.json` camoufox section or a named `.browse/camoufox-profiles/<name>.json`, using camelCase keys, merging without clobbering existing fields, and writing proxy credentials to file only. Use to create or tune an anti-detection browse profile before stealth browsing.

GitHub
Install command
npx skhub add ulpi-io/browse-config
Markdown
SKILL.md

browse-config: Camoufox Configuration Generator

Step 0: Ask what the user needs

Use AskUserQuestion to determine the goal. Offer these presets:

PresetDescription
Stealth browsingFor scraping protected sites. Enables geoip, humanize, default OS fingerprint.
Fast scrapingMinimal footprint. Blocks images, WebRTC, WebGL. Enables disk cache.
Google-safeFor Google search without "unusual traffic" blocks. Enables geoip, humanize, random OS.
CustomWalk through each option group interactively.

Preset defaults

Stealth browsing:

{
  "geoip": true,
  "humanize": true
}

Fast scraping:

{
  "blockImages": true,
  "blockWebrtc": true,
  "blockWebgl": true,
  "enableCache": true
}

Google-safe:

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

Step 1: Custom configuration (skip if preset chosen)

If the user chose "Custom", ask about each option group using AskUserQuestion. Present one group at a time.

Identity

  • os (string or array) -- target OS fingerprint: "windows", "macos", "linux", or an array for random selection
  • locale (string or array) -- browser locale, e.g. "en-US" or ["en-US", "en-GB"]
  • fingerprint (object) -- advanced fingerprint overrides (most users skip this)

Privacy

  • blockWebrtc (boolean) -- block WebRTC to prevent IP leaks
  • blockWebgl (boolean) -- block WebGL fingerprinting
  • blockImages (boolean) -- block image loading (also improves speed)

Performance

  • enableCache (boolean) -- enable browser disk cache
  • blockImages (boolean) -- already covered in Privacy, mention speed benefit here

Network

  • proxy (string or object) -- proxy URL like "http://user:pass@host:port" or {"server":"...","username":"...","password":"..."}
  • geoip (string or boolean) -- true to auto-derive from proxy IP, or a country code like "US"

Behavior

  • humanize (boolean or number) -- true for default human-like delays, or a number (0.5-2.0) to control speed

Advanced (offer only if user asks)

  • addons (string[]) -- Firefox addon paths to load
  • excludeAddons (string[]) -- built-in addons to skip
  • firefoxUserPrefs (Record) -- raw Firefox about:config preferences
  • args (string[]) -- extra browser launch arguments
  • fonts (string[]) -- custom font list
  • customFontsOnly (boolean) -- use only custom fonts
  • screen (object) -- {minWidth, maxWidth, minHeight, maxHeight}
  • window ([width, height]) -- fixed window size
  • ffVersion (number) -- target Firefox version
  • headless (boolean or "virtual") -- headless mode (not recommended for anti-detection)
  • mainWorldEval (boolean) -- enable main world JavaScript eval
  • executablePath (string) -- custom camoufox binary path
  • env (Record) -- environment variables for the browser process
  • virtualDisplay (string) -- virtual display config (Linux only)
  • disableCoop (boolean) -- disable Cross-Origin-Opener-Policy headers
  • debug (boolean) -- enable debug logging

Step 2: Ask where to save

Use AskUserQuestion with two options:

  1. browse.json -- adds a "camoufox" section to the project's browse.json. Applied automatically whenever --runtime camoufox is used.
  2. Named profile -- saves to .browse/camoufox-profiles/<name>.json. Used with --camoufox-profile <name>. Good for per-scenario configs (e.g. "google", "scrape", "stealth").

If the user picks a named profile, ask for the profile name.

Step 3: Generate and write the file

If browse.json

Read the existing browse.json first (if it exists). Merge the new camoufox key into it. Write the result:

{
  "camoufox": {
    "geoip": true,
    "humanize": true
  }
}

If named profile

Create the directory .browse/camoufox-profiles/ if needed. Write just the config object:

{
  "geoip": true,
  "humanize": true,
  "os": "windows"
}

Step 4: Show usage

After writing the file, tell the user exactly how to use it.

If browse.json:

Run: browse --runtime camoufox goto <url>
The camoufox section is applied automatically.

If named profile:

Run: browse --runtime camoufox --camoufox-profile <name> goto <url>

Always note: "The --camoufox-profile flag only applies when starting a new server. If a server is already running, stop it first with browse stop."

All CamoufoxConfig options

All keys use camelCase in JSON. They are auto-mapped to snake_case for camoufox-js internally.

KeyTypeDescription
osstring or string[]Target OS fingerprint
blockImagesbooleanBlock image loading
blockWebrtcbooleanBlock WebRTC
blockWebglbooleanBlock WebGL
disableCoopbooleanDisable COOP headers
geoipstring or booleanGeoIP spoofing (true or country code)
humanizeboolean or numberHuman-like delays (true or speed factor)
localestring or string[]Browser locale
addonsstring[]Firefox addon paths
fontsstring[]Custom fonts
customFontsOnlybooleanOnly use custom fonts
screenobjectScreen size range ({minWidth, maxWidth, minHeight, maxHeight})
window[number, number]Fixed window size
fingerprintobjectFingerprint overrides
ffVersionnumberFirefox version
headlessboolean or "virtual"Headless mode
mainWorldEvalbooleanMain world eval
firefoxUserPrefsRecordFirefox about:config prefs
proxystring or objectProxy config
enableCachebooleanEnable disk cache
debugbooleanDebug logging
excludeAddonsstring[]Addons to exclude
executablePathstringCustom browser path
argsstring[]Extra browser args
envRecordEnvironment variables
virtualDisplaystringVirtual display (Linux)

Guardrails

  • Always use AskUserQuestion before generating config. Do not assume preferences.
  • Use camelCase keys in all generated JSON (the CLI handles snake_case mapping).
  • Never overwrite existing browse.json fields outside the camoufox key.
  • Never include proxy credentials in output shown to the user. Write them to the file only.
  • Do not include options the user did not ask for or confirm, beyond the preset defaults.
Discovery
Tags

No tags published for this skill.

Version
Latest version metadata

Version

v2026.09.24

Published

Sep 24, 2026

Category

Uncategorized

License

Not specified

Source path

browse-config

Default branch

main

Latest commit

b3e5e33

Tree SHA

a325b89