Features
CLI-first design
Section titled “CLI-first design”Every workflow runs through the blop CLI:
| Command | Behavior |
|---|---|
blop test |
Discover specs, run them, write reports, exit non-zero on any failure. |
blop run |
Same as test. |
blop watch |
Run, then re-run on file change. |
blop list |
Load specs and print discovered test names. No browser launched. |
blop init |
Scaffold a starter spec. |
blop skills |
Manage bundled SKILL.md files — list, view, check, improve. |
See the CLI reference for every flag and option.
Intent-based test DSL
Section titled “Intent-based test DSL”Three exports cover every spec file. Imported from "blop":
agentTest(name, handler)— register a test inside adescribeblock.describe(name, fn)— create a named test scope. Nest as deep as you like.defineAgentTest(test)— object-form test definition for generated specs.
Inside a test handler, the agent API is just two methods:
agent.goto(url)— queue a page navigation.agent.goal(text)— describe a verification step in natural language.
No beforeEach/afterEach, no assertion functions in the DSL itself — assertions are delegated to the agent’s browser tools. See Writing tests.
Real Playwright browser
Section titled “Real Playwright browser”The agent uses Chromium, Camoufox, Firefox, or WebKit through controlled native tools — no script execution, no shell escapes. Pick a browser with --browser or in config. Camoufox requires Node.js 22 or newer; local runs need a provisioned binary, while --containerized builds and reuses a separate warm Camoufox server container.
$ blop test --browser firefox --headedCamoufox setup
Section titled “Camoufox setup”Camoufox JS is experimental and must be installed explicitly. Blop pins the Playwright Core version used by the audited integration:
pnpm add -D camoufox-js@0.11.1 playwright-core@1.61.1pnpm exec camoufox-js fetchpnpm exec camoufox-js versionblop test --browser camoufoxCamoufox can run locally or in a separate warm container with --containerized.
It does not provide Chromium CDP frame streaming, so Blop falls back to normal
Playwright screenshots. The local upstream fetch command follows a mutable
prerelease; reproducible CI should provision a verified binary directory and
set CAMOUFOX_INSTALL_DIR. The final benchmark used
150.0.2-alpha.26.
Camoufox’s optional dependency tree includes differently licensed packages,
including ua-parser-js@2.0.10 under AGPL-3.0-or-later. Review distribution and
service-use obligations before enabling it outside local evaluation.
Browser tools catalog
Section titled “Browser tools catalog”The agent has a curated set of Playwright-backed tools across navigation, page inspection, mouse, keyboard, forms, assertions, data extraction, diagnostics, batched execution, and lifecycle. You don’t call them directly — the agent picks the right tool for your goal — but knowing the catalog helps you write actionable goals. See Browser tools.
Reporters & output
Section titled “Reporters & output”Every run writes a structured artifact bundle to .blop/:
| File | Format | When |
|---|---|---|
results.json |
JSON | Always |
events.jsonl |
JSONL | Always |
report.xml |
JUnit XML | --reporter junit or all |
screenshots/* |
PNG | Captured during the run |
Choose a reporter with --reporter: basic, json, junit, or all (default). See Reporters & output.
Provider-agnostic
Section titled “Provider-agnostic”OpenAI, Anthropic, Google, Groq, xAI, OpenRouter, Mistral, Cerebras, NVIDIA via Khadim. Configure via CLI flags, env vars, or blop.config.ts. See Agent providers.
Configuration
Section titled “Configuration”blop.config.ts (or .mts, .js, .mjs) with full TypeScript types. Every option is optional; the runner has sensible defaults. CLI flags always override config values. See Configuration.
Skills
Section titled “Skills”Bundled SKILL.md files teach the agent domain-specific patterns. Manage them with blop skills list, view, check, and improve. See Skills.
CI-native
Section titled “CI-native”Designed CI-first. JUnit XML, JSON results, and a JSONL event stream any pipeline can pick up. GitHub Actions metadata auto-captured. See CI integration.
Keyless testing
Section titled “Keyless testing”For unit testing the runner or CI smoke checks of the framework itself, pass a mock agentStream to runBlopTests — no API keys required, no network calls. See Writing tests → Keyless testing.