Skip to content

chore: adopt Playwright CLI skill over Playwright MCP#55

Merged
michellepace merged 7 commits into
mainfrom
chore/adopt-playwright-cli-over-mcp
May 14, 2026
Merged

chore: adopt Playwright CLI skill over Playwright MCP#55
michellepace merged 7 commits into
mainfrom
chore/adopt-playwright-cli-over-mcp

Conversation

@michellepace
Copy link
Copy Markdown
Owner

@michellepace michellepace commented May 14, 2026

Summary

  • Replace the Playwright MCP server with a self-contained playwright-cli skill, collapsing 16 mcp__playwright__* allow entries into a single Bash(playwright-cli *) permission and removing the persistent stdio process
  • Bump dependencies to latest (next 16.2.6, react 19.2.6, clerk 7.3.3, tailwind 4.3, playwright 1.60, shadcn 4.7, etc.) and drop the now-redundant baseline-browser-mapping direct dep
  • Tighten CLAUDE.md: surface the new skill under Key Commands, sync tech-stack versions, restructure breaking changes by package, and add Tailwind/composition conventions
  • Drop @latest from npx shadcn invocations — shadcn is a pinned devDependency so the tag forces an unnecessary registry round-trip

Test plan

  • npm run check (lint + typecheck) passes
  • npm run test:unit — 44 tests pass
  • npm run test:e2e — 17 specs pass
  • Production build succeeds against a clean npm ci
  • playwright-cli open http://localhost:3000 against the dev server — page loads, snapshot returns Page Title: DevFlow (Chromium was pulled by the global @playwright/cli install; no extra npx playwright install step needed)

🤖 Generated with Claude Code

michellepace and others added 6 commits April 10, 2026 04:47
Dependencies:
- @biomejs/biome 2.4.10 → 2.4.11
- baseline-browser-mapping 2.10.16 → 2.10.17
- lucide-react 1.7.0 → 1.8.0
- vitest 4.1.3 → 4.1.4

Docs:
- README.md: TypeScript 5 → 6 (matches installed 6.0.2)

Routine patch-level bumps. README version was stale since the
TypeScript 6 upgrade.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Coding practices:
- Add Tailwind conventions: centralised theming via tokens, mobile-first
  responsive design, utility-first composition
- Add guidance to compose UI from `components/ui/` primitives

Breaking changes:
- Group items under Tailwind v4, Next.js 16, and `cacheComponents` sub-headings
  for scannability instead of a flat bullet list

Other updates:
- Bump styling entry to Tailwind CSS 4.2 and reference `app/globals.css`
- Correct ClerkProvider path to `components/providers/clerk-provider.tsx`
- Trim sign-in/sign-up descriptions and remove the "Common Additions" section
  as it no longer reflects this project's direction

Keeps the file focused on current conventions a contributor needs day-to-day,
removing stale template-era guidance.
…ct dep

Dependency updates:
- next 16.2.3 → 16.2.6, react/react-dom 19.2.5 → 19.2.6
- @clerk/nextjs 7.0.12 → 7.3.3, @clerk/ui 1.5.0 → 1.9.1,
  @clerk/testing 2.0.12 → 2.0.27
- tailwindcss 4.2.2 → 4.3.0, @tailwindcss/postcss 4.2.2 → 4.3.0
- @playwright/test 1.59.1 → 1.60.0, vitest 4.1.4 → 4.1.6
- shadcn 4.2.0 → 4.7.0, lucide-react 1.8.0 → 1.16.0
- @biomejs/biome 2.4.11 → 2.4.15, typescript 6.0.2 → 6.0.3
- Remaining patch bumps: @types/node, dotenv, jsdom, lefthook,
  markdownlint-cli2, tailwind-merge, @rolldown/plugin-babel

Removed:
- baseline-browser-mapping from devDependencies — already pulled in
  transitively by next@16.2.6 and shadcn→browserslist; no source files
  import it and no scripts invoke its CLI

biome.json: update \$schema URL from 2.4.10 → 2.4.15 to match CLI version.
Verified with a clean install (rm node_modules + npm ci) followed by the
full test gauntlet: lint, typecheck, 44 unit tests, production build, and
17 E2E specs — all pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
MCP server removal:
- Remove `@playwright/mcp` from `.mcp.json`
- Drop all 16 `mcp__playwright__*` allow entries from settings.json

Playwright CLI skill setup:
- Add `.claude/skills/playwright-cli/` — SKILL.md with full command
  reference plus 10 topic-specific reference docs (session management,
  test generation, tracing, video, request mocking, storage state, etc.)
- Add `Bash(playwright-cli *)` to settings.json allow list
- Add `.playwright/cli.config.json` — Chromium/Chrome, mobile viewport
  (390×844), 60 s navigation timeout, 5 s action timeout
- Update `.gitignore` to track the config while ignoring CLI output dir
- Update README with one-time install steps; correct `.mcp.json` table
  entry to reflect remaining servers (shadcn, Ref)

The Playwright MCP required a persistent stdio process and exposed 16
individual tool permissions. The CLI skill replaces this with a single
`Bash(playwright-cli *)` allow entry and no background server, keeping
browser control within the established skill boundary.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Drop `@latest` from all `npx shadcn` invocations in CLAUDE.md and
.mcp.json. shadcn is a declared devDependency pinned by the lockfile;
forcing the registry's `latest` tag bypasses that pin and adds an
unnecessary network round-trip on every call.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Tech Stack:
- Tailwind 4.2 → 4.3, Playwright 1.59 → 1.60
- Trim verbose descriptions from Biome, Lefthook, and Vercel entries

Key Commands:
- Remove `npm run analyse`; add `playwright-cli open` as the browser
  automation entry point

Keeps tech stack versions in sync with the dependency bumps on this
branch and makes the playwright-cli skill discoverable following the
removal of the Playwright MCP.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented May 14, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
devflow Ready Ready Preview, Comment May 14, 2026 7:49pm

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 14, 2026

Review Change Stack

Warning

Rate limit exceeded

@michellepace has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 34 minutes and 48 seconds before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: abf84721-6885-4599-8dc5-9b5f7856a7ab

📥 Commits

Reviewing files that changed from the base of the PR and between 49a0dd2 and 5d99f6c.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (1)
  • package.json

Walkthrough

This PR introduces comprehensive Playwright CLI support to the devflow project by adding extensive skill documentation, configuring Claude Code permissions, updating the MCP configuration, and refreshing project dependencies to TypeScript v6 and newer tooling versions.

Changes

Playwright CLI Skill and Configuration Integration

Layer / File(s) Summary
Playwright CLI Main Skill Page
.claude/skills/playwright-cli/SKILL.md
Comprehensive skill documentation for playwright-cli covering quick-start workflow, full command reference (core browser interactions, navigation, keyboard/mouse, storage, networking, DevTools, sessions), output modes, snapshot management, element targeting, installation, and end-to-end examples (form submission, multi-tab workflows, DevTools debugging, interactive UI review).
Playwright CLI Reference Documentation
.claude/skills/playwright-cli/references/*
Nine reference guides: element attribute inspection, running/debugging Playwright tests, request mocking and interception, executing custom code with run-code, session management and browser attachment, spec-driven testing (plan/generate/heal workflow), storage state and cookie/localStorage/sessionStorage/IndexedDB management, test generation with TypeScript output and semantic locators, tracing with capture/replay/analysis, and video recording with chapter markers and overlays.
Claude Code Configuration for Playwright CLI
.claude/CLAUDE.md, .claude/settings.json, .mcp.json
Updates Claude Code to support playwright-cli: CLAUDE.md adds browser automation command guidance and updates tech stack (Tailwind 4.3, Playwright 1.60, unversioned shadcn CLI); settings.json grants Bash(playwright-cli *) permission and removes deprecated mcp__playwright__* entries; mcp.json removes playwright MCP server and updates shadcn to unversioned reference.
Project Configuration and Dependencies
.playwright/cli.config.json, .gitignore, package.json, README.md, biome.json
Adds .playwright/cli.config.json with Chromium headless config, viewport, TypeScript codegen, and timeouts; updates .gitignore to ignore .playwright/ but allow cli.config.json; bumps dependencies (Clerk, Playwright, Tailwind, TypeScript v6, Biome); removes baseline-browser-mapping; documents Claude Code setup and CLI installation in README.md; updates Biome schema to 2.4.15.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • michellepace/devflow#3: Updates .claude/settings.json MCP permission allowlist for Playwright tool patterns.
  • michellepace/devflow#21: Edits .claude/CLAUDE.md shadcn/ui CLI usage section with npx shadcn... command changes.
  • michellepace/devflow#28: Modifies .mcp.json shadcn server args between versioned (shadcn@latest) and unversioned (shadcn) references.

Poem

🐰 Playwright scrolls through browser lands,
CLI commands in talented hands,
Sessions persist, snapshots stay true,
A skill bundle fresh, configured anew!
From TypeScript six to video frames—
Devflow's automation proclaims its name!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately reflects the main change: adopting Playwright CLI skill to replace Playwright MCP, which is the primary objective throughout the changeset.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description check ✅ Passed The pull request description clearly relates to the changeset, detailing the replacement of Playwright MCP with playwright-cli skill, dependency bumps, and documentation updates.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/adopt-playwright-cli-over-mcp

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.claude/skills/playwright-cli/references/session-management.md:
- Line 130: Update the supported channels sentence to include "chromium"
alongside the existing entries; locate the line that currently reads "Supported
channels: `chrome`, `chrome-beta`, `chrome-dev`, `chrome-canary`, `msedge`,
`msedge-beta`, `msedge-dev`, `msedge-canary`" in session-management.md and add
`chromium` to that comma-separated list so it reflects Playwright's bundled
Chromium channel.

In @.claude/skills/playwright-cli/references/storage-state.md:
- Around line 212-217: Add a browser compatibility note near the example that
calls indexedDB.databases() (the snippet using playwright-cli run-code and the
page.evaluate callback) stating that indexedDB.databases() is supported only in
modern browsers (e.g., Chrome 72+, Edge 79+, Firefox 126+, Safari 14+) and may
not work in older browser versions, but current Playwright-provided browsers
include this method; place the note adjacency to the example so readers see the
caveat when using indexedDB.databases().

In @.claude/skills/playwright-cli/references/test-generation.md:
- Around line 90-91: Update the two sentences to include the missing definite
articles: change "make sure that generated locator" to "make sure that the
generated locator" and change "Snapshot to be matched" to "The snapshot to be
matched" in the test-generation.md content so the wording reads correctly; look
for the exact phrases "make sure that generated locator" and "Snapshot to be
matched" to locate the places to edit.

In @.claude/skills/playwright-cli/SKILL.md:
- Around line 196-198: Add a blank line separator after the fenced code block
containing "playwright-cli list --json" so the following heading "## Open
parameters" is preceded by a blank line; locate the fenced block with the
command and ensure there is an empty line between the closing ``` and the "##
Open parameters" heading to satisfy the markdown linter.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 0fd46b9d-7078-4b82-ab52-7c157f9b2745

📥 Commits

Reviewing files that changed from the base of the PR and between 385c4ca and 49a0dd2.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (19)
  • .claude/CLAUDE.md
  • .claude/settings.json
  • .claude/skills/playwright-cli/SKILL.md
  • .claude/skills/playwright-cli/references/element-attributes.md
  • .claude/skills/playwright-cli/references/playwright-tests.md
  • .claude/skills/playwright-cli/references/request-mocking.md
  • .claude/skills/playwright-cli/references/running-code.md
  • .claude/skills/playwright-cli/references/session-management.md
  • .claude/skills/playwright-cli/references/spec-driven-testing.md
  • .claude/skills/playwright-cli/references/storage-state.md
  • .claude/skills/playwright-cli/references/test-generation.md
  • .claude/skills/playwright-cli/references/tracing.md
  • .claude/skills/playwright-cli/references/video-recording.md
  • .gitignore
  • .mcp.json
  • .playwright/cli.config.json
  • README.md
  • biome.json
  • package.json

playwright-cli attach --cdp=msedge-dev
```

Supported channels: `chrome`, `chrome-beta`, `chrome-dev`, `chrome-canary`, `msedge`, `msedge-beta`, `msedge-dev`, `msedge-canary`.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🌐 Web query:

What are the valid browser channel names for Playwright connectOverCDP?

💡 Result:

The valid browser channel names for Playwright's connectOverCDP (as an optional parameter in the options object, added in v1.14 and enhanced in recent updates to resolve channel names to WebSocket endpoints via DevToolsActivePort) are the standard Chromium-based branded browser channels: "chrome", "chrome-beta", "chrome-dev", "chrome-canary", "msedge", "msedge-beta", "msedge-dev", "msedge-canary". "chromium" may also be supported for the open-source build with new headless mode, but primarily branded channels are used for connecting to existing installed browsers.[1][2][3][4][1]

Citations:


🏁 Script executed:

#!/bin/bash
# Search for references to supported channels or connectOverCDP in the documentation and codebase
rg -i "chromium|channel" ".claude/skills/playwright-cli/" -A 2 -B 2 | head -50

Repository: michellepace/devflow

Length of output: 2097


🌐 Web query:

Playwright browser channel names chromium connectOverCDP valid channels list

💡 Result:

The valid browser channel names for Playwright's Chromium (used in browserType.launch({ channel: '...' }) and now supported in connectOverCDP) are: "chromium", "chrome", "chrome-beta", "chrome-dev", "chrome-canary", "msedge", "msedge-beta", "msedge-dev", "msedge-canary".[1][2][3][4][5][6][7] "chromium" opts into the new headless mode using Playwright's bundled Chromium.[1][3] The branded channels ("chrome" etc.) connect to installed Google Chrome or Microsoft Edge browsers on the system.[3][4] For connectOverCDP specifically (browserType.connectOverCDP(endpointURL, { channel?: '...' })), recent updates (PR #40177 from April 2026) allow passing channel names directly instead of a full endpointURL. Playwright resolves the channel to the browser's DevToolsActivePort file in the user data directory to find the WebSocket endpoint. This works on Linux, macOS, and Windows for all listed channels.[5] Official docs confirm channel option availability in connectOverCDP options alongside endpointURL (use channel when you want auto-resolution).[6][8][9][7] Playwright CLI also supports --cdp=channel for attachment.[10]

Citations:


Add chromium to the list of supported channels.

The supported channels list is incomplete. In addition to chrome, chrome-beta, chrome-dev, chrome-canary, msedge, msedge-beta, msedge-dev, and msedge-canary, Playwright also supports the chromium channel, which connects to Playwright's bundled Chromium build with the new headless mode.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/playwright-cli/references/session-management.md at line 130,
Update the supported channels sentence to include "chromium" alongside the
existing entries; locate the line that currently reads "Supported channels:
`chrome`, `chrome-beta`, `chrome-dev`, `chrome-canary`, `msedge`, `msedge-beta`,
`msedge-dev`, `msedge-canary`" in session-management.md and add `chromium` to
that comma-separated list so it reflects Playwright's bundled Chromium channel.

Comment on lines +212 to +217
playwright-cli run-code "async page => {
return await page.evaluate(async () => {
const databases = await indexedDB.databases();
return databases;
});
}"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

🧩 Analysis chain

🌐 Web query:

Is indexedDB.databases() supported in all browsers that Playwright automates?

💡 Result:

No, indexedDB.databases is not supported in all browsers that Playwright automates. Playwright primarily automates Chromium (e.g., Chrome/Edge), Firefox, and WebKit (Safari engine).[1][2][3] The IDBFactory.databases method, which returns a promise listing available IndexedDB databases, has the following support in recent versions (as of 2026): Chrome 72+, Edge 79+, Firefox 126+, Safari 14+.[4][5] Playwright's browsers use recent versions: Chromium ahead of stable Chrome (supports since 72), recent Firefox Stable (supports since 126), and latest WebKit trunk (supports since Safari 14 equivalent).[1][6] Thus, it is supported in all.[5] However, Playwright's WebKit has had historical issues with persistent IndexedDB in some contexts (e.g., Cypress integration), but core API support exists.[7] Recent Playwright updates (2025) added IndexedDB storage state support across browsers, confirming functionality.[8][9]

Citations:


Add browser compatibility note for indexedDB.databases().

The example uses indexedDB.databases(), which requires modern browser versions: Chrome 72+, Edge 79+, Firefox 126+ and Safari 14+. Add a note clarifying that this method may not work with older browser versions, though current Playwright browsers support it.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/playwright-cli/references/storage-state.md around lines 212 -
217, Add a browser compatibility note near the example that calls
indexedDB.databases() (the snippet using playwright-cli run-code and the
page.evaluate callback) stating that indexedDB.databases() is supported only in
modern browsers (e.g., Chrome 72+, Edge 79+, Firefox 126+, Safari 14+) and may
not work in older browser versions, but current Playwright-provided browsers
include this method; place the note adjacency to the example so readers see the
caveat when using indexedDB.databases().

Comment on lines +90 to +91
When asserting text content, make sure that generated locator does not contain text from the element itself. `getByTestId()` or `getByLabel()` usually work well with asserting text. When locator is text-based, prefer `toBeVisible()` instead.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Add missing articles for improved readability.

Two sentences are missing articles:

  • Line 90: "make sure that generated locator" should be "make sure that the generated locator"
  • Line 91: "Snapshot to be matched" should be "The snapshot to be matched"
📝 Proposed fix
-When asserting text content, make sure that generated locator does not contain text from the element itself. `getByTestId()` or `getByLabel()` usually work well with asserting text. When locator is text-based, prefer `toBeVisible()` instead.
+When asserting text content, make sure that the generated locator does not contain text from the element itself. `getByTestId()` or `getByLabel()` usually work well with asserting text. When locator is text-based, prefer `toBeVisible()` instead.

-Snapshot to be matched does not have to contain all the information - only capture what's necessary for the assertion. You can use regular expressions for unstable values.
+The snapshot to be matched does not have to contain all the information - only capture what's necessary for the assertion. You can use regular expressions for unstable values.
🧰 Tools
🪛 LanguageTool

[uncategorized] ~90-~90: Possible missing article found.
Context: ... asserting text content, make sure that generated locator does not contain text from the ...

(AI_HYDRA_LEO_MISSING_THE)


[uncategorized] ~91-~91: Possible missing article found.
Context: ...based, prefer toBeVisible() instead. Snapshot to be matched does not have to contain ...

(AI_HYDRA_LEO_MISSING_THE)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/playwright-cli/references/test-generation.md around lines 90
- 91, Update the two sentences to include the missing definite articles: change
"make sure that generated locator" to "make sure that the generated locator" and
change "Snapshot to be matched" to "The snapshot to be matched" in the
test-generation.md content so the wording reads correctly; look for the exact
phrases "make sure that generated locator" and "Snapshot to be matched" to
locate the places to edit.

Comment on lines +196 to +198
```bash
playwright-cli list --json
```
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial | ⚡ Quick win

Add blank line before heading.

The --json option lacks a blank line separator before the following heading. This violates markdown formatting conventions flagged by the linter.

📝 Proposed formatting fix
 playwright-cli --raw localstorage-get theme

For structured output wrapping every reply as JSON, pass --json
+

playwright-cli list --json

Open parameters

</details>

<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

```suggestion
playwright-cli --raw localstorage-get theme
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)

[warning] 196-196: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.claude/skills/playwright-cli/SKILL.md around lines 196 - 198, Add a blank
line separator after the fenced code block containing "playwright-cli list
--json" so the following heading "## Open parameters" is preceded by a blank
line; locate the fenced block with the command and ensure there is an empty line
between the closing ``` and the "## Open parameters" heading to satisfy the
markdown linter.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@michellepace michellepace merged commit ccaca10 into main May 14, 2026
7 checks passed
@michellepace michellepace deleted the chore/adopt-playwright-cli-over-mcp branch May 14, 2026 21:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant