Build E2E test specs for critical user journeys — Playwright or Cypress, page objects, setup/teardown, CI config.

MITAuto-check: notesTesting & QA

Install Proof E2E

skills CLI
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill proof-e2e -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install jeremylongshore/tons-of-skills-marketplace proof-e2e --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/ai-agency/tonone/skills/proof-e2e .claude/skills/proof-e2e && rm -rf skills-src

Use ~/.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/

Facts

Skill name
proof-e2e
GitHub stars
2.8k
Token cost
~2.8k tokens
SKILL.md length
726 words
Files
2
Skills in repo
3,342
Repo updated
First seen
Licence
MIT

At a glance

Build E2E test specs for critical user journeys — Playwright or Cypress, page objects, setup/teardown, CI config.

  • Works in 7 steps: Detect Environment → Journey Map → Infrastructure Setup → …
  • Asked to write E2E tests
  • SKILL.md covers What E2E Tests Are For (And…, Steps, Key Rules and Delivery
  • Needs TEST_PASSWORD

What it does

Proof E2E is an agent skill from jeremylongshore/tons-of-skills-marketplace. Build E2E test specs for critical user journeys — Playwright or Cypress, page objects, setup/teardown, CI config. Use when asked to "write E2E tests", "end-to-end testing", "browser tests", "UI tests", or "Playwright tests".

Its SKILL.md is about 2.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `.claude-plugin/plugin.json`).

It sits in Testing & QA, covering End-to-end testing. It works with Playwright and Cypress. The repository describes itself as: Model-agnostic agent-skills platform with a harness-free canonical layer, verified adapters, and the ccpi package manager. Explore at tonsofskills.com. The licence is MIT.

When your agent uses it

  • Asked to write E2E tests
  • End-to-end testing
  • Playwright tests

Example prompts

  • “write E2E tests”
  • “end-to-end testing”
  • “browser tests”
  • “/proof-e2e”

Requirements

  • Node.js
  • Pre-approved tools (allowed-tools): Read, Write, Edit, Bash, Glob, Grep, WebFetch, WebSearch, Task, TodoWrite, AskUserQuestion

Workflow steps

7 steps, taken from the step headings in SKILL.md.

  1. Detect Environment
  2. Journey Map
  3. Infrastructure Setup
  4. Write the Test Specs
  5. Test Data Strategy
  6. CI Integration
  7. Summary

What it can do on your machine

Read from SKILL.md and the folder at commit 23ea8d4. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Write
    • Edit
    • Bash
    • Glob
    • Grep
    • WebFetch
    • WebSearch
    • Task
    • TodoWrite

    …and 1 more on the same allowed-tools line.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are typescript and yaml).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • TEST_PASSWORD

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Proof E2E loads about 2.8k tokens when it runs. Until then it costs about 59 tokens; SKILL.md has 726 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~59
When it runs · the whole SKILL.md, loaded when a task matches
~2.8k

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.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Read, Write, Edit, Bash, Glob, Grep, WebFetch, WebSearch, Task, TodoWrite, AskUserQuestion

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.

SKILL.md

The full file from jeremylongshore/tons-of-skills-marketplace at commit 23ea8d4, republished under its MIT licence (© jeremylongshore). 726 words, ~2,819 tokens.

Download SKILL.mdSave it as .claude/skills/proof-e2e/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
proof-e2e
description
Build E2E test specs for critical user journeys — Playwright or Cypress, page objects, setup/teardown, CI config. Use when asked to "write E2E tests", "end-to-end testing", "browser tests", "UI tests", or "Playwright tests".
allowed-tools
Read, Write, Edit, Bash, Glob, Grep, WebFetch, WebSearch, Task, TodoWrite, AskUserQuestion
version
0.6.4
author
tonone-ai <hello@tonone.ai>
license
MIT

E2E Test Suite

You are Proof — the QA and testing engineer on the Engineering Team.

You write the test specs. You produce actual test code — not a list of tests someone else should write.

Follow the output format defined in docs/output-kit.md — 40-line CLI max, box-drawing skeleton, unified severity indicators, compressed prose.

What E2E Tests Are For (And What They're Not)

E2E tests are for user journeys. They verify that the system works end-to-end from the user's perspective — browser, network, server, database, the whole stack.

Test in E2E:

  • Sign up → onboarding → first core action (activation flow)
  • Sign in → perform primary value action → see result
  • Checkout / payment flow
  • Critical destructive action (delete account, cancel subscription)
  • Permission boundaries (user A cannot see user B's data)

Do NOT test in E2E:

  • Individual API endpoint behavior → that's integration tests
  • Form validation errors → that's unit tests on validators + integration tests on handlers
  • UI component rendering → that's component tests or visual regression
  • Every edge case in a form → combinatorial explosion, use unit tests
  • Third-party service behavior → mock it at the network layer

The E2E suite should be ≤10 tests for an early-stage product. Every test you add is maintenance cost. Be ruthless about what earns a spot.

Steps

Step 0: Detect Environment

Scan before asking:

  • E2E tool: playwright.config.*, cypress.config.*
  • Frontend framework: React, Vue, Next.js, SvelteKit, etc.
  • Existing E2E tests: e2e/, tests/e2e/, cypress/
  • Routes and pages — check the router config or file-based routing structure
  • Existing data-testid attributes in components
  • Dev server command in package.json
  • Auth mechanism: session cookies, JWT in localStorage, OAuth

If no E2E tool is configured, install and configure Playwright. It's the default — faster, more reliable, better parallelization than Cypress for most setups.

Step 1: Journey Map

List the critical user journeys, ranked by business impact:

PriorityJourneyEntry PointSuccess StateRisk if Broken
P0Sign in/loginLands on dashboardAll authenticated users locked out
P0Core action/<main feature>Action completes, data persistsPrimary value prop broken
P0Checkout/checkoutOrder confirmed, payment capturedRevenue stops
P1Sign up/signupAccount created, onboarding startsNew user acquisition broken
P1Password reset/forgot-passwordEmail sent, password updatedSupport ticket flood
P2Account deletion/settingsAccount deleted, session endedData compliance risk

Fill in based on actual app. P0 = must have. P1 = high value. P2 = nice to have. Start with P0.

Step 2: Infrastructure Setup

If no E2E infrastructure exists, create it:

Playwright config (playwright.config.ts):

typescript
import { defineConfig, devices } from "@playwright/test";

export default defineConfig({
  testDir: "./e2e",
  fullyParallel: true,
  forbidOnly: !!process.env.CI,
  retries: process.env.CI ? 1 : 0, // 1 retry in CI only — not a flakiness band-aid
  workers: process.env.CI ? 2 : undefined,
  reporter: [["html"], ["list"]],
  use: {
    baseURL: process.env.BASE_URL || "http://localhost:3000",
    trace: "on-first-retry",
    screenshot: "only-on-failure",
    video: "on-first-retry",
  },
  projects: [
    { name: "chromium", use: { ...devices["Desktop Chrome"] } },
    // Add firefox/webkit only if cross-browser is a real requirement
  ],
  webServer: {
    command: "npm run dev",
    url: "http://localhost:3000",
    reuseExistingServer: !process.env.CI,
  },
});

Auth fixture (e2e/fixtures/auth.ts):

typescript
import { test as base, expect } from "@playwright/test";

type AuthFixtures = {
  authenticatedPage: Page;
};

export const test = base.extend<AuthFixtures>({
  authenticatedPage: async ({ page }, use) => {
    // Use API to create session — faster than UI login in every test
    await page.request.post("/api/auth/test-session", {
      data: { userId: process.env.TEST_USER_ID },
    });
    await use(page);
  },
});

export { expect };

Page object pattern (e2e/pages/LoginPage.ts):

typescript
import { Page, Locator } from "@playwright/test";

export class LoginPage {
  readonly emailInput: Locator;
  readonly passwordInput: Locator;
  readonly submitButton: Locator;
  readonly errorMessage: Locator;

  constructor(private page: Page) {
    this.emailInput = page.getByTestId("email-input");
    this.passwordInput = page.getByTestId("password-input");
    this.submitButton = page.getByTestId("login-submit");
    this.errorMessage = page.getByTestId("login-error");
  }

  async goto() {
    await this.page.goto("/login");
  }

  async login(email: string, password: string) {
    await this.emailInput.fill(email);
    await this.passwordInput.fill(password);
    await this.submitButton.click();
  }
}
Show full SKILL.md (319 more words)Show less
Step 3: Write the Test Specs

Write tests for each P0 journey. Use this pattern:

Auth journey (e2e/auth.spec.ts):

typescript
import { test, expect } from "@playwright/test";
import { LoginPage } from "./pages/LoginPage";

test.describe("Authentication", () => {
  test("user can sign in with valid credentials", async ({ page }) => {
    const loginPage = new LoginPage(page);
    await loginPage.goto();
    await loginPage.login(process.env.TEST_EMAIL!, process.env.TEST_PASSWORD!);

    await expect(page).toHaveURL("/dashboard");
    await expect(page.getByTestId("user-nav")).toBeVisible();
  });

  test("invalid credentials show error, do not redirect", async ({ page }) => {
    const loginPage = new LoginPage(page);
    await loginPage.goto();
    await loginPage.login("nobody@example.com", "wrongpassword");

    await expect(page).toHaveURL("/login");
    await expect(loginPage.errorMessage).toBeVisible();
    await expect(loginPage.errorMessage).toContainText("Invalid");
  });

  test("unauthenticated user is redirected from protected route", async ({
    page,
  }) => {
    await page.goto("/dashboard");
    await expect(page).toHaveURL(/login/);
  });
});

Core journey (e2e/core-flow.spec.ts):

typescript
import { test, expect } from "./fixtures/auth"; // authenticated fixture

test.describe("Core workflow", () => {
  test("user can complete primary action", async ({
    authenticatedPage: page,
  }) => {
    await page.goto("/app");

    // Act — user performs the core value action
    await page.getByTestId("primary-action-button").click();
    await page.getByTestId("action-form-input").fill("Test data");
    await page.getByTestId("action-submit").click();

    // Assert — visible outcome, not internal state
    await expect(page.getByTestId("success-message")).toBeVisible();
    await expect(page.getByTestId("result-item")).toContainText("Test data");
  });
});

Key patterns in every test:

  • Use getByTestId() — not CSS selectors or text that might change
  • Assert on visible outcomes the user would see — not internal state
  • Use proper Playwright auto-waits — never waitForTimeout()
  • Each test is fully independent — no test depends on another test's state
  • Auth via API/fixture, not by navigating the login UI in every test
Step 4: Test Data Strategy

Decide on test data approach based on what's available:

  • API setup (preferred): Use authenticated API calls in test.beforeEach to seed data, clean up in test.afterEach
  • Database seeding: Use a test seed script if direct DB access is available in test environment
  • Fixtures: Static fixture data for read-only tests
  • Never: Use production data, hardcoded IDs that exist in one environment, or shared state between tests
Step 5: CI Integration
yaml
# .github/workflows/e2e.yml
name: E2E Tests
on: [push, pull_request]

jobs:
  e2e:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: "20" }
      - run: npm ci
      - run: npx playwright install --with-deps chromium
      - run: npm run build
      - run: npx playwright test
        env:
          BASE_URL: http://localhost:3000
          TEST_EMAIL: ${{ secrets.TEST_EMAIL }}
          TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }}
      - uses: actions/upload-artifact@v4
        if: failure()
        with:
          name: playwright-report
          path: playwright-report/

If the suite exceeds 3 minutes on CI, shard it:

yaml
- run: npx playwright test --shard=${{ matrix.shard }}/3
  strategy:
    matrix:
      shard: [1, 2, 3]
Step 6: Summary

Output what was written:

┌─ E2E Suite ──────────────────────────────────────────────┐
│  Tool        Playwright                                   │
│  Tests       N specs across M journeys                    │
│  Coverage    P0: auth, core flow, checkout                │
│              P1: signup, password reset                   │
│  Skipped     [list what was explicitly excluded + why]    │
│  Est. time   ~X min on CI (sharded: Y min)                │
├──────────────────────────────────────────────────────────┤
│  ✖ Gaps      [any P0 not yet covered]                     │
│  ⚠ Needs     data-testid on: [list missing test IDs]      │
│  → Next      [one concrete next step]                     │
└──────────────────────────────────────────────────────────┘

Key Rules

  • Write tests for journeys, not components — E2E is expensive, use it for what only E2E can catch
  • Never waitForTimeout() — use Playwright's auto-waits and expect().toBeVisible()
  • Every test is independent — no shared state, no test order dependencies
  • Auth via API fixture — not UI login in every test (that's slow and a separate concern)
  • data-testid for selectors — CSS classes and text break on refactors
  • Suite must run under 5 minutes on CI — shard if needed, delete if bloated
  • 1 retry in CI only — retries hide flakiness, don't use them locally
  • Screenshots and traces on failure are mandatory — debugging blind wastes hours
  • Explicit "skip" list — document what you're not testing in E2E and why

Delivery

If output exceeds the 40-line CLI budget, invoke /atlas-report with the full findings. The HTML report is the output. CLI is the receipt — box header, one-line verdict, top 3 findings, and the report path. Never dump analysis to CLI.

© jeremylongshore, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file in plugins/ai-agency/tonone/skills/proof-e2e of jeremylongshore/tons-of-skills-marketplace.

  • SKILL.md
  • .claude-plugin/plugin.json

Open the folder on GitHubat commit 23ea8d4

Compare with similar skills

Proof E2E 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.

Proof E2E compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Proof E2E this skilljeremylongshore/tons-of-skills-marketplace2.8k—~2.8kAutomated safety check: NotesMIT
Cypress To Scout Migrationelastic/kibana21k—~3.8kAutomated safety check: PassCustom licence
E2E Testing Patternstry-works/role-model11814 repos~990Automated safety check: PassCustom licence
Playwright Testingchongdashu/vibejam-starter-pack149—~2.1kAutomated safety check: PassNone
Open BrowserJasonHonKL/Openbrowser114—~1.6kAutomated safety check: PassMIT
Create a Verification Skillcursor/plugins10k8 repos~1.5kAutomated safety check: PassNone

Similar skills

  • Official

    Migrate Kibana Cypress E2E tests (.cy.ts) to Scout (Playwright).

    21k GitHub stars~3.8k tokensUpdated yesterday
    Testing & QAAuto-check passed
  • 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.

    118 GitHub starsUsed in 14 repos~990 tokens
    Testing & QAAuto-check passed
  • Playwright Testing

    chongdashu/vibejam-starter-pack

    Plan, implement, and debug frontend tests: unit/integration/E2E/visual/a11y.

    149 GitHub stars~2.1k tokensUpdated 5 mo ago
    Testing & QAAuto-check passed
  • Open Browser

    JasonHonKL/Openbrowser

    A skill your agent uses whenever the task involves browsing web pages, extracting page content, clicking forms, or completing web workflows.

    114 GitHub stars~1.6k tokensUpdated 5 mo ago
    Testing & QAAuto-check passed
  • Official

    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.

    10k GitHub starsUsed in 8 repos~1.5k tokens
    Testing & QAAuto-check passed
  • Bmad Testarch Framework

    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.

    104 GitHub starsUsed in 3 repos~1.2k tokens
    Testing & QAAuto-check passed

More from jeremylongshore/tons-of-skills-marketplace

All 3,342 skills in this repo
  • Performing Security Code Review

    jeremylongshore/tons-of-skills-marketplace

    Execute this skill enables AI assistant to conduct a security-focused code review using the security-agent plugin.

    2.8k GitHub starsUsed in 2 repos~1.3k tokens
    Auto-check: notes
  • Analyzing Text With NLP

    jeremylongshore/tons-of-skills-marketplace

    Execute this skill enables AI assistant to perform natural language processing and text analysis using the nlp-text-analyzer plugin.

    2.8k GitHub starsUsed in 1 repo~819 tokens
    Auto-check passed
  • Building Neural Networks

    jeremylongshore/tons-of-skills-marketplace

    Execute this skill allows AI assistant to construct and configure neural network architectures using the neural-network-builder plugin.

    2.8k GitHub starsUsed in 1 repo~1k tokens
    Auto-check passed
  • Detecting Data Anomalies

    jeremylongshore/tons-of-skills-marketplace

    Process identify anomalies and outliers in datasets using machine learning algorithms.

    2.8k GitHub starsUsed in 1 repo~1.4k tokens
    Auto-check passed
  • Explaining Machine Learning Models

    jeremylongshore/tons-of-skills-marketplace

    Build this skill enables AI assistant to provide interpretability and explainability for machine learning models.

    2.8k GitHub starsUsed in 1 repo~1k tokens
    Auto-check passed
  • Optimizing Prompts

    jeremylongshore/tons-of-skills-marketplace

    Execute this skill optimizes prompts for large language models (llms) to reduce token usage, lower costs, and improve performance.

    2.8k GitHub starsUsed in 1 repo~1k tokens
    Auto-check passed

Categories

Questions about Proof E2E

What does Proof E2E do?

Build E2E test specs for critical user journeys — Playwright or Cypress, page objects, setup/teardown, CI config. Proof E2E is an agent skill from jeremylongshore/tons-of-skills-marketplace. Build E2E test specs for critical user journeys — Playwright or Cypress, page objects, setup/teardown, CI config.

When should I use Proof E2E?

Proof E2E fits situations like: asked to write E2E tests; end-to-end testing; playwright tests.

How do I install Proof E2E in Claude Code?

Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill proof-e2e -a claude-code`. Or copy the skill folder (plugins/ai-agency/tonone/skills/proof-e2e in jeremylongshore/tons-of-skills-marketplace) into .claude/skills/proof-e2e in your project. Claude Code loads it when a task matches its description.

How do I install Proof E2E in Codex?

Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill proof-e2e -a codex`. Or copy the skill folder (plugins/ai-agency/tonone/skills/proof-e2e in jeremylongshore/tons-of-skills-marketplace) into .agents/skills/proof-e2e in your project. Codex loads it when a task matches its description.

Can I use Proof E2E in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill proof-e2e -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/proof-e2e, .gemini/skills/proof-e2e, .github/skills/proof-e2e and .opencode/skills/proof-e2e in your project.

What does Proof E2E need to run?

Going by SKILL.md and its folder, Proof E2E needs credentials named TEST_PASSWORD. Our summary lists: Node.js. Its frontmatter pre-approves these tools: Read, Write, Edit, Bash, Glob, Grep, WebFetch, WebSearch, Task, TodoWrite, AskUserQuestion.

Does Proof E2E access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Proof E2E safe to install?

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.

What licence does Proof E2E use?

Proof E2E is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Proof E2E use?

About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Proof E2E?

Skills that share tags, products or a category with Proof E2E: Cypress To Scout Migration (elastic/kibana, 21k stars), E2E Testing Patterns (try-works/role-model, 118 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.

Who maintains Proof E2E?

jeremylongshore (a GitHub user) maintains it in jeremylongshore/tons-of-skills-marketplace, which has 2,821 GitHub stars. The repository holds 3,342 skills in this directory. The repository was last updated on October 8, 2026.

Source: jeremylongshore/tons-of-skills-marketplace on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.