Agent skill

Claude Code QA

by PramodDutta in PramodDutta/qaskills

The complete QA skill for Claude Code — turn Claude into an expert QA engineer that picks the right test type, writes reliable Playwright, Cypress, and pytest tests, eliminates flaky tests, enforces…

MITAuto-check passedTesting & QA

Install Claude Code QA

skills CLI
$ npx skills add PramodDutta/qaskills --skill claude-code-qa -a claude-code

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

GitHub CLI
$ gh skill install PramodDutta/qaskills claude-code-qa --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/PramodDutta/qaskills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/packs/qa-essentials/skills/claude-code-qa .claude/skills/claude-code-qa && 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
claude-code-qa
GitHub stars
232
Token cost
~2.3k tokens
SKILL.md length
1,013 words
Files
1
Skills in repo
11
Repo updated
First seen
Licence
MIT

At a glance

The complete QA skill for Claude Code — turn Claude into an expert QA engineer that picks the right test type, writes reliable Playwright, Cypress, and pytest tests, eliminates flaky tests, enforces…

  • Works in 7 steps: Understand the code before writing a… → Detect and respect the existing framework → Write reliable tests → …
  • Tasks that involve QA and bug reports
  • SKILL.md covers Core principles, Step 1 — Understand the code…, Step 2 — Detect and respect… and Step 3 — Write reliable tests, plus 8 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Claude Code QA is an agent skill from PramodDutta/qaskills. The complete QA skill for Claude Code — turn Claude into an expert QA engineer that picks the right test type, writes reliable Playwright, Cypress, and pytest tests, eliminates flaky tests, enforces coverage, and wires up CI. Claude Code QA testing done right.

Its SKILL.md is about 2.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 QA and bug reports, Failing and flaky tests and End-to-end testing. It works with Playwright, Cypress and pytest. The repository describes itself as: QA Skills Directory QA Skills is a curated directory of testing-specific skills for AI coding agents (Claude Code, Cursor, Copilot, etc.). The licence is MIT.

When your agent uses it

  • Tasks that involve QA and bug reports
  • Tasks that involve Failing and flaky tests
  • Tasks that involve End-to-end testing

Example prompts

  • “/claude-code-qa”

Requirements

  • Python 3

Workflow steps

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

  1. Understand the code before writing a single test
  2. Detect and respect the existing framework
  3. Write reliable tests
  4. Eliminate flaky tests
  5. Assertions and coverage that mean something
  6. API testing
  7. Wire it into CI

What it can do on your machine

Read from SKILL.md and the folder at commit 1d2a092. 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 and python).

    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 no API keys, tokens, secrets or passwords.

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

Context cost

Claude Code QA loads about 2.3k tokens when it runs. Until then it costs about 69 tokens; SKILL.md has 1,013 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~69
When it runs · the whole SKILL.md, loaded when a task matches
~2.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 passed

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.

SKILL.md

The full file from PramodDutta/qaskills at commit 1d2a092, republished under its MIT licence (© PramodDutta). 1,013 words, ~2,280 tokens.

Download SKILL.mdSave it as .claude/skills/claude-code-qa/SKILL.md (or your agent's skills folder).
name
claude-code-qa
description
The complete QA skill for Claude Code — turn Claude into an expert QA engineer that picks the right test type, writes reliable Playwright, Cypress, and pytest tests, eliminates flaky tests, enforces coverage, and wires up CI. Claude Code QA testing done right.
license
MIT
metadata.author
qaskills
metadata.version
1.0.0
metadata.source
https://qaskills.sh/skills/qaskills/claude-code-qa

QA Skill for Claude Code

You are an expert QA engineer working inside Claude Code (and other AI coding agents). When the user asks you to write tests, add test coverage, fix flaky tests, set up a testing framework, or review existing tests, follow this skill. Your job is not just to make tests pass — it is to produce tests that are reliable, meaningful, and maintainable, and that actually catch regressions.

Core principles

  1. Test behavior, not implementation. Assert on what the user observes or what a caller receives — not on private internals. Implementation-coupled tests break on every refactor and teach the team to ignore failures.
  2. Reliability over quantity. One trustworthy test beats ten flaky ones. A test suite the team doesn't trust is worse than no suite, because red builds get rubber-stamped.
  3. Right test at the right level. Follow the test pyramid: many fast unit tests, fewer integration tests, a small number of high-value end-to-end tests on critical paths.
  4. Deterministic by default. No real network, no real clock, no random data without a seed, no inter-test ordering dependencies. Same input, same result, every run.
  5. Readable as documentation. A test's name and body should explain the requirement. Use the Arrange–Act–Assert shape and descriptive names.

Step 1 — Understand the code before writing a single test

  • Read the module/route/component under test and its existing tests. Match the conventions already in the repo (framework, file naming, assertion style, folder layout).
  • Identify the public contract: inputs, outputs, side effects, error cases, edge cases.
  • Decide the level: pure logic → unit; module + its collaborators (db, http) → integration; a real user journey through the UI → end-to-end.
  • Ask: "What regression would actually hurt in production?" Test that first. Do not chase 100% coverage on trivial getters while critical flows are untested.

Step 2 — Detect and respect the existing framework

Before introducing any tool, detect what the project already uses (check package.json, lockfiles, config files, requirements.txt/pyproject.toml). Do not add a second framework.

Stack you findDefault test tools
Node/TS web app, has ViteVitest (unit), Playwright (E2E)
Node/TS, Jest already presentJest (unit), Playwright or Cypress (E2E)
React componentsReact Testing Library + Vitest/Jest
Pythonpytest (+ pytest-mock, pytest-cov)
REST/GraphQL APIPlaywright request / supertest / pytest + httpx

If the project has no framework, recommend one, explain the choice in one sentence, then set it up minimally (config + one example test + a test script) rather than a giant scaffold.

Step 3 — Write reliable tests

Locators (E2E): prefer user-facing, stable locators. Order of preference: role/label/text → data-testid → CSS. Never depend on auto-generated classes, deep CSS chains, or DOM position.

ts
// Good — resilient to markup changes
await page.getByRole('button', { name: 'Sign in' }).click();
await expect(page.getByRole('alert')).toHaveText('Invalid credentials');

// Bad — brittle, breaks on any restyle
await page.click('div.css-1x9f7 > button:nth-child(2)');

Waiting: never use fixed sleeps. Use the framework's auto-waiting / web-first assertions.

ts
// Bad: await page.waitForTimeout(3000);
// Good: Playwright retries this assertion until it passes or times out
await expect(page.getByTestId('cart-count')).toHaveText('2');

Structure: Arrange–Act–Assert. One logical behavior per test. Factor shared setup into fixtures, not copy-paste.

python
def test_discount_applies_to_eligible_cart():
    cart = Cart(items=[Item(price=100)])          # Arrange
    cart.apply_coupon("SAVE10")                    # Act
    assert cart.total() == 90                      # Assert

Page Object Model (E2E): wrap pages/flows in small objects so selectors live in one place and tests read like prose. Keep assertions in the test, actions in the object.

Step 4 — Eliminate flaky tests

Flakiness is the #1 reason teams abandon a suite. Hunt these causes:

  • Timing: replace sleeps with explicit waits / web-first assertions.
  • Shared state: each test sets up and tears down its own data; never rely on another test running first. Run with randomized order to catch hidden coupling.
  • Real time/dates: freeze the clock (vi.useFakeTimers(), freezegun, Playwright clock).
  • Network: mock external calls (MSW, nock, responses); only hit real services in a small, isolated contract/E2E tier.
  • Animations/focus: disable animations in test config; wait for the element state you need.

If a test is irredeemably flaky and blocking, quarantine it (mark, track, fix) rather than leaving it to randomly fail the build — but treat quarantine as debt, not a destination.

Show full SKILL.md (410 more words)Show less

Step 5 — Assertions and coverage that mean something

  • Assert specific values and error messages, not just "truthy" / "no throw".
  • Cover the edge cases: empty, null/None, boundary values, unicode, large input, and the failure/error path — not only the happy path.
  • Treat coverage as a floor, not a goal. 100% line coverage with weak assertions is theater. Prefer branch coverage on critical modules. Add a coverage gate in CI so it can't silently regress, but don't write meaningless tests just to hit a number.

Step 6 — API testing

ts
// Playwright APIRequestContext — fast, no browser
test('rejects unauthenticated request', async ({ request }) => {
  const res = await request.get('/api/orders');
  expect(res.status()).toBe(401);
});

Cover: status codes, schema/shape of the body, auth/authorization, validation errors, pagination, and idempotency. For contracts between services, add consumer-driven contract tests (Pact) so a provider change can't silently break a consumer.

Step 7 — Wire it into CI

  • Add a test script and run it on every PR. Fail the build on any failure.
  • Cache dependencies and browser binaries; shard/parallelize E2E to keep PRs fast.
  • Upload artifacts on failure (Playwright trace, screenshots, video) so failures are debuggable without re-running locally.
  • Keep unit tests in the fast PR lane; run the heavier E2E/cross-browser matrix on merge or nightly if it's slow.

Reviewing AI-generated tests (including your own)

Before declaring tests done, self-review against this checklist:

  • Does each test actually fail if I break the behavior it claims to cover? (If unsure, temporarily break the code and confirm a red.)
  • Are there assertions, and do they check specific expected values?
  • No fixed sleep/waitForTimeout? No real external network in unit tests?
  • Edge and error cases covered, not just the happy path?
  • Tests are independent and pass in randomized order?
  • Names describe the requirement; no dead/commented-out tests.
  • No over-mocking that makes the test assert mock behavior instead of real behavior.

Anti-patterns to refuse

  • Tests with no assertions ("it renders" with nothing checked).
  • Snapshot tests on huge, volatile output that nobody reviews.
  • Asserting on log output or private fields instead of behavior.
  • Catch-all try/except: pass that hides failures.
  • Mocking the very thing under test.

Worked example — a critical-path E2E test (Playwright)

ts
import { test, expect } from '@playwright/test';

test.describe('Checkout', () => {
  test('a logged-in user can buy an in-stock item', async ({ page }) => {
    await page.goto('/products/widget-123');
    await page.getByRole('button', { name: 'Add to cart' }).click();
    await expect(page.getByTestId('cart-count')).toHaveText('1');

    await page.getByRole('link', { name: 'Checkout' }).click();
    await page.getByLabel('Card number').fill('4242 4242 4242 4242');
    await page.getByRole('button', { name: 'Pay' }).click();

    await expect(page.getByRole('heading', { name: 'Order confirmed' })).toBeVisible();
    await expect(page.getByTestId('order-id')).not.toBeEmpty();
  });
});

This test uses stable role/label locators, web-first assertions (no sleeps), covers a real revenue-critical journey, and asserts concrete post-conditions — exactly the kind of test this skill exists to produce.

Summary

When you do QA inside Claude Code: understand the contract, pick the right level, respect the existing framework, write deterministic tests with stable locators and real assertions, kill flakiness at the source, make coverage meaningful, and gate it in CI. Reliable tests the team trusts — that is the goal.

© PramodDutta, 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 packs/qa-essentials/skills/claude-code-qa of PramodDutta/qaskills.

Open the folder on GitHubat commit 1d2a092

Compare with similar skills

Claude Code QA 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.

Claude Code QA compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Claude Code QA this skillPramodDutta/qaskills232—~2.3kAutomated safety check: PassMIT
Playwright Testingchongdashu/vibejam-starter-pack149—~2.1kAutomated safety check: PassNone
Test Migrationpetrkindlmann/qa-skills163—~5.3kAutomated safety check: PassMIT
Testing Patternssoftspark/ai-toolkit179—~1.6kAutomated safety check: PassApache-2.0
Playwright Testingchongdashu/vibejam-starter-pack149—~2.2kAutomated safety check: PassNone
E2E TestingOpentrons/opentrons521—~3kAutomated safety check: NotesApache-2.0

Similar skills

  • 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
  • Test Migration

    petrkindlmann/qa-skills

    Migrate a test suite from one framework to another, incrementally and without losing coverage.

    163 GitHub stars~5.3k tokensUpdated 3 mo ago
    Testing & QAAuto-check passed
  • Testing Patterns

    softspark/ai-toolkit

    Testing strategy: pyramid, AAA, mocks/fakes/stubs, flaky tests, coverage.

    179 GitHub stars~1.6k tokensUpdated yesterday
    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.2k tokensUpdated 5 mo ago
    Testing & QAAuto-check passed
  • E2E Testing

    Opentrons/opentrons

    E2E testing conventions for Protocol Designer and Labware Library using Playwright + pytest in e2e-testing/.

    521 GitHub stars~3k tokensUpdated yesterday
    Testing & QAAuto-check: notes
  • Web Testing with Playwright and Vitest

    withkynam/vibecode-pro-max-kit

    Covers web testing from unit to E2E, load, visual, accessibility and security checks, with Playwright, Vitest and k6 guides plus a Playwright setup script.

    1.1k GitHub stars~892 tokensUpdated 3 mo ago
    Testing & QAAuto-check passed

More from PramodDutta/qaskills

All 11 skills in this repo
  • Add Seed Skills

    PramodDutta/qaskills

    A skill your agent uses when adding or editing QA skills in seed-skills/ or getting them onto the live qaskills.sh catalog, e.g.

    232 GitHub stars~1.4k tokensUpdated 3 days ago
    Auto-check: notes
  • Publish SEO Batch

    PramodDutta/qaskills

    A skill your agent uses when publishing SEO blog articles to qaskills.sh, e.g.

    232 GitHub stars~2.2k tokensUpdated 3 days ago
    Auto-check passed
  • Ship Prod

    PramodDutta/qaskills

    A skill your agent uses when deploying qaskills.sh to production, verifying whether a deploy landed, or when a push to main did not show up on the live site, e.g.

    232 GitHub stars~1k tokensUpdated 3 days ago
    Auto-check passed
  • API Testing REST

    PramodDutta/qaskills

    Comprehensive RESTful API testing patterns covering HTTP methods, status codes, request/response validation, authentication, error handling, and contract testing.

    232 GitHub stars~4.9k tokensUpdated 3 days ago
    Auto-check passed
  • Cypress E2E

    PramodDutta/qaskills

    End-to-end testing skill using Cypress for web applications, covering custom commands, network intercepts, fixtures, cy.session, and component testing patterns.

    232 GitHub stars~3.4k tokensUpdated 3 days ago
    Auto-check passed
  • E2E Testing Claude Code

    PramodDutta/qaskills

    Make Claude Code write and maintain end-to-end tests like a senior SDET — Playwright and Cypress flows with stable locators, the Page Object Model, fixtures, reused auth state, network mocking, and…

    232 GitHub stars~1.4k tokensUpdated 3 days ago
    Auto-check passed

Categories

Questions about Claude Code QA

What does Claude Code QA do?

The complete QA skill for Claude Code — turn Claude into an expert QA engineer that picks the right test type, writes reliable Playwright, Cypress, and pytest tests, eliminates flaky tests, enforces…. Claude Code QA is an agent skill from PramodDutta/qaskills. The complete QA skill for Claude Code — turn Claude into an expert QA engineer that picks the right test type, writes reliable Playwright, Cypress, and pytest tests, eliminates flaky tests, enforces coverage, and wires up CI.

When should I use Claude Code QA?

Claude Code QA fits situations like: tasks that involve QA and bug reports; tasks that involve Failing and flaky tests; tasks that involve End-to-end testing.

How do I install Claude Code QA in Claude Code?

Run `npx skills add PramodDutta/qaskills --skill claude-code-qa -a claude-code`. Or copy the skill folder (packs/qa-essentials/skills/claude-code-qa in PramodDutta/qaskills) into .claude/skills/claude-code-qa in your project. Claude Code loads it when a task matches its description.

How do I install Claude Code QA in Codex?

Run `npx skills add PramodDutta/qaskills --skill claude-code-qa -a codex`. Or copy the skill folder (packs/qa-essentials/skills/claude-code-qa in PramodDutta/qaskills) into .agents/skills/claude-code-qa in your project. Codex loads it when a task matches its description.

Can I use Claude Code QA 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 PramodDutta/qaskills --skill claude-code-qa -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/claude-code-qa, .gemini/skills/claude-code-qa, .github/skills/claude-code-qa and .opencode/skills/claude-code-qa in your project.

What does Claude Code QA need to run?

SKILL.md names no scripts, command-line tools or credentials: Claude Code QA is instructions for the agent only. Our summary lists: Python 3.

Does Claude Code QA 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 Claude Code QA safe to install?

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.

What licence does Claude Code QA use?

Claude Code QA 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 Claude Code QA use?

About 2.3k tokens (SKILL.md is roughly 9.1k 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 Claude Code QA?

Skills that share tags, products or a category with Claude Code QA: Playwright Testing (chongdashu/vibejam-starter-pack, 149 stars), Test Migration (petrkindlmann/qa-skills, 163 stars), Testing Patterns (softspark/ai-toolkit, 179 stars) and Playwright Testing (chongdashu/vibejam-starter-pack, 149 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Claude Code QA?

PramodDutta (a GitHub user) maintains it in PramodDutta/qaskills, which has 232 GitHub stars. The repository holds 11 skills in this directory. The repository was last updated on October 4, 2026.

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