Honest QA gap analysis for deployed web apps.
Qulib is an opinionated harness that answers one question: is this app ready to ship? It prefers honest uncertainty over fake confidence: if auth blocks the crawl, coverage is thin, or data is incomplete, the report says so.
Design line: AI should explore unknown gaps; deterministic checks (crawl, axe, links, console) should scale. Cost Intelligence tracks LLM usage so repeated reasoning can graduate into checks you own in CI.
On npm: @qulib/core (engine + CLI qulib) and @qulib/mcp (MCP server for AI agents).
- Crawls deployed apps (anonymous or authenticated via Playwright)
- Runs axe-core accessibility checks (WCAG 2 A/AA)
- Detects broken links, console errors, navigation failures
- Computes release confidence (0–100) with a coverage floor when too few pages were scanned
- Emits JSON and Markdown reports (or ephemeral JSON on stdout)
- Auth-aware: optional
detect-auth,explore-auth, form-login, and storage-state flows - Cost Intelligence (optional block on gap analysis): token usage, budget warnings vs per-call output ceiling, prompt fingerprints, maturity hints, conversion recommendations
| Package | Purpose |
|---|---|
@qulib/core |
Analyzer engine and CLI (qulib) |
@qulib/mcp |
MCP server exposing Qulib to AI clients |
npx @qulib/core analyze --url https://example.comFrom a clone (repo root):
npm run analyze -w @qulib/core -- --url https://example.comOr cd packages/core and npm run analyze -- --url https://example.com.
Smoke (no disk writes):
npm run smokeCost doctor (after a normal analyze that wrote output/report.json):
cd packages/core && npx tsx src/cli/index.ts cost doctor{
"mcpServers": {
"qulib": {
"command": "npx",
"args": ["-y", "@qulib/mcp"]
}
}
}Ask your agent:
Use Qulib to analyze https://example.com and tell me if it's ready to ship.
Default analyze_app responses are summary-first (top gaps, cost summary, next deterministic checks). Pass includeFullReport: true for the full gapAnalysis including all scenarios.
- Score starts from 100 and is reduced by high / medium / low gaps (see
gap-engine). - If fewer than
minPagesForConfidencepages were scanned, confidence is capped at 40 and alow-coveragewarning is set—thin coverage must not read as “ready”. auth-requiredearly exit sets confidence 0 with no gap inventory: the deployment was not actually exercised.
Details: packages/core/README.md.
- Core (CLI, API, Cost Intelligence)
- MCP server
- Source map — new contributors: start here to navigate the codebase
- Contributing
- Security
- Code of Conduct
- Manual testing checklist
Issues and PRs are welcome. See CONTRIBUTING.md. Follow the Code of Conduct.
MIT — see LICENSE