Subagents
| Agent | Scope | Purpose | Tools |
|---|---|---|---|
| qa-catalog:route-discoverer | plugin | Static route discovery + rich metadata (auth, roles, guards, HTTP methods, dynamic params, layout chain, feature flags). | Read, Grep, Glob, Bash |
| qa-page-analyzer | project | Browser-driving deep element inventory per route. Each spawn starts its own browser process — true isolation, no shared state between parallel runs. | inherits all except Write, Edit, MultiEdit, and destructive Bash patterns |
| qa-catalog:test-author | plugin | Pure markdown — converts page analysis into task files using the enforced template. | Read, Write, Edit, Glob |
| qa-test-runner | project | Browser-driving execution of one task → date-stamped result.md with embedded screenshots. Designed for parallel fan-out, one isolated browser per runner. | inherits all except destructive Bash patterns |
| qa-catalog:catalog-reconciler | plugin | Plans add/update/delete for catalog.json from the drift report. | Read, Grep, Glob |
All agents are model: inherit — they use whatever model your session is on. No model is hardcoded.
Token efficiency (by design)
Section titled “Token efficiency (by design)”Heavy work is isolated so it never floods the main conversation:
- Each browser agent runs in its own context window and returns only a one-line JSON summary.
- Verbose verification is offloaded to the
verify-result.mjs/catalog-diff.mjsNode scripts — a hook, not the model, does the parsing. - The deterministic
qa-test-runneruseseffort: mediumso extended-thinking tokens aren’t spent re-deriving a pre-authored task — multiplied across every parallel runner. Reasoning-heavy analysis (qa-page-analyzer) keepseffort: high. - Slash skills use
disable-model-invocation: true, so their descriptions stay out of context until you invoke them.