feat(browser): add chromeFlags support for browser profiles

Adds support for custom Chrome command-line flags via browser profile configuration.

This enables users to:
- Bypass automation detection when using browser extensions
- Enable experimental Chrome features
- Adjust performance/security settings
- Work around site compatibility issues

Usage:
{
  "browser": {
    "profiles": {
      "stealth": {
        "chromeFlags": [
          "--disable-blink-features=AutomationControlled",
          "--disable-features=IsolateOrigins,site-per-process"
        ]
      }
    }
  }
}

Changes:
- Add chromeFlags?: string[] to BrowserProfileConfig type
- Pass chromeFlags through config resolution
- Apply flags in launchClawdChrome()
- Add comprehensive documentation with examples

Fixes compatibility issues with password managers, SSO extensions,
web wallets, and other browser extensions that fail when Chrome
detects automation.
This commit is contained in:
Atlas 2026-01-27 14:24:31 -08:00
parent 0b1c8db0ca
commit d883fb6b06
4 changed files with 277 additions and 0 deletions

View File

@ -0,0 +1,268 @@
# Browser Chrome Flags Configuration
## Overview
You can add custom Chrome command-line flags to browser profiles via the `chromeFlags` configuration option. This is useful for:
- Bypassing automation detection when using browser extensions
- Enabling experimental Chrome features
- Adjusting performance or security settings
- Working around specific site compatibility issues
## Configuration
Add `chromeFlags` to any browser profile in your `moltbot.json`:
```json
{
"browser": {
"enabled": true,
"profiles": {
"stealth": {
"chromeFlags": [
"--disable-blink-features=AutomationControlled",
"--disable-features=IsolateOrigins,site-per-process",
"--disable-site-isolation-trials"
]
}
}
}
}
```
## Common Use Cases
### 1. Stealth Mode (Bypass Automation Detection)
**Problem:** Some websites detect browser automation and block functionality or show CAPTCHAs.
**Solution:**
```json
{
"browser": {
"profiles": {
"stealth": {
"chromeFlags": [
"--disable-blink-features=AutomationControlled",
"--disable-features=IsolateOrigins,site-per-process",
"--disable-site-isolation-trials"
]
}
}
}
}
```
**Use with:** Sites that require browser extensions (password managers, auth extensions, web wallets)
### 2. Working with Browser Extensions
**Problem:** Browser extensions (password managers, SSO, etc.) may be blocked when Chrome detects automation.
**Solution:**
```json
{
"browser": {
"profiles": {
"extensions": {
"chromeFlags": [
"--disable-blink-features=AutomationControlled"
]
}
}
}
}
```
**Examples:**
- 1Password browser extension + automation
- Okta/Azure AD SSO extensions
- VPN browser extensions
- Development tools (React DevTools, Vue DevTools)
### 3. Performance Tuning
**Problem:** Chrome uses too much memory or CPU during automation.
**Solution:**
```json
{
"browser": {
"profiles": {
"lightweight": {
"chromeFlags": [
"--disable-gpu",
"--disable-software-rasterizer",
"--disable-dev-shm-usage",
"--disable-extensions"
]
}
}
}
}
```
### 4. Development & Debugging
**Problem:** Need to enable Chrome flags for testing or development.
**Solution:**
```json
{
"browser": {
"profiles": {
"dev": {
"chromeFlags": [
"--auto-open-devtools-for-tabs",
"--enable-logging",
"--v=1"
]
}
}
}
}
```
## Security Considerations
⚠️ **Important:** Some Chrome flags reduce browser security protections.
**Flags that reduce security:**
- `--disable-blink-features=AutomationControlled` - Disables automation detection (makes browser more vulnerable to automated attacks)
- `--disable-features=IsolateOrigins,site-per-process` - Disables site isolation (reduces protection against malicious sites)
- `--disable-web-security` - **NEVER USE** - Completely disables web security
- `--no-sandbox` - **DANGEROUS** - Disables Chrome's security sandbox
**Best Practices:**
1. Only use flags you understand
2. Only enable stealth mode when necessary (e.g., when extensions are required)
3. Use separate profiles for sensitive work
4. Document why each flag is needed
5. Regularly review your configuration
## Complete Example
```json
{
"browser": {
"enabled": true,
"defaultProfile": "normal",
"profiles": {
"normal": {
"cdpPort": 9222,
"color": "#FF4500"
},
"stealth": {
"cdpPort": 9223,
"color": "#00AA00",
"chromeFlags": [
"--disable-blink-features=AutomationControlled",
"--disable-features=IsolateOrigins,site-per-process"
]
},
"dev": {
"cdpPort": 9224,
"color": "#0000FF",
"chromeFlags": [
"--auto-open-devtools-for-tabs",
"--enable-logging"
]
}
}
}
}
```
**Usage:**
```bash
# Use normal profile (default)
moltbot browser open https://example.com
# Use stealth profile for sites requiring extensions
moltbot browser open https://example.com --profile stealth
# Use dev profile for debugging
moltbot browser open https://example.com --profile dev
```
## Available Chrome Flags
Chrome supports hundreds of command-line flags. Here are some commonly useful ones:
### Automation & Detection
- `--disable-blink-features=AutomationControlled` - Hide automation detection
- `--disable-infobars` - Hide "Chrome is being controlled" banner
### Performance
- `--disable-gpu` - Disable GPU acceleration (useful in headless/containers)
- `--disable-dev-shm-usage` - Reduce shared memory usage (Linux containers)
- `--disk-cache-size=0` - Disable disk cache
- `--media-cache-size=0` - Disable media cache
### Features
- `--disable-features=Translate` - Disable Google Translate
- `--enable-features=NetworkService` - Enable network service
- `--disable-extensions` - Disable all extensions
### Debugging
- `--auto-open-devtools-for-tabs` - Auto-open DevTools
- `--enable-logging` - Enable Chrome logging
- `--v=1` - Verbose logging level
### Display
- `--window-size=1920,1080` - Set window size
- `--start-maximized` - Start maximized
- `--start-fullscreen` - Start in fullscreen
**Full list:** Run `chrome --help` or see [Chromium Command Line Switches](https://peter.sh/experiments/chromium-command-line-switches/)
## Troubleshooting
### Flags not working?
1. Check flag spelling (flags are case-sensitive)
2. Verify Chrome version supports the flag (some flags are version-specific)
3. Check logs for errors: `moltbot browser serve --verbose`
4. Try flags individually to isolate issues
### Chrome won't start?
1. Check for conflicting flags
2. Remove flags one by one to find the problematic one
3. Check Chrome version compatibility
4. Verify you're not using deprecated flags
### Still seeing "Chrome is being controlled"?
This is normal behavior. The `--disable-blink-features=AutomationControlled` flag prevents JavaScript detection, but the Chrome UI banner may still appear. Most sites only check JavaScript, so this is usually fine.
## Migration from Manual Chrome Launch
If you were previously launching Chrome manually with flags, you can now move them to the config:
**Before:**
```bash
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
--disable-blink-features=AutomationControlled \
--user-data-dir="/path/to/profile"
```
**After:**
```json
{
"browser": {
"profiles": {
"myprofile": {
"chromeFlags": [
"--disable-blink-features=AutomationControlled"
]
}
}
}
}
```
Then use: `moltbot browser open --profile myprofile`
## Related Documentation
- [Browser Tool Documentation](https://docs.molt.bot/tools/browser)
- [Browser Configuration Reference](https://docs.molt.bot/gateway/configuration#browser)
- [Security Best Practices](https://docs.molt.bot/gateway/security)

View File

@ -204,6 +204,11 @@ export async function launchClawdChrome(
args.push("--disable-dev-shm-usage"); args.push("--disable-dev-shm-usage");
} }
// Add custom Chrome flags from profile config (e.g., for stealth mode, experimental features)
if (profile.chromeFlags && profile.chromeFlags.length > 0) {
args.push(...profile.chromeFlags);
}
// Always open a blank tab to ensure a target exists. // Always open a blank tab to ensure a target exists.
args.push("about:blank"); args.push("about:blank");

View File

@ -40,6 +40,7 @@ export type ResolvedBrowserProfile = {
cdpIsLoopback: boolean; cdpIsLoopback: boolean;
color: string; color: string;
driver: "clawd" | "extension"; driver: "clawd" | "extension";
chromeFlags?: string[];
}; };
function isLoopbackHost(host: string) { function isLoopbackHost(host: string) {
@ -253,6 +254,7 @@ export function resolveProfile(
cdpIsLoopback: isLoopbackHost(cdpHost), cdpIsLoopback: isLoopbackHost(cdpHost),
color: profile.color, color: profile.color,
driver, driver,
chromeFlags: profile.chromeFlags,
}; };
} }

View File

@ -7,6 +7,8 @@ export type BrowserProfileConfig = {
driver?: "clawd" | "extension"; driver?: "clawd" | "extension";
/** Profile color (hex). Auto-assigned at creation. */ /** Profile color (hex). Auto-assigned at creation. */
color: string; color: string;
/** Additional Chrome command-line flags for this profile. Use to bypass automation detection or enable experimental features. */
chromeFlags?: string[];
}; };
export type BrowserSnapshotDefaults = { export type BrowserSnapshotDefaults = {
/** Default snapshot mode (applies when mode is not provided). */ /** Default snapshot mode (applies when mode is not provided). */