web-performance-audit
Skill825 starsChanged 7 months agoMITView on GitHub
Audit web performance using Chrome DevTools MCP. Use when asked to audit, profile, debug, or optimize page load performance, Lighthouse scores, or site speed.
7 other projects use a version of this.
Adopted by
Most recently taken up by
- Adonis0123/adonis-skillstheir own version, first seen Nov 7, 2026
- wake-engineering/ai-plugintheir own version, first seen Nov 1, 2026
- KMaruthi2002/universal-llm-skillstheir own version, first seen Oct 25, 2026
- davidanthonyn/claude-skillsword for word, first seen Oct 20, 2026
- WST2002/claude-code-skillstheir own version, first seen Oct 17, 2026
- ai-moto/web-craft-skillstheir own version, first seen Aug 23, 2026
Other versions7 projects use a version of this.
Word for word · 1
- davidanthonyn/claude-skills★ 0100% same
Edited · 0
None found.
Wrote their own version · 6
- Adonis0123/adonis-skills★ 4same name
- wake-engineering/ai-plugin★ 4same name
- WST2002/claude-code-skills★ 4same name
- KMaruthi2002/universal-llm-skills★ 1same name
- ai-moto/web-craft-skills★ 0same name
- omonuj/claude-skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository15 other files it gives its agents.
- AGENTS.mdAGENTS.md
- analysis-artifactsSkill
- ci-fixSkill
- create-pull-requestSkill
- dbt-model-indexSkill
- docs-updateSkill
- github-bug-report-triageSkill
- github-issue-dedupeSkill
- mcp-builderSkill
- schedulerSkill
- seo-aeo-auditSkill
- slack-qa-investigateSkill
- terraform-style-checkSkill
- web-accessibility-auditSkill
- webapp-testingSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
20 rules. 0 are common, 12 are distinctive, and 8 are very specific to this project.
0
Common
Most of the 6 edited versions we read keep these.
12
Distinctive
This author's own choices. Worth a look.
8
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 15
Ask the user to add this to their MCP config:
- Distinctive: line 26
Be assertive: Verify claims by checking network requests, DOM, or codebase—then state findings definitively.
- Distinctive: line 28
Quantify impact: Use estimated savings from insights.
- Distinctive: line 29
Skip non-issues: If render-blocking resources have 0ms estimated impact, note but don't recommend action.
- Distinctive: line 64
Start a performance trace with reload to capture cold-load metrics:
- Distinctive: line 69
Wait for trace completion, then retrieve results.
- Very specific: line 72
If trace returns empty or fails, verify the page loaded correctly with navigate_page first
- Distinctive: line 73
If insight names don't match, inspect the trace response to list available insights
- Very specific: line 77
Use performance_analyze_insight to extract key metrics.
- Distinctive: line 119
Unused preconnects: If flagged, verify by checking if ANY requests went to that origin.
- Distinctive: line 147
Search for configuration files to identify the stack:
- Very specific: line 165
Webpack: Check for mode: 'production', sideEffects in package.json, usedExports optimization
- Distinctive: line 171
Check for CSS-in-JS vs. static CSS extraction
- Very specific: line 172
Look for PurgeCSS/UnCSS configuration (Tailwind's content config)
- Very specific: line 177
Check for @babel/preset-env targets and useBuiltIns setting
- Very specific: line 178
Look for core-js imports (often oversized)
- Very specific: line 179
Check browserslist config for overly broad targeting
- Very specific: line 183
Check for terser, esbuild, or swc minification
- Distinctive: line 184
Look for gzip/brotli compression in build output or server config
- Distinctive: line 185
Check for source maps in production builds (should be external or disabled)
“Common” is measured: kept by at least 6 in 10 of the 6 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Web Performance Audit
Audit web page performance using Chrome DevTools MCP tools. This skill focuses on Core Web Vitals, network optimization, and high-level accessibility gaps.
FIRST: Verify MCP Tools Available
Run this before starting. Try calling navigate_page or performance_start_trace. If unavailable, STOP—the chrome-devtools MCP server isn't configured.
Ask the user to add this to their MCP config:
"chrome-devtools": {
"type": "local",
"command": ["npx", "-y", "chrome-devtools-mcp@latest"]
}Key Guidelines
- Be assertive: Verify claims by checking network requests, DOM, or codebase—then state findings definitively.
- Verify before recommending: Confirm something is unused before suggesting removal.
- Quantify impact: Use estimated savings from insights. Don't prioritize changes with 0ms impact.
- Skip non-issues: If render-blocking resources have 0ms estimated impact, note but don't recommend action.
- Be specific: Say "compress hero.png (450KB) to WebP" not "optimize images".
- Prioritize ruthlessly: A site with 200ms LCP and 0 CLS is already excellent—say so.
Quick Reference
| Task | Tool Call |
| Load page | navigate_page(url: "...") |
| Start trace | performance_start_trace(autoStop: true, reload: true) |
| Analyze insight | performance_analyze_insight(insightSetId: "...", insightName: "...") |
| List requests | list_network_requests(resourceTypes: ["Script", "Stylesheet", ...]) |
| Request details | get_network_request(reqid: <id>) |
| A11y snapshot | take_snapshot(verbose: true) |
Workflow
Copy this checklist to track progress:
Audit Progress:
- [ ] Phase 1: Performance trace (navigate + record)
- [ ] Phase 2: Core Web Vitals analysis (includes CLS culprits)
- [ ] Phase 3: Network analysis
- [ ] Phase 4: Accessibility snapshot
- [ ] Phase 5: Codebase analysis (skip if third-party site)Phase 1: Performance Trace
- Navigate to the target URL:
navigate_page(url: "<target-url>") - Start a performance trace with reload to capture cold-load metrics:
performance_start_trace(autoStop: true, reload: true) - Wait for trace completion, then retrieve results.
Troubleshooting:
- If trace returns empty or fails, verify the page loaded correctly with
navigate_pagefirst - If insight names don't match, inspect the trace response to list available insights
Phase 2: Core Web Vitals Analysis
Use performance_analyze_insight to extract key metrics.
Note: Insight names may vary across Chrome DevTools versions. If an insight name doesn't work, check the insightSetId from the trace response to discover available insights.
Common insight names:
| Metric | Insight Name | What to Look For |
| LCP | LCPBreakdown | Time to largest contentful paint; breakdown of TTFB, resource load, render delay |
| CLS | CLSCulprits | Elements causing layout shifts (images without dimensions, injected content, font swaps) |
| Render Blocking | RenderBlocking | CSS/JS blocking first paint |
| Document Latency | DocumentLatency | Server response time issues |
| Network Dependencies | NetworkRequestsDepGraph | Request chains delaying critical resources |
Example:
performance_analyze_insight(insightSetId: "<id-from-trace>", insightName: "LCPBreakdown")Key thresholds (good/needs-improvement/poor):
- TTFB: < 800ms / < 1.8s / > 1.8s
- FCP: < 1.8s / < 3s / > 3s
- LCP: < 2.5s / < 4s / > 4s
- INP: < 200ms / < 500ms / > 500ms
- TBT: < 200ms / < 600ms / > 600ms
- CLS: < 0.1 / < 0.25 / > 0.25
- Speed Index: < 3.4s / < 5.8s / > 5.8s
Phase 3: Network Analysis
List all network requests to identify optimization opportunities:
list_network_requests(resourceTypes: ["Script", "Stylesheet", "Document", "Font", "Image"])Look for:
- Render-blocking resources: JS/CSS in
<head>withoutasync/defer/mediaattributes - Network chains: Resources discovered late because they depend on other resources loading first (e.g., CSS imports, JS-loaded fonts)
- Missing preloads: Critical resources (fonts, hero images, key scripts) not preloaded
- Caching issues: Missing or weak
Cache-Control,ETag, orLast-Modifiedheaders - Large payloads: Uncompressed or oversized JS/CSS bundles
- Unused preconnects: If flagged, verify by checking if ANY requests went to that origin. If zero requests, it's definitively unused—recommend removal. If requests exist but loaded late, the preconnect may still be valuable.
For detailed request info:
get_network_request(reqid: <id>)Phase 4: Accessibility Snapshot
Take an accessibility tree snapshot:
take_snapshot(verbose: true)Flag high-level gaps:
- Missing or duplicate ARIA IDs
- Elements with poor contrast ratios (check against WCAG AA: 4.5:1 for normal text, 3:1 for large text)
- Focus traps or missing focus indicators
- Interactive elements without accessible names
Phase 5: Codebase Analysis
Skip if auditing a third-party site without codebase access.
Analyze the codebase to understand where improvements can be made.
Detect Framework & Bundler
Search for configuration files to identify the stack:
| Tool | Config Files |
| Webpack | webpack.config.js, webpack.*.js |
| Vite | vite.config.js, vite.config.ts |
| Rollup | rollup.config.js, rollup.config.mjs |
| esbuild | esbuild.config.js, build scripts with esbuild |
| Parcel | .parcelrc, package.json (parcel field) |
| Next.js | next.config.js, next.config.mjs |
| Nuxt | nuxt.config.js, nuxt.config.ts |
| SvelteKit | svelte.config.js |
| Astro | astro.config.mjs |
Also check package.json for framework dependencies and build scripts.
Tree-Shaking & Dead Code
- Webpack: Check for
mode: 'production',sideEffectsin package.json,usedExportsoptimization - Vite/Rollup: Tree-shaking enabled by default; check for
treeshakeoptions - Look for: Barrel files (
index.jsre-exports), large utility libraries imported wholesale (lodash, moment)
Unused JS/CSS
- Check for CSS-in-JS vs. static CSS extraction
- Look for PurgeCSS/UnCSS configuration (Tailwind's
contentconfig) - Identify dynamic imports vs. eager loading
Polyfills
- Check for
@babel/preset-envtargets anduseBuiltInssetting - Look for
core-jsimports (often oversized) - Check
browserslistconfig for overly broad targeting
Compression & Minification
- Check for
terser,esbuild, orswcminification - Look for gzip/brotli compression in build output or server config
- Check for source maps in production builds (should be external or disabled)
Output Format
Present findings as:
- Core Web Vitals Summary - Table with metric, value, and rating (good/needs-improvement/poor)
- Top Issues - Prioritized list of problems with estimated impact (high/medium/low)
- Recommendations - Specific, actionable fixes with code snippets or config changes
- Codebase Findings - Framework/bundler detected, optimization opportunities (omit if no codebase access)
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
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.

