ScalebrowserDOCS

Configuration

Every setting the daemon reads: the four layers and which wins, the TOML blocks with their defaults, and the environment variables that override them.

Four layers, later ones win:

  1. built-in defaults
  2. a TOML file, passed with --config
  3. environment variables
  4. command-line flags

Every field has a default, so a daemon with no configuration at all starts and serves.

The top level

KeyDefaultWhat it does
bind_addr127.0.0.1:8787The native API: REST, MCP over HTTP, the CDP WebSocket. Non-loopback requires [tls].
adspower_bindoffThe AdsPower adapter. Loopback only, and off until you set it.
data_dir%ProgramData%\ScalebrowserDatabase, engines, profile directories, the at-rest key.
engines_dirfollows data_dirSet it only to split the tree deliberately. Once set, it stops following.
profiles_dirfollows data_dirSame.
bearer_tokengenerated on first startThe token clients send.
engine_feed_urlnoneA signed engine feed to check at startup. Without one the daemon never reaches out and engine install is the only path in.
webui_dirthe embedded bundleServe the management interface from a directory instead.
ja4t_reflector_urlnoneAn endpoint that reports the TCP fingerprint it saw. Fetched through the proxy during a check, which is the only way to learn the exit device's fingerprint.
error_reportingfalseCrash reports. Off by default: on an anti-detect product, telemetry nobody asked for is a surprise that costs the relationship.
error_dsnnoneWhere they go. Empty disables reporting whatever the flag says.
log_jsonfalseMachine-readable log lines. On where something parses them, off where a person reads them.

[secret]

Where the at-rest master key comes from. One of the two:

KeyWhat it does
key_envName of the environment variable holding it.
key_filePath to a file holding it.

[capacity]

Hard limits, so a launch is refused rather than the host running out of memory.

KeyDefaultWhat it does
max_concurrent64Browsers on this machine at once.
ram_budget_mb24576Memory the pool may use.
vram_budget_mbnoneVideo memory, when you want a ceiling on it.

Three limits apply to a launch and the strictest wins: these two, and the host's measured free memory. Exceeding any of them is error 4003.

[tls]

KeyWhat it does
cert_pathPEM certificate chain.
key_pathPEM private key.

Required for a non-loopback bind, optional on loopback, and honoured there too if set.

[mcp]

Everything here is decided server-side. No tool call can widen the catalog or leave read-only mode.

KeyDefaultWhat it does
profiles["core"]Which tool profiles are served.
read_onlyfalseMutating tools are neither listed nor executed.
lease_ttl_secs900How long a reservation lives by default.
lease_ttl_max_secs14400Ceiling on what a caller may ask for. Four hours.
url_allowlist[]Exceptions to the open_page address rule. Exact hosts or host:port.
artifact_quota256How many artifacts are kept per profile.
artifact_max_bytes24 MiBCeiling on one artifact.
artifact_ttl_secs14400Retention. Matches the lease ceiling, so an artifact from the start of a long run is still there at the end.
allowed_hosts[]Extra Host values the MCP transport accepts, on top of loopback and the configured bind.
snapshot_full_every5Force a full page map every N steps. 0 disables it.
transcribe_command[]Your program for audio challenges. One argument in, text out.
inbox_command[]Your program for non-IMAP inboxes, such as an SMS service.
inbox_require_proxyfalseRefuse an inbox read that would leave over this machine's own connection.

[observability]

KeyDefaultWhat it does
sample_interval_ms3000Cadence of the background sampler behind GET /v1/metrics.
enable_prometheusfalseThe opt-in scrape endpoint.
prometheus_bind127.0.0.1:9464Its listener. Unauthenticated plaintext; keep it on loopback.

[runs]

KeyDefaultWhat it does
shotstrueKeep a still per step in the activity trail.
shots_max_gb20Disk ceiling for them.
shots_max_age_days30Retention.
page_watchertrueFollow what the bound tab is showing.

[exit]

The exit-address rule.

KeyDefaultWhat it does
enabledtrueThe whole rule.
probe_urlhttps://probe.scalebrowser.net/v1/addrWhere the address is measured.
neighbour_hardfalseTreat two addresses in one IPv4 /24 as a collision, not advice.
heartbeat_secs30Keep-alive beat, where a provider documents an idle cut-off.
check_secs120Address check.
max_draws5How many session tags a start may try before refusing with 4013.

[sync] and [remote]

Profile sync and remote access have their own blocks. Both have a switch in the management app, and for remote access that switch is the one to use: the daemon reads it on every beat, so it takes effect without a restart.

Environment variables

Every one of these overrides the TOML.

VariableSets
SCALEBROWSER_BEARER_TOKENThe API token clients send.
SCALEBROWSER_MASTER_KEYThe at-rest key.
SCALEBROWSER_API_TOKENThe pairing token for this machine.
SCALEBROWSER_DATA_DIRdata_dir.
SCALEBROWSER_ENGINES_DIRengines_dir.
SCALEBROWSER_PROFILES_DIRprofiles_dir.
SCALEBROWSER_BIND_ADDRbind_addr.
SCALEBROWSER_ADSPOWER_BINDadspower_bind. Takes the word off.
SCALEBROWSER_WEBUI_DIRwebui_dir.
SCALEBROWSER_ENGINE_FEED_URLengine_feed_url.
SCALEBROWSER_CONTROL_PLANE_URLWhere the account lives.
SCALEBROWSER_MCP_PROFILES[mcp] profiles, comma separated.
SCALEBROWSER_MCP_READ_ONLY[mcp] read_only.
SCALEBROWSER_ENABLE_PROMETHEUS[observability] enable_prometheus.
SCALEBROWSER_PROMETHEUS_BIND[observability] prometheus_bind.
SCALEBROWSER_SAMPLE_INTERVAL_MS[observability] sample_interval_ms.
SCALEBROWSER_ERROR_DSNerror_dsn.
SCALEBROWSER_ERROR_REPORTINGerror_reporting.

Two more are about the host rather than the daemon: SB_HOST_GPU_CLASS and SB_HOST_GPU_VENDOR skip the boot GPU probe.

Next