Agent skill

Coverage Analysis

by petrkindlmann in petrkindlmann/qa-skills

Measure and improve test coverage meaningfully. An agent skill from petrkindlmann/qa-skills.

MITAuto-check passedTesting & QA

Install Coverage Analysis

skills CLI
$ npx skills add petrkindlmann/qa-skills --skill coverage-analysis -a claude-code

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

GitHub CLI
$ gh skill install petrkindlmann/qa-skills coverage-analysis --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/petrkindlmann/qa-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/coverage-analysis .claude/skills/coverage-analysis && 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
coverage-analysis
GitHub stars
165
Token cost
~4.7k tokens
SKILL.md length
2,324 words
Files
4 (incl. references)
Skills in repo
45
Repo updated
First seen
Licence
MIT

At a glance

Measure and improve test coverage meaningfully. An agent skill from petrkindlmann/qa-skills.

  • Works in 7 steps: Treating coverage as proof of quality → Excluding files to inflate numbers → Writing trivial tests to hit targets → …
  • : code coverage
  • SKILL.md covers Quick Route, Discovery Questions, Core Principles and Coverage Tools, plus 8 more sections
  • Calls npm, git and pytest

What it does

Coverage Analysis is an agent skill from petrkindlmann/qa-skills. Measure and improve test coverage meaningfully. Covers Istanbul/V8/coverage.py configuration, coverage gap analysis by risk, coverage-as-ratchet in CI (never let it decrease), PR coverage diff checks, mutation testing for assertion quality, and distinguishing meaningful from vanity coverage. Use when: "code coverage," "coverage gap," "Istanbul," "coverage threshold," "coverage report," "branch coverage." Not for: writing the tests that raise coverage — use unit-testing; coverage as a tracked KPI trend over time —…

Its SKILL.md is about 4.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including reference files (for example `references/ci-gating.md`, `references/mutation-testing.md` and `references/tool-config.md`).

It sits in Testing & QA, covering Test coverage and Unit testing. It works with Vitest. The repository describes itself as: 50 QA and test-automation skills for Claude Code, Codex, Cursor, and any Agent Skills Standard runtime. The licence is MIT.

When your agent uses it

  • : code coverage
  • Coverage threshold
  • Coverage report
  • Branch coverage. Not for: writing the tests that raise coverage — use unit-testing

Example prompts

  • “code coverage,”
  • “coverage gap,”
  • “Istanbul,”
  • “/coverage-analysis”

Workflow steps

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

  1. Treating coverage as proof of quality
  2. Excluding files to inflate numbers
  3. Writing trivial tests to hit targets
  4. Global threshold without per-module analysis
  5. Coverage threshold set once, never adjusted
  6. Ignoring branch coverage
  7. Coverage from E2E tests only

What it can do on your machine

Read from SKILL.md and the folder at commit b3bb61b. 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

    Shell commands in SKILL.md call:

    • npm
    • git
    • pytest

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

  • Network

    No URLs in SKILL.md. Its commands use npm and git, which can reach the network depending on how they are called.

    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

Coverage Analysis loads about 4.7k tokens when it runs, and up to ~7.1k if it reads all its reference files. Until then it costs about 155 tokens; SKILL.md has 2,324 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~155
When it runs · the whole SKILL.md, loaded when a task matches
~4.7k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~7.1k

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 petrkindlmann/qa-skills at commit b3bb61b, republished under its MIT licence (© petrkindlmann). 2,324 words, ~4,695 tokens.

Download SKILL.mdSave it as .claude/skills/coverage-analysis/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
coverage-analysis
description
Measure and improve test coverage meaningfully. Covers Istanbul/V8/coverage.py configuration, coverage gap analysis by risk, coverage-as-ratchet in CI (never let it decrease), PR coverage diff checks, mutation testing for assertion quality, and distinguishing meaningful from vanity coverage. Use when: "code coverage," "coverage gap," "Istanbul," "coverage threshold," "coverage report," "branch coverage." Not for: writing the tests that raise coverage — use unit-testing; coverage as a tracked KPI trend over time — use qa-metrics. Related: unit-testing, ci-cd-integration, qa-metrics, ai-qa-review.
license
MIT
metadata.author
kindlmann
metadata.version
2.0
metadata.category
metrics
<objective>
A suite at 90% line coverage with assertion-free tests catches zero bugs — line coverage
proves code ran, not that a regression would be caught. This skill measures the right
things (branch coverage, mutation score, critical-path coverage), gates them in CI with a
ratchet so coverage can only go up, and surfaces gaps by risk instead of chasing a vanity
number. It prevents the classic failure: a green coverage badge over a test suite that
never asserts anything meaningful, while the payment module sits at 30%.
</objective>

Quick Route

SituationGo to
Pick and configure a coverage providerCoverage Tools → references/tool-config.md
Decide where to write tests nextGap Analysis
Stop coverage from regressing in CICoverage as CI Gate → Ratchet Pattern
Show per-PR coverage to reviewersCoverage as CI Gate → PR Diff
Tests run code but don't assertMutation Testing
Decide what to exclude / what target to setMeaningful vs Vanity Coverage

Discovery Questions

Check .agents/qa-project-context.md first — if it exists, use it and skip anything already answered there. Then:

  1. What test runner and coverage tooling is configured? Check for vitest.config.* (coverage block), jest.config.* (coverageProvider), .nycrc, c8 in scripts, or [tool.coverage] in pyproject.toml. The runner decides the install — Vitest pulls @vitest/coverage-v8, not c8 (see Coverage Tools).
  2. What is the current coverage level? Run the existing coverage command and note line, branch, and function percentages. This is the baseline for the ratchet.
  3. Is coverage gated in CI? Check GitHub Actions / GitLab CI for --coverage, coverageThreshold, fail_under, or --cov-fail-under. No gate means coverage is decorative.
  4. What is the target, and who set it? A target without rationale ("the VP said 80%") leads to gaming. Targets should reflect risk tolerance and codebase maturity, not a round number.

Core Principles

1. Coverage measures breadth, not depth. A line being executed does not mean it is tested correctly. expect(true).toBe(true) executes the function but asserts nothing. Coverage tells you what code ran, not whether the tests would catch a bug — that is what mutation testing measures.

2. Branch coverage matters more than line coverage. A ternary condition ? a : b on one line counts as fully covered in line coverage even if only one branch ran. Line coverage does not guarantee branch coverage. Gate on branches, not just lines:

typescript
function discount(price: number, isPremium: boolean): number {
  return isPremium ? price * 0.8 : price;
}

// Line coverage: 100% (the line executed). Branch coverage: 50% (only the true branch ran).
expect(discount(100, true)).toBe(80);

// Fix — assert BOTH paths so branch coverage reaches 100%:
expect(discount(100, true)).toBe(80);
expect(discount(100, false)).toBe(100);

3. Ratchet pattern: never decrease, only increase. Record current coverage as the minimum threshold. Every PR must meet or exceed it. Coverage climbs over time without forcing an artificial target up front.

4. Focus on gaps by risk, not on the number. A project at 85% is not automatically "better" than one at 75%. What matters is whether the untested slice contains payment, auth, or data-integrity logic. Analyze gaps by risk.

5. New code has a higher bar than legacy code. Require 90%+ on new code in PRs even if the project sits at 65%. This stops coverage decay without demanding a rewrite of legacy code.


Coverage Tools

Pick the provider by test runner first, then by how cleanly it maps to your build output.

Runner / contextInstallProvider
Vitest@vitest/coverage-v8 (default) or @vitest/coverage-istanbulcoverage.provider: 'v8' / 'istanbul'
Jestbundled (coverageProvider: 'v8' or 'babel')V8 or Istanbul/babel
Non-Vitest Node (node:test, plain mocha)c8 CLIV8 via c8 <command>
Legacy Istanbul CLInycIstanbul instrumentation
Pythonpytest-cov (wraps coverage.py)coverage.py

Two engines underneath:

  • V8 coverage — built into the V8 engine, so it does not instrument source: faster, no Babel transform. For Vitest, install @vitest/coverage-v8 (NOT c8 — that is the standalone CLI for non-Vitest runners). For a plain node:test or mocha project, c8 is the CLI wrapper around the same V8 data. Default for new Node/Vitest projects.
  • Istanbul — instruments source code; slower but maps more reliably through transpilers and bundlers. Switch to it (@vitest/coverage-istanbul, or nyc) when V8 maps poorly. Symptom that V8 maps poorly: reported uncovered lines land on blank lines, closing braces, or decorators, or whole covered functions show as red — that means the source map is misattributing lines (common with certain TS bundlers / SWC configs). When you see that, flip to the Istanbul provider.

Node baseline: c8 11.x and nyc 18.x are current. c8 11 still supports Node >=12; nyc 18 requires Node 20 || >= 22. If you must stay on Node 18, pin nyc@^17 (c8 11 runs fine on Node 18). New projects should standardize on Node 20+.

See references/tool-config.md for the full provider configs (Vitest coverage block, .nycrc.json, Jest coverageThreshold, pyproject.toml / .coveragerc.toml), install commands, and run invocations.

Merging coverage across test types

Unit, integration, and E2E runs each produce partial coverage. Combine them so a line covered only by an integration test isn't reported as a gap:

  • Vitest — run as multiple projects/configs and let Vitest merge, or merge coverage-final.json outputs.
  • nyc — nyc merge .nyc_output merged.json && nyc report -t merged combines .json files from separate runs.
  • coverage.py — coverage combine after running each suite with coverage run -p.

Merge first, gate on the merged total. Don't gate each suite's coverage in isolation.

Coverage Report Types
ReporterOutputUse Case
textTerminal tableQuick local check
htmlInteractive HTMLDetailed local analysis, clicking through files
lcovlcov.info fileSonarQube, Codecov, Coveralls integration
json-summarycoverage-summary.jsonCI scripts, PR comments, dashboard metrics
coberturacobertura-coverage.xmlGitLab CI coverage visualization

Gap Analysis

Coverage reports show which lines and branches did not run. Not all gaps are equal — prioritize by risk.

Step 1: Generate the report.

bash
npm run test:coverage
# Open coverage/index.html in a browser

Step 2: Sort files by uncovered lines. Parse coverage-summary.json, sort files by (total - covered) descending, focus on the top 20. A small script that reads the JSON summary and outputs file / line% / branch% / uncovered-count makes this repeatable.

Step 3: Map gaps to risk.

Gap LocationRisk LevelAction
Payment processingCriticalWrite tests immediately
Auth/permissionsCriticalWrite tests immediately
Data validationHighAdd to next sprint
Error handling pathsHighAdd to next sprint
Utility functionsMediumCover when modifying
UI formattingLowSkip unless regression-prone
Generated codeNoneExclude from coverage

Include branch coverage in the sort, not just lines — a file at 100% line / 50% branch hides untested paths a line-only sort would rank as "done."


Coverage as CI Gate

Threshold Configuration

Set a global threshold as the project minimum, then layer per-directory thresholds stricter for critical code (payments, auth) than for utilities. Vitest uses glob keys under thresholds (e.g. "src/payments/**": { lines: 95, branches: 90 }); Jest uses path keys under coverageThreshold. Both support per-path overrides.

See references/ci-gating.md for the global, per-directory, and Jest per-file threshold config.

Ratchet Pattern

Never let coverage decrease. Record the current level as the minimum and floor it upward when coverage improves. A ratchet script reads coverage-summary.json, compares each metric against a committed .coverage-ratchet.json, fails the build on any regression, and updates the baseline when coverage improves.

Commit .coverage-ratchet.json (e.g. { "lines": 82, "branches": 78, ... }). In CI, run the ratchet script after tests. On main-branch merges, auto-commit the updated ratchet file if coverage improved.

See references/ci-gating.md for the full coverage-ratchet.ts script.

PR Diff Coverage Gate

Require new code in a PR to meet a higher threshold (e.g. 90%) than the project baseline. In CI, use git diff --name-only origin/main...HEAD to identify changed files, then check their coverage from coverage-summary.json. Fail the pipeline if changed-file coverage falls below the threshold. This stops decay without rewriting legacy code.

Surface the diff to reviewers with davelosert/vitest-coverage-report-action@v2 (reads the JSON summary) or marocchino/sticky-pull-request-comment@v2 with a script that filters to changed files. See references/ci-gating.md for the full PR workflow.

Hosted alternatives: Codecov, Coveralls, and Trunk Coverage ship first-class differential PR coverage with merge-blocking gates and inline annotations. Most teams prefer these over hand-rolled diff scripts — pick one if you don't already have a coverage host. Codecov + GitHub: codecov/codecov-action@v5 reads lcov.info and posts a PR diff comment automatically.


Mutation Testing

Mutation testing measures assertion quality, not just code execution. It mutates your source (flips a > to >=, deletes a line) and checks whether a test fails. A surviving mutant means a real bug your tests would miss. With Stryker JS v9.6+ and Vitest 4.1+ the cost is low enough to run on PR-changed files; mutmut 3.x covers Python.

Targeting

Mutation testing is expensive on whole codebases — run it incrementally. Stryker's incremental: true (JSON cache) plus --mutate scoped to the git diff re-mutates only touched files; mutmut similarly mutates per path. Restrict to:

  • Pure business logic (validators, calculators, transformers)
  • Critical paths (payment, auth, data integrity)
  • Code with high line coverage but suspect assertions (branch coverage > 90% but few assertion variants)

Skip UI rendering, glue code, and generated code.

See references/mutation-testing.md for the Stryker config (stryker.config.json, incremental, run on changed files only) and the mutmut invocation.

Show full SKILL.md (908 more words)Show less
Reading the score

A mutation score of 80% means 80% of injected bugs were caught. Lower than your coverage % is normal — many mutants land in untested branches the coverage report already flagged. The interesting signal is high coverage + low mutation score: code executes but assertions don't constrain it.


Meaningful vs Vanity Coverage

Why 100% Coverage Is Usually Wrong

100% requires testing every branch of every line, including:

  • Error handling for impossible states
  • Default cases in exhaustive switches
  • Framework lifecycle methods never called directly
  • Defensive checks against corrupted data

Tests written to hit 100% are often trivial, brittle, and catch no real bugs.

Diminishing Returns
Coverage RangeValueEffort
0% to 60%High — main paths, obvious regressionsLow
60% to 80%Medium — error paths, edge casesMedium
80% to 90%Lower — unusual combinations, defensive codeHigh
90% to 100%Minimal — unreachable code, framework internalsVery high

The sweet spot is 75–85% for most projects. Critical paths (payments, auth) aim higher (90%+). Set the global threshold in the sweet spot and per-directory thresholds at 90%+ for payment/auth.

What NOT to Cover

Exclude these — they inflate the denominator without adding value. Document each exclusion's justification in a CONTRIBUTING/coverage note so the exclude list can't quietly hide real gaps.

typescript
// vitest.config.ts / jest.config.js — exclude patterns
exclude: [
  "**/*.d.ts",              // Type definitions
  "**/index.ts",            // Barrel exports (re-exports only)
  "**/*.stories.{ts,tsx}",  // Storybook stories
  "**/generated/**",        // Auto-generated code (GraphQL, Prisma)
  "**/migrations/**",       // Database migrations
  "**/__mocks__/**",        // Test mocks
  "**/types/**",            // Type-only modules
]
Quality Indicators Beyond Percentage
IndicatorWhat It MeasuresHow to Get It
Mutation scoreWould tests catch a real bug?Stryker / mutmut
Branch coverageAre all conditional paths tested?V8/Istanbul with branch reporting
Critical path coverageAre payment/auth/data flows fully covered?Per-directory thresholds
Defect escape rateDo production bugs occur in tested code?Post-incident analysis
Coverage deltaIs coverage improving or declining?Ratchet pattern tracking

Anti-Patterns

1. Treating coverage as proof of quality

"We have 90% coverage so we're well-tested" is dangerous. Coverage says code executed, not that behavior was verified. Fix: pair the percentage with a mutation score on critical modules; a test with no assertions should drop the mutation score even at 100% line coverage.

2. Excluding files to inflate numbers

Adding hard-to-test files (error handlers, integration modules) to the exclude list hides the most important gaps. Fix: only exclude genuinely untestable code — generated files, type definitions, barrel exports — and justify each exclusion in writing.

3. Writing trivial tests to hit targets

it("should exist", () => expect(MyClass).toBeDefined()) adds coverage without value. Fix: every test verifies a behavior that, if broken, affects users; mutation testing flags these no-op tests.

4. Global threshold without per-module analysis

An 80% global threshold passes even if payments sits at 30%, as long as utilities inflate the average. Fix: per-directory thresholds at 90%+ for payment/auth.

5. Coverage threshold set once, never adjusted

A team stuck at 78% for six months isn't improving. Fix: the ratchet floors upward automatically; review it quarterly and investigate stagnation.

6. Ignoring branch coverage

Line coverage reports 100% on const r = cond ? a : b even if one branch never runs. Fix: always report and gate on branches alongside lines.

7. Coverage from E2E tests only

A single E2E test touches 60% of the codebase without testing any edge case — broad and shallow. Fix: measure unit/integration coverage separately from E2E and gate on the unit/integration total; E2E coverage is a bonus signal, not the gate.


Verification

Prove the gate actually fails on regression — a green build with no enforcement is worthless.

  1. Threshold fires: temporarily lower one committed metric below current (or delete one passing test), run npm run test:coverage (or pytest --cov=src --cov-fail-under=80), and confirm a non-zero exit code. Restore afterward.
  2. Ratchet fires: with .coverage-ratchet.json committed, drop a test so coverage regresses, run the ratchet script, and confirm it prints FAIL: ... coverage dropped and exits 1.
  3. Branch gate is on: confirm the report shows a branches column and that branches appears in the threshold config — not just lines.
  4. PR diff renders: open a draft PR touching one source file and confirm the coverage-diff comment posts with the changed file's numbers.

If step 1 exits 0 after you lowered coverage, the gate is not wired — fix that before claiming Done.


Done When

  • Coverage runs automatically in CI on every push (no manual step to generate the report).
  • Coverage threshold is enforced in CI: the build exits non-zero when line or branch coverage drops below the defined minimum (verified per Verification step 1).
  • Coverage report is published as a CI artifact (HTML + json-summary) and a per-PR coverage delta posts to PR comments.
  • The coverage config contains an exclude list and per-directory thresholds (90%+ for payments/auth), and a CONTRIBUTING/coverage doc lists each exclusion's justification.
  • Ratchet is wired: .coverage-ratchet.json is committed, the ratchet script runs in CI, and the build fails on regression from the recorded baseline (verified per Verification step 2).

Reference Files (in references/)

  • tool-config.md — Full provider configs for Vitest (@vitest/coverage-v8 / -istanbul), the c8 CLI for non-Vitest runners, nyc, Jest, and coverage.py, with install and run commands.
  • ci-gating.md — PR coverage-diff workflow, global/per-directory/per-file thresholds, and the coverage-ratchet.ts script.
  • mutation-testing.md — Stryker (stryker.config.json, incremental) and mutmut configuration for measuring assertion quality.
  • unit-testing — Writing the tests that raise coverage: mocking strategies, framework-specific config, and Vitest coverage.changed for changed-files-only coverage in CI. Go there to author tests; this skill measures and gates them.
  • ci-cd-integration — Pipeline wiring for coverage gates, artifact storage, and PR comments.
  • qa-metrics — Coverage as a tracked KPI trend over time alongside mutation score and defect escape rate. Go there for dashboards and trends; this skill is per-repo configuration and gating.
  • ai-qa-review — AI-assisted identification of undertested paths and Vitest browser mode for component coverage parity.

© petrkindlmann, 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 3 other files (references) in skills/coverage-analysis of petrkindlmann/qa-skills.

  • SKILL.md
  • references/ci-gating.md
  • references/mutation-testing.md
  • references/tool-config.md

Open the folder on GitHubat commit b3bb61b

Compare with similar skills

Coverage Analysis 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.

Coverage Analysis compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Coverage Analysis this skillpetrkindlmann/qa-skills165—~4.7kAutomated safety check: PassMIT
Test Writing WorkflowiOfficeAI/AionUi33k1 repos~1.2kAutomated safety check: PassApache-2.0
Caliber Testingcaliber-ai-org/ai-setup1.3k—~3.2kAutomated safety check: PassMIT
Analyzing CoverageTriliumNext/Trilium38k—~2kAutomated safety check: PassAGPL-3.0
Coverage Toolszkldi/Tachi237—~580Automated safety check: PassNone
Test Coveragescott-fryxell/brayness124—~1.6kAutomated safety check: PassMIT

Similar skills

  • Test Writing Workflow

    iOfficeAI/AionUi

    Sets the test-writing workflow for the repository: risk-first scenario lists, behavior-focused Vitest tests, a full run before each commit and a coverage target.

    33k GitHub starsUsed in 1 repo~1.2k tokens
    Testing & QAAuto-check passed
  • Caliber Testing

    caliber-ai-org/ai-setup

    Writes Vitest tests following project patterns: tests/ directories, vi.mock() for module mocking with vi.hoisted() for test-time factories, global LLM mock from src/test/setup.ts, environment…

    1.3k GitHub stars~3.2k tokensUpdated 14 days ago
    Testing & QAAuto-check passed
  • Analyzing Coverage

    TriliumNext/Trilium

    A skill your agent uses when measuring or chasing Vitest/v8 code coverage in the Trilium monorepo — "what's below 100%?", "which files need tests?", "what lines of X are uncovered?", "take <area to…

    38k GitHub stars~2k tokensUpdated today
    Testing & QAAuto-check passed
  • Coverage Tools

    zkldi/Tachi

    Aggregates Vitest v8/Istanbul coverage across Tachi workspaces via tachi-coverage-tools (manifest, CLI, optional programmatic API).

    237 GitHub stars~580 tokensUpdated 2 days ago
    Testing & QAAuto-check passed
  • Test Coverage

    scott-fryxell/brayness

    Write Vitest specs for Vue 3 JavaScript (Vite Plus, happy-dom, @vue/test-utils) and analyze V8 coverage + Fallow health to prioritize test-first refactors.

    124 GitHub stars~1.6k tokensUpdated 10 days ago
    Testing & QAAuto-check passed
  • Backend Testing

    biersoeckli/QuickStack

    Create and review QuickStack backend unit and integration tests using the project's Vitest, Prisma, SQLite, and k3s conventions.

    362 GitHub stars~670 tokensUpdated today
    Testing & QAAuto-check passed

More from petrkindlmann/qa-skills

All 45 skills in this repo
  • Accessibility Testing

    petrkindlmann/qa-skills

    Test for WCAG 2.2 AA compliance with axe-core + Playwright, keyboard navigation audits, screen reader testing, ARIA pattern validation, and legal compliance mapping (ADA, EAA, Section 508).

    165 GitHub stars~4.5k tokensUpdated 3 mo ago
    Auto-check passed
  • Agentic Browser Testing

    petrkindlmann/qa-skills

    Goal-driven E2E testing where a browser agent (Playwright MCP / computer-use) reads a natural-language goal and explores the app via the accessibility tree to assert outcomes — no pre-written script.

    165 GitHub stars~4.5k tokensUpdated 3 mo ago
    Auto-check passed
  • AI Test Generation

    petrkindlmann/qa-skills

    Use AI to write NEW test code from specs, PRDs, user stories, code diffs, bug reports, or OpenAPI specs.

    165 GitHub stars~4.8k tokensUpdated 3 mo ago
    Auto-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 3 mo ago
    Auto-check passed
  • CI CD Integration

    petrkindlmann/qa-skills

    Design CI/CD pipelines that run test suites. An agent skill from petrkindlmann/qa-skills.

    165 GitHub stars~4.8k tokensUpdated 3 mo ago
    Auto-check passed
  • Compliance Testing

    petrkindlmann/qa-skills

    Test for regulatory compliance: GDPR/CMP consent verification, Google Consent Mode v2, Global Privacy Control (GPC), CCPA/US state opt-out, EU AI Act Article 50 transparency, Better Ads Standards…

    165 GitHub stars~4.6k tokensUpdated 3 mo ago
    Auto-check passed

Works with

Categories

Questions about Coverage Analysis

What does Coverage Analysis do?

Measure and improve test coverage meaningfully. An agent skill from petrkindlmann/qa-skills. Coverage Analysis is an agent skill from petrkindlmann/qa-skills. Measure and improve test coverage meaningfully.

When should I use Coverage Analysis?

Coverage Analysis fits situations like: : code coverage; coverage threshold; coverage report; branch coverage. Not for: writing the tests that raise coverage — use unit-testing.

How do I install Coverage Analysis in Claude Code?

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

How do I install Coverage Analysis in Codex?

Run `npx skills add petrkindlmann/qa-skills --skill coverage-analysis -a codex`. Or copy the skill folder (skills/coverage-analysis in petrkindlmann/qa-skills) into .agents/skills/coverage-analysis in your project. Codex loads it when a task matches its description.

Can I use Coverage Analysis 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 petrkindlmann/qa-skills --skill coverage-analysis -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/coverage-analysis, .gemini/skills/coverage-analysis, .github/skills/coverage-analysis and .opencode/skills/coverage-analysis in your project.

What does Coverage Analysis need to run?

Going by SKILL.md and its folder, Coverage Analysis needs the command-line tools its instructions call (npm, git and pytest).

Does Coverage Analysis access the network?

SKILL.md contains no URLs. Its commands use npm and git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Coverage Analysis 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 Coverage Analysis use?

Coverage Analysis 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 Coverage Analysis use?

About 4.7k tokens (SKILL.md is roughly 19k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.4k tokens, read only when the agent opens those files.

What are the alternatives to Coverage Analysis?

Skills that share tags, products or a category with Coverage Analysis: Test Writing Workflow (iOfficeAI/AionUi, 33k stars), Caliber Testing (caliber-ai-org/ai-setup, 1.3k stars), Analyzing Coverage (TriliumNext/Trilium, 38k stars) and Coverage Tools (zkldi/Tachi, 237 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Coverage Analysis?

petrkindlmann (a GitHub user) maintains it in petrkindlmann/qa-skills, which has 165 GitHub stars. The repository holds 45 skills in this directory. The repository was last updated on June 10, 2026.

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