E2E Testing Patterns
try-works/role-model
Master end-to-end testing with Playwright and Cypress to build reliable test suites that catch bugs, improve confidence, and enable fast deployment.
Create Cypress e2e tests for a specific feature. An agent skill from getlago/lago-front.
$ npx skills add getlago/lago-front --skill make-e2e-tests -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install getlago/lago-front make-e2e-tests --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/getlago/lago-front.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/make-e2e-tests .claude/skills/make-e2e-tests && 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 "make-e2e-tests" agent skill from https://github.com/getlago/lago-front/tree/main/.agents/skills/make-e2e-tests into .claude/skills/make-e2e-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "make-e2e-tests", 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/getlago/lago-front/tree/main/.agents/skills/make-e2e-testsType 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 getlago/lago-front --skill make-e2e-tests -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install getlago/lago-front make-e2e-tests --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/getlago/lago-front.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/make-e2e-tests .agents/skills/make-e2e-tests && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "make-e2e-tests" agent skill from https://github.com/getlago/lago-front/tree/main/.agents/skills/make-e2e-tests into .agents/skills/make-e2e-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "make-e2e-tests", 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 getlago/lago-front --skill make-e2e-tests -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install getlago/lago-front make-e2e-tests --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/getlago/lago-front.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/make-e2e-tests .cursor/skills/make-e2e-tests && 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 "make-e2e-tests" agent skill from https://github.com/getlago/lago-front/tree/main/.agents/skills/make-e2e-tests into .cursor/skills/make-e2e-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "make-e2e-tests", 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/getlago/lago-front.git --path .agents/skills/make-e2e-tests--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 getlago/lago-front --skill make-e2e-tests -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install getlago/lago-front make-e2e-tests --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/getlago/lago-front.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/make-e2e-tests .gemini/skills/make-e2e-tests && 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 "make-e2e-tests" agent skill from https://github.com/getlago/lago-front/tree/main/.agents/skills/make-e2e-tests into .gemini/skills/make-e2e-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "make-e2e-tests", 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 getlago/lago-front make-e2e-testsInstalls 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 getlago/lago-front --skill make-e2e-tests -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/getlago/lago-front.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/make-e2e-tests .github/skills/make-e2e-tests && 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 "make-e2e-tests" agent skill from https://github.com/getlago/lago-front/tree/main/.agents/skills/make-e2e-tests into .github/skills/make-e2e-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "make-e2e-tests", 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 getlago/lago-front --skill make-e2e-tests -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install getlago/lago-front make-e2e-tests --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/getlago/lago-front.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/make-e2e-tests .opencode/skills/make-e2e-tests && 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 "make-e2e-tests" agent skill from https://github.com/getlago/lago-front/tree/main/.agents/skills/make-e2e-tests into .opencode/skills/make-e2e-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "make-e2e-tests", 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.
make-e2e-testsCreate Cypress e2e tests for a specific feature. An agent skill from getlago/lago-front.
Make E2E Tests is an agent skill from getlago/lago-front. Create Cypress e2e tests for a specific feature. Accepts a feature name, PR number, or branch name. Navigates the codebase, adds data-test attributes if missing, writes happy-path tests following project conventions, and validates them with Cypress.
Its SKILL.md is about 4.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. It works with Cypress. The repository describes itself as: Open Source Metering and Usage Based Billing. The licence is AGPL-3.0.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 79b5b3d. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadGlobGrepEditWriteBashAskUserQuestionAgentFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitghnpxpnpmFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, gh, npx and pnpm, 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.
Make E2E Tests loads about 4.2k tokens when it runs. Until then it costs about 66 tokens; SKILL.md has 1,326 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 noted patterns worth knowing about, such as sudo or a known installer.
allowed-tools: Read, Glob, Grep, Edit, Write, Bash, AskUserQuestion, AgentAutomated 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 getlago/lago-front at commit 79b5b3d, republished under its AGPL-3.0 licence (© getlago). 1,326 words, ~4,241 tokens.
.claude/skills/make-e2e-tests/SKILL.md (or your agent's skills folder).Target: $ARGUMENTS
Important: If no argument was provided above (empty or missing), use the AskUserQuestion tool to ask the user what they want to create E2E tests for. They can provide:
- A feature name (e.g.,
customer creation form,coupon create and edit flow)- A PR number (format:
#123or123)- A branch name (local or remote, e.g.,
feature/my-featureororigin/feature/my-feature)
E2E tests cover ONLY the macro happy paths — the core user journeys that prove the feature works end-to-end. Deep coverage (edge cases, error states, complex validations) belongs in unit and integration tests.
What E2E tests should cover:
What E2E tests should NOT cover:
Key principles:
before() hooksDetermine what the user provided:
If PR number (numeric or starts with #):
PR_NUMBER="${INPUT#\#}"
gh pr view "$PR_NUMBER" --json files,additions,deletions,body,title
gh pr diff "$PR_NUMBER"If branch name:
# Check local branch first
git branch --list "$INPUT"
# Then remote
git fetch origin && git branch -r --list "origin/$INPUT"
# Get diff against main
git diff main..."$INPUT" --name-only
git diff main..."$INPUT"If feature name (not a PR or branch):
Fallback: If input doesn't match any of the above, use the current branch:
git diff main...HEAD --name-onlyIf the input is a feature name, evaluate whether it's specific enough.
Too broad (ask the user to narrow down):
Good scope (proceed):
If too broad, use the AskUserQuestion tool to ask the user to narrow it down.
Whether from a PR diff or a feature name, determine:
src/core/router/ for route paths, src/pages/ for page componentsFocus on user-facing behavior, not implementation details.
For each page/component involved, read the source to extract:
data-test attributes — These are your selectorsinput[name="..."] fields — These are your form field selectorsnavigate() or <Link> goes*TestIds.ts or *dataTestConstants.ts file# Find data-test attributes in components
grep -n 'data-test' src/pages/TargetPage.tsx
# Find existing TestIds files
find src -name "*TestIds*" -o -name "*testIds*" -o -name "*dataTestConstants*"Look in cypress/e2e/ for any tests already covering this feature. Understand what's covered and what's missing.
From the analysis, identify only the core user journeys worth E2E testing:
| Flow Type | Include in E2E? | Notes |
|---|---|---|
| Create resource | Yes | Fill form with valid data -> submit -> verify |
| Edit resource | Yes | Navigate to existing -> modify -> submit -> verify |
| Key UI interactions | Yes | Filters, tabs, navigation — but keep minimal |
| Navigation | Only if new routes | Verify route access, not deep navigation |
| Delete flows | No | Too destructive, test in integration tests |
| Validation errors | No | Test in unit tests |
| Error states | No | Test in integration tests |
| Cross-page flows | No | Too fragile for E2E |
| Edge cases | No | Test in unit/integration tests |
| Feature Area | Folder | Example |
|---|---|---|
| Authentication | cypress/e2e/00-auth/ | t40-password-reset.cy.ts |
| Core resources (CRUD) | cypress/e2e/10-resources/ | t80-webhook-create-edit.cy.ts |
| Cross-resource flows | cypress/e2e/ (root) | t40-assign-plan-to-customer.cy.ts |
Check existing files in the target folder to determine the next number. Use increments of 10 (t10, t20, t30, ...).
You MUST present a test plan and wait for user confirmation before writing any code.
Keep to 2-4 test cases max — only the essential happy paths:
E2E Test Plan
Source: PR #<NUMBER> "<PR TITLE>" (or Feature: <feature-name>, or Branch: <branch-name>)
Summary of Changes Analyzed:
- <Brief description of what the feature implements>
- <Key pages/components affected>
Target File: cypress/e2e/<folder>/t<NN>-<feature-name>.cy.ts
Prerequisites:
- [List any resources that must exist, e.g., "logged-in user", "existing plan"]
Test Cases (happy paths only):
1. should be able to create a <resource>
Flow: login -> navigate -> fill form -> submit -> verify success
Selectors needed: [list key data-test / input selectors]
2. should be able to edit the <resource>
Flow: login -> navigate to resource -> click edit -> modify -> submit -> verify
Selectors needed: [list key data-test / input selectors]
Components Needing New data-test Attributes:
- [List components that need new data-test attributes, or "None - all selectors already exist"]
Excluded from E2E (covered elsewhere):
- [List what was intentionally left out, e.g., "validation errors (unit tests)", "delete flow (destructive)"]Ask the user:
"Here is the E2E test plan. Do you want me to proceed with implementation, or would you like to adjust anything?"
Do NOT proceed to Phase 3 until the user explicitly confirms.
If components lack data-test attributes for key interactive elements, add them now.
CRITICAL: Data-test constants MUST live in a standalone .ts file (no React imports, no JSX, only plain string exports). Cypress cannot import React components — it can only import plain JS/TS modules.
Where to put the constants file:
src/components/<feature>/utils/dataTestConstants.ts <- preferred location
src/pages/<feature>/featureTestIds.ts <- alternativeExisting examples to follow:
// src/components/customers/utils/dataTestConstants.ts
export const CREATE_CUSTOMER_DATA_TEST = 'create-customer'
export const SUBMIT_CUSTOMER_DATA_TEST = 'submit-customer'// src/pages/auth/signUpTestIds.ts
export const SIGNUP_SUBMIT_BUTTON_TEST_ID = 'signup-submit-button'Naming conventions:
SCREAMING_SNAKE_CASE ending with _DATA_TEST or _TEST_IDkebab-case matching the feature/element name// ComponentName commentRules:
<div> just for data-test — this breaks CSS/layoutdata-test to elements that already exist in the JSXImport in component:
import { FEATURE_SUBMIT_DATA_TEST } from '~/components/feature/utils/dataTestConstants'
<Button data-test={FEATURE_SUBMIT_DATA_TEST} />Import in E2E test:
import { FEATURE_SUBMIT_DATA_TEST } from '~/components/feature/utils/dataTestConstants'
cy.get(`[data-test="${FEATURE_SUBMIT_DATA_TEST}"]`).click({ force: true })If the test needs shared constants, add them to cypress/support/reusableConstants.ts. Only add if the value is used across multiple test files.
// Imports
import { SOME_TEST_ID } from '~/components/path/to/testIds'
import { customerName } from '../../support/reusableConstants'
// Test-scoped unique data (outside describe, shared across tests in file)
const randomId = Math.round(Math.random() * 10000)
const resourceName = `Resource ${randomId}`
const resourceCode = `resource_${randomId}`
describe('Feature Name', () => {
beforeEach(() => {
cy.login()
})
it('should be able to create a <resource>', () => {
cy.visit('/resource/create')
// Fill only required fields
cy.get('input[name="name"]').type(resourceName)
cy.get('input[name="code"]').should('have.value', resourceCode)
// Submit and verify
cy.get('[data-test="submit"]').click({ force: true })
cy.url().should('not.include', '/create')
cy.contains(resourceName).should('exist')
})
it('should be able to edit the <resource>', () => {
cy.visit('/resources')
cy.get(`[data-test="${resourceName}"]`).click({ force: true })
// Open edit
cy.get('[data-test="resource-actions"]').click({ force: true })
cy.get('[data-test="resource-edit"]').click({ force: true })
// Modify a field
cy.get('input[name="name"]').clear().type('Updated Name')
// Submit and verify
cy.get('[data-test="submit"]').click({ force: true })
cy.contains('Updated Name').should('exist')
})
})Important: Keep each test to 5-10 Cypress actions max. If a test is getting long, it's testing too much.
data-test attributes (preferred):
cy.get('[data-test="create-button"]').click({ force: true })
cy.get(`[data-test="${IMPORTED_TEST_ID}"]`).click({ force: true })Input name attributes (for form fields):
cy.get('input[name="email"]').type('test@example.com')
cy.get('textarea[name="description"]').type('Some text')Role attributes (for semantic elements):
cy.get('[role="dialog"]').should('exist')
cy.get('button[role="tab"]').contains('Settings').click()Scoped queries with .within():
cy.get('[data-test="charge-accordion-2"]').within(() => {
cy.get('input[name="chargeModel"]').should('have.value', 'Value')
})Combobox/dropdown selection:
cy.get('input[name="fieldName"]').click()
cy.get('[data-option-index="0"]').click()Dialog interactions:
cy.get('[role="dialog"]').should('exist')
cy.get('[data-test="submit-dialog"]').click({ force: true })
cy.get('[role="dialog"]').should('not.exist')URL assertions:
cy.url().should('include', '/customers')
cy.url().should('be.equal', Cypress.config().baseUrl + '/')Scroll into view:
cy.get('input[name="field"]').scrollIntoView({ offset: { top: -100, left: 0 }, duration: 0 })cy.wait(ms) — rely on Cypress implicit waitscy.get('[data-test="el"]', { timeout: 10000 }).should('be.visible')cy.url().should('include', '/path')cy.login(email?, password?) — logs in (defaults to test user from reusableConstants)cy.logout() — logs out current usercy.signup({ organizationName, email, password }) — signs up a new userBefore finalizing, verify:
Selectors:
[data-test="..."] for buttons, containers, actionsinput[name="..."] for input fields, textarea[name="..."] for textareasinput[name="..."] to open dropdowns, [data-option-index="N"] to select[role="dialog"] for dialog existence checksInteractions:
.click({ force: true }) for buttons that may be overlapped.type() for text input (already has delay: 0 from global override).clear().type() when replacing existing values.within(() => { }) for scoped interactions inside containersAssertions:
cy.url().should('include', '/path') for URL checks.should('exist') / .should('not.exist') for element presence.should('have.value', 'expected') for input values.should('contain.text', 'text') for text within elementsData:
Math.round(Math.random() * 10000)Resource ${randomId}, code pattern: resource_${randomId}Structure:
describe('Feature Name', () => { ... }) as top-levelbeforeEach with cy.login() and optional .visit()cd cypress && npx cypress run --spec "e2e/path/to/test-file.cy.ts"Important: The app must be running. If tests fail because the app is not running, inform the user and ask them to start the dev server (pnpm dev) before retrying.
If tests fail:
Show the user what was created/modified:
E2E Test Summary
Files Created:
- cypress/e2e/<folder>/tNN-feature-name.cy.ts (N test cases)
Files Modified:
- src/pages/feature/Component.tsx (added data-test attributes)
- cypress/support/reusableConstants.ts (added constants) [if applicable]
Test Cases:
1. should be able to create a resource
2. should be able to edit the resource
To run:
cd cypress && npx cypress run --spec "e2e/<folder>/tNN-feature-name.cy.ts"| Element | Selector Pattern | Example |
|---|---|---|
| Button/CTA | [data-test="action-name"] | [data-test="create-plan"] |
| Submit button | [data-test="submit"] | [data-test="submit"] |
| Text input | input[name="fieldName"] | input[name="email"] |
| Textarea | textarea[name="fieldName"] | textarea[name="description"] |
| Dropdown input | input[name="fieldName"] | input[name="currency"] |
| Dropdown option | [data-option-index="N"] | [data-option-index="0"] |
| Named option | [data-test="option-value"] | [data-test="USD"] |
| Dialog | [role="dialog"] | [role="dialog"] |
| Dialog confirm | [data-test="warning-confirm"] | [data-test="warning-confirm"] |
| Table row | [data-test="table-name"] tr | [data-test="table-customers-list"] tr |
| Error message | [data-test="text-field-error"] | [data-test="text-field-error"] |
| Alert | [data-test="alert-type-danger"] | [data-test="alert-type-danger"] |
| Tab | [role="tab"] + .contains() | button[role="tab"] |
| Checkbox | [data-test="checkbox-name"] | [data-test="checkbox-hasPlanLimit"] |
| Actions menu | [data-test="*-actions"] | [data-test="coupon-details-actions"] |
| Accordion | [data-test="accordion-N"] | [data-test="charge-accordion-0"] |
| Dynamic ID | `[data-test="${variable}"]` | `[data-test="${couponName}"]` |
| Prefix match | [data-test^="prefix-"] | [data-test^="combobox-item-"] |
© getlago, AGPL-3.0. 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 .agents/skills/make-e2e-tests of getlago/lago-front.
Open the folder on GitHubat commit 79b5b3d
Make E2E Tests 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 |
|---|---|---|---|---|---|---|
| Make E2E Tests this skillgetlago/lago-front | 163 | — | ~4.2k | Automated safety check: Notes | AGPL-3.0 | |
| E2E Testing Patternstry-works/role-model | 117 | 13 repos | ~990 | Automated safety check: Pass | Custom licence | |
| Verdaccio Change Testing Selectorverdaccio/verdaccio | 18k | — | ~1.6k | Automated safety check: Warn | MIT | |
| Playwright Testingchongdashu/vibejam-starter-pack | 149 | — | ~2.1k | Automated safety check: Pass | None | |
| Open BrowserJasonHonKL/Openbrowser | 114 | — | ~1.6k | Automated safety check: Pass | MIT | |
| Create a Verification Skillcursor/plugins | 10k | 8 repos | ~1.5k | Automated safety check: Pass | None |
try-works/role-model
Master end-to-end testing with Playwright and Cypress to build reliable test suites that catch bugs, improve confidence, and enable fast deployment.
verdaccio/verdaccio
Figures out which rebuild and test suites actually cover a change in the verdaccio monorepo, instead of a scoped run that passes untested.
chongdashu/vibejam-starter-pack
Plan, implement, and debug frontend tests: unit/integration/E2E/visual/a11y.
JasonHonKL/Openbrowser
A skill your agent uses whenever the task involves browsing web pages, extracting page content, clicking forms, or completing web workflows.
cursor/plugins
Generates a project-local skill that launches your app, exercises a feature the way a user would and captures evidence, for web, CLI, API or desktop projects.
bmad-code-org/bmad-method-test-architecture-enterprise
Initialize test framework with Playwright or Cypress. An agent skill from bmad-code-org/bmad-method-test-architecture-enterprise.
getlago/lago-front
A skill your agent uses when asked to babysit, monitor, shepherd, or keep working on a GitHub pull request until it is green, review-ready, approved, mergeable, or ready to merge.
getlago/lago-front
Triage a CVE / Dependabot alert in a JS/TS project and recommend the least-invasive fix.
getlago/lago-front
Extract a Formik form section into a TanStack Form drawer with Zod validation, following the plan form migration pattern.
getlago/lago-front
Phase 2 of the loop pipeline for lago-front. An agent skill from getlago/lago-front.
getlago/lago-front
Cleanup phase of the loop pipeline for lago-front, for the worktree layout only.
getlago/lago-front
Harvest phase of the loop pipeline for lago-front. An agent skill from getlago/lago-front.
Works with
Categories
Create Cypress e2e tests for a specific feature. An agent skill from getlago/lago-front. Make E2E Tests is an agent skill from getlago/lago-front. Create Cypress e2e tests for a specific feature.
Make E2E Tests fits situations like: tasks that involve End-to-end testing.
Run `npx skills add getlago/lago-front --skill make-e2e-tests -a claude-code`. Or copy the skill folder (.agents/skills/make-e2e-tests in getlago/lago-front) into .claude/skills/make-e2e-tests in your project. Claude Code loads it when a task matches its description.
Run `npx skills add getlago/lago-front --skill make-e2e-tests -a codex`. Or copy the skill folder (.agents/skills/make-e2e-tests in getlago/lago-front) into .agents/skills/make-e2e-tests 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 getlago/lago-front --skill make-e2e-tests -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/make-e2e-tests, .gemini/skills/make-e2e-tests, .github/skills/make-e2e-tests and .opencode/skills/make-e2e-tests in your project.
Going by SKILL.md and its folder, Make E2E Tests needs the command-line tools its instructions call (git, gh, npx and pnpm). Its frontmatter pre-approves these tools: Read, Glob, Grep, Edit, Write, Bash, AskUserQuestion, Agent.
SKILL.md contains no URLs. Its commands use git, gh 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 notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Make E2E Tests is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.2k tokens (SKILL.md is roughly 17k 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 Make E2E Tests: E2E Testing Patterns (try-works/role-model, 117 stars), Verdaccio Change Testing Selector (verdaccio/verdaccio, 18k stars), Playwright Testing (chongdashu/vibejam-starter-pack, 149 stars) and Open Browser (JasonHonKL/Openbrowser, 114 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
getlago (a GitHub organization) maintains it in getlago/lago-front, which has 163 GitHub stars. The repository holds 17 skills in this directory. The repository was last updated on October 7, 2026.
Source: getlago/lago-front on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.