Performance audit
Skill VictorAurelius/claude-starter-kit/skills/quality/performance-audit
🤖 Battle-tested Claude Code skills, rules & workflow templates — extracted from a real 200+ PR project. Governance-first. Bilingual VN/EN.
npx -y skills add VictorAurelius/claude-starter-kit --skill performance-auditAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Dùng khi user nói 'perf audit', 'performance check', 'load test', 'kiểm tra hiệu năng', 'N+1', 'bundle size', hoặc trước production deploy. Baseline performance metrics /100.
SKILL.md
4.3 KB, as published. Nobody here has run it
/performance-audit — Performance Baseline Assessment (portable)
Score /100. Identify bottlenecks across DB, API, frontend, caching, and resources.
Adapt <placeholder> paths to your project structure.
Process
1. Automated Checks
# DB: N+1 query detection (adapt src dir to your backend modules)
grep -rn "findAll\|findBy" --include="*.java" src/main/ | grep -v test | head -30
grep -rn "@Query" --include="*.java" src/main/ | head -20
# FE bundle: build analysis (adapt to each frontend app)
cd <frontend-app> && npm run build 2>&1 | tail -30
# Caching (broad scope — catches all submodules)
grep -rn "RedisTemplate\|@Cacheable\|cache" --include="*.java" | grep -v test | grep -v target | head -20
# Resource config (broad scope)
grep -rn "pool-size\|max-connections\|timeout\|thread" --include="*.yml" | grep -v target | head -20
2. Primacy: bug-finding > scoring (BLOCKING)
An audit's purpose is to surface performance bombs (N+1, missing pagination, missing bulkhead) BEFORE prod. A
/100score with hidden P0 bombs is WORSE than a low score listing every bomb honestly. Peraudit-skill-rubric-performance-audit.md§4.
Rules for every audit run:
- Enumerate ALL §3 sub-checks per category. NEVER skip "obviously fine."
- Each sub-check returns: PASS / FAIL / N/A-with-reason /
❓ UNCHECKED. No partial credit. - Final output starts with bug list (every FAIL with
file:lineevidence) BEFORE the score. - Score is descriptive only; audit-level verdict = FAIL if ANY P0 sub-check FAILS.
- If audit time-budget runs out, mark
❓ UNCHECKED— do NOT default to PASS.
3. Score 5 Categories with per-check rubric
Every category binds to a per-check pass/fail rule.
| # | Category (20pts) | Per-check rubric file |
|---|---|---|
| 1 | DB Query Efficiency | audit-skill-rubric-performance-audit.md §2.1 (6 sub-checks) |
| 2 | API Response Time | audit-skill-rubric-performance-audit.md §2.2 (6 sub-checks) |
| 3 | Frontend Bundle | audit-skill-rubric-performance-audit.md §2.3 (6 sub-checks) |
| 4 | Caching Strategy | audit-skill-rubric-performance-audit.md §2.4 (6 sub-checks) |
| 5 | Resource Utilization | audit-skill-rubric-performance-audit.md §2.5 (6 sub-checks) |
Per-check scoring (all 5 categories)
For each Category N:
- Walk through every §2 sub-check in the bound rule.
- Mark each sub-check PASS / FAIL / N/A-with-reason /
❓ UNCHECKED. - Score =
20 - (failed_P0_count * 6) - (failed_P1_count * 3) - (failed_P2_count * 1), floor 0; cap 20 if all PASS. - If ANY P0 sub-check fails → category total CAPPED at 16/20 AND audit-level verdict = FAIL.
- Each FAIL surfaces in bug list per §2 primacy.
Legacy scoring narrative: reference/scoring-guide.md retained for backward-compat only.
4. Output
Save to documents/audits/performance/performance-audit-[date].md
Context Management
Token budget ~15-25K (smallest in the audit suite). Watch:
- Build output —
npm run buildoutput can be 100+ lines. ALWAYS| tail -30(only the route sizes table is needed). - Grep N+1 —
| head -30per module. Count occurrences, don't list everything. - No load test during audit — static analysis + config review only. Load test = separate task.
Gotchas
findAll()on a JPA repo without@QueryorPageable= potential N+1- Build output (e.g. Next.js
next build) shows route sizes — flag anything >250KB - Redis config typically lives in
application.ymlunderspring.data.redis - If the project uses a bulkhead library (e.g. Resilience4j) — check thread pool sizes match expected concurrency
- Docker
deploy.resources.limitsmay not be set in dev compose — check k8s/Helm for prod - Build output can be very long — only take the final summary table
- Multi-module scope — a narrow grep dir may miss submodules. Use broad
--include="*.java"from root OR explicit<module>/src/glob - Always
grep -v targetto exclude compiledtarget/classes/duplicates
Skill Contents
reference/scoring-guide.md— Detailed rubric per category