E2E
openathleteorg/openathlete
Run, debug or extend the OpenAthlete Playwright end-to-end tests, which exercise the production Docker images (API, worker, web, PostgreSQL, Redis) through the API and a real browser on desktop and…
Generate Playwright end-to-end test specs and Page Object Models from UI/UX flow walkthroughs.
$ npx skills add EmeaAppGbb/spec2cloud --skill e2e-generation -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install EmeaAppGbb/spec2cloud e2e-generation --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/EmeaAppGbb/spec2cloud.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/skills/e2e-generation .claude/skills/e2e-generation && 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 "e2e-generation" agent skill from https://github.com/EmeaAppGbb/spec2cloud/tree/vNext/.github/skills/e2e-generation into .claude/skills/e2e-generation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "e2e-generation", 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/EmeaAppGbb/spec2cloud/tree/vNext/.github/skills/e2e-generationType 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 EmeaAppGbb/spec2cloud --skill e2e-generation -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install EmeaAppGbb/spec2cloud e2e-generation --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/EmeaAppGbb/spec2cloud.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.github/skills/e2e-generation .agents/skills/e2e-generation && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "e2e-generation" agent skill from https://github.com/EmeaAppGbb/spec2cloud/tree/vNext/.github/skills/e2e-generation into .agents/skills/e2e-generation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "e2e-generation", 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 EmeaAppGbb/spec2cloud --skill e2e-generation -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install EmeaAppGbb/spec2cloud e2e-generation --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/EmeaAppGbb/spec2cloud.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.github/skills/e2e-generation .cursor/skills/e2e-generation && 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 "e2e-generation" agent skill from https://github.com/EmeaAppGbb/spec2cloud/tree/vNext/.github/skills/e2e-generation into .cursor/skills/e2e-generation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "e2e-generation", 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/EmeaAppGbb/spec2cloud.git --path .github/skills/e2e-generation--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 EmeaAppGbb/spec2cloud --skill e2e-generation -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install EmeaAppGbb/spec2cloud e2e-generation --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/EmeaAppGbb/spec2cloud.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.github/skills/e2e-generation .gemini/skills/e2e-generation && 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 "e2e-generation" agent skill from https://github.com/EmeaAppGbb/spec2cloud/tree/vNext/.github/skills/e2e-generation into .gemini/skills/e2e-generation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "e2e-generation", 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 EmeaAppGbb/spec2cloud e2e-generationInstalls 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 EmeaAppGbb/spec2cloud --skill e2e-generation -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/EmeaAppGbb/spec2cloud.git skills-src && mkdir -p .github/skills && cp -r skills-src/.github/skills/e2e-generation .github/skills/e2e-generation && 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 "e2e-generation" agent skill from https://github.com/EmeaAppGbb/spec2cloud/tree/vNext/.github/skills/e2e-generation into .github/skills/e2e-generation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "e2e-generation", 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 EmeaAppGbb/spec2cloud --skill e2e-generation -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install EmeaAppGbb/spec2cloud e2e-generation --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/EmeaAppGbb/spec2cloud.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.github/skills/e2e-generation .opencode/skills/e2e-generation && 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 "e2e-generation" agent skill from https://github.com/EmeaAppGbb/spec2cloud/tree/vNext/.github/skills/e2e-generation into .opencode/skills/e2e-generation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "e2e-generation", 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.
e2e-generationGenerate Playwright end-to-end test specs and Page Object Models from UI/UX flow walkthroughs.
E2E Generation is an agent skill from EmeaAppGbb/spec2cloud. Generate Playwright end-to-end test specs and Page Object Models from UI/UX flow walkthroughs. Create complete user journey tests that exercise navigation, forms, and interactions. Use when scaffolding e2e tests, creating POMs, or generating Playwright specs for user flows.
Its SKILL.md is about 2.5k 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, UX design and UI design. It works with Playwright. The licence is MIT.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 8e76618. 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:
npxFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use 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.
E2E Generation loads about 2.5k tokens when it runs. Until then it costs about 72 tokens; SKILL.md has 916 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 EmeaAppGbb/spec2cloud at commit 8e76618, republished under its MIT licence (© EmeaAppGbb). 916 words, ~2,541 tokens.
.claude/skills/e2e-generation/SKILL.md (or your agent's skills folder).You are the E2E Generation Agent. You read the approved UI/UX artifacts — flow-walkthrough.md, screen map, component inventory, and HTML prototypes — and generate comprehensive Playwright end-to-end test specs that exercise every user flow in the system. Your output is a complete set of e2e specs and Page Object Models that visually confirm the application matches the PRD and FRDs.
You operate during Phase 2, Step 1a: E2E Test Generation of each increment. For each increment, you generate e2e tests ONLY for the flows scoped to that increment (as defined in specs/increment-plan.md). Tests from previous increments already exist and must not be modified.
The specs/ui/flow-walkthrough.md is the master source of truth for all user flows. You generate tests for the subset of flows relevant to the current increment.
Before you begin, read and understand:
specs/ui/flow-walkthrough.md) — canonical list of all user flows. Every flow becomes one or more Playwright test cases.specs/ui/screen-map.md) — screen inventory with navigation connections and FRD mapping.specs/ui/component-inventory.md) — all UI components, their props/states, and which screens use them.specs/ui/prototypes/*.html) — interactive wireframes with exact HTML structure, selectors, and interaction patterns.specs/frd-*.md) — for domain context and acceptance criteria.specs/prd.md) — for overall product vision and success criteria..spec2cloud/state.json — confirm you are in Phase 2 (increment delivery), Step 1.specs/increment-plan.md) — identify which flows are in scope for the current increment.Read specs/ui/flow-walkthrough.md and extract every user flow. A flow is a complete user journey with:
Create a mapping: flow name → list of screens traversed → expected outcome.
For each screen in specs/ui/screen-map.md, create a POM class in e2e/pages/:
// e2e/pages/{screen-name}.page.ts
import { type Locator, type Page } from '@playwright/test';
export class {ScreenName}Page {
readonly page: Page;
// Locators derived from specs/ui/prototypes/{screen-name}.html
readonly heading: Locator;
readonly navLinks: Locator;
// ... all interactive elements from the prototype
constructor(page: Page) {
this.page = page;
// Selectors match the HTML structure in the prototype
this.heading = page.getByRole('heading', { name: /.../ });
this.navLinks = page.getByRole('navigation').getByRole('link');
}
async goto() {
await this.page.goto('/{route}');
}
// Action methods for each user interaction from the prototype
async fillForm(data: Record<string, string>) { /* ... */ }
async submit() { /* ... */ }
}POM rules:
specs/ui/prototypes/{screen-name}.htmlgetByRole, getByLabel, getByText — avoid CSS selectorsFor each flow in flow-walkthrough.md, create a Playwright spec:
// e2e/{flow-name}.spec.ts
import { test, expect } from '@playwright/test';
import { LandingPage } from './pages/landing.page';
import { LoginPage } from './pages/login.page';
import { DashboardPage } from './pages/dashboard.page';
test.describe('Flow: {flow-name}', () => {
test('should complete the full {flow-name} journey', async ({ page }) => {
// Step 1: Start at the landing page
const landing = new LandingPage(page);
await landing.goto();
await expect(landing.heading).toBeVisible();
// Step 2: Navigate to login
await landing.clickSignIn();
const login = new LoginPage(page);
await expect(login.emailInput).toBeVisible();
// Step 3: Complete login
await login.login('jane@example.com', 'SecureP@ss1');
// Step 4: Verify dashboard
const dashboard = new DashboardPage(page);
await expect(page).toHaveURL(/\/dashboard/);
await expect(dashboard.welcomeMessage).toContainText(/Welcome/);
});
});Spec rules:
flow-walkthrough.mdIdentify flows that span multiple features or share navigation paths. Create cross-flow specs that verify:
Apply tags consistently:
| Tag | Usage |
|---|---|
@smoke | Critical happy-path flows — minimum set for deployment verification |
@flow:{flow-name} | Traceability to the specific flow in flow-walkthrough.md |
@frd:{frd-id} | Traceability to the FRD the flow validates |
All e2e tests run against the Aspire-managed environment. The Playwright config already handles this:
webServer in e2e/playwright.config.ts starts aspire start + aspire wait webhttp://localhost:3001 (Aspire web port)http://localhost:5001 (Aspire API port)Do NOT modify the Playwright config or webServer setup. Your tests run against the Aspire environment automatically.
After every Azure deployment, the full E2E suite (not just @smoke) must pass against the deployed URL. This is enforced by the azure-deployment skill. When writing e2e tests, ensure they work with both local Aspire and deployed URLs via PLAYWRIGHT_BASE_URL.
After generating all specs:
List all tests:
npx playwright test --list --config=e2e/playwright.config.tsAll tests should be listed without errors.
Verify compilation:
npx tsc --noEmit --project tsconfig.jsonAll TypeScript files should compile without errors.
Coverage check:
Every flow in flow-walkthrough.md must have a corresponding spec file. Create a coverage matrix:
Flow: "New user signup" → e2e/signup-flow.spec.ts ✅
Flow: "Returning user login" → e2e/login-flow.spec.ts ✅
Flow: "Create resource" → e2e/resource-flow.spec.ts ✅
...waitFor, toBeVisible, toHaveURL patternstest.skip() — tests should exist and be runnable (they'll fail until implementation)e2e/
├── playwright.config.ts # Already exists — do not modify
├── fixtures.ts # Shared test fixtures and helpers
├── {flow-name}.spec.ts # One spec per flow from flow-walkthrough.md
├── smoke.spec.ts # Smoke tests (critical happy paths)
└── pages/ # Page Object Models
├── landing.page.ts # One POM per screen from screen-map.md
├── login.page.ts
├── dashboard.page.ts
└── ...After completing e2e generation:
.spec2cloud/state.json — set phase to e2e-generation-complete.spec2cloud/audit.log:[TIMESTAMP] e2e-generation: Generated e2e specs for N flows
[TIMESTAMP] e2e-generation: Generated N Page Object Models
[TIMESTAMP] e2e-generation: All specs compile and are listed ✅[e2e-gen] scaffold e2e tests for all flowsThe orchestrator MUST verify ALL of the following before marking e2e-generation as complete:
e2e/*.spec.ts) exists for every user flow in specs/ui/flow-walkthrough.mde2e/pages/*.page.ts) exists for every screen in specs/ui/screen-map.mddata-testid selectors from specs/ui/component-inventory.md (not CSS classes or XPath)e2e/playwright.config.ts exists and is configured for the Aspire environmentnpx playwright test --list returns all specs without errors)BLOCKING: If any item is unchecked, the skill has NOT completed successfully. The orchestrator must loop back and complete the missing items before advancing to Gherkin generation.
© EmeaAppGbb, 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 .github/skills/e2e-generation of EmeaAppGbb/spec2cloud.
Open the folder on GitHubat commit 8e76618
E2E Generation 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 |
|---|---|---|---|---|---|---|
| E2E Generation this skillEmeaAppGbb/spec2cloud | 100 | — | ~2.5k | Automated safety check: Pass | MIT | |
| E2Eopenathleteorg/openathlete | 100 | — | ~675 | Automated safety check: Pass | AGPL-3.0 | |
| UI Reviewjvm-skills/jvm-skills | 140 | — | ~545 | Automated safety check: Pass | Apache-2.0 | |
| Playwright E2E Testingfugazi/test-automation-skills-agents | 247 | — | ~3.2k | Automated safety check: Pass | MIT | |
| Playwright E2E Builderdavila7/claude-code-templates | 32k | — | ~5.3k | Automated safety check: Notes | MIT | |
| Web Application Testinganthropics/skills | 180k | 51 repos | ~966 | Automated safety check: Pass | Apache-2.0 |
openathleteorg/openathlete
Run, debug or extend the OpenAthlete Playwright end-to-end tests, which exercise the production Docker images (API, worker, web, PostgreSQL, Redis) through the API and a real browser on desktop and…
jvm-skills/jvm-skills
Verify UI/UX by running Playwright tests and reviewing screenshots.
fugazi/test-automation-skills-agents
Author and maintain versioned Playwright (@playwright/test) TypeScript UI specs for browser user flows.
davila7/claude-code-templates
Plan and build comprehensive Playwright E2E test suites with Page Object Model, authentication state persistence, custom fixtures, visual regression, and CI integration.
anthropics/skills
Tests local web applications with Python Playwright scripts, checking frontend behavior, capturing screenshots and reading browser console logs.
github/gh-aw
Drives a real browser from the command line with playwright-cli to open pages, interact, mock requests, save state and work with Playwright tests.
EmeaAppGbb/spec2cloud
Provision Azure infrastructure, deploy to Azure Container Apps, and verify via smoke tests.
EmeaAppGbb/spec2cloud
Generate API contracts, shared TypeScript types, and infrastructure resource definitions from Gherkin scenarios and test files.
EmeaAppGbb/spec2cloud
Create Domain-Driven Design proposals from product specs or brownfield extraction outputs.
EmeaAppGbb/spec2cloud
Write application code to make failing tests pass using contract-driven, slice-based architecture.
EmeaAppGbb/spec2cloud
Review PRDs and FRDs through product and technical lenses. An agent skill from EmeaAppGbb/spec2cloud.
EmeaAppGbb/spec2cloud
Read, write, and maintain .spec2cloud/state.json across phases and increments.
Works with
Categories
Generate Playwright end-to-end test specs and Page Object Models from UI/UX flow walkthroughs. E2E Generation is an agent skill from EmeaAppGbb/spec2cloud. Generate Playwright end-to-end test specs and Page Object Models from UI/UX flow walkthroughs.
E2E Generation fits situations like: scaffolding e2e tests; generating Playwright specs for user flows.
Run `npx skills add EmeaAppGbb/spec2cloud --skill e2e-generation -a claude-code`. Or copy the skill folder (.github/skills/e2e-generation in EmeaAppGbb/spec2cloud) into .claude/skills/e2e-generation in your project. Claude Code loads it when a task matches its description.
Run `npx skills add EmeaAppGbb/spec2cloud --skill e2e-generation -a codex`. Or copy the skill folder (.github/skills/e2e-generation in EmeaAppGbb/spec2cloud) into .agents/skills/e2e-generation 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 EmeaAppGbb/spec2cloud --skill e2e-generation -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/e2e-generation, .gemini/skills/e2e-generation, .github/skills/e2e-generation and .opencode/skills/e2e-generation in your project.
Going by SKILL.md and its folder, E2E Generation needs the command-line tools its instructions call (npx). Our summary lists: Node.js.
SKILL.md contains no URLs. Its commands use 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.
E2E Generation 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.5k tokens (SKILL.md is roughly 10k 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 E2E Generation: E2E (openathleteorg/openathlete, 100 stars), UI Review (jvm-skills/jvm-skills, 140 stars), Playwright E2E Testing (fugazi/test-automation-skills-agents, 247 stars) and Playwright E2E Builder (davila7/claude-code-templates, 32k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
EmeaAppGbb (a GitHub organization) maintains it in EmeaAppGbb/spec2cloud, which has 100 GitHub stars. The repository holds 39 skills in this directory. The repository was last updated on April 16, 2026.
Source: EmeaAppGbb/spec2cloud on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.