firehose> #llmops

My 4-Layer Claude Code + Playwright CLI Skill (Agentic Browser Automation & UI Testing)

TL;DR

IndyDevDan walks through Bowser, an opinionated Claude Code codebase that automates two "classes of work" — browser automation (doing web tasks on your behalf) and UI testing (validating your app) — by stacking four layers of agentics: a skill (raw capability, a Playwright-CLI wrapper) → a sub-agent (specialize + scale it, bowser-qa-agent, model: opus) → a command (an /ui-review slash prompt that spawns a parallel team of QA agents and merges their reports) → a task runner (just/justfile, aliased j, the single reuse front-door). The load-bearing tool choice is CLI over MCP: the Playwright CLI is token- efficient and, unlike a rigid MCP server, can be wrapped in your own skill with opinionated defaults (headless, parallel named sessions, persistent login profiles). UI tests are written as plain-language user stories (name + URL + workflow) and the QA agent screenshots every step into a per-run directory — a walkable "trail of success and failure" — trading determinism for near-zero authoring cost. A top layer generalizes commands into higher-order prompts (a prompt that takes another prompt as a parameter, wrapping it in a consistent workflow — a meta-prompt variant). The closing thesis is anti-hype and pedagogical: don't just throw agents at problems or lean on other people's plugins/prompts ("prompt injection is one of the most dangerous vulnerabilities") — template your own engineering into a reusable, specializable mold so you solve a whole class of problem once. Specialization + scale + orchestration is the moat.

Concepts introduced

Held, not dropped

Themes the capture touches that don't warrant their own concept page yet — spin out on demand:

Key claims

Why this builds on the graph (and corroborates the anti-hype thesis)

Dominant stance — builds_on. This is the same author's agentic-coding worldview extended downward from orchestration into the full capability stack. Where Claude Code Task System: Orchestrating a Team of Agents Through a Task Graph gave the orchestration layer a native runtime (the Task System / Agent Task Graph), this video shows the layers beneath it — skills as capability, sub-agents as scale — and the layer above commands (a just task runner as the reuse front-door). It sharpens Reusable Workflow Library (slash commands + a task runner as a personal, machine-and-human-discoverable catalog) and Agentic Workflow Patterns (/ui-review is parallelization/orchestrator-workers with a reusable front door), and it spins out three new nodes (Layered Agentic Architecture, CLI Tools over MCP Servers, Agentic UI Testing) rather than attaching to nothing — hence builds_on, not novel.

Secondary — refines Meta-Prompt. The higher-order prompt ("a function that takes a function as a parameter") is a concrete new shape of meta-prompt: instead of expanding a short request into a large artifact, it parameterizes a fixed execution shell over an arbitrary inner prompt. That's added as a claim on Meta-Prompt, not a new page.

Secondary — builds_on Agent-Computer Interface (ACI). "CLIs, not MCP servers" is an ACI decision at the level of which surface to expose: a CLI + your skill is a hand-tuned ACI that beats an off-the-shelf MCP server on token cost and extensibility. The ACI principle ("tool quality gates agent reliability") is unchanged; it gains a concrete surface-choice instance.

Also present — corroborates the anti-hype / simplicity thread. The close — "don't just throw agents at the problem," specialization over spamming skills, agentic engineers vs. vibe coders — is a second independent witness (same author, different video) to the stance that structure and understanding beat raw agent count, echoing the sibling distillate's anti-hype close. Not contradicted; reinforced.

Illustrated walkthrough

Visual coverage is ok (max blind gap ~40s, roughly 16:40–17:20, over the "most important agent — the Bowser QA agent" transition into the example.com demo). The sampler misses text-on-solid-background changes, so a missing frame in that window is not evidence the screen was static.


Linked from