qa
Full QA session — works on anything. Browser apps (pass a URL), code changes (--code or file paths), scripts, artifacts, workspace output. Builds inventory from RAG, writes a risk-prioritized test plan, executes with evidence, and reports what was tested AND what was not
Install / Use
npx skills add MikahNiehaus/ClaudeBoostInstalls into whichever agent you are using.
Claude Commands
Claude Code slash commands
Quality Score
Category
MarketingSupported Platforms
Skill content
View source on GitHubargument-hint: [url | --code | file-path | workspace-id | "description of what to QA"] [scope — auth | crud | nav | errors | responsive | all] [--no-debug] [--fresh] description: Full QA session — works on anything. Browser apps (pass a URL), code changes (--code or file paths), scripts, artifacts, workspace output. Builds inventory from RAG, writes a risk-prioritized test plan, executes with evidence, and reports what was tested AND what was not allowed-tools: Read, Write, Edit, Bash, Glob, Grep, Agent, mcp__playwright__browser_navigate, mcp__playwright__browser_snapshot, mcp__playwright__browser_click, mcp__playwright__browser_type, mcp__playwright__browser_take_screenshot, mcp__playwright__browser_evaluate, mcp__playwright__browser_fill_form, mcp__playwright__browser_select_option, mcp__playwright__browser_wait_for, mcp__playwright__browser_press_key, mcp__playwright__browser_console_messages, mcp__playwright__browser_resize, mcp__playwright__browser_close, mcp__mcp-debugger__create_debug_session, mcp__mcp-debugger__list_debug_sessions, mcp__mcp-debugger__list_supported_languages, mcp__mcp-debugger__set_breakpoint, mcp__mcp-debugger__start_debugging, mcp__mcp-debugger__attach_to_process, mcp__mcp-debugger__detach_from_process, mcp__mcp-debugger__get_stack_trace, mcp__mcp-debugger__list_threads, mcp__mcp-debugger__get_scopes, mcp__mcp-debugger__get_variables, mcp__mcp-debugger__get_local_variables, mcp__mcp-debugger__step_over, mcp__mcp-debugger__step_into, mcp__mcp-debugger__step_out, mcp__mcp-debugger__continue_execution, mcp__mcp-debugger__pause_execution, mcp__mcp-debugger__evaluate_expression, mcp__mcp-debugger__get_source_context, mcp__mcp-debugger__close_debug_session, mcp__mcp-debugger__redefine_classes, mcp__test-coverage__coverage_summary, mcp__test-coverage__coverage_file_summary, mcp__test-coverage__start_recording, mcp__test-coverage__get_diff_since_start, mcp__chrome-devtools__navigate_page, mcp__chrome-devtools__new_page, mcp__chrome-devtools__list_pages, mcp__chrome-devtools__select_page, mcp__chrome-devtools__close_page, mcp__chrome-devtools__wait_for, mcp__chrome-devtools__evaluate_script, mcp__chrome-devtools__list_console_messages, mcp__chrome-devtools__get_console_message, mcp__chrome-devtools__list_network_requests, mcp__chrome-devtools__get_network_request, mcp__chrome-devtools__performance_start_trace, mcp__chrome-devtools__performance_stop_trace, mcp__chrome-devtools__performance_analyze_insight, mcp__chrome-devtools__take_screenshot, mcp__chrome-devtools__take_snapshot, mcp__chrome-devtools__lighthouse_audit, mcp__mdb__debugger_status, mcp__mdb__debugger_start, mcp__mdb__debugger_terminate, mcp__mdb__debugger_list_sessions, mcp__mdb__debugger_command, mcp__mdb__lldb_start, mcp__mdb__lldb_terminate, mcp__mdb__lldb_list_sessions, mcp__mdb__lldb_command, mcp__mdb__gdb_start, mcp__mdb__gdb_terminate, mcp__mdb__gdb_list_sessions, mcp__mdb__gdb_command
/qa — QA Session
Arguments: $ARGUMENTS
Works on anything — browser apps, API endpoints, Python scripts, JS modules, bash hooks, workspace artifacts, recent git changes, or any description of what to test. No URL required.
Phase 0: Load RAG Context (MANDATORY FIRST ACTION)
Workspace detection (run before any other action):
Run get-active-workspace.py to get the active workspace for this Claude
instance — matches the blue "WS XXXX" status bar (per-instance, not the
stale shared global file):
"${CLAUDEBOOST_PYTHON}" "${CLAUDEBOOST_HOME}/scripts/get-active-workspace.py"
Store project_path as PROJECT_PATH and workspace_path as WORKSPACE_PATH.
If PROJECT_PATH is empty: fall back to current working directory (pwd).
Collision check: if your context or memory references a different workspace
than what the script returned, print:
[qa] Conflict: status bar shows <X>, context/memory says <Y>. Which workspace should I use?
Wait for the user's answer — the user is always the source of truth.
If WORKSPACE_PATH is empty: note it and continue.
Include workspace_path="<WORKSPACE_PATH>" in ALL agent spawn prompts and /context calls.
Call POST http://127.0.0.1:8612/context with agent="workflow-agent", task_description="QA session planning and execution: app inventory, risk-based test plan, browser testing", max_tokens=3000.
This loads relevant knowledge before any work begins. If POST http://127.0.0.1:8612/context fails: stop and tell the user "RAG is not connected. Run /boost before using this skill."
0b — Verify project is indexed (required for codebase search to work):
Detect the project path:
- Read
$CLAUDEBOOST_HOME/state/project-workspaces.json— use the entry keyed by the current working directory to get the active workspace ID, then look upproject_pathinworkspaces.json. Fall back to current working directory if the file doesn't exist or has no entry for this directory.
Call GET http://127.0.0.1:8613/status and check indexed_projects for the detected path.
- Indexed: note file/chunk counts and continue.
- Not indexed: run
Skill(skill="index-project", args="<project_path>")immediately. Do not continue until indexing completes. - RAG offline: stop and tell the user to run
/ragfirst.
Initialize
0a — Parse arguments.
Strip flags from $ARGUMENTS before parsing positional tokens:
--no-debugpresent → setNO_DEBUG = true(skip debugger pre-flight entirely in Phase 3 and G4d)--freshpresent → force a new workspace (already handled in 0c)--codepresent → setCODE_FLAG = true(used in 0a-i to set MODE = general)- Remaining tokens after stripping all flags: first =
TARGET_URL, second =SCOPE(valid:auth,crud,nav,errors,responsive,all; defaultallif omitted)
0a-i — Set MODE based on parsed arguments.
| Condition | MODE | GENERAL_TARGET |
|-----------|------|----------------|
| TARGET_URL starts with http:// or https:// | browser | — |
| CODE_FLAG = true (from --code) | general | Recent git changes (git diff HEAD~1) |
| TARGET_URL matches [a-z0-9]+-\d{4}-\d{2}-\d{2} (workspace ID pattern) | general | Files in that workspace |
| TARGET_URL contains / or \ or starts with . (file path) | general | That file or directory |
| TARGET_URL ends with .py, .js, .ts, .sh, .rb, .go, .cs, .rs, or other recognized code extension | general | That file (even without a path prefix) |
| TARGET_URL is non-empty but none of the above | general | Treat as natural language description — resolve to files, scripts, or artifacts |
| TARGET_URL is empty | detect | Run Steps A–D to find a server |
Natural language target resolution (applies when MODE = general and target is a description):
- "these three Python scripts" / "the auth module" / "my hook scripts" → use RAG to find matching files, ask user to confirm before proceeding
- "recent changes" / "what I just wrote" →
git diff HEAD~1 --name-only - "the workspace output" / "the plan" → files in
$WORKSPACE_ABS/ - Anything else → print the resolved target and ask "Is this what you want to QA?" before starting
If MODE = general: skip Steps A–D, skip Phase 0a-iii (ticket tracing), skip Phase 0b (env check), skip Phase 0g (app inventory). Proceed through Phase 0c–0f (workspace, RAG load, index), then jump to General Mode section at the bottom of this file.
If MODE = detect and Steps A–C find a running server: set MODE = browser and TARGET_URL to the detected address.
If MODE = detect and no server found (Step D): ask: "No running server found. Paste a URL for browser testing, or describe what to QA (file, workspace ID, or --code for recent git changes)." Set MODE based on the reply.
0a-ii — Auto-detect TARGET_URL if not provided.
If TARGET_URL is empty after parsing, do NOT ask the user yet. Work through these steps in order and stop at the first hit:
Step A — Check active workspace context.md for a Dev URL: field:
Read $WORKSPACE_ABS/context.md (if it exists) and look for a line matching Dev URL: <url>. If found, set TARGET_URL to that value. Skip steps B–D.
Step B — Check if a dev server is already running on a common port:
for PORT in 3000 5000 5173 7000 8080 4200 8000; do
curl -s --max-time 1 -o /dev/null -w "%{http_code}" "http://localhost:${PORT}/" 2>/dev/null | grep -qE "^[23]" && echo "http://localhost:${PORT}" && break
done
If a port responds with a 2xx or 3xx: set TARGET_URL = http://localhost:<PORT>. Print: "Auto-detected running server at $TARGET_URL." Skip steps C–D.
Step C — Read project config for a start command:
Check in this order (stop at first file found):
$WORKSPACE_ROOT/package.json→ readscripts.dev,scripts.start,scripts.serve— pick first defined$WORKSPACE_ROOT/Properties/launchSettings.json→ readprofiles[*].applicationUrl(ASP.NET)$WORKSPACE_ROOT/.envor.env.local→ look forPORT=orVITE_PORT=
If a start command is found, run it in the background:
cd "$WORKSPACE_ROOT" && <start-command> &
SERVER_PID=$!
Then poll for up to 15 seconds (check every 2s) for any of the standard ports to respond. When one responds, set TARGET_URL to that URL. Print: "Started dev server (<start-command>) → $TARGET_URL."
If the command is found but no port responds within 15 seconds: print "Dev server started but did not respond on any standard port. Check the terminal for errors." Set TARGET_URL = "" and fall through to Step D.
Step D — Ask the user (only if all auto-detect paths failed):
No running dev server found. What do you want to QA?
Browser testing — paste a URL (e.g. http://localhost:3000)
Code / scripts — say what to test (e.g. "my_service.py", "the hook scripts", "--code" for recent git changes)
Workspace output — paste a workspace ID or say "the plan" / "the report"
Wait for the user's response. Set MODE and TARGET based on what they provide:
- URL →
browser - File name, path, description of scripts/code, or
--code→general
0a-ii-b — Visual feedback loop (browser mode only).
When MODE = browser, apply this loop for every UI-related test case:
browser_navigateto the route under testbrowser_snapshot— read the accessibility and text state first, before any screenshotbrowser_take_screenshot— capture the visual state- Note findings with pixel precise specifics before proposing any fix (e.g. "gap between cards is 8px, design requires 24px")
browser_resizeat 375px, 768px, 1280px for any responsive test casebrowser_console_messagesafter each test case — show the output, never assume silent
Confirm with the user before implementing any visual change found in QA. Verify with a before/after screenshot pair after any fix is applied.
0a-iii — Ticket tracing (ask if not provided).
If the user is working from a ticket (e.g., ASC-1175, FEAT-42), ask:
Which ticket is this testing? (Enter ID or 'none')
What was the original bug / broken behavior?
Record the answers as TICKET_ID and ORIGINAL_BUG_DESC. These are used in Phase 2 to ensure at least one TC directly targets the broken scenario — not just the display side of the fix.
If the user says 'none', skip ticket tracing. Do not block on this.
0b — Environment hard-stop (check BEFORE any browser action).
URL pattern check (static):
If TARGET_URL contains any of: staging, stg, stage, prod, prd, production
OR ends with: .azurewebsites.net, .herokuapp.com, .vercel.app, .netlify.app, .azure.com, .cloudapp.net, .onmicrosoft.com
→ STOP immediately. Print: "Cannot run QA sessions against staging/production URL." No exceptions, no override.
Note: This is a static check on the URL you were given. A live environment probe happens in Phase 1a AFTER navigation, which catches OAuth redirects and hidden prod environments.
**0c — Derive TASK_I
Truncated for display — read the full file on GitHub.
Related Skills
momen-cursurrules-prompt-file
40.6kCursor rules for building custom frontends with Momen.app as headless BaaS with GraphQL API, actionflows, AI agents, and Stripe integration.
semiotic-react-dataviz-cursorrules-prompt-file
40.6kCursor rules for Semiotic data visualization library with 30+ chart types, MCP server, and AI-assisted chart generation.
claude-mem
90.8kPersistent Context Across Sessions for Every Agent – Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode + More
Understand-Anything
79.4kGraphs that teach > graphs that impress. Turn any code into an interactive knowledge graph you can explore, search, and ask questions about. Works with Claude Code, Codex, Cursor, Copilot, Gemini CLI, and more.
Security Score
Audited on Aug 9, 2026
