Browser (openclaw-managed)
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:3
summary: "Complete reference for every OpenClaw config key, defaults, and channel settings"
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:11
Every field available in ~/.openclaw/openclaw.json. For a task-oriented overview, see [Configuration](/gateway/configuration).
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:13
Config format is JSON5 (comments + trailing commas allowed). All fields are optional — OpenClaw uses safe defaults when omitted.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:136
// authDir: "~/.openclaw/credentials/whatsapp/biz",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:146
- Legacy single-account Baileys auth dir is migrated by
openclaw doctorintowhatsapp/default.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:207
- In multi-account setups (2+ account ids), set an explicit default (
channels.telegram.defaultAccountorchannels.telegram.accounts.default) to avoid fallback routing;openclaw doctorwarns when this is missing or invalid.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:243
dm: { enabled: true, groupEnabled: false, groupChannels: ["openclaw-dm"] },
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:246
slug: "friends-of-openclaw",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:322
- OpenClaw additionally attempts voice receive recovery by leaving/rejoining a voice session after repeated decrypt failures.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:405
name: "openclaw",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:443
Mattermost ships as a plugin: openclaw plugins install @openclaw/mattermost.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:474
commands.callbackUrlmust resolve to the OpenClaw gateway endpoint and be reachable from the Mattermost server.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:531
OpenClaw spawns imsg rpc (JSON-RPC over stdio). No daemon or port required.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:687
- If you add a non-default account via
openclaw channels add(or channel onboarding) while still on a single-account top-level channel config, OpenClaw moves account-scoped top-level single-account values intochannels.<channel>.accounts.defaultfirst so the original account keeps working.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:689
openclaw doctor --fixalso repairs mixed shapes by moving account-scoped top-level single-account values intoaccounts.defaultwhen named accounts exist butdefaultis missing.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:712
list: [{ id: "main", groupChat: { mentionPatterns: ["@openclaw", "openclaw"] } }],
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:754
groupChat: { mentionPatterns: ["reisponde", "@openclaw"] },
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:789
config: trueenables/config(reads/writesopenclaw.json). For gatewaychat.sendclients, persistent/config set|unsetwrites also requireoperator.admin; read-only/config showstays available to normal write-scoped operator clients.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:803
Default: ~/.openclaw/workspace.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:807
agents: { defaults: { workspace: "~/.openclaw/workspace" } },
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:813
Optional repository root shown in the system prompt's Runtime line. If unset, OpenClaw auto-detects by walking upward from the workspace.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:817
agents: { defaults: { repoRoot: "~/Projects/openclaw" } },
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:958
elevatedDefault: default elevated-output level for agents. Values:"off","on","ask","full". Default:"on".
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:959
model.primary: formatprovider/model(e.g.anthropic/claude-opus-4-6). If you omit the provider, OpenClaw assumesanthropic(deprecated).
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1080
timeoutSeconds: maximum seconds allowed for a single compaction operation before OpenClaw aborts it. Default:900.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1186
workspaceRoot: "~/.openclaw/sandboxes",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1188
image: "openclaw-sandbox:bookworm-slim",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1189
containerPrefix: "openclaw-sbx-",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1207
apparmorProfile: "openclaw-sandbox",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1215
workspaceRoot: "/tmp/openclaw-sandboxes",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1228
image: "openclaw-sandbox-browser:bookworm-slim",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1229
network: "openclaw-sandbox-browser",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1230
cdpPort: 9222,
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1231
cdpSourceRange: "172.21.0.1/32",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1287
identityData/certificateData/knownHostsData: inline contents or SecretRefs that OpenClaw materializes into temp files at runtime
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1307
none: per-scope sandbox workspace under~/.openclaw/sandboxes
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1327
from: "openclaw",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1348
In remote mode, host-local edits made outside OpenClaw are not synced into the sandbox automatically after the seed step.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1361
Sandboxed browser (sandbox.browser.enabled): Chromium + CDP in a container. noVNC URL injected into system prompt. Does not require browser.enabled in openclaw.json.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1362
noVNC observer access uses VNC auth by default and OpenClaw emits a short-lived token URL (instead of exposing the password in the shared URL).
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1365
networkdefaults toopenclaw-sandbox-browser(dedicated bridge network). Set tobridgeonly when you explicitly want global bridge connectivity.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1366
cdpSourceRangeoptionally restricts CDP ingress at the container edge to a CIDR range (for example172.21.0.1/32).
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1370
--remote-debugging-port=<derived from OPENCLAW_BROWSER_CDP_PORT>
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1388
OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0 if WebGL/3D usage requires it.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1389
OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0re-enables extensions if your workflow
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1392
OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>; set 0 to use Chromium's
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1419
workspace: "~/.openclaw/workspace",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1420
agentDir: "~/.openclaw/agents/main/agent",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1432
groupChat: { mentionPatterns: ["@openclaw"] },
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1440
cwd: "/workspace/openclaw",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1480
{ id: "home", default: true, workspace: "~/.openclaw/workspace-home" },
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1481
{ id: "work", workspace: "~/.openclaw/workspace-work" },
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1511
For type: "acp" entries, OpenClaw resolves by exact conversation identity (match.channel + account + match.peer.id) and does not use the route binding tier order above.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1523
workspace: "~/.openclaw/workspace-personal",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1541
workspace: "~/.openclaw/workspace-family",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1570
workspace: "~/.openclaw/workspace-public",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1633
store: "~/.openclaw/agents/{agentId}/sessions/sessions.json",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1673
- If parent
totalTokensis above this value, OpenClaw starts a fresh thread session instead of inheriting parent transcript history.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1768
prefsPath: "~/.openclaw/settings/tts.json",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1801
- When
openai.baseUrlpoints to a non-OpenAI endpoint, OpenClaw treats it as an OpenAI-compatible TTS server and relaxes model/voice validation.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1862
| group:openclaw | All built-in tools (excludes provider plugins) |
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:1909
/elevated on|off|ask|fullstores state per session; inline directives apply to single message.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2106
- Files are materialized into the child workspace at
.openclaw/attachments/<uuid>/with a.manifest.json.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2137
OpenClaw uses the built-in model catalog. Add custom providers via models.providers in config or ~/.openclaw/agents/<agentId>/agent/models.json.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2166
- Override agent config root with
OPENCLAW_AGENT_DIR(orPI_CODING_AGENT_DIR, a legacy environment variable alias).
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2189
models.providers.*.models.*.compat.supportsDeveloperRole: optional compatibility hint. Forapi: "openai-completions"with a non-empty non-nativebaseUrl(host notapi.openai.com), OpenClaw forces this tofalseat runtime. Empty/omittedbaseUrlkeeps default OpenAI behavior.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2251
Set OPENCODE_API_KEY (or OPENCODE_ZEN_API_KEY). Use opencode/... refs for the Zen catalog or opencode-go/... refs for the Go catalog. Shortcut: openclaw onboard --auth-choice opencode-zen or openclaw onboard --auth-choice opencode-go.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2268
Set ZAI_API_KEY. z.ai/* and z-ai/* are accepted aliases. Shortcut: openclaw onboard --auth-choice zai-api-key.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2311
For the China endpoint: baseUrl: "https://api.moonshot.cn/v1" or openclaw onboard --auth-choice moonshot-api-key-cn.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2329
Anthropic-compatible, built-in provider. Shortcut: openclaw onboard --auth-choice kimi-code-api-key.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2368
Base URL should omit /v1 (Anthropic client appends it). Shortcut: openclaw onboard --auth-choice synthetic-api-key.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2408
Set MINIMAX_API_KEY. Shortcut: openclaw onboard --auth-choice minimax-api.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2476
- Loaded from
~/.openclaw/extensions,<workspace>/.openclaw/extensions, plusplugins.load.paths.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2477
- Discovery accepts native OpenClaw plugins plus compatible Codex bundles and Claude bundles, including manifestless Claude default-layout bundles.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2485
plugins.entries.<id>.config: plugin-defined config object (validated by native OpenClaw plugin schema when available).
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2486
- Enabled Claude bundle plugins can also contribute embedded Pi defaults from
settings.json; OpenClaw applies those as sanitized agent settings, not as raw OpenClaw config patches.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2489
plugins.installs: CLI-managed install metadata used byopenclaw plugins update.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2512
openclaw: { cdpPort: 18800, color: "#FF4500" },
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2513
work: { cdpPort: 18801, color: "#0066CC" },
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2521
remote: { cdpUrl: "http://10.0.0.42:9222", color: "#00AA00" },
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2536
- In strict mode, remote CDP profile endpoints (
profiles.*.cdpUrl) are subject to the same private-network blocking during reachability/discovery checks.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2540
existing-sessionprofiles are host-only and use Chrome MCP instead of CDP.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2557
name: "OpenClaw",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2580
// password: "your-password", // or OPENCLAW_GATEWAY_PASSWORD
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2596
basePath: "/openclaw",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2633
port: single multiplexed port for WS + HTTP. Precedence:--port>OPENCLAW_GATEWAY_PORT>gateway.port>18789.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2649
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1: client-side break-glass override that allows plaintextws://to trusted private-network IPs; default remains loopback-only for plaintext.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2654
OPENCLAW_APNS_RELAY_BASE_URL/OPENCLAW_APNS_RELAY_TIMEOUT_MS: temporary env overrides for the relay config above.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2655
OPENCLAW_APNS_RELAY_ALLOW_HTTP=true: development-only escape hatch for loopback HTTP relay URLs. Production relay URLs should stay on HTTPS.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2662
- If
gateway.auth.token/gateway.auth.passwordis explicitly configured via SecretRef and unresolved, resolution fails closed (no remote fallback masking).
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2681
gateway.http.securityHeaders.strictTransportSecurity(set only for HTTPS origins you control; see [Trusted Proxy Auth](/gateway/trusted-proxy-auth#tls-termination-and-hsts))
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2688
OPENCLAW_CONFIG_PATH=~/.openclaw/a.json \
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2689
OPENCLAW_STATE_DIR=~/.openclaw-a \
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2690
openclaw gateway --port 19001
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2693
Convenience flags: --dev (uses ~/.openclaw-dev + port 19001), --profile <name> (uses ~/.openclaw-<name>).
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2705
certPath: "/etc/openclaw/tls/server.crt",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2706
keyPath: "/etc/openclaw/tls/server.key",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2707
caPath: "/etc/openclaw/tls/ca-bundle.crt",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2757
transformsDir: "~/.openclaw/hooks/transforms",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2776
Auth: Authorization: Bearer <token> or x-openclaw-token: <token>.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2808
account: "openclaw@gmail.com",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2825
- Gateway auto-starts
gog gmail watch serveon boot when configured. SetOPENCLAW_SKIP_GMAIL_WATCHER=1to disable.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2835
root: "~/.openclaw/workspace/canvas",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2837
// enabled: false, // or OPENCLAW_SKIP_CANVAS_HOST=1
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2843
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2844
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2851
- Also serves A2UI at
/__openclaw__/a2ui/.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2873
- Hostname defaults to
openclaw. Override withOPENCLAW_MDNS_HOSTNAME.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2885
Writes a unicast DNS-SD zone under ~/.openclaw/dns/. For cross-network discovery, pair with a DNS server (CoreDNS recommended) + Tailscale split DNS.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2887
Setup: openclaw dns setup --apply.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2911
.envfiles: CWD.env+~/.openclaw/.env(neither overrides existing vars).
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2922
auth: { token: "${OPENCLAW_GATEWAY_TOKEN}" },
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2957
secrets applytargets supportedopenclaw.jsoncredential paths.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2969
path: "~/.openclaw/secrets.json",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:2975
command: "/usr/local/bin/openclaw-vault-resolver",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:3020
- Legacy OAuth imports from
~/.openclaw/credentials/oauth.json.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:3058
file: "/tmp/openclaw/openclaw.log",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:3067
- Default log file:
/tmp/openclaw/openclaw-YYYY-MM-DD.log.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:3088
serviceName: "openclaw-gateway",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:3209
"default": fixed neutral tagline (All your chats, one OpenClaw.).
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:3211
- To hide the entire banner (not just taglines), set env
OPENCLAW_HIDE_BANNER=1.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:3241
Current builds no longer include the TCP bridge. Nodes connect over the Gateway WebSocket. bridge.* keys are no longer part of the config schema (validation fails until removed; openclaw doctor --fix can strip unknown keys).
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:3329
See [Cron Jobs](/automation/cron-jobs). Isolated cron executions are tracked as [background tasks](/automation/tasks).
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:3367
// ~/.openclaw/openclaw.json
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration-reference.md:3383
- Paths: resolved relative to the including file, but must stay inside the top-level config directory (
dirnameofopenclaw.json). Absolute/../forms are allowed only when they still resolve inside that boundary.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:2
summary: "Configuration overview: common tasks, quick setup, and links to the full reference"
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:4
- Setting up OpenClaw for the first time
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:12
OpenClaw reads an optional <Tooltip tip="JSON5 supports comments and trailing commas">JSON5</Tooltip> config from ~/.openclaw/openclaw.json.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:14
If the file is missing, OpenClaw uses safe defaults. Common reasons to add a config:
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:23
New to configuration? Start with openclaw onboard for interactive setup, or check out the [Configuration Examples](/gateway/configuration-examples) guide for complete copy-paste configs.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:29
// ~/.openclaw/openclaw.json
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:31
agents: { defaults: { workspace: "~/.openclaw/workspace" } },
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:41
openclaw onboard # full onboarding flow
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:42
openclaw configure # config wizard
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:47
openclaw config get agents.defaults.workspace
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:48
openclaw config set agents.defaults.heartbeat.every "2h"
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:49
openclaw config unset plugins.entries.brave.config.webSearch.apiKey
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:57
Edit ~/.openclaw/openclaw.json directly. The Gateway watches the file and applies changes automatically (see [hot reload](#config-hot-reload)).
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:64
OpenClaw only accepts configurations that fully match the schema. Unknown keys, malformed types, or invalid values cause the Gateway to refuse to start. The only root-level exception is $schema (string), so editors can attach JSON Schema metadata.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:70
- Only diagnostic commands work (
openclaw doctor,openclaw logs,openclaw health,openclaw status)
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:71
- Run
openclaw doctorto see exact issues
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:72
- Run
openclaw doctor --fix(or--yes) to apply repairs
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:74
Common tasks
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:159
mentionPatterns: ["@openclaw", "openclaw"],
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:259
Relay-backed push is configured in openclaw.json.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:282
openclaw config set gateway.push.apns.relay.baseUrl https://relay.example.com
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:308
OPENCLAW_APNS_RELAY_BASE_URLandOPENCLAW_APNS_RELAY_TIMEOUT_MSstill work as temporary env overrides.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:309
OPENCLAW_APNS_RELAY_ALLOW_HTTP=trueremains a loopback-only development escape hatch; do not persist HTTP relay URLs in config.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:311
See [iOS App](/platforms/ios#relay-backed-push-for-official-builds) for the end-to-end flow and [Authentication and trust flow](/platforms/ios#authentication-and-trust-flow) for the relay security model.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:381
Security note:
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:397
{ id: "home", default: true, workspace: "~/.openclaw/workspace-home" },
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:398
{ id: "work", workspace: "~/.openclaw/workspace-work" },
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:416
// ~/.openclaw/openclaw.json
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:438
The Gateway watches ~/.openclaw/openclaw.json and applies changes automatically — no manual restart needed for most settings.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:487
config.apply replaces the entire config. Use config.patch for partial updates, or openclaw config set for single keys.
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:501
openclaw gateway call config.get --params '{}' # capture payload.hash
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:502
openclaw gateway call config.apply --params '{
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:503
"raw": "{ agents: { defaults: { workspace: \"~/.openclaw/workspace\" } } }",
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:527
openclaw gateway call config.patch --params '{
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:538
OpenClaw reads env vars from the parent process plus:
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:541
~/.openclaw/.env(global fallback)
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:555
If enabled and expected keys aren't set, OpenClaw runs your login shell and imports only the missing keys:
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:565
Env var equivalent: OPENCLAW_LOAD_SHELL_ENV=1
/opt/homebrew/lib/node_modules/openclaw/docs/gateway/configuration.md:573
gateway: { auth: { token: "${OPENCLAW_GATEWAY_TOKEN}" } },
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:5
- Debugging why openclaw is interfering with your own Chrome
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:7
title: "Browser (OpenClaw-managed)"
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:10
Browser (openclaw-managed)
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:12
OpenClaw can run a dedicated Chrome/Brave/Edge/Chromium profile that the agent controls.
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:19
- The
openclawprofile does not touch your personal browser profile.
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:25
- A separate browser profile named openclaw (orange accent by default).
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:28
- Optional multi-profile support (
openclaw,work,remote, ...).
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:36
openclaw browser --browser-profile openclaw status
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:37
openclaw browser --browser-profile openclaw start
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:38
openclaw browser --browser-profile openclaw open https://example.com
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:39
openclaw browser --browser-profile openclaw snapshot
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:45
If openclaw browser is missing entirely, or the agent says the browser tool
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:52
OpenClaw's plugin system:
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:72
If you turn off only the plugin, the bundled browser CLI (openclaw browser),
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:88
If openclaw browser suddenly becomes an unknown command after an upgrade, or
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:121
openclaw browseris an unknown command.
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:125
Profiles: openclaw vs user
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:127
openclaw: managed, isolated browser (no extension required).
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:133
- Default: use the isolated
openclawbrowser.
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:134
- Prefer
profile="user"when existing logged-in sessions matter and the user
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:138
Set browser.defaultProfile: "openclaw" if you want managed mode by default.
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:142
Browser settings live in ~/.openclaw/openclaw.json.
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:154
// cdpUrl: "http://127.0.0.1:18792", // legacy single-profile override
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:155
remoteCdpTimeoutMs: 1500, // remote CDP HTTP timeout (ms)
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:156
remoteCdpHandshakeTimeoutMs: 3000, // remote CDP WebSocket handshake timeout (ms)
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:157
defaultProfile: "openclaw",
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:164
openclaw: { cdpPort: 18800, color: "#FF4500" },
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:165
work: { cdpPort: 18801, color: "#0066CC" },
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:177
remote: { cdpUrl: "http://10.0.0.42:9222", color: "#00AA00" },
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:187
- If you override the Gateway port (
gateway.portorOPENCLAW_GATEWAY_PORT),
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:189
cdpUrldefaults to the managed local CDP port when unset.
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:190
remoteCdpTimeoutMsapplies to remote (non-loopback) CDP reachability checks.
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:191
remoteCdpHandshakeTimeoutMsapplies to remote CDP WebSocket reachability checks.
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:193
- In strict SSRF mode, remote CDP endpoint discovery/probes (
cdpUrl, including/json/versionlookups) are checked too.
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:198
- Default profile is
openclaw(OpenClaw-managed standalone browser). UsedefaultProfile: "user"to opt into the signed-in user browser.
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:200
- Local
openclawprofiles auto-assigncdpPort/cdpUrl— set those only for remote CDP.
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:201
driver: "existing-session"uses Chrome DevTools MCP instead of raw CDP. Do
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:202
not set cdpUrl for that driver.
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:209
OpenClaw uses it automatically. Set browser.executablePath to override
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:215
openclaw config set browser.executablePath "/usr/bin/google-chrome"
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:245
- Remote CDP: set
browser.profiles.<name>.cdpUrl(orbrowser.cdpUrl) to
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:246
attach to a remote Chromium-based browser. In this case, OpenClaw will not launch a local browser.
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:248
Remote CDP URLs can include auth:
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:253
OpenClaw preserves the auth when calling /json/* endpoints and when connecting
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:254
to the CDP WebSocket. Prefer environment variables or secrets managers for
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:259
If you run a node host on the machine that has your browser, OpenClaw can
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:268
- If you set
nodeHost.browserProxy.allowProfiles, OpenClaw treats it as a least-privilege boundary: only allowlisted profiles can be targeted, and persistent profile create/delete routes are blocked on the proxy surface.
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:273
Browserless (hosted remote CDP)
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:276
CDP connection URLs over HTTPS and WebSocket. OpenClaw can use either form, but
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:287
remoteCdpTimeoutMs: 2000,
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:288
remoteCdpHandshakeTimeoutMs: 4000,
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:291
cdpUrl: "wss://production-sfo.browserless.io?token=<BROWSERLESS_API_KEY>",
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:304
wss:// for a direct CDP connection or keep the HTTPS URL and let OpenClaw
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:307
Direct WebSocket CDP providers
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:310
the standard HTTP-based CDP discovery (/json/version). OpenClaw supports both:
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:312
- HTTP(S) endpoints — OpenClaw calls
/json/versionto discover the
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:314
- WebSocket endpoints (
ws:///wss://) — OpenClaw connects directly,
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:331
remoteCdpTimeoutMs: 3000,
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:332
remoteCdpHandshakeTimeoutMs: 5000,
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:335
cdpUrl: "wss://connect.browserbase.com?apiKey=<BROWSERBASE_API_KEY>",
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:355
Security
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:360
- If browser control is enabled and no auth is configured, OpenClaw auto-generates
gateway.auth.tokenon startup and persists it to config.
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:362
- Treat remote CDP URLs/tokens as secrets; prefer env vars or a secrets manager.
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:364
Remote CDP tips:
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:371
OpenClaw supports multiple named profiles (routing configs). Profiles can be:
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:373
- openclaw-managed: a dedicated Chromium-based browser instance with its own user data directory + CDP port
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:374
- remote: an explicit CDP URL (Chromium-based browser running elsewhere)
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:379
- The
openclawprofile is auto-created if missing.
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:382
- Local CDP ports allocate from 18800–18899 by default.
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:389
OpenClaw can also attach to a running Chromium-based browser profile through the
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:429
- Open that browser's inspect page for remote debugging.
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:430
- Enable remote debugging.
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:431
- Keep the browser running and approve the connection prompt when OpenClaw attaches.
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:442
openclaw browser --browser-profile user start
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:443
openclaw browser --browser-profile user status
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:444
openclaw browser --browser-profile user tabs
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:445
openclaw browser --browser-profile user snapshot --format ai
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:459
- remote debugging is enabled in that browser's inspect page
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:461
openclaw doctormigrates old extension-based browser config and checks that
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:463
enable browser-side remote debugging for you
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:467
- Use
profile="user"when you need the user’s logged-in browser state.
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:475
- This path is higher-risk than the isolated
openclawprofile because it can
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:477
- OpenClaw does not launch the browser for this driver; it attaches to an
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:479
- OpenClaw uses the official Chrome DevTools MCP
--autoConnectflow here. If
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:480
userDataDir is set, OpenClaw passes it through to target that explicit
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:486
- Some features still require the managed browser path, such as PDF export and
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:489
different network namespace, use remote CDP or a node host instead.
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:499
When launching locally, OpenClaw picks the first available:
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:537
x-openclaw-password: <gateway password>or HTTP Basic auth with that password
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:543
error. ARIA snapshots and basic screenshots still work for openclaw-managed Chrome.
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:547
OpenClaw with browser support.
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:555
docker compose run --rm openclaw-cli \
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:561
OPENCLAW_HOME_VOLUME or a bind mount. See [Docker](/install/docker).
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:568
- It connects to Chromium-based browsers (Chrome/Brave/Edge/Chromium) via CDP.
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:570
of CDP.
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:583
openclaw browser status
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:584
openclaw browser start
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:585
openclaw browser stop
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:586
openclaw browser tabs
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:587
openclaw browser tab
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:588
openclaw browser tab new
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:589
openclaw browser tab select 2
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:590
openclaw browser tab close 2
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:591
openclaw browser open https://example.com
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:592
openclaw browser focus abcd1234
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:593
openclaw browser close abcd1234
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:597
openclaw browser screenshot
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:598
openclaw browser screenshot --full-page
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:599
openclaw browser screenshot --ref 12
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:600
openclaw browser screenshot --ref e12
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:601
openclaw browser snapshot
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:602
openclaw browser snapshot --format aria --limit 200
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:603
openclaw browser snapshot --interactive --compact --depth 6
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:604
openclaw browser snapshot --efficient
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:605
openclaw browser snapshot --labels
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:606
openclaw browser snapshot --selector "#main" --interactive
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:607
openclaw browser snapshot --frame "iframe#main" --interactive
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:608
openclaw browser console --level error
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:609
openclaw browser errors --clear
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:610
openclaw browser requests --filter api --clear
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:611
openclaw browser pdf
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:612
openclaw browser responsebody "**/api" --max-chars 5000
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:616
openclaw browser navigate https://example.com
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:617
openclaw browser resize 1280 720
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:618
openclaw browser click 12 --double
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:619
openclaw browser click e12 --double
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:620
openclaw browser type 23 "hello" --submit
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:621
openclaw browser press Enter
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:622
openclaw browser hover 44
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:623
openclaw browser scrollintoview e12
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:624
openclaw browser drag 10 11
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:625
openclaw browser select 9 OptionA OptionB
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:626
openclaw browser download e12 report.pdf
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:627
openclaw browser waitfordownload report.pdf
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:628
openclaw browser upload /tmp/openclaw/uploads/file.pdf
/opt/homebrew/lib/node_modules/openclaw/docs/tools/browser.md:629
openclaw browser fill --fields '[{"ref":"1","type":"text","value":"Ada"}]'