Tests as code in your repo
A .blop.ts file exports agentTest's under describe. agent.goto and agent.goal build a numbered goal list the agent receives when the runner reaches the test. Version-controlled, code-reviewed, yours to edit or delete.
Intent · Playwright-backed
Intent-based browser testing backed by real Playwright browsers. Describe what to verify in a .blop.ts file; an agent drives a real browser to figure out how. Run locally or in CI, and get results.json, events.jsonl, JUnit XML, and screenshots. The control plane is early access.

A blop test is a TypeScript file that reads like intent. The agent drives a real browser over Playwright with controlled tools — no script execution, no shell escapes.
A .blop.ts file exports agentTest's under describe. agent.goto and agent.goal build a numbered goal list the agent receives when the runner reaches the test. Version-controlled, code-reviewed, yours to edit or delete.
Chromium, Firefox, or WebKit through controlled tools. Intent keeps goals readable while the agent finds the interaction in the current interface.
Every run writes results.json, an events.jsonl stream, JUnit XML, and screenshots to .blop/. The result is a versioned contract, so other frameworks can emit it too, once adapters ship.
When you want hosted history, the same result schema uploads to the Blop platform: failures cluster across runs, tests become synthetic checks, and the agent can open fix PRs. Auto-fix is early access, not shipped.
The framework and CLI are the workhorse today. The control plane and agent-authored fix PRs are early access — tracked clearly, not as finished products.
blop init, blop test, blop watch, blop list, blop skills — one binary, every workflow.
Chromium, Firefox, WebKit through controlled native tools; @blopai/browser-harness for persistent CLI sessions and containers.
results.json, events.jsonl, JUnit XML, and screenshots in .blop/ per run.
Hosted history, failure clustering, synthetic checks, and agent fix PRs. Early access, not generally available.
The result payload is a versioned contract; adapters that emit the same schema are planned, not shipped yet.
Add blop to your project, set your provider credentials, and run blop test. Tests stay as code in your repo from day one.