Browser visual-verification plugin. It bundles Playwright MCP (cross-platform: Claude Code + GitHub Copilot CLI)
and ships two skills — e2e-plan (writes an e2e/visual spec from the outcomes you want checked) and visual-verify
(asserts that spec against the running app) — for objective, re-runnable browser verification, with no CLI test
command required.
Both platforms read the plugin manifest's "mcpServers": "./.mcp.json" and auto-activate the server on install (MCP
precedence: plugins load last-wins, deduped by server name). One .mcp.json serves both.
Install just this plugin — no ritus core required.
Claude Code:
- Add marketplace
- Install the plugin
/plugin marketplace add precise-alloy/ritus-frontend
/plugin install ritus-frontend
In an active Claude Code session, run
/reload-pluginsafter installing so the plugin's MCP server starts.
GitHub Copilot CLI:
- Add the marketplace
- Fetch the plugin manifest
- Install the plugin
/plugin marketplace add precise-alloy/ritus-frontend
/plugin marketplace browse ritus-frontend-marketplace
/plugin install ritus-frontend@ritus-frontend-marketplace
Install ritus as well — it ships from the ritus core marketplace (separate from this plugin's own).
Claude Code:
/plugin marketplace add precise-alloy-marketplace
/plugin install ritus
/plugin install ritus-frontend
GitHub Copilot CLI:
/plugin marketplace add precise-alloy/ritus
/plugin install ritus@precise-alloy-marketplace
/plugin install ritus-frontend@precise-alloy-marketplace
Everything the plugin needs — the two skills, the spec format, and the pinned Playwright MCP server — ships inside it. That lets it run entirely on its own, and also slot into a larger workflow when one is present. The skills are identical in both modes; only where their inputs come from, and who triggers them, differs.
| Standalone | Alongside ritus | |
|---|---|---|
| Install | Just this plugin | This plugin + ritus core |
| Who triggers it | You invoke e2e-plan / visual-verify directly |
ritus dispatches them per ticket |
| Inputs | You give the route(s), base URL, outcomes, and breakpoints | Derived from ritus's review doc / task files / PROJECT_CONTEXT |
| Spec path | Wherever you point e2e-plan (default ./e2e-spec.md) |
docs/tasks/{branch-slug}/{ticket-id}-e2e-spec.md |
| Result | You read the PASS / FAIL / BLOCKED report | The ticket gate runs visual-verify before pr-review |
The skills carry no ritus knowledge of their own; ritus supplies the wiring (dispatch, inputs, gate) only when it is installed.
- A version-pinned
playwrightMCP server (.mcp.json), auto-activated on install via the manifestmcpServersfield — no manual/mcp add. - The
e2e-planskill — writes ane2e-spec.mdfrom the routes and the outcomes to verify. Standalone: invoke it with the routes + outcomes + breakpoints. Alongside ritus: dispatched aftertask-generation, it derives the spec from the approved review document for the human to review. - The
visual-verifyskill — drives the app and asserts the spec. Standalone: invoke it with a spec + base URL. Alongside ritus: dispatched once per ticket beforepr-review; browser tools live in this skill only.
Plan, then verify:
-
Plan — invoke
e2e-planwith the route(s), the outcomes to check, and the breakpoints. It writes ane2e-spec.md(one## <route>section per surface) for you to review.Plan an e2e spec for
/account/orders: a signed-in customer with ≥1 order sees their order list; check at 640px and 1024px. Write it to./e2e-spec.md. -
Verify — start the app, then invoke
visual-verifywith the spec and the base URL. It drives the running app and reports PASS, a specific failing assertion, or BLOCKED.Run visual-verify on
./e2e-spec.mdagainsthttp://localhost:3000.
Alongside ritus, both steps are dispatched automatically — you don't invoke them by hand.
.mcp.json pins @playwright/mcp to a specific version — never @latest. Pinning keeps the tool surface stable:
browser_run_code_unsafe/browser_evaluate can move in/out of the default caps across releases, and a silent
change would weaken the visual-verify allow-list. Bump the pin deliberately.
Alongside ritus, a ticket with an e2e-spec.md REQUIRES this plugin plus a reachable target: the UI gate is an
objective visual-verify check with no human/deferred fallback. Without the plugin (or a reachable target, or
configured breakpoints), the gate cannot be satisfied and visual-verify reports BLOCKED. Non-UI ritus work is
unaffected.
Alongside ritus, viewports come from docs/PROJECT_CONTEXT.md § Responsive breakpoints (detected by repo-scan);
standalone, from the spec's viewport(s) or you. visual-verify resizes to each configured breakpoint; with none it
reports BLOCKED — it never assumes 375px/1280px.