一键导入
vp-qa
LLM-driven QA agent team generator — research codebase, generate context-aware QA scanning agents
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
LLM-driven QA agent team generator — research codebase, generate context-aware QA scanning agents
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Brainstorm session to collect ideas and decisions for the project
Convert brainstorm sessions into executable artifacts
Autonomous execution loop with control points and recovery
Import and triage tickets from Excel/M365 Online, Google Sheets, or CSV/TSV files — classify as BUG/ENH, accept/decline via AskUserQuestion, write back to source, generate TRIAGE report
Audit state, docs drift, and stack best-practice compliance — works on any project
Create new request: feature, bug fix, enhancement, or brainstorm continuation
| name | vp-qa |
| description | LLM-driven QA agent team generator — research codebase, generate context-aware QA scanning agents |
| version | 1.2.0 |
Output this banner as the first thing on every invocation — before questions, work, or any other output:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
VIEPILOT ► VP-QA v1.2.0 (fw 2.19.0)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
<version_check>
After displaying the greeting banner, run:
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" check-update --silent
If exit code = 1 (update available — new version printed to stdout): Display notice banner before any other output:
┌──────────────────────────────────────────────────────────────────┐
│ ✨ ViePilot {latest_version} available (installed: {current}) │
│ npm i -g viepilot && vp-tools install --target {adapter_id} │
└──────────────────────────────────────────────────────────────────┘
Replace {latest_version} with stdout from the command, {current} with the installed
version, {adapter_id} with the active adapter (claude-code / cursor / antigravity / codex / copilot).
If exit code = 0 or command unavailable: silent, continue.
Suppression rules:
--no-update-check flag on skill invocation → skip this step entirelyconfig.json → update.check: false → skip this step entirelyupdate_check_done session guard)
</version_check><persona_context>
At skill start, run:
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona auto-switch
node "$HOME/.claude/viepilot/bin/vp-tools.cjs" persona context
Inject the output as ## User Persona context before any task execution.
Silent if command unavailable or errors.
</persona_context>
Prompt user conversationally with numbered list options.
Use Claude Code tools: Bash (shell), Read (file), Edit + Write (file write/patch),
Grep (search), Glob (file patterns), LS, WebSearch, WebFetch,
Agent (spawn subagent — multi-level nesting supported)
Interactive: AskUserQuestion (deferred — preload via ToolSearch before first call)
Phase 1 research tools:
Read — parse .viepilot/PROJECT-META.md, STACKS.md, package.json, requirements.txt, etc.Bash — find backend directories, count filesGrep — search for patterns in source codePhase 3 generation tools:
Write — create agent files directly (qa-orchestrator.md, qa-{domain}-scanner.md)
Use Cursor tools: run_terminal_cmd (shell), read_file (read), edit_file (write/edit),
grep_search (search), web_search, codebase_search, list_dir, file_search
Interactive: text list fallback (AskQuestion available in Plan Mode only; Agent Mode = text)
Subagent: /multitask (user command, single-level only — not a callable tool)
MCP limit: 40 tools
Use Antigravity tools: shell (cmd), file_read, file_write, MCP plugins
Interactive: text fallback (TUI-based; no formal AskUserQuestion)
Skill path: .agents/skills/<skill>/SKILL.md (project) or ~/.agents/skills/ (global)
Use Codex tools: container.exec (sandboxed shell), apply_patch (file write), web_search
Interactive: text fallback (TUI Tab/Enter injection)
Config: ~/.codex/config.toml
Use Copilot tools: runCommands (shell), read/readfile (read), edit/editFiles (write),
code_search, find_references
Interactive: askQuestions (main agent only — NOT available in subagents; VS Code issue #293745)
Skill path: .github/agents/<name>.agent.md
<scope_policy>
vp-* skills in ViePilot workflows.non vp-*) are out of framework scope unless user explicitly opts in.vp-* skill.
</scope_policy><implementation_routing_guard>
/vp-qa generates context-aware QA scanning agents for the current project.lib/qa-router.cjs.qa-orchestrator (claude-code) or execute sequential scans (others).
</implementation_routing_guard>LLM-generates-directly approach:
No templates: Each agent's content is fully determined by research output. LLM tailors
scanning instructions to detected backend dirs, framework patterns, and known issues from .viepilot/requests/.
After generation: Generated agents (qa-orchestrator on claude-code or combined scanner on others)
will create .viepilot/requests/BUG-{N}.md for any QA issues found, and prompt user to accept/decline.
Before writing any agent file, understand the project:
.viepilot/PROJECT-META.md, STACKS.md, PROJECT-CONTEXT.md (silent if missing)package.json / pom.xml / go.mod / requirements.txt / Gemfilesrc/ app/ lib/ services/ api/ routes/ (whichever exist).viepilot/requests/ to list known existing issues (avoid duplicate reporting)agents/qa-templates/rules/{stack}.md from project lib (if exists) for stack-specific patterns.viepilot/PROJECT-CONTEXT.md (domains, ## Skills, scope), .viepilot/ROADMAP.md
(planned features + status), .viepilot/ARCHITECTURE.md (components + admin/content/user-data
sections), docs/brainstorm/session-*.md, and architect feature-map.html / notes.md ## features
(whichever exist). List sources found vs absent — drives the qa-feature-coverage-scanner and its
greenfield fallback. Keep token-light: record paths, don't inline contents.--live only): build rows (role, feature, screen, expected) for every user role — from the spec sources above + notes.md ## use_cases (ENH-028
actors) + ## admin (ENH-063 roles). This matrix is the authoritative live-test plan. Also detect
baseUrl / runCommand (from package.json dev/start scripts + common ports; AUQ-ask once if
undetectable) so the live-driver can reach the app.Build research summary:
- projectName: string
- stack: (node / python / java / go / ruby / etc.)
- stackVersion: string (from version file)
- backendDirs: string[] (actual dirs found in project)
- detectedPatterns: string[] (anti-patterns spotted in sampling)
- recommendedDomains: string[] (scan areas relevant to this project)
- recommendedAgentCount: number (2 for small, 4-5 for large/complex)
- knownIssues: string[] (from .viepilot/requests/, avoid duplicates)
- specSources: string[] (declared-feature sources found — PROJECT-CONTEXT/ROADMAP/ARCHITECTURE/brainstorm/feature-map; empty ⇒ greenfield/thin-spec → coverage scanner runs fallback mode)
- roleMatrix: array (ENH-114 --live) — rows { role, feature, screen, expected }
- baseUrl / runCommand: string (ENH-114 --live) — how to reach the running app (detected or AUQ-asked)
Use lib/qa-router.cjs to resolve adapter-specific output paths:
- claude-code → .claude/agents/
- cursor-agent → .cursor/rules/
- codex → AGENTS.md (single file, append mode)
- antigravity → .agents/skills/
- copilot → .github/agents/
Call or reference lib/qa-router.cjs to map the current adapter to output directory.
Based on research summary, generate agent content and write using Write tool.
For claude-code (multi-agent):
Write qa-orchestrator.md — orchestrator that fan-outs to specialist subagents
qa-feature-coverage-scanner)qa-feature-coverage-scanner output in a SEPARATE
"Feature Gaps" group, distinct from severity-grouped bugs (one orchestrator, one AUQ session).viepilot/requests/BUG-{N}.md for accepted defects; FEAT-{N}.md / ENH-{N}.md for
accepted feature gaps (ENH-113 — see behavior section for scoring + classification).viepilot/qa/feature-coverage-report.md when the coverage scanner ranWrite qa-{domain}-scanner.md for each recommended domain (e.g., qa-security-scanner, qa-performance-scanner)
Write qa-feature-coverage-scanner.md — product completeness / spec-gap auditor (ENH-113)
specSources), classify
implemented | partial | missing with file evidence (or absence) from backendDirs.specSources is empty/thin, skip the spec→code direction
and run ONLY the out-of-spec checklist; the report MUST state it ran in fallback mode; never
return a silent-empty result; do NOT hallucinate an inferred spec..viepilot/requests/ or .viepilot/ROADMAP.md.{ title, kind: feature|enhancement, domain, source: spec-gap|out-of-spec, importance, rationale, evidence } — returned to the orchestrator
(importance scoring + request creation handled by the orchestrator, see its behavior section).Each file has correct YAML frontmatter (name, description, model, maxTurns, tools)
Content NOT generic — references specific dirs, patterns, concerns found during Phase 1
For other adapters (single-file mode):
--live mode only)Active only when /vp-qa --live (or --e2e) is used. Generates a runtime QA team that exercises
the running app per role and judges the real UI. Composes with ENH-113 (adds a role axis).
1. Prerequisite gate + graceful degradation
vercel-labs/agent-browser installed AND a runnable app (baseUrl / runCommand from
research). If either is missing → do not fail silently: report the specific blocker and
degrade to --focus coverage (ENH-113 static coverage), stating clearly it ran static-only.2. role-seeder step — seed one user per role so the driver can log in as each:
npm run seed,
prisma db seed, Rails db:seed, factory libs) → (2) public signup / admin API → (3) direct DB
insert (last resort).qa+{role}@example.test), reversible (record seeded
IDs → cleanup step), non-prod guarded (refuse if baseUrl/env looks like production).3. live-driver — reuse agents/claude-code/browser-audit-agent.md + lib/audit/browser-runner.cjs
(navigate / login / screenshot ops — do NOT rebuild browser infra). For each seeded role:
roleMatrix rows → capture a screenshot per screen/state to
.viepilot/qa/screenshots/{role}/{screen}.png.4. qa-design-reviewer agent — the Design-QA reviewer (multimodal):
Combined single-file mode (non-claude-code adapters): append the --live procedure (seed →
drive → screenshot → design-review) to the combined file — same steps, run sequentially — consistent
with the existing combined-mode pattern.
After writing files, show what was generated:
Generated {N} agent files in {output_dir}:
- qa-orchestrator.md (coordinates scanning across domains)
- qa-security-scanner.md (scans for security concerns)
- qa-performance-scanner.md (scans for performance concerns)
... (other domain files)
AskUserQuestion:
question: "What would you like to do next?"
options:
- label: "Run QA scan now"
description: "Invoke qa-orchestrator immediately to start scanning"
- label: "Done for now"
description: "Exit — agents are ready in {output_dir}"
On selection:
Text fallback (Cursor/Codex/Copilot/Antigravity):
QA agents generated in {output_dir}
Next actions:
1. Review generated agent files
2. Run qa-orchestrator to start the QA scan
3. Adjust scanning domains as needed
When user runs the generated qa-orchestrator:
qa-feature-coverage-scanner.viepilot/requests/BUG-{N}.md for each accepted issueFeature Gaps handling (ENH-113) — separate group, same orchestrator/AUQ session: 7. Score each feature gap by importance = impact (core/domain/governance/nice-to-have) × spec-status (declared-missing > out-of-spec-standard > optional) → critical/high/medium/low. Suggested matrix:
.viepilot/requests/FEAT-{N}.md; missing part
of an existing feature → .viepilot/requests/ENH-{N}.md (standard vp-request schema — NOT BUG-{N}).
Dedupe against existing .viepilot/requests/ + ROADMAP before creating..viepilot/qa/feature-coverage-report.md — spec→code coverage matrix + gap list + (if it
ran without specs) an explicit fallback-mode note + an optional one-line coverage score./vp-evolve → /vp-auto (same lane, ENH-021).Live QA handling (ENH-114) — --live mode, aggregated in the same orchestrator/AUQ session:
12. Collect the live-driver functional results + qa-design-reviewer verdicts (per-screen + cross-screen).
13. Functional failures (route unreachable, form/nav broken) → group by severity → AUQ →
.viepilot/requests/BUG-{N}.md (same defect flow as steps 3–6).
14. UI-adjustment proposals → AUQ accept/decline per importance group (headers ≤12 chars);
on accept classify: a missing role-screen (feature absent for a role) → FEAT-{N}.md; a fix to
an existing screen → ENH-{N}.md. Dedupe against .viepilot/requests/ + ROADMAP.
15. Write .viepilot/qa/live-qa-report.md — per-role coverage matrix + screenshot links +
Design-QA verdicts (per-screen + cross-screen) + a fallback-mode note if it degraded to static.
16. Final AskUserQuestion: "N issues + M UI proposals logged. Run /vp-evolve to plan?" → /vp-evolve → /vp-auto.
Boundary — vp-qa --live vs vp-audit --visual (ENH-114): vp-audit --visual audits a running
app for regression vs a saved baseline (visual diff, a11y). vp-qa --live judges correctness —
is each role's intended feature present/usable and is the UI good per the vp-design ENH-102 aesthetic
framework — with no baseline. Both reuse browser-audit-agent / browser-runner.cjs; they do not duplicate it.
After generation, use AskUserQuestion on Claude Code (terminal) for Phase 4 prompt.
| Adapter | Interactive Prompts | Notes |
|---|---|---|
| Claude Code (terminal) | ✅ AskUserQuestion — REQUIRED at end of Phase 3 | Preload schema via ToolSearch first |
| Cursor / Codex / Copilot / Antigravity | ❌ Text fallback | Plain numbered list for next actions |
Claude Code (terminal) — AUQ preload required (ENH-059):
Before the first interactive prompt (Phase 4), call ToolSearch with query: "select:AskUserQuestion" to load the deferred tool schema. Only after ToolSearch succeeds can AskUserQuestion be invoked. If ToolSearch returns an error, fall back to plain-text numbered list for that session.
<success_criteria>
qa-feature-coverage-scanner; orchestrator creates FEAT-{N}/ENH-{N} for accepted feature gaps and writes .viepilot/qa/feature-coverage-report.md (ENH-113)--live mode (ENH-114): seeds roles + drives app (reusing browser-audit-agent) + qa-design-reviewer; orchestrator emits BUG (functional) / ENH-FEAT (UI) and writes .viepilot/qa/live-qa-report.md; degrades to static coverage if prereqs missing
</success_criteria>