By elwizard33
End-to-end QA testing as a Claude Code plugin. Auto-discovers your stack and routes, drives every page in a real browser via the bundled Playwright MCP, runs the whole platform in parallel test-runner subagents, verifies each result against a schema, and files defects to GitHub/Jira/Azure DevOps if connected. No test code to write — the plugin understands your app from source.
Statically discovers every user-facing route in the project via filesystem + AST inspection. Returns a JSON array of routes with a rich schema (auth, roles, guards, HTTP methods, layouts, dynamic params). Framework-aware (Next.js app/pages, Vite + React Router, Angular, SvelteKit, Vue Router, Remix, Blazor .razor, plain HTML).
Converts a Page Analysis JSON into one or more deep, executable QA task markdown files. Output covers happy path + every validation + every modal + every button + edge cases — never smoke tests. Uses an enforced template so /qa-catalog:run can parse and execute the task deterministically.
Given a drift report (stale + removed + added source files), produces a minimal reconciliation plan describing which routes to rescan, which tasks to delete, and whether new route discovery is needed. Never touches the browser — pure planning.
Bootstrap a fresh QA-tests/ folder in this project. Auto-detects the framework, discovers every route, loads each page in a real browser, inventories every form/button/modal/role guard, and writes deep test tasks. Use on a new project or to re-baseline the catalog. Optional argument is the dev server URL (defaults to the configured value, then to the framework-detected default).
Run end-to-end tests for some or all pages in this app. Asks the user which routes/tasks to cover (or accepts a filter argument), builds a persistent task-queue index for the run, dispatches batches of test-runner subagents in parallel, verifies each returned result.md against the schema, retries verification failures once, then writes a final cross-task report. Use after a sprint, after a dependency bump, or before a release.
Execute a single QA task end-to-end via the qa-test-runner subagent (project-level, installed by /qa-catalog:init). Writes a date-stamped result.md with per-TC pass/fail, embedded screenshots, console errors, and network failures, then appends to QA-tests/results/history.json. Argument is the task id (e.g. T03 or T03-customers-create).
Force a full re-scan of every route and rewrite every task, regardless of fingerprints. Use when the catalog drifted too far or when you change the test-author template or task depth. Destructive — overwrites QA-tests/tasks/ after backing them up.
Print a one-shot health + inventory snapshot of the QA catalog in this project — browser-agent install status, catalog framework/route/task counts, configured issue-tracker integrations, drift vs. source, and the most recent run's pass/fail/blocked totals. Read-only; never modifies the catalog. Use to verify an install or get your bearings before a run.
Modifies files
Hook triggers on file write and edit operations
Uses power tools
Uses Bash, Write, or Edit tools
Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimBased on adoption, maintenance, documentation, and repository signals. Not a security audit or endorsement.
This plugin requires configuration values that are prompted when the plugin is enabled. Sensitive values are stored in your system keychain.
dev_urlBase URL where the app under test is running (e.g. http://localhost:3000). Used by every browser-driving subagent. Leave blank to auto-detect from the framework manifest at scan time.
${user_config.dev_url}auth_modeHow protected routes are authenticated: none, shared-credentials (use the single username/password below for every protected route), storage-state (reuse a Playwright storageState JSON from auth_storage_state_path), per-role (look up the task's required role in the gitignored QA-tests/.qa-catalog/auth.local.json credential map — supports a different login per role).
${user_config.auth_mode}settle_msMilliseconds the page-analyzer waits after navigation before snapshotting. Increase for slow SPAs.
${user_config.settle_ms}task_depthdeep (default): exhaustive validation matrix + modal + button coverage. standard: happy path + key edge cases. smoke: title + first form only. Affects the test-author's enforced template.
${user_config.task_depth}default_roleRole to assume when a route doesn't specify one. Tasks reference this in Preconditions.
${user_config.default_role}auth_passwordPassword used when auth_mode is shared-credentials. Stored in the OS keychain.
${user_config.auth_password}auth_usernameUsername used when auth_mode is shared-credentials.
${user_config.auth_username}exclude_globsGlobs to skip during route discovery (e.g. **/storybook/**, **/__tests__/**).
${user_config.exclude_globs}browser_engineWhich browser-automation MCP the project-level qa-page-analyzer / qa-test-runner agents drive: playwright (default, full screenshot/console/network fidelity, all browsers), chrome-devtools (Chrome-only, DevTools-grade performance + network insight), or stagehand (Browserbase cloud browser, AI-driven act/observe/extract — experimental). /qa-catalog:init writes the matching mcpServers block into .claude/agents/. See docs/browsers/.
${user_config.browser_engine}available_rolesRoles the app supports (e.g. admin, manager, user, guest). The route-discoverer cross-references these against route guards.
${user_config.available_roles}browser_channelFor the playwright / chrome-devtools engines, which browser to launch: chromium (default), chrome, msedge, firefox, webkit. Ignored by the stagehand (cloud) engine.
${user_config.browser_channel}parallel_agentsMaximum number of page-analyzer subagents the orchestrator runs concurrently during /qa-catalog:init and /qa-catalog:scan. Each agent uses its own isolated Playwright browser context. Set to 1 to serialize. Recommended: 2-4 on a laptop, 4-8 on a workstation.
${user_config.parallel_agents}browser_headlessRun the Playwright browser without a visible window. Set false to watch agents interact with the app while they analyze.
${user_config.browser_headless}max_tasks_per_routeUpper bound the test-author enforces. Default 6.
${user_config.max_tasks_per_route}auth_credentials_filePath to the per-role credential map used when auth_mode is per-role. Defaults to QA-tests/.qa-catalog/auth.local.json (scaffolded by /qa-catalog:init). This file is gitignored; it holds non-secret usernames + storageState paths and references passwords via ${ENV_VAR} so no plaintext secret is ever written to disk. Resolved by scripts/auth-resolve.mjs.
${user_config.auth_credentials_file}parallel_test_authorsMaximum concurrent test-author subagents (pure markdown generation, no browser). Safe to keep high.
${user_config.parallel_test_authors}parallel_test_runnersMaximum concurrent test-runner subagents the orchestrator runs during /qa-catalog:run-all. Each runner drives its own isolated Playwright browser context against the shared MCP server. Set to 1 to serialize a full-platform regression. Recommended: 2-4 on a laptop, 4-8 on a workstation. The shared dev server is the practical ceiling.
${user_config.parallel_test_runners}auth_storage_state_pathPath to a Playwright storageState JSON file (cookies + localStorage). Used when auth_mode is storage-state.
${user_config.auth_storage_state_path}
End-to-end QA testing as a Claude Code plugin. Drop it into any web-app repo and Claude detects the framework, walks every page in a real browser, drives every form / modal / button / role gate, runs the whole platform in parallel, and reports back with screenshots, console logs, network traces, and filed defects. No test code to write, no fixtures to wire — the plugin understands your app from the source.
At a glance: 6 slash commands · 5 subagents · pluggable browser engine (Playwright default · Chrome DevTools · Stagehand/Browserbase) · 9 supported frameworks · 3 issue-tracker integrations (GitHub / Jira / Azure DevOps) · strict-validated by CI on every push · zero test code to write.
📖 Full documentation: elwizard33.github.io/qa-my-app — install guide, command reference, architecture, browser engines, and publishing.
/qa-catalog:init does · Issue trackersparallel_test_runners: 6.QA-tests/results/runs/<UTC-timestamp>/ with a schema-rigid result.md per task, embedded screenshots, and an append-only history.json. Diff runs, find regressions by task id, ship a PR with the failing screenshots embedded.report.html (auto-refresh while in flight, refresh disabled once complete). Double-click to open in a browser and watch the queue drain in real time — no server, no install, no dependencies.npx claudepluginhub elwizard33/qa-my-app --plugin qa-catalogHarness-native ECC operator layer - 67 agents, 271 skills, 92 legacy command shims, reusable hooks, rules, selective install profiles, and production-ready workflows for Claude Code, Codex, OpenCode, Cursor, and related agent harnesses
Comprehensive skill pack with 66 specialized skills for full-stack developers: 12 language experts (Python, TypeScript, Go, Rust, C++, Swift, Kotlin, C#, PHP, Java, SQL, JavaScript), 10 backend frameworks, 6 frontend/mobile, plus infrastructure, DevOps, security, and testing. Features progressive disclosure architecture for 50% faster loading.
Comprehensive feature development workflow with specialized agents for codebase exploration, architecture design, and quality review
Reliable automation, in-depth debugging, and performance analysis in Chrome using Chrome DevTools and Puppeteer
Access thousands of AI prompts and skills directly in your AI coding assistant. Search prompts, discover skills, save your own, and improve prompts with AI.
Develop, test, build, and deploy Godot 4.x games with Claude Code. Includes GdUnit4 testing, web/desktop exports, CI/CD pipelines, and deployment to Vercel/GitHub Pages/itch.io.