browse-config
Guided configuration generator for the browse CLI's camoufox integration. Asks the user questions to build a browse.json camoufox section or a named profile JSON file for stealth, fast-scraping, Google-safe, or custom setups.
What this skill does
# browse-config: Camoufox Configuration Generator
## Step 0: Ask what the user needs
Use AskUserQuestion to determine the goal. Offer these presets:
| Preset | Description |
|--------|-------------|
| **Stealth browsing** | For scraping protected sites. Enables geoip, humanize, default OS fingerprint. |
| **Fast scraping** | Minimal footprint. Blocks images, WebRTC, WebGL. Enables disk cache. |
| **Google-safe** | For Google search without "unusual traffic" blocks. Enables geoip, humanize, random OS. |
| **Custom** | Walk through each option group interactively. |
### Preset defaults
**Stealth browsing:**
```json
{
"geoip": true,
"humanize": true
}
```
**Fast scraping:**
```json
{
"blockImages": true,
"blockWebrtc": true,
"blockWebgl": true,
"enableCache": true
}
```
**Google-safe:**
```json
{
"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:
```json
{
"camoufox": {
"geoip": true,
"humanize": true
}
}
```
### If named profile
Create the directory `.browse/camoufox-profiles/` if needed. Write just the config object:
```json
{
"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.
| Key | Type | Description |
|-----|------|-------------|
| `os` | string or string[] | Target OS fingerprint |
| `blockImages` | boolean | Block image loading |
| `blockWebrtc` | boolean | Block WebRTC |
| `blockWebgl` | boolean | Block WebGL |
| `disableCoop` | boolean | Disable COOP headers |
| `geoip` | string or boolean | GeoIP spoofing (true or country code) |
| `humanize` | boolean or number | Human-like delays (true or speed factor) |
| `locale` | string or string[] | Browser locale |
| `addons` | string[] | Firefox addon paths |
| `fonts` | string[] | Custom fonts |
| `customFontsOnly` | boolean | Only use custom fonts |
| `screen` | object | Screen size range ({minWidth, maxWidth, minHeight, maxHeight}) |
| `window` | [number, number] | Fixed window size |
| `fingerprint` | object | Fingerprint overrides |
| `ffVersion` | number | Firefox version |
| `headless` | boolean or "virtual" | Headless mode |
| `mainWorldEval` | boolean | Main world eval |
| `firefoxUserPrefs` | Record | Firefox about:config prefs |
| `proxy` | string or object | Proxy config |
| `enableCache` | boolean | Enable disk cache |
| `debug` | boolean | Debug logging |
| `excludeAddons` | string[] | Addons to exclude |
| `executablePath` | string | Custom browser path |
| `args` | string[] | Extra browser args |
| `env` | Record | Environment variables |
| `virtualDisplay` | string | Virtual 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.
Related in General
modeling-omnistudio-epc-catalog
IncludedSalesforce Industries CME EPC product-modeling skill for Product2-based catalog creation. Use when creating EPC products, configuring product attributes, building offer bundles with Product Child Items, or reviewing EPC DataPack JSON metadata for product catalog changes. TRIGGER when: user creates or updates Product2 EPC records, AttributeAssignment payloads, AttributeMetadata/AttributeDefaultValues, Offer bundles, or ProductChildItem relationships. DO NOT TRIGGER when: designing OmniScripts/FlexCards/Integration Procedures (use building-omnistudio-omniscript, building-omnistudio-flexcard, or building-omnistudio-integration-procedure), implementing Apex business logic (use generating-apex), or troubleshooting deployment pipelines (use deploying-metadata).
relationship-science-coach
IncludedUse this skill for direct, practical adult relationship coaching: couples conflict, repair, trust, marriage, dating, flirting, attachment patterns, emotional connection, sex, desire differences, eroticism, kink negotiation, affection, love languages, breakups, and long-term passion. Draw on Gottman, EFT and Hold Me Tight, attachment science, modern sex research, Perel, Nagoski, Kerner, Schnarch, Love and Stosny, and flexible love-language tools. Be concrete and low-hedge. Redirect only for imminent danger, abuse, coercive control, minors, non-consent, self-harm, stalking, or medical/legal/psychiatric decisions.
building-sf-integrations
IncludedSalesforce integration architecture and runtime plumbing with 120-point scoring. Use this skill to set up Named Credentials, External Credentials, External Services, REST/SOAP callout patterns, Platform Events, and Change Data Capture. TRIGGER when: user sets up Named Credentials, External Services, REST/SOAP callouts, Platform Events, CDC, or touches .namedCredential-meta.xml files. DO NOT TRIGGER when: Connected App/OAuth config (use configuring-connected-apps), Apex-only logic (use generating-apex), or data import/export (use handling-sf-data).
venue-templates
IncludedAccess comprehensive LaTeX templates, formatting requirements, and submission guidelines for major scientific publication venues (Nature, Science, PLOS, IEEE, ACM), academic conferences (NeurIPS, ICML, CVPR, CHI), research posters, and grant proposals (NSF, NIH, DOE, DARPA). This skill should be used when preparing manuscripts for journal submission, conference papers, research posters, or grant proposals and need venue-specific formatting requirements and templates.
let-fate-decide
IncludedDraws the 12 Houses of the Zodiac Tarot spread to inject entropy into planning when prompts are vague, ambiguous, or casually delegated. Interprets the spread to guide next steps. Use when the user says 'let fate decide', 'YOLO', 'whatever', 'idk', or other nonchalant phrases, makes Yu-Gi-Oh references, or when you are about to arbitrarily pick between multiple reasonable approaches. Prefer over ask-questions-if-underspecified when the user's tone is casual or playful rather than precision-seeking.
net-ops
IncludedCross-platform network troubleshooting (Windows, macOS, Linux) via local or remote shell. Use for: DNS broken, can't resolve hostnames, nslookup/dig works but apps fail, NRPT, WFP, scutil, /etc/resolver, systemd-resolved, /etc/resolv.conf, NetworkManager, VPN DNS leak residue (ProtonVPN/Mullvad/WireGuard/AnyConnect), AV/firewall blocking DNS or DoH, Tailscale DNS interaction, intermittent connectivity, remote diagnostics over SSH.