agentleFS
robinbrilrobinbril/claude-code-harness/skills/e2e/SKILL.md

e2e

Skill3 starsChanged 23 days agoMITView on GitHub

Agentic end-to-end tests with e2e, the e2e runner. Covers scaffolding e2e.config.ts, picking the Playwright browser engine or the agent-device mobile engine, starting the app under test from the config, driving flows with agent.act, judging with agent.assert, agent.waitFor, and agent.extract, pinning values with screen, app, browser, and expect, shaping the agent (context, system prompt, tools, personas), the replay cache, the e2e CLI, reading .e2e/report.json, and bug bashes (parallel explore runs proven with repro tests). Use when a project depends on e2e, when asked for end-to-end, browser, mobile, or agentic UI tests, to bug bash or hunt for bugs, or when an e2e run fails.

  • Reads credentials

50 other projects use a version of this, 7 of them edited.

Adopted by

Most recently taken up by

Used with

Projects with it also use instinct-export, instinct-import and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • TheKREATORSSkill

    instinct-export

    Export instincts from project/global scope to a file

    Also in 3 projects that use this

  • TheKREATORSSkill

    instinct-import

    Import instincts from file or URL into project/global scope

    Also in 3 projects that use this

  • diego-tobalinaSkill

    build-fix

    Fix build and compilation errors systematically. Run when build fails.

    Also in 4 projects that use this

  • 0mlkrizzz655335vSkill

    sdk

    Codex SDK 集成开发。用 TypeScript/Python SDK 做 agent 生命周期、流式输出、本地/云端执行等集成。

    Also in 3 projects that use this

  • MontimageSkill

    test-coverage

    Improve test coverage by finding untested branches, error paths, and edge cases. Use when measuring or strengthening a project's tests. Don't use for production debugging, code review, or feature implementation.

    Also in 3 projects that use this

  • MicrosoftSkill

    worktree

    Create, reuse or clean up a dedicated git worktree for working on a pull request or a private branch. Use from any PR-scoped workflow that needs an isolated checkout to keep current code and build output untouched.

    Also in 5 projects that use this

  • +1 more from TheKREATORS

The file

We split this skill into the rules it gives an agent

9 rules. 0 are common, 0 are distinctive, and 9 are very specific to this project.

  • 0

    Common

    Most of the 44 edited versions we read keep these.

  • 0

    Distinctive

    This author's own choices. Worth a look.

  • 9

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Read the topic for the job before writing code.

    line 59
  2. Very specific:

    Look at what exists: e2e.config.ts or e2e.config.mts, the tests glob (default tests//*.e2e.ts), e2e in package.json.

    line 82
  3. Very specific:

    Write tests/<feature>.e2e.ts.

    line 90
  4. Very specific:

    Run one file: npx e2e run tests/<feature>.e2e.ts.

    line 94
  5. Very specific:

    Read the trace page the terminal names under each failed test (.e2e/results/<test>/trace.md): every step with what it did, the cache's …

    line 98
  6. Very specific:

    Run the CLI as npx e2e ...

    line 105
  7. Very specific:

    Import test, describe, the hooks, expect, credentials, and secrets from e2e.

    line 110
  8. Very specific:

    Check each agent goal's outcome.

    line 129
  9. Very specific:

    When e2e itself gets in your way, tell the e2e team: a command or API that broke (bug), docs or this skill that misled you (docs), or a …

    line 141

“Common” is measured: kept by at least 6 in 10 of the 44 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

e2e: agentic end-to-end tests in TypeScript

e2e runs UI tests with agent goals and exact assertions. agent.act drives one goal; agent.assert, agent.waitFor, and agent.extract judge the screen. screen, app, browser, and expect make exact interactions and checks. The replay cache reruns verified actions and checks their recorded end state without a model call; agent judgments still run live. UI targets use @e2e-dev/web for browsers or @e2e-dev/mobile for iOS simulators, Android emulators, and connected phones. A test that takes only app can check an API with fetch and expect (topic writing-tests). Model sign-in commands are in setup.

// e2e.config.ts
import type { E2EConfig } from 'e2e';
import { web } from '@e2e-dev/web';
import { gateway } from 'ai';

export default {
  targets: [
    {
      engine: web(),
      app: {
        url: 'http://127.0.0.1:3000',
        command: { executable: 'pnpm', args: ['dev'], log: '.e2e/logs/app.log' },
      },
    },
  ],
  // The model behind every agent.* step: an AI SDK instance; gateway() from 'ai' reads AI_GATEWAY_API_KEY or a Vercel OIDC token.
  agents: {
    default: {
      model: gateway('openai/gpt-6-luna-fast'),
      system: 'You are a thorough QA agent. Verify every outcome on screen.',
    },
  },
} satisfies E2EConfig;
// tests/billing.e2e.ts
import { test } from '@e2e-dev/web';
import { expect } from 'e2e';

test('a member upgrades to Pro', async ({ app, agent, screen, browser }) => {
  await app.open('/settings/billing');
  await agent.act('upgrade the workspace to the Pro plan');
  await expect(screen.getByRole('status')).toContainText('Pro');
  await expect(browser).toHaveURL('/settings/billing');
});

Topics

Read the topic for the job before writing code. The files sit next to this one; the installed CLI prints the same text with npx e2e guide <topic> (e2e guide alone prints this page). For anything the topics do not cover, the full documentation ships in the docs/ directory of the installed e2e package (node_modules/e2e/docs in a single-package project); a link such as /reference/cli is docs/reference/cli.mdx. Complete projects for Vite, Next.js, Expo, SwiftUI, Jetpack Compose, Kotlin Multiplatform, and Flutter, each with its config, scripts, and a passing suite, are in https://github.com/tester-army/e2e/tree/main/examples.

TopicFileRead it when
setupreferences/setup.mdAdding e2e to a project, writing e2e.config.ts, starting the app from the config, mobile targets
writing-testsreferences/writing-tests.mdWriting or fixing tests: fixtures, locators, actions, matchers, sign-in sessions, the browser fixture
agentreferences/agent.mdAdding agent.* steps, picking a model, cost and budgets, the replay cache
runningreferences/running.mdCLI flags, reporters, trace pages, report.json for scripts, exit codes, CI
explorereferences/explore.mdExploring an app toward a goal without a test file: e2e explore, its budgets, verdict, and run.explore
debuggingreferences/debugging.mdA run failed: error codes and their fixes, --headed, --debug, --ai-trace
mcpreferences/mcp.mdDriving the live app from a coding agent over MCP: e2e mcp, its tools, and the explore-then-write loop
bug-bashreferences/bug-bash.mdAsked to bug bash, QA, or hunt for bugs across an app or a branch: parallel e2e explore charters, merging findings, proving each with a repro test

Workflow

  1. Look at what exists: e2e.config.ts or e2e.config.mts, the tests glob (default tests/**/*.e2e.ts), e2e in package.json. Nothing there: follow setup.
  2. Learn the screens before writing a test: routes, labels, roles, button text. Semantic locators need the accessible names the app renders, so read the components, open the page with --headed, or drive the live app over the registered e2e mcp server (topic mcp): open_session, observe, and locate show exact names and check a locator before you write it.
  3. Write tests/<feature>.e2e.ts. Drive the flow with agent.act, one goal per call, and pin each outcome right after with expect or agent.assert. Exact values go through screen: a sign-in form in a setup test, a field that must receive one specific string, a count that must be one number.
  4. Run one file: npx e2e run tests/<feature>.e2e.ts. Agent steps need a model in the config and that provider's authentication (a saved subscription login, an API key); a local endpoint may need none. Tests without agent steps need no model.
  5. Read the trace page the terminal names under each failed test (.e2e/results/<test>/trace.md): every step with what it did, the cache's decision, what the app logged, the agent's turns, and the screen at failure. Fix the locator, the expectation, or the app. Never add a sleep.

Rules

  • Run the CLI as npx e2e ... (or pnpm exec e2e ...).
  • The config is export default { ... } satisfies E2EConfig with import type { E2EConfig } from 'e2e'. targets is required; a UI target names an engine and declares the app beside it: { engine: web(), app: { url, command } }. A tools-only target can omit the engine and set platform.
  • Import test, describe, the hooks, expect, credentials, and secrets from e2e. A test that uses the browser fixture imports test, describe, and the hooks from @e2e-dev/web: the same runtime functions, typed with browser.
  • Config and tests are ES modules whatever package.json sets as type.
  • Locators resolve when used. Actions wait for readiness and expect retries assertions. Reads such as textContent() fail at once on zero matches and count() answers from the current screen; nothing waits for a value to change, so use a matcher when a value has to settle.
  • A locator that matches two nodes fails with LOCATOR_AMBIGUOUS; narrow it (topic writing-tests).
  • Secrets never appear in test code. Declare accounts under credentials and every other sensitive value under secrets in the config; resolve with credentials.user(name).password or secrets.get(name) (separate namespaces: secrets.get never returns a password), and hand the opaque Secret only to fill() or agent.act params.
  • Agent instructions: one goal per act, the wording on screen, real values in params. Judge meaning, not phrasing: toContain('Pro'), not an exact sentence a model produced.
  • Check each agent goal's outcome. A passing act with a recorded check can be cached and replayed without model calls (topic agent).
  • Shape the agent for this app: context for vocabulary the screens use, system for how it works, tools for a test API, named personas under agents. When a step fails, tighten the goal first, then the context, then the agent.
  • .e2e/ is output (report.json, results/, cache/, logs/; the config's output moves the report and artifacts, never cache/ or the app's log). Read it, never edit it.

Feedback

When e2e itself gets in your way, tell the e2e team: a command or API that broke (bug), docs or this skill that misled you (docs), or a capability you needed and did not find (feature). Send it once per problem, after you worked around it or gave up, never for failures of the app under test.

npx e2e feedback --type bug -m "<one or two sentences>" \
  --task "<what you were doing>" --expected "<...>" --actual "<error code and message>" \
  --approach "<what you tried>" --command "<e2e command>" --agent "<agent / model>"

Describe e2e's behavior only: never paste app content, page text, test files, URLs of private apps, or credentials. Secret-named environment variables and common token shapes are redacted, but do not rely on it. --dry-run prints what would be sent. Tell the user you sent it and give them the reference id it prints.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.