Automated Test Planning
testdouble/han
Produce a standalone test plan by analyzing code for test coverage gaps and edge cases.
Routing skill of last resort. An agent skill from petrkindlmann/qa-skills.
$ npx skills add petrkindlmann/qa-skills --skill qa-do -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install petrkindlmann/qa-skills qa-do --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/petrkindlmann/qa-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/qa-do .claude/skills/qa-do && rm -rf skills-srcUse ~/.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/
Install the "qa-do" agent skill from https://github.com/petrkindlmann/qa-skills/tree/main/skills/qa-do into .claude/skills/qa-do/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "qa-do", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/petrkindlmann/qa-skills/tree/main/skills/qa-doType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add petrkindlmann/qa-skills --skill qa-do -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install petrkindlmann/qa-skills qa-do --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/petrkindlmann/qa-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/qa-do .agents/skills/qa-do && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "qa-do" agent skill from https://github.com/petrkindlmann/qa-skills/tree/main/skills/qa-do into .agents/skills/qa-do/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "qa-do", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add petrkindlmann/qa-skills --skill qa-do -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install petrkindlmann/qa-skills qa-do --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/petrkindlmann/qa-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/qa-do .cursor/skills/qa-do && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "qa-do" agent skill from https://github.com/petrkindlmann/qa-skills/tree/main/skills/qa-do into .cursor/skills/qa-do/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "qa-do", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/petrkindlmann/qa-skills.git --path skills/qa-do--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add petrkindlmann/qa-skills --skill qa-do -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install petrkindlmann/qa-skills qa-do --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/petrkindlmann/qa-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/qa-do .gemini/skills/qa-do && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "qa-do" agent skill from https://github.com/petrkindlmann/qa-skills/tree/main/skills/qa-do into .gemini/skills/qa-do/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "qa-do", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install petrkindlmann/qa-skills qa-doInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add petrkindlmann/qa-skills --skill qa-do -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/petrkindlmann/qa-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/qa-do .github/skills/qa-do && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "qa-do" agent skill from https://github.com/petrkindlmann/qa-skills/tree/main/skills/qa-do into .github/skills/qa-do/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "qa-do", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add petrkindlmann/qa-skills --skill qa-do -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install petrkindlmann/qa-skills qa-do --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/petrkindlmann/qa-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/qa-do .opencode/skills/qa-do && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "qa-do" agent skill from https://github.com/petrkindlmann/qa-skills/tree/main/skills/qa-do into .opencode/skills/qa-do/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "qa-do", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
qa-doRouting skill of last resort. An agent skill from petrkindlmann/qa-skills.
QA Do is an agent skill from petrkindlmann/qa-skills. Routing skill of last resort. Takes a plain-language QA situation and names the right 1-2 skills to use and in what order. Use ONLY when the request does not match any other skill's trigger phrases. Use when: "which skill should I use," "where do I start," "I'm not sure what to test," "/qa-do," or any vague QA situation that doesn't map to one skill. Not for: bootstrapping a brand-new project with no QA — use qa-start. Not for: capturing project setup/context — use qa-project-context. If the request clearly…
Its SKILL.md is about 2.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts. Compatibility notes: Cross-tool. Tested with Claude Code, Codex, Cursor, Gemini CLI. Reads the project root; no network access required.
It sits in Testing & QA, covering Plain language and style rules and Test strategy. 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.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit b3bb61b. It shows what the files ask for, not the result of running them.
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.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Cross-tool. Tested with Claude Code, Codex, Cursor, Gemini CLI. Reads the project root; no network access required.
From compatibility in the SKILL.md frontmatter.
QA Do loads about 2.9k tokens when it runs. Until then it costs about 164 tokens; SKILL.md has 1,246 words of instructions outside code blocks.
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.
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.
The full file from petrkindlmann/qa-skills at commit b3bb61b, republished under its MIT licence (© petrkindlmann). 1,246 words, ~2,868 tokens.
.claude/skills/qa-do/SKILL.md (or your agent's skills folder).<objective>
Most QA situations fit a recognizable pattern. This skill takes a plain-language
description of what you're trying to do or what problem you're facing, matches it to a
pattern, and names the 1-2 skills to use and in what order. It diagnoses and routes — it
does not duplicate content from the skills it points to. If invoked with arguments, the
situation is `$ARGUMENTS`; otherwise ask the user for a sentence or two describing it.
</objective>
Route to the most precise skill, not the nearest neighbor. A vague match to a
broad skill is worse than a direct hit on a narrow one. "Reproduce this bug" goes to
bug-reproduction, not the broader ai-bug-triage; "test our Stripe checkout" goes to
payment-testing, not generic api-testing. When in doubt, prefer the skill whose
trigger phrases name the exact artifact in the request.
One or two skills, in order — never a pile. Output at most two skills. A second skill earns its place only when the first leaves a clear gap (diagnose → measure, risk → checklist). If one skill covers the request, say "Direct" and stop. Routing to three skills means the situation is ambiguous — ask a clarifying question instead.
The routing table is the source of truth, and it goes stale. This router is uniquely
prone to drift: every skill added to skills/ is a row that may be missing here.
Regenerate the table and the Skill Categories reference against skills/ whenever a
skill is added or removed. If a request has no row, fall back to the closest category in
the Quick Reference rather than forcing a wrong direct match.
Describe what you're trying to do or what problem you're facing — a sentence or two is
enough. The router outputs the recommended skill(s) (1-2, in order) and one line per
skill explaining the role it plays. Example: "Our E2E tests keep failing in CI but pass
locally." → test-reliability (diagnose flaky/environment-sensitive tests), then
ci-cd-integration (align the pipeline environment with local behavior).
| Situation | Recommended Skills | Order |
|---|---|---|
| New project, no tests at all | qa-start (or qa-project-context → test-strategy) | Bootstrap the whole QA setup |
| Onboard a QA engineer to an existing codebase | qa-project-bootstrap | Direct — 30-day ramp + architecture audit |
| "Tests keep breaking in CI" | test-reliability → ci-cd-integration | Reliability first, then pipeline |
| "A UI refactor/redesign broke many selectors" | selector-drift-recovery | Direct — bulk regen, not per-test healing |
| "What should we test before this release?" | risk-based-testing → release-readiness | Risk first, then checklist |
| "We need Playwright tests" | playwright-automation | Direct |
| "We need Cypress tests" | cypress-automation | Direct |
| "Let an agent explore the app and assert outcomes" | agentic-browser-testing | Direct — goal-driven, no script |
| "Write tests from this PRD/spec/story" | ai-test-generation | Direct |
| "Reproduce this vague bug / turn this report into a failing test" | bug-reproduction | Direct — verified minimal repro + regression test |
| "Review my tests / find test smells" | ai-qa-review | Direct |
| "Our test suite is slow and flaky" | test-reliability → qa-metrics | Diagnose first, measure second |
| "Our suite is bloated / too many redundant tests" | test-suite-curation | Direct — audit + prune with evidence |
| "Manage / author manual test cases (TestRail, Xray, Zephyr, Qase)" | test-case-management | Direct |
| "Set up test reporting" | qa-dashboard → ci-cd-integration | Dashboard design, then CI wiring |
| "Test our API" | api-testing | Direct |
| "Write unit tests / add a mock / coverage threshold" | unit-testing | Direct |
| "Test our database / migration / data integrity" | database-testing | Direct |
| "Set up consumer-driven contract tests (Pact)" | contract-testing | Direct |
| "Where are our coverage gaps?" | coverage-analysis | Direct |
| "Do a structured exploratory / charter-based testing session" | exploratory-testing | Direct |
| "Check accessibility compliance" | accessibility-testing | Direct |
| "Test our payment / Stripe checkout / 3DS / subscription billing" | payment-testing | Direct |
| "Test the signup confirmation / password reset / OTP email flow" | email-testing | Direct |
| "Verify analytics / GA4 / pixel / dataLayer events fire correctly" | analytics-tracking-testing | Direct |
| "We got a bug in prod, understand why" | bug-reproduction → quality-postmortem | Reproduce first, then retro |
| "Classify / triage a batch of CI failures" | ai-bug-triage | Direct — batch failure clustering |
| "We're migrating from Selenium/Cypress" | test-migration | Direct |
| "Performance is degrading" | performance-testing → observability-driven-testing | Measure first, then trace |
| "Set up test data" | test-data-management | Direct |
| "Set up / containerize a test environment or staging" | test-environments | Direct |
| "Add tests to CI" | ci-cd-integration | Direct |
| "Visual changes breaking tests" | visual-testing → test-reliability | Baseline first, then stabilize |
| "We have no idea what quality looks like" | qa-metrics → qa-dashboard | Define KPIs, then surface them |
| "Third-party API is unreliable in tests" | service-virtualization | Direct |
| "Need to test on multiple browsers" | cross-browser-testing | Direct |
| "Need to test on real iOS/Android devices (Appium/Detox/Maestro)" | mobile-testing | Direct |
| "Security audit coming up" | security-testing | Direct |
| "Tests depend on each other and break in random order" | test-data-management → test-reliability | Fix data isolation first |
| "Roll out a feature safely (flags, canary) during release" | testing-in-production | Direct |
| "Schedule probes / SLA checks that run after release" | synthetic-monitoring | Direct |
| "Our QA is only catching bugs after dev, too late" | shift-left-testing → test-planning | Process change first, then plan |
| "We're building an AI/LLM feature and need to test it" | ai-system-testing | Direct |
| "Make this test report sound human / less AI-y" | qa-report-humanizer | Direct |
| "Make sure this is GDPR/EAA/AI Act compliant" | compliance-testing | Direct |
| "Run chaos / failure injection on staging" | chaos-engineering | Direct |
If a description maps to three or more skills with equal weight, one clarifying question narrows it down. Answer it and the router reduces to 1-2 skills.
test-reliability vs selector-drift-recovery — one flaky test healed at runtime →
test-reliability; many selectors broken by a planned UI refactor → selector-drift-recovery.cross-browser-testing vs mobile-testing — browsers/CSS engines → cross-browser-testing;
real devices, Appium/Detox/Maestro, gestures/deep links → mobile-testing.ai-bug-triage vs bug-reproduction — classify/dedupe a batch of CI failures →
ai-bug-triage; reproduce and understand one specific bug → bug-reproduction.qa-start vs qa-project-bootstrap — brand-new project, no QA yet → qa-start;
onboarding a QA engineer to an existing codebase → qa-project-bootstrap.Regenerate this from the category: field of every skills/*/SKILL.md whenever skills change.
| Category | Skills |
|---|---|
| Foundation | qa-project-context, qa-start, qa-do |
| Strategy | test-strategy, test-planning, risk-based-testing, exploratory-testing |
| Automation | playwright-automation, cypress-automation, api-testing, unit-testing, mobile-testing, visual-testing, performance-testing, cross-browser-testing, database-testing, security-testing, selector-drift-recovery |
| Specialized | accessibility-testing, payment-testing, email-testing, analytics-tracking-testing |
| AI-QA | ai-test-generation, ai-bug-triage, bug-reproduction, test-reliability, ai-qa-review, agentic-browser-testing |
| Infrastructure | ci-cd-integration, test-environments, test-data-management, contract-testing, service-virtualization |
| Metrics | qa-metrics, qa-dashboard, coverage-analysis |
| Process | shift-left-testing, qa-project-bootstrap, release-readiness, quality-postmortem, compliance-testing, qa-report-humanizer, test-case-management, test-suite-curation |
| Production | testing-in-production, synthetic-monitoring, observability-driven-testing |
| Knowledge | ai-system-testing, chaos-engineering, test-migration |
ai-bug-triage (batch classification) instead of bug-reproduction (single verified
repro). Fix: match the exact artifact in the request to the skill that names it.skills/ (Core Principle 3)
and fall back to the closest Quick Reference category rather than forcing a wrong match.qa-start; "capture project context" is qa-project-context. qa-do is last resort only.© petrkindlmann, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/qa-do of petrkindlmann/qa-skills.
Open the folder on GitHubat commit b3bb61b
QA Do 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| QA Do this skillpetrkindlmann/qa-skills | 168 | — | ~2.9k | Automated safety check: Pass | MIT | |
| Automated Test Planningtestdouble/han | 279 | — | ~6.7k | Automated safety check: Pass | MIT | |
| Manual Test Planningtestdouble/han | 279 | — | ~2.9k | Automated safety check: Pass | MIT | |
| Dx Devops Test Failures Analyzeforcedotcom/sf-skills | 1.1k | — | ~1.4k | Automated safety check: Pass | Apache-2.0 | |
| Geb Identification Strategyfranklee16/academic-research-skills | 223 | 1 repos | ~1k | Automated safety check: Pass | None | |
| Regex Buildermohitagw15856/pm-claude-skills | 1.4k | — | ~704 | Automated safety check: Pass | MIT |
testdouble/han
Produce a standalone test plan by analyzing code for test coverage gaps and edge cases.
testdouble/han
Produce a plain-language manual test plan from the context supplied to it — an executive summary, a high-level list of named tests, and a detail section per test with the steps a person follows by…
forcedotcom/sf-skills
Analyzes DevOps Center test failures and Code Analyzer violations in plain language — failure category, offending file/class/method/line, rule violated, fix direction, and prioritized improvement…
franklee16/academic-research-skills
A skill your agent uses when the analytical core of a Games and Economic Behavior (GEB) manuscript is the bottleneck — assumptions, theorem statements, proof exposition, and generality for a…
mohitagw15856/pm-claude-skills
Build a regular expression from a plain-English description, or explain an existing one.
OneWave-AI/claude-skills
Debug regex patterns with visual breakdowns, plain English explanations, test case generation, and flavor conversion.
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).
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.
petrkindlmann/qa-skills
Use AI to write NEW test code from specs, PRDs, user stories, code diffs, bug reports, or OpenAPI specs.
petrkindlmann/qa-skills
Test REST and GraphQL APIs with Playwright APIRequestContext, Supertest, or standalone HTTP clients.
petrkindlmann/qa-skills
Design CI/CD pipelines that run test suites. An agent skill from petrkindlmann/qa-skills.
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…
Categories
Routing skill of last resort. An agent skill from petrkindlmann/qa-skills. QA Do is an agent skill from petrkindlmann/qa-skills. Routing skill of last resort.
QA Do fits situations like: : which skill should I use; where do I start; im not sure what to test; any vague QA situation that doesnt map to one skill.
Run `npx skills add petrkindlmann/qa-skills --skill qa-do -a claude-code`. Or copy the skill folder (skills/qa-do in petrkindlmann/qa-skills) into .claude/skills/qa-do in your project. Claude Code loads it when a task matches its description.
Run `npx skills add petrkindlmann/qa-skills --skill qa-do -a codex`. Or copy the skill folder (skills/qa-do in petrkindlmann/qa-skills) into .agents/skills/qa-do in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add petrkindlmann/qa-skills --skill qa-do -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/qa-do, .gemini/skills/qa-do, .github/skills/qa-do and .opencode/skills/qa-do in your project.
SKILL.md names no scripts, command-line tools or credentials: QA Do is instructions for the agent only. Compatibility (from SKILL.md): Cross-tool. Tested with Claude Code, Codex, Cursor, Gemini CLI. Reads the project root; no network access required..
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.
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.
QA Do is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.9k 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.
Skills that share tags, products or a category with QA Do: Automated Test Planning (testdouble/han, 279 stars), Manual Test Planning (testdouble/han, 279 stars), Dx Devops Test Failures Analyze (forcedotcom/sf-skills, 1.1k stars) and Geb Identification Strategy (franklee16/academic-research-skills, 223 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
petrkindlmann (a GitHub user) maintains it in petrkindlmann/qa-skills, which has 168 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.