One engine, three surfaces
How the bl engine relates to its three curated surfaces — the CLI for humans and scripts, MCP for agents, and the Skill that teaches agents the CLI.
browserlane is one engine behind three curated surfaces. The same
WebDriver BiDi engine — the bl binary — answers to a human at a shell, to an
agent over MCP, and to an agent that has been taught the CLI through a Skill.
They drive Chrome the same way; they differ only in how you talk to them.
humans and scripts ── CLI ───────────────┐
│
AI agents ────────── MCP ────────────────┼── bl engine ── WebDriver BiDi ── Chrome
│
AI agents ────────── Skill ── CLI ───────┘The three surfaces
| CLI | MCP server | Skill | |
|---|---|---|---|
| Who uses it | People and shell scripts | AI agents | Shell-capable AI agents |
| How it is consumed | You type bl <command> … | The agent calls tools over bl mcp (JSON-RPC 2.0 / stdio) | The agent reads SKILL.md, then runs bl … itself |
| What it is | Composable commands, JSON output, real exit codes | Structured tools representing useful intentions | Token-efficient CLI workflows, taught |
The CLI is what you've seen throughout these docs. The MCP server, started
with bl mcp, exposes the engine as a catalog of tools — register it once
with bl add-mcp. The Skill, installed with bl add-skill, is one Markdown
file that teaches an agent the CLI directly.
The Skill is not a separate engine
A Skill is not another protocol implementation. It teaches an agent how to use the CLI through token-efficient workflows — no per-tool JSON schemas resident in context, and no browser capability of its own. Same engine, far fewer tokens.
When to use which
- CLI — you're driving the browser yourself, scripting a repeatable task, wiring automation into CI, or prototyping a flow you'll hand to an agent.
- MCP — the agent has no shell, or you want browser actions exposed as first-class, individually described tools.
- Skill — the agent has shell access (e.g. Claude Code) and you want the smallest context footprint. The recommended default for CLI-capable agents.
Because every route ends at the same engine, a flow you work out by hand on the CLI behaves the same when an agent runs it through MCP or the Skill.
Curated surfaces, not spec mirrors
The engine's job is protocol coverage; the surfaces' job is ergonomics. The governing principle:
Every WebDriver BiDi capability must be reachable through the engine. Only capabilities representing a useful user intention should receive dedicated CLI commands or MCP tools.
So the surfaces are not a 1:1 syntax mirror of each other or of the specification:
- The same verb can take a different shape.
bl opentakes an optional URL — omit it and it just launches a local browser (a convenience for humans). Its MCP counterpartbrowser_openrequires aurl, because a focused "navigate" tool is less ambiguous for an agent to call. To launch without navigating, an agent callsbrowser_startinstead. - Some single commands split into get/set tool pairs —
bl viewportbecomesbrowser_get_viewportplusbrowser_set_viewport. - A few capabilities (like the page-clock controls) are MCP-only; the
setup, daemon, and agent-wiring plumbing (
bl install,bl daemon,bl add-mcp,bl add-skill) is CLI-only. - Some protocol capabilities stay internal to the engine entirely — consumed events that power auto-waiting and recordings, for example. They count toward engine parity without earning a dedicated command or tool.
See the exact correspondence
The CLI ↔ MCP mapping lists how every bl
command lines up with the MCP tools, including the shape differences and the
CLI-only / MCP-only cases. The parity matrix records the
exposure decision for every WebDriver BiDi capability.
Related
- WebDriver BiDi — the engine's spec-parity story.
- Wire up an agent (MCP).
- MCP reference — the full tool catalog.
- Skill reference — what the agent reads.