agentleFS
MahmulPMahmulP/qa-kit/skills/qa-explore-app/SKILL.md

qa-explore-app

Skill0 starsChanged 18 days agoMITView on GitHub

Learn a web application for QA - read its file structure, routes/menus, page components, validation schemas, API contracts, permissions, and existing E2E tests, optionally walk the running app in a browser, then record the knowledge in .qa-kit/memory so later test design starts from facts. Use when onboarding a project, before testing an unfamiliar module or page, or when memory says a knowledge section is still empty.

The file

We split this skill into the rules it gives an agent

6 rules. About 0 are common, 3 are distinctive, and 3 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈3

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 3

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Read every QA-related doc the scan lists (agent instruction files, rule folders, docs/ guides about tests, the e2e README).

    line 30
  2. Very specific:

    Write the folder layout rule (for example "one folder per page, mirroring the sidebar menu" or "one spec per user journey") into …

    line 45
  3. Distinctive:

    When a code-graph tool or a docs MCP is available, prefer it for "where is X used" questions.

    line 65
  4. Distinctive:

    Use a browser tool (Playwright MCP, Chrome DevTools MCP, the harness browser) on a non-production URL.

    line 69
  5. Distinctive:

    Never create, edit, or delete data while exploring.

    line 77
  6. Very specific:

    Keep entries short, specific, with file:line evidence.

    line 93

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Explore the app and remember it

Goal: after this skill, .qa-kit/memory/app.md, conventions.md, and glossary.md describe the project well enough that another agent can design and write tests without re-reading everything. Exploration is read-only: do not change app code or tests here.

qa-kit assumes no folder layout, naming scheme, language, or team structure. Everything project-specific is either detected by scan into .qa-kit/config.json or written by you into the memory files.

1. Start from what is already known

qa-kit status                        # or qa_status
qa-kit scan                          # refresh structure: stack, e2e layout, routes, rule docs
qa-kit memory search "<module>"      # earlier findings for this area (project + global)

scan writes .qa-kit/index/structure.json (routes with a heuristic covered flag, specs, fixtures, page objects, tags, scripts, env var names, rule docs, test areas). Read it instead of re-walking the tree.

2. Read the project's own rules, then confirm the detected conventions

Read every QA-related doc the scan lists (agent instruction files, rule folders, docs/** guides about tests, the e2e README). Summarize the rules that constrain test writing into conventions.md, each with a link to its source. Do not copy whole documents; link them.

Then check what the scan detected and correct what is wrong; runs, the index, and the hooks depend on it:

qa-kit config                                        # all detected conventions
qa-kit config set e2e.projects '["admin","shop"]'    # projects computed in code
qa-kit config set e2e.scopes '[{"path":"e2e/admin","project":"admin","script":"test:e2e:admin"}]'
qa-kit config set catalog.languages '["en"]'         # languages the catalogs are written in
qa-kit config set catalog.idPattern '[A-Z]{2,5}-\d{3}'

Write the folder layout rule (for example "one folder per page, mirroring the sidebar menu" or "one spec per user journey") into conventions.md → "Where things live".

3. Map the area you were asked about

Map one module or page at a time, in the main session. For a whole project, list the modules first and let the user pick; start parallel qa-explorer subagents (at most 3) only when the user asks for several modules at once. Explore only what memory does not already describe, and find code by targeted search instead of opening every file.

QuestionWhere to look (adapt to the framework)
Which pages exist, URL of eachstructure.json routes; menu/sidebar/navigation config; router files
Which component renders the pageroute file → imported feature/module components
Visible text the tests will useheadings, table titles, column headers, button labels, dialog titles, toast messages, empty-state text
Validation rulesZod/Yup/Valibot/class-validator schemas, form required/maxlength/min/max, custom validators
API calls and payload shapesOpenAPI/GraphQL types, API client modules, query/mutation hooks
Who may do whatpermission maps, route guards, permission-wrapper components, role checks
Existing tests and helpersspecs and page objects under the e2e dir; shared fixtures

When a code-graph tool or a docs MCP is available, prefer it for "where is X used" questions.

4. Walk the running app (only if the user allows it and an environment is running)

Use a browser tool (Playwright MCP, Chrome DevTools MCP, the harness browser) on a non-production URL. Log in only with credentials the project already provides for tests (env files, never typed into chat or files). Capture:

  • the accessibility tree / role + name of key controls (these become locators),
  • the real labels vs the code (translations, dynamic text),
  • loading and empty states, toasts, dialogs.

Never create, edit, or delete data while exploring.

5. Write it down

  • app.md: modules table (module, route prefix, owner, notes), auth/roles, environments, recurring UI patterns (which shared components render tables/forms/dialogs/exports and how to locate them), fragile areas.
  • glossary.md: UI terms as displayed (in the app's language) and their meaning.
  • conventions.md: only test-writing rules, each linked to its source.
  • Atomic facts that do not fit a section:
qa-kit memory add --kind fact --scope src/features/invoices "Invoice form validation lives in invoice-form.tsx validate() (L40-58): only number, customer and due date are required."
qa-kit memory add --kind selector --scope e2e/billing/invoices "Currency select has no linked label; locate it with #invoice-currency."

Keep entries short, specific, with file:line evidence. Do not save what scan already derives (counts, file lists) or anything secret (passwords, tokens, session files, real customer data). Lessons that hold for every app (tooling, Playwright behaviour) go in with --global.

6. Report

Tell the user what you mapped, which memory sections you filled, which detected conventions you corrected, the coverage picture (qa-kit gaps), and the riskiest untested areas you saw. Suggest the next pages to cover.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.