Plain utility function conventions for the Playwright scaffold — app-specific helpers in helpers/{area}/ (authentication bootstrap, storage-state creation, data seeding) and generic utilities in…

MITAuto-check: notesTesting & QA

Install Helpers

skills CLI
$ npx skills add idavidov13/agentic-playwright --skill helpers -a claude-code

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

GitHub CLI
$ gh skill install idavidov13/agentic-playwright helpers --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/idavidov13/agentic-playwright.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/helpers .claude/skills/helpers && 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
helpers
GitHub stars
223
Token cost
~3.3k tokens
SKILL.md length
1,372 words
Files
1
Skills in repo
13
Repo updated
First seen
Licence
MIT

At a glance

Plain utility function conventions for the Playwright scaffold — app-specific helpers in helpers/{area}/ (authentication bootstrap, storage-state creation, data seeding) and generic utilities in…

  • Works in 6 steps: Classify what you're adding → Pick the home — app-specific or utility → Define the function signature, types,… → …
  • Adding a reusable function that does NOT need the Playwright fixture lifecycle
  • SKILL.md covers Critical, File Locations, Instructions and Examples, plus 2 more sections
  • Needs ACCESS_TOKEN and APP_PASSWORD

What it does

Helpers is an agent skill from idavidov13/agentic-playwright. Plain utility function conventions for the Playwright scaffold — app-specific helpers in helpers/{area}/ (authentication bootstrap, storage-state creation, data seeding) and generic utilities in helpers/util/ (date formatting, string manipulation, parsing). Use when adding a reusable function that does NOT need the Playwright fixture lifecycle, wiring authentication bootstrap in tests/{area}/auth.setup.ts, or deciding whether a reusable piece of code belongs in helpers/ or fixtures/. For Playwright fixtures with…

Its SKILL.md is about 3.3k 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 Browser testing and API testing. It works with Playwright. The repository describes itself as: Production-grade Playwright + TypeScript Scaffold for Agentic Testing. Harness for all major AI coding agents baked in. The licence is MIT.

When your agent uses it

  • Adding a reusable function that does NOT need the Playwright fixture lifecycle
  • Wiring authentication bootstrap in tests/{area}/auth.setup.ts
  • Deciding whether a reusable piece of code belongs in helpers/

Example prompts

  • “/helpers”

Requirements

  • A credential in ACCESS_TOKEN

Workflow steps

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

  1. Classify what you're adding
  2. Pick the home — app-specific or utility
  3. Define the function signature, types, and JSDoc
  4. Read env-driven values from process.env.*
  5. If the helper makes API calls, validate with Zod
  6. Consume the helper

What it can do on your machine

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

  • Tool permissions

    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.

  • Runs code

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

    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:

    • ACCESS_TOKEN
    • APP_PASSWORD

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

Context cost

Helpers loads about 3.3k tokens when it runs. Until then it costs about 194 tokens; SKILL.md has 1,372 words of instructions outside code blocks.

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

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.

  • NoteMentions a .env fileSKILL.md:164
    Missing env variable in the active `env/.env.${ENVIRONMENT}` file.

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 idavidov13/agentic-playwright at commit f6cbf35, republished under its MIT licence (© idavidov13). 1,372 words, ~3,323 tokens.

Download SKILL.mdSave it as .claude/skills/helpers/SKILL.md (or your agent's skills folder).
name
helpers
description
Plain utility function conventions for the Playwright scaffold — app-specific helpers in helpers/{area}/ (authentication bootstrap, storage-state creation, data seeding) and generic utilities in helpers/util/ (date formatting, string manipulation, parsing). Use when adding a reusable function that does NOT need the Playwright fixture lifecycle, wiring authentication bootstrap in tests/{area}/auth.setup.ts, or deciding whether a reusable piece of code belongs in helpers/ or fixtures/. For Playwright fixtures with setup/use/teardown lifecycle use the fixtures skill; for the apiRequest-vs-helper-fixture-vs-factory decision when the helper makes API calls see the api-testing skill (Phase 8); for the env and enum sources of truth see the config and enums skills.
author
Ivan Davidov

Helpers

Critical

  • Helpers are plain functions. No Playwright fixture lifecycle — no use(), no base.extend. If you need setup → use(data) → teardown, it's a fixture, not a helper (see the fixtures skill).
  • App-specific logic lives in helpers/{area}/ (e.g. helpers/app/). Generic utilities live in helpers/util/.
  • ALWAYS add JSDoc with @param and @returns on every exported helper.
  • ALWAYS specify explicit return types (Promise<void>, string, etc.). No implicit any.
  • NEVER hardcode URLs, credentials, or tokens. Read env-driven values from process.env.* (see the config skill). Use enums/{area}/* for endpoint paths and storage-state paths.
  • ALWAYS validate API responses inside helpers with the mandatory pattern expect(SchemaName.parse(body)).toBeTruthy(); — identical to the api-testing Critical rule.
  • Function naming: camelCase verbs (createAppStorageState, setUserAccessToken, formatDate, parseCurrency).
  • Do not promote a helper to a helper fixture unless the same setup/teardown is copy-pasted across 3+ spec files and needs guaranteed lifecycle (see the api-testing skill, Phase 8 rule of thumb).
  • Mutating process.env from a helper is a narrow exception, not a general pattern. It is acceptable only for auth-bootstrap helpers that publish a token (e.g. writing process.env.ACCESS_TOKEN inside a login helper). Do not copy the env-mutation pattern into other helpers — return values through the function signature instead.

File Locations

{area} is a placeholder. Before creating or referencing any path below, run ls helpers/ to discover the real subdirectory names in this repo (e.g., front-office, back-office) and use those instead.

TypeDirectoryPurposeScaffold example
App helpershelpers/{area}/App-specific helper functions (auth bootstrap, storage state, seeding)helpers/app/createStorageState.ts
Utility helpershelpers/util/Generic utility functions reusable across apps/projectshelpers/util/util.ts

Instructions

Phase 1: Classify what you're adding

Use this table. The correct criterion is "does this need the Playwright fixture lifecycle?" — not "is this used in setup or in tests?". A plain utility like formatDate is a helper even though it's called from inside tests.

SymptomHome
Pure function — no setup/teardown lifecycle neededHelper in helpers/{area}/ or helpers/util/
Needs page / request context via DI, or owns setup → use(data) → teardown around each testFixture (see the fixtures skill; for lifecycle API helpers see api-testing Phase 8)
Encapsulates locators and user interactions on a specific pagePage object (see the page-objects skill)
One-off API call inside a single testCall apiRequest directly in the test — neither helper nor fixture
Reusable happy-path data generationFactory under test-data/factories/{area}/ (see the data-strategy skill)

If the need fits none of these rows, stop and ask. Do not invent a new location.

Phase 2: Pick the home — app-specific or utility
  • helpers/{area}/ — logic that only makes sense for the app under test: authentication flows, storage state creation, data seeding, app-specific request composition.
  • helpers/util/ — logic that's reusable across apps or projects: date formatting, string manipulation, retry logic, parsing utilities.

Prefer extending an existing file (createStorageState.ts, util.ts) over creating a new one when the function belongs to the same domain. Create a new file only when the domain is genuinely new.

Phase 3: Define the function signature, types, and JSDoc

Every exported helper must declare:

  • An explicit return type (Promise<void>, string, UserResponse, etc.). No implicit any.
  • Named parameters with explicit types.
  • A JSDoc block with a description, @param for every argument, @returns, and — when useful — an @example block.

Pattern:

typescript
/**
 * Creates and saves the browser storage state after successful login.
 * @returns {Promise<void>} Resolves when storage state is saved.
 */
export async function createAppStorageState(): Promise<void> {
    // implementation
}
Phase 4: Read env-driven values from process.env.*

Helpers never hardcode URLs, credentials, or tokens. Read from process.env.* and use enums for endpoint paths / storage-state paths:

typescript
import { ApiEndpoints, StorageStatePaths } from '../../enums/app/app';

// CORRECT
baseUrl: process.env.API_URL,
url: ApiEndpoints.LOGIN,
body: { email: process.env.APP_EMAIL, password: process.env.APP_PASSWORD },
await context.storageState({ path: StorageStatePaths.APP });

// FORBIDDEN
baseUrl: 'https://api.example.com',
url: '/api/users/login',

See the config skill for sources of truth and the enums skill for paths.

Phase 5: If the helper makes API calls, validate with Zod

The mandatory API response-validation pattern from api-testing applies equally inside helpers:

typescript
const { status, body } = await apiRequest<UserResponse>({
    method: 'POST',
    url: ApiEndpoints.LOGIN,
    baseUrl: process.env.API_URL,
    body: { email: process.env.APP_EMAIL, password: process.env.APP_PASSWORD },
});

expect(status).toBe(200);
expect(UserResponseSchema.parse(body)).toBeTruthy();

Rules:

  • The generic <UserResponse> gives compile-time safety on body.
  • expect(SchemaName.parse(body)).toBeTruthy(); is the exact assertion — not schema.parse(body) alone.
  • If the response can legitimately be null (e.g., a 204 DELETE), assert expect(body).toBeNull() instead.
Phase 6: Consume the helper

Call the helper from the right context — helpers have no lifecycle of their own, so where you call them matters:

  • Auth bootstrap (tests/{area}/auth.setup.ts) — app-login helpers run once before the main test suite to produce storage state and/or tokens. The scaffold ships a demo implementation in helpers/app/createStorageState.ts; adapt or replace it to match your app's auth flow.
  • Inside a test / beforeEach / afterEach — utility helpers freely, API helpers when they do self-contained work.
  • Inside a fixture — a fixture can call a helper as part of its setup/teardown. The fixture owns the lifecycle; the helper stays stateless.

Auth-bootstrap helpers that publish a token via process.env.* (e.g. the demo setUserAccessToken in the scaffold) are the one place env mutation is acceptable. Every other helper must return its results through the function signature.

Examples

Example 1: Add a utility helper

User says: "Add a helper that parses a currency string like $1,234.56 into a number so tests can assert on cart totals."

Actions:

  1. Phase 1 — Pure function, no lifecycle → helper.
  2. Phase 2 — Generic, reusable across apps → helpers/util/util.ts (extend the existing file).
  3. Phase 3 — Signature: export function parseCurrency(value: string): number, with JSDoc + @param + @returns.
  4. Phase 6 — Consume inside tests: expect(parseCurrency(await cart.totalText())).toBe(1234.56);.
Show full SKILL.md (557 more words)Show less
Example 2: Add an app-specific seeding helper

User says: "Wrap the factory + API create call so setup scripts can seed a product."

Actions:

  1. Phase 1 — Plain function (takes apiRequest as a parameter; does not own lifecycle) → helper. If it needed guaranteed per-test teardown, it would be a fixture instead.
  2. Phase 2 — App-specific → helpers/{area}/ (e.g. helpers/app/seedProduct.ts).
  3. Phase 3 — Signature: export async function seedProduct(apiRequest: ApiRequestFn, overrides?: Partial<Product>): Promise<Product>.
  4. Phase 4 — Read base URL / token from process.env.*, endpoint from ApiEndpoints.PRODUCTS.
  5. Phase 5 — Validate the response: expect(status).toBe(201); + expect(ProductSchema.parse(body)).toBeTruthy();.
  6. Phase 6 — Call from tests/{area}/auth.setup.ts or inside a fixture's setup block.
Example 3: Counterexample — this is a fixture, not a helper

User says: "I want to write a helper that creates a test user before each test and deletes it after — same API I wrote for seedProduct."

Actions:

  1. Phase 1 — "Creates before, deletes after" = Playwright lifecycle → fixture, not a helper.
  2. Stop. Route to the fixtures skill + the api-testing skill (Phase 8) and promote only if the setup/teardown is reused across 3+ spec files.
  3. If it's used in only 1–2 files, keep it inline in beforeEach / afterEach using apiRequest directly.

Troubleshooting

My helper returns undefined for process.env.* values. Cause: Missing env variable in the active env/.env.${ENVIRONMENT} file. Fix: Confirm the key exists there; update env/.env.example if you added a new variable. See the config skill.

I want the helper to set up a resource and tear it down around each test. Fix: That's a fixture, not a helper. Route to the fixtures skill; if the setup/teardown is API-driven see the api-testing skill (Phase 8).

process.env.ACCESS_TOKEN (or whichever token env var your auth helper writes) is undefined in API tests. Cause: The auth-setup test didn't run, or your login helper failed silently before writing the env var. Fix: Confirm Playwright's project dependencies are wired so tests/{area}/auth.setup.ts runs before the main suite. Re-run the setup and watch for schema-parse failures inside the auth helper (a schema mismatch means the login response shape changed).

My API helper calls schema.parse(body) without wrapping in expect(...).toBeTruthy(). Cause: Old pattern. Fix: Replace with expect(SchemaName.parse(body)).toBeTruthy(); — identical to the api-testing Critical rule.

I want to mutate process.env inside a new helper for convenience. Fix: Don't. The setUserAccessToken env mutation is a sanctioned auth-bootstrap exception. For any other case, pass values through return types or factory overrides — env mutation hides state and breaks parallel isolation.

I'm about to promote a one-off helper to a helper fixture because "it feels reusable". Fix: Promote only when the same setup/teardown is copy-pasted across 3+ spec files with a lifecycle need. Otherwise keep it as a helper or an inline apiRequest call (see the api-testing skill, Phase 8 rule of thumb).

TypeScript complains that my helper has an implicit any return type. Fix: Add an explicit return type (Promise<void>, Promise<UserResponse>, string, etc.) — Critical rule.

See Also

  • fixtures skill — Playwright fixtures with use() lifecycle (setup / yield / teardown); the sibling category to helpers.
  • api-testing skill — mandatory expect(Schema.parse(body)).toBeTruthy(); pattern and the Phase 8 rule of thumb for promoting to a helper fixture.
  • config skill — env variable conventions (process.env.*), where APP_URL / API_URL / APP_EMAIL / APP_PASSWORD live.
  • enums skill — ApiEndpoints.* for endpoint paths and StorageStatePaths.* for storage-state file paths.
  • data-strategy skill — Faker + Zod factories used inside seeding helpers; three-tier rule for static invalid data.
  • debugging skill — process.env.ACCESS_TOKEN undefined, auth-bootstrap failures, and other helper-driven test failures.

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

Files

Just SKILL.md in .claude/skills/helpers of idavidov13/agentic-playwright.

Open the folder on GitHubat commit f6cbf35

Compare with similar skills

Helpers 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.

Helpers compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Helpers this skillidavidov13/agentic-playwright223—~3.3kAutomated safety check: NotesMIT
API Testingfugazi/test-automation-skills-agents247—~1.5kAutomated safety check: PassMIT
API Testingpetrkindlmann/qa-skills165—~2.7kAutomated safety check: PassMIT
API Playwright Test Developerjaktestowac/awesome-copilot-for-testers116—~2kAutomated safety check: PassMIT
Playwright E2E Testingfugazi/test-automation-skills-agents247—~3.2kAutomated safety check: PassMIT
QAgaragon/nanostack207—~3.4kAutomated safety check: PassApache-2.0

Similar skills

  • API Testing

    fugazi/test-automation-skills-agents

    Test REST and GraphQL endpoint contracts using Playwright request fixture (TypeScript) or REST Assured (Java).

    247 GitHub stars~1.5k tokensUpdated 5 days ago
    Testing & QAAuto-check passed
  • API Testing

    petrkindlmann/qa-skills

    Test REST and GraphQL APIs with Playwright APIRequestContext, Supertest, or standalone HTTP clients.

    165 GitHub stars~2.7k tokensUpdated 4 mo ago
    Testing & QAAuto-check passed
  • API Playwright Test Developer

    jaktestowac/awesome-copilot-for-testers

    Writes and reviews API automation tests with Playwright Test, covering setup/teardown, assertions, data management, and hybrid API+UI flows.

    116 GitHub stars~2k tokensUpdated 1 mo ago
    Testing & QAAuto-check passed
  • Playwright E2E Testing

    fugazi/test-automation-skills-agents

    Author and maintain versioned Playwright (@playwright/test) TypeScript UI specs for browser user flows.

    247 GitHub stars~3.2k tokensUpdated 5 days ago
    Testing & QAAuto-check passed
  • QA

    garagon/nanostack

    A skill your agent uses to verify that code works correctly — browser-based testing with Playwright, native app testing with computer use, CLI testing, API testing, or root-cause debugging.

    207 GitHub stars~3.4k tokensUpdated 28 days ago
    Testing & QAAuto-check passed
  • Playwright Automation

    petrkindlmann/qa-skills

    Write production-grade Playwright tests in TypeScript: Page Object Model, fixtures, auto-waiting, user-facing locators, parallel execution, CI integration, sharding, and 2025-2026 feature awareness.

    165 GitHub stars~5.5k tokensUpdated 4 mo ago
    Testing & QAAuto-check passed

More from idavidov13/agentic-playwright

All 13 skills in this repo
  • AI Native Workflow

    idavidov13/agentic-playwright

    Sole entry-point router for AI-assisted work on this Playwright scaffold — owns the 8-phase main workflow (classify → route → explore → plan+confidence → human gate → apply → verify → report), the…

    223 GitHub stars~3.5k tokensUpdated 7 days ago
    Auto-check passed
  • Common Tasks

    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.

    223 GitHub stars~2.5k tokensUpdated 7 days ago
    Auto-check passed
  • Data Strategy

    idavidov13/agentic-playwright

    Test data strategy for the Playwright scaffold — Faker + Zod factories for dynamic happy-path data, static TS files (.ts with as const exports — never .json) for domain-specific curated invalid…

    223 GitHub stars~3.4k tokensUpdated 7 days ago
    Auto-check passed
  • Page Objects

    idavidov13/agentic-playwright

    Page Object Model pattern for the Playwright scaffold — class structure, get-accessor locator pattern, action-method conventions, component composition, registration via the page-object fixture, and…

    223 GitHub stars~3.6k tokensUpdated 7 days ago
    Auto-check passed
  • Selectors

    idavidov13/agentic-playwright

    Selector strategy, exploration-first workflow, locator priority order (getByRole then getByLabel then getByPlaceholder then getByText then getByTestId), and feedback/validation-message selector…

    223 GitHub stars~2.7k tokensUpdated 7 days ago
    Auto-check passed
  • Test Standards

    idavidov13/agentic-playwright

    Spec file conventions for the Playwright scaffold — imports from test-options.ts, test file structure (describe / beforeEach / test / test.step), single-tag rule, functional vs E2E vs API vs setup…

    223 GitHub stars~3.9k tokensUpdated 7 days ago
    Auto-check passed

Works with

Categories

Questions about Helpers

What does Helpers do?

Plain utility function conventions for the Playwright scaffold — app-specific helpers in helpers/{area}/ (authentication bootstrap, storage-state creation, data seeding) and generic utilities in…. Helpers is an agent skill from idavidov13/agentic-playwright. Plain utility function conventions for the Playwright scaffold — app-specific helpers in helpers/{area}/ (authentication bootstrap, storage-state creation, data seeding) and generic utilities in helpers/util/ (date formatting, string manipulation, parsing).

When should I use Helpers?

Helpers fits situations like: adding a reusable function that does NOT need the Playwright fixture lifecycle; wiring authentication bootstrap in tests/{area}/auth.setup.ts; deciding whether a reusable piece of code belongs in helpers/.

How do I install Helpers in Claude Code?

Run `npx skills add idavidov13/agentic-playwright --skill helpers -a claude-code`. Or copy the skill folder (.claude/skills/helpers in idavidov13/agentic-playwright) into .claude/skills/helpers in your project. Claude Code loads it when a task matches its description.

How do I install Helpers in Codex?

Run `npx skills add idavidov13/agentic-playwright --skill helpers -a codex`. Or copy the skill folder (.claude/skills/helpers in idavidov13/agentic-playwright) into .agents/skills/helpers in your project. Codex loads it when a task matches its description.

Can I use Helpers 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 idavidov13/agentic-playwright --skill helpers -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/helpers, .gemini/skills/helpers, .github/skills/helpers and .opencode/skills/helpers in your project.

What does Helpers need to run?

Going by SKILL.md and its folder, Helpers needs credentials named ACCESS_TOKEN and APP_PASSWORD. Our summary lists: A credential in ACCESS_TOKEN.

Does Helpers 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 Helpers safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Helpers use?

Helpers is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Helpers use?

About 3.3k tokens (SKILL.md is roughly 13k 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 Helpers?

Skills that share tags, products or a category with Helpers: API Testing (fugazi/test-automation-skills-agents, 247 stars), API Testing (petrkindlmann/qa-skills, 165 stars), API Playwright Test Developer (jaktestowac/awesome-copilot-for-testers, 116 stars) and Playwright E2E Testing (fugazi/test-automation-skills-agents, 247 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Helpers?

idavidov13 (a GitHub user) maintains it in idavidov13/agentic-playwright, which has 223 GitHub stars. The repository holds 13 skills in this directory. The repository was last updated on October 1, 2026.

Source: idavidov13/agentic-playwright on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.