Options that blop test reads from blop.config.ts for browser checks . Every option is optional. The programmatic runner accepts more; see Runner options .
import type { BlopConfig } from " @blopai/test " ;
include: [ " tests/**/*.blop.ts " ],
baseUrl: " http://localhost:3000 " ,
Blop finds blop.config.ts, .mts, .js or .mjs in the project root; --config <file> picks another. Later sources win:
Built-in defaults.
Environment variables (BLOP_AGENT_*, OTEL_*).
blop.config.ts.
Command-line flags, such as --max-steps 75 in CI.
Agent fields resolve as flag, then config, then BLOP_AGENT_*. Provider-native keys such as OPENAI_API_KEY are never read. OpenTelemetry fields follow their own rules in Environment variables .
blop.config.ts does not configure the collector or coding agent capture.
Setting Default Where to change it Collector host and port 127.0.0.1:27811blop up flags, BLOP_MONITOR_HOST / BLOP_MONITOR_PORT, or .blop/monitor.jsonStore path Platform state directory (~/.local/state/blop/monitor on Linux), or .blop/monitor/ in an initialized project BLOP_MONITOR_DB_PATHStore retention and size cap 720 hours, 1024 MBBLOP_MONITOR_RETENTION_HOURS, BLOP_MONITOR_MAX_DB_SIZE_MB, then restart the collectorCapture mode for a new binding fullblop agents setup <id> --capture <mode>Body retention and exclusions 720 hours (1–720), none excludedblop agents capture-policy set or the Inspector’s Capture and privacy
Flags and environment variables override .blop/monitor.json, which overrides the defaults. See Environment variables .
Option Default Purpose include["**/*.blop.ts", "**/*.blop.tsx"]Globs for spec discovery; command-line patterns replace it baseUrlNone App under test; relative agent.goto("/path") resolves against it
node_modules/, dist/, .blop/ and .git/ are always skipped. Pattern resolution is in Choose which browser checks run .
Option Default Purpose browser"chromium"chromium, camoufox, firefox or webkitviewportPlaywright’s default { width, height }; Camoufox uses its own windowheadedfalseShow the browser window containerizedfalsetrue or { image, containerName }: run the browser in a warm Docker container
Option Default Purpose providerBLOP_AGENT_PROVIDER, else "openrouter"Model provider modelBLOP_AGENT_MODEL; requiredModel name apiKeyBLOP_AGENT_API_KEYAPI key maxStepsNo cap Cap on agent tool steps; finish, timeout and no-progress guards still apply timeoutMsNo cap Wall-clock limit per check retries0Reruns of a failed check workers1Checks run at once
Option Default Purpose reporter"all"basic, json, junit or all; files per value are in Report files reportDir".blop"Where reports go verbosefalseStream agent events to stderr captureStepScreenshotsfalseSave a JPEG after each browser action streamFramestrueLive Chromium screencast when progress or step screenshots are on frameIntervalMs200Minimum milliseconds between frame progress lines coveragefalseChromium JavaScript coverage; see Chromium JavaScript coverage coverageEndpointNone Collector base URL that receives coverage; does not start a collector
Option Environment variable Purpose platformUrlBLOP_INGEST_URLBlop Cloud ingest URL platformApiKeyBLOP_INGEST_SECRETPer-project ingest secret
Upload also needs BLOP_PROJECT_ID. In CI, prefer the three environment variables.
Option Default Purpose otelEndpointOTEL_EXPORTER_OTLP_ENDPOINTOTLP/HTTP base URL; setting it turns export on otelHeadersNone Merged over OTEL_EXPORTER_OTLP_HEADERS otelServiceName"blop-runner"service.nameotelEnvironmentNone deployment.environment.nameotelPropagateToAppfalseSend W3C traceparent to the app under test otelPropagateAllowlistNone Hosts allowed to receive it; empty sends it nowhere
Type Values BlopBrowserName"chromium" | "camoufox" | "firefox" | "webkit"BlopReporter"basic" | "json" | "junit" | "all"BlopConfigBlopRunOptions without specFile, specFiles and agentStream, plus include and exclude; the CLI reads only the options on this page