RStudio Selenium to Playwright Migration
rstudio/rstudio
Converts RStudio Python Selenium electron tests into TypeScript Playwright tests, checking each against a live RStudio before counting it as migrated.
Audit Playwright E2E tests in the gc.platform suite (tests/playwright) against the four hard rules — no mocks, Page Object Model, work-by-fixture, one folder per frontend feature module — plus…
$ npx skills add fmflurry/settings-opencode --skill playwright-e2e-review -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install fmflurry/settings-opencode playwright-e2e-review --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/fmflurry/settings-opencode.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/playwright-e2e-review .claude/skills/playwright-e2e-review && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "playwright-e2e-review" agent skill from https://github.com/fmflurry/settings-opencode/tree/master/skills/playwright-e2e-review into .claude/skills/playwright-e2e-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "playwright-e2e-review", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/fmflurry/settings-opencode/tree/master/skills/playwright-e2e-reviewType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add fmflurry/settings-opencode --skill playwright-e2e-review -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install fmflurry/settings-opencode playwright-e2e-review --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/fmflurry/settings-opencode.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/playwright-e2e-review .agents/skills/playwright-e2e-review && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "playwright-e2e-review" agent skill from https://github.com/fmflurry/settings-opencode/tree/master/skills/playwright-e2e-review into .agents/skills/playwright-e2e-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "playwright-e2e-review", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add fmflurry/settings-opencode --skill playwright-e2e-review -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install fmflurry/settings-opencode playwright-e2e-review --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/fmflurry/settings-opencode.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/playwright-e2e-review .cursor/skills/playwright-e2e-review && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "playwright-e2e-review" agent skill from https://github.com/fmflurry/settings-opencode/tree/master/skills/playwright-e2e-review into .cursor/skills/playwright-e2e-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "playwright-e2e-review", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/fmflurry/settings-opencode.git --path skills/playwright-e2e-review--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add fmflurry/settings-opencode --skill playwright-e2e-review -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install fmflurry/settings-opencode playwright-e2e-review --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/fmflurry/settings-opencode.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/playwright-e2e-review .gemini/skills/playwright-e2e-review && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "playwright-e2e-review" agent skill from https://github.com/fmflurry/settings-opencode/tree/master/skills/playwright-e2e-review into .gemini/skills/playwright-e2e-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "playwright-e2e-review", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install fmflurry/settings-opencode playwright-e2e-reviewInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add fmflurry/settings-opencode --skill playwright-e2e-review -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/fmflurry/settings-opencode.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/playwright-e2e-review .github/skills/playwright-e2e-review && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "playwright-e2e-review" agent skill from https://github.com/fmflurry/settings-opencode/tree/master/skills/playwright-e2e-review into .github/skills/playwright-e2e-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "playwright-e2e-review", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add fmflurry/settings-opencode --skill playwright-e2e-review -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install fmflurry/settings-opencode playwright-e2e-review --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/fmflurry/settings-opencode.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/playwright-e2e-review .opencode/skills/playwright-e2e-review && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "playwright-e2e-review" agent skill from https://github.com/fmflurry/settings-opencode/tree/master/skills/playwright-e2e-review into .opencode/skills/playwright-e2e-review/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "playwright-e2e-review", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
playwright-e2e-reviewAudit Playwright E2E tests in the gc.platform suite (tests/playwright) against the four hard rules — no mocks, Page Object Model, work-by-fixture, one folder per frontend feature module — plus…
Playwright E2E Review is an agent skill from fmflurry/settings-opencode. Audit Playwright E2E tests in the gc.platform suite (tests/playwright) against the four hard rules — no mocks, Page Object Model, work-by-fixture, one folder per frontend feature module — plus strict-TypeScript quality. Use whenever the user wants to review, check, audit, or "make sure it follows the conventions" for .spec.ts / POM / fixture files, before merging or committing E2E test changes, or asks "does this respect the Playwright rules?". Read-only: reports tiered findings with file:line and a concrete fix…
Its SKILL.md is about 2.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Testing & QA, covering End-to-end testing and Browser testing. It works with Playwright and TypeScript. The repository describes itself as: Custom OpenCode settings. The licence is MIT.
Read from SKILL.md and the folder at commit 0e6c33c. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitnpxFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git and npx, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Playwright E2E Review loads about 2.2k tokens when it runs. Until then it costs about 142 tokens; SKILL.md has 860 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from fmflurry/settings-opencode at commit 0e6c33c, republished under its MIT licence (© fmflurry). 860 words, ~2,187 tokens.
.claude/skills/playwright-e2e-review/SKILL.md (or your agent's skills folder).Audit Playwright test code against the suite's four hard rules (from tests/playwright/CLAUDE.md) and its strict-TypeScript bar. This skill is read-only: produce findings the author can act on, don't patch. If the user wants the fixes applied, hand the findings to the playwright-e2e-authoring skill or make the edits in a separate, explicit step.
Path convention: All paths in this document are relative to tests/playwright/ (the test suite root).
.spec.ts, *.page.ts, or *.fixture.ts files.Default to the changed files when there's a diff, otherwise the path the user names:
cd tests/playwright
git diff --name-only main...HEAD -- tests support # changed test filesRead each file fully before judging — context matters (e.g. a page.locator('tbody tr') inside a POM is allowed; the same inside a spec is not).
The suite's entire value is that it hits the real stack. Any simulation is a Critical finding.
grep -rnE "page\.route|context\.route|waitForTimeout|mockServiceWorker|msw|sinon|nock|page\.fulfill" tests support --include='*.ts'(Or use the harness Grep tool.)
page.route() / context.route() / route.fulfill() → network interception. Forbidden.page.waitForTimeout(...) or any arbitrary sleep → flaky and banned; replace with a web-first assertion on the awaited state.Admitted exception: A single page.route() with times: 1 is allowed only to force a failure shape the real stack cannot produce deterministically (e.g. a 401, or .abort()), scoped to one URL pattern, carrying a JSDoc justification. Link to ../playwright-e2e-authoring/references/spec.md#admitted-exceptions for examples and constraints. If the route stubs business data, simulates success, or widens beyond one request — Critical.
grep -rnE "(page|authenticatedPage)\.(locator|getBy|click|fill|goto)\(" tests --include='*.spec.ts'(Or use the harness Grep tool.)
page.locator(...) / page.getByRole(...) / page.click(...) (or the same on authenticatedPage) directly → DOM access leaked out of a POM. Move it into a POM method.authenticatedPage to touch the DOM directly (rather than calling POM methods) is the same violation.tests/<module>/pages/ that extends BasePage (support/pages/base.page.ts).nth(...)) where a getByRole/getByLabel/getByTestId would work. page.locator('tbody tr') filtered by text is acceptable for structural collections.False negatives (grep won't catch): Locators obtained via a destructured page stored in a variable (e.g. const { getByRole } = page; getByRole(...)), or obtained via context.newPage() inline in the test. Read the file to verify. False positive: page.goto in a public-route beforeEach is allowed (part of test setup, not implementation detail).
grep -rnE "from '@playwright/test'" tests --include='*.spec.ts' # specs must NOT import from here
grep -rnE "new \w+Page\(" tests --include='*.spec.ts' # POMs must come from fixtures(Or use the harness Grep tool.)
test/expect from @playwright/test instead of its module fixture (./fixtures/<module>.fixture) → loses fixtures. Fix the import.new SomePage(...) inside a spec → POM instantiated by hand instead of injected. Provide it as a fixture key.base (public routes) or auth (authenticated routes) and re-export expect.authenticatedPage, not a fresh page.BrowserContext types from @playwright/test is allowed for multi-context tests (Medium "verify justification" instead of High). Hand-instantiating a POM with test.use({ storageState: undefined }) is allowed for alternate-tenant tests. Link to ../playwright-e2e-authoring/references/spec.md#admitted-exceptions for constraints.tests/<module>/pages/ must be exposed by a key in the module fixture. Flag any POMs that are imported nowhere (Medium).tests/<module>/ must mirror a real frontend/src/app/modules/<module>. Flag mismatched or invented module names.support/, not copied between modules.<screen>.page.ts/<Screen>Page, <module>.fixture.ts, <feature>.spec.ts.# Detect `any` type (not English word "any" in comments):
grep -rnE ":\s*any\b|as any|<any[,>]" tests support --include='*.ts'
# Detect console.log in test code:
grep -rnE "console\.log" tests support --include='*.ts'
# Detect leftover test markers:
grep -rnE "test\.(only|skip|fixme)\(" tests --include='*.spec.ts'(Or use the harness Grep tool.)
any type annotation (: any, as any, <any>) → repo-wide ban (High). Locators are Locator, ctor params Page.console.log in test code → remove.test.only, test.skip, test.fixme without a reason string → High for .only (blocks CI), Medium for .skip/.fixme (explain why). Note: forbidOnly is CI-enforced, not locally.goto() must appear in the route warm-up loop of support/auth.setup.ts. Cross-check the two lists — missing routes cause cold-compile flakiness.scripts/check-added-comments.sh, run it against the base branch; otherwise git diff -U0 | grep -nE '^\+.*(//|/\*|#|<!--)', to verify all added/changed comments are truthful and belong to allowed classes (~/.claude/rules/common/code-comments.md, or the repo's copy). False or forbidden comments block approval.Don't trust a green self-report — compile it yourself:
cd tests/playwright
npx tsc --noEmit --pretty falseReport the result. If it errors, those are Critical findings regardless of the checklist.
Lead with a one-line verdict, then findings grouped by severity, each with file:line, the rule it breaks, and a concrete fix. Close with what's clean so the author knows it was actually checked.
## Playwright E2E review — <scope>
Verdict: <BLOCK / approve with fixes / clean>
### Critical
- tests/foo/foo.spec.ts:23 — Rule 1 (no mocks): `page.route('**/api/x')` intercepts the backend.
Fix: delete the route; assert against the real response, seed data via the `request` fixture.
### High
- tests/foo/foo.spec.ts:1 — Rule 3 (fixtures): imports `test` from `@playwright/test`.
Fix: `import { test, expect } from './fixtures/foo.fixture';`
### Medium
- ...
### Clean
- POMs extend BasePage and use getByRole/getByLabel throughout.
- `npx tsc --noEmit` passes.Keep it terse and specific — a reviewer should be able to jump to each file:line and act without re-reading the rules.
For the fix wording: Reuse the templates in ../playwright-e2e-authoring/references/pom.md, fixtures.md, spec.md, and data-setup.md so fixes feel native to the suite's conventions.
On duplication: The four core rules are already stated in tests/playwright/CLAUDE.md (canonical). This skill's checklist adds procedure and the review's own verification steps; do not restate the full rules, only reference them.
© fmflurry, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/playwright-e2e-review of fmflurry/settings-opencode.
Open the folder on GitHubat commit 0e6c33c
Playwright E2E Review next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Playwright E2E Review this skillfmflurry/settings-opencode | 171 | — | ~2.2k | Automated safety check: Pass | MIT | |
| RStudio Selenium to Playwright Migrationrstudio/rstudio | 5.1k | — | ~3.6k | Automated safety check: Pass | Custom licence | |
| Svelte Testingspences10/sveltest | 113 | — | ~579 | Automated safety check: Pass | MIT | |
| Playwright Login Flowsandrewyng/context-hub | 14k | — | ~715 | Automated safety check: Pass | MIT | |
| Ha Frontend Testinghome-assistant/frontend | 5.7k | — | ~1.7k | Automated safety check: Pass | Apache-2.0 | |
| Playwright Page Objectsbartstc/vite-ts-react-template | 122 | — | ~1k | Automated safety check: Notes | MIT |
rstudio/rstudio
Converts RStudio Python Selenium electron tests into TypeScript Playwright tests, checking each against a live RStudio before counting it as migrated.
spences10/sveltest
Fix and create Svelte 5 tests with vitest-browser-svelte and Playwright.
andrewyng/context-hub
Collects reusable Playwright patterns for logging in during end-to-end tests: password forms, OAuth redirects, saved browser state and TOTP two-factor codes.
home-assistant/frontend
Home Assistant frontend testing and validation workflow. An agent skill from home-assistant/frontend.
bartstc/vite-ts-react-template
A skill your agent uses when creating page objects or refactoring Playwright E2E tests for better maintainability with Page Object Model patterns.
idavidov13/agentic-playwright
Copy-paste AI prompt templates for common Playwright scaffold development tasks — adding page objects, functional/E2E/API tests, Zod schemas, factories, fixtures, and components.
fmflurry/settings-opencode
Keep a reviewable decision trail for long-running or unattended work: a TSV log with one row per decision (what, why, evidence, result).
fmflurry/settings-opencode
Scaffold and extend Playwright E2E tests for the gc.platform suite (tests/playwright), wiring every artifact to the real frontend (localhost:4200) + real .NET backend — never mocks.
fmflurry/settings-opencode
A skill your agent uses for 'why does X work this way', 'why we picked Y', design rationale, regressions, postmortems, or data-backed thresholds.
fmflurry/settings-opencode
Audit and fix common accessibility issues in Angular templates and Angular Material components.
fmflurry/settings-opencode
Scaffolds and extends Angular standalone feature MODULES under src/app/modules/{name} using Clean Architecture layering (presentation/application/core/infrastructure), a self-registering module…
fmflurry/settings-opencode
Pre-merge code review for Angular + TypeScript pull requests.
Works with
Categories
Audit Playwright E2E tests in the gc.platform suite (tests/playwright) against the four hard rules — no mocks, Page Object Model, work-by-fixture, one folder per frontend feature module — plus…. Playwright E2E Review is an agent skill from fmflurry/settings-opencode.platform suite (tests/playwright) against the four hard rules — no mocks, Page Object Model, work-by-fixture, one folder per frontend feature module — plus strict-TypeScript quality.
Playwright E2E Review fits situations like: the user wants to review; make sure it follows the conventions for .spec.ts / POM / fixture files; committing E2E test changes; asks does this respect the Playwright rules?.
Run `npx skills add fmflurry/settings-opencode --skill playwright-e2e-review -a claude-code`. Or copy the skill folder (skills/playwright-e2e-review in fmflurry/settings-opencode) into .claude/skills/playwright-e2e-review in your project. Claude Code loads it when a task matches its description.
Run `npx skills add fmflurry/settings-opencode --skill playwright-e2e-review -a codex`. Or copy the skill folder (skills/playwright-e2e-review in fmflurry/settings-opencode) into .agents/skills/playwright-e2e-review in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add fmflurry/settings-opencode --skill playwright-e2e-review -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/playwright-e2e-review, .gemini/skills/playwright-e2e-review, .github/skills/playwright-e2e-review and .opencode/skills/playwright-e2e-review in your project.
Going by SKILL.md and its folder, Playwright E2E Review needs the command-line tools its instructions call (git and npx). Our summary lists: Node.js.
SKILL.md contains no URLs. Its commands use git and npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Playwright E2E Review is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.2k tokens (SKILL.md is roughly 8.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Playwright E2E Review: RStudio Selenium to Playwright Migration (rstudio/rstudio, 5.1k stars), Svelte Testing (spences10/sveltest, 113 stars), Playwright Login Flows (andrewyng/context-hub, 14k stars) and Ha Frontend Testing (home-assistant/frontend, 5.7k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
fmflurry (a GitHub user) maintains it in fmflurry/settings-opencode, which has 171 GitHub stars. The repository holds 20 skills in this directory. The repository was last updated on October 7, 2026.
Source: fmflurry/settings-opencode on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.