From QA My App
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).
How this skill is triggered — by the user, by Claude, or both
Slash command
/qa-catalog:run <task-id>When to use
Use to execute a single QA task, test one specific page or user flow, or re-run a previously failing test case in the browser. Trigger phrases include "run task", "test this page", "run T01", "execute a test", "run one qa test", and "test the customers page".
<task-id>This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
- Task id: `$ARGUMENTS`
$ARGUMENTSls QA-tests/tasks/$ARGUMENTS*.md 2>/dev/null | head -1test -f QA-tests/catalog.json && echo YES || echo NO| Setting | Value |
|---|---|
| Dev URL | ${user_config.dev_url} |
| Browser channel | ${user_config.browser_channel} |
| Headless | ${user_config.browser_headless} |
| Settle ms | ${user_config.settle_ms} |
| Auth mode | ${user_config.auth_mode} |
Locate the task file matching $ARGUMENTS. If none found, list available task ids and stop.
runId as a UTC ISO-8601 timestamp with : replaced by - (example: 2026-05-28T14-22-11Z).runDir = QA-tests/results/runs/<runId>/<taskId> and create it (mkdir -p).QA-tests/results/runs/<runId>/run.json:
{
"runId": "<runId>",
"startedAt": "<ISO-8601>",
"filter": "$ARGUMENTS",
"settingsSnapshot": { ...effective user_config values... },
"tasks": [{ "taskId": "<id>", "taskFile": "<path>", "route": "<route>" }]
}
Resolve per-role credentials first. When auth_mode is per-role, load the credential map (secrets interpolated from env vars):
node "${CLAUDE_PLUGIN_ROOT}/scripts/auth-resolve.mjs" --json
Use the returned roles object as credentialsByRole. If the file is absent (present: false) or auth_mode is not per-role, omit credentialsByRole and let the runner fall back to the single shared credential below. Never print resolved passwords back to the user.
Spawn the project-level agent qa-test-runner with this payload:
{
"taskId": "<resolved id>",
"taskFile": "<repo-relative task file>",
"runDir": "<runDir>",
"runId": "<runId>",
"devUrl": "${user_config.dev_url}",
"settings": {
"browserChannel": "${user_config.browser_channel}",
"headless": ${user_config.browser_headless},
"settleMs": ${user_config.settle_ms},
"authMode": "${user_config.auth_mode}",
"defaultRole": "${user_config.default_role}",
"credentials": { "username": "${user_config.auth_username}", "password": "${user_config.auth_password}" },
"credentialsByRole": { ...roles object from auth-resolve.mjs, or omit if not per-role... },
"storageStatePath": "${user_config.auth_storage_state_path}"
}
}
The runner writes <runDir>/result.md and embeds every screenshot inline.
Run, in order:
node "${CLAUDE_PLUGIN_ROOT}/scripts/results-index.mjs" append "QA-tests/results/runs/<runId>"
node "${CLAUDE_PLUGIN_ROOT}/scripts/render-report.mjs" "QA-tests/results/runs/<runId>"
The first updates QA-tests/results/history.json, QA-tests/results/latest.json, and QA-tests/results/by-task/<taskId>/latest.json. The second writes QA-tests/results/runs/<runId>/report.html — a self-contained HTML dashboard for the run (single-task runs render with auto-refresh off since the work is already done by the time we get here).
Print the runner's single-line JSON summary plus the absolute paths to both result.md and report.html.
See agents/qa-test-runner.md for the full result.md template. Highlights:
| Result | PASS / FAIL | machine-parseable header table.### TC-NN: section per test case from the task file. — never a table.## Defects Found section using DEF-<slug> ids.npx claudepluginhub elwizard33/qa-my-app --plugin qa-catalogGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.