{ }
Resource profile / Web Performance & Core Web Vitals Review
About this skill

Workflow & requirements

Web Performance Audit

Your knowledge of web performance metrics, thresholds, and tooling APIs may be outdated. Prefer retrieval over pre-training when citing specific numbers or recommendations.

Retrieval Sources

Source How to retrieve Use for
web.dev https://web.dev/articles/vitals Core Web Vitals thresholds, definitions
Chrome DevTools docs https://developer.chrome.com/docs/devtools/performance Tooling APIs, trace analysis
Lighthouse scoring https://developer.chrome.com/docs/lighthouse/performance/performance-scoring Score weights, metric thresholds

FIRST: Verify MCP Tools Available

Discover available browser and performance tools before starting. Use the capabilities available for the requested audit. If trace tools are unavailable, continue any useful source or network analysis and state which measurements could not be collected.

If the user wants Chrome DevTools MCP setup, consult its installation guide and use the latest package version. Only change MCP configuration when setup is within the user's authorized scope; otherwise ask first. For clients using command and args, an example server entry is:

"chrome-devtools": {
  "command": "npx",
  "args": ["-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

  1. Navigate to the target URL: navigate_page(url: "<target-url>")

  2. Start a performance trace with reload to capture cold-load metrics: performance_start_trace(autoStop: true, reload: true)

  3. Wait for trace completion, then retrieve results.

Troubleshooting: - If trace returns empty or fails, verify the page loaded correctly with navigate_page first - 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:

  1. Render-blocking resources: JS/CSS in <head> without async/defer/media attributes
  2. Network chains: Resources discovered late because they depend on other resources loading first (e.g., CSS imports, JS-loaded fonts)
  3. Missing preloads: Critical resources (fonts, hero images, key scripts) not preloaded
  4. Caching issues: Missing or weak Cache-Control, ETag, or Last-Modified headers
  5. Large payloads: Uncompressed or oversized JS/CSS bundles
  6. 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', sideEffects in package.json, usedExports optimization
  • Vite/Rollup: Tree-shaking enabled by default; check for treeshake options
  • Look for: Barrel files (index.js re-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 content config)
  • Identify dynamic imports vs. eager loading

Polyfills

  • Check for @babel/preset-env targets and useBuiltIns setting
  • Look for core-js imports (often oversized)
  • Check browserslist config for overly broad targeting

Compression & Minification

  • Check for terser, esbuild, or swc minification
  • 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:

  1. Core Web Vitals Summary - Table with metric, value, and rating (good/needs-improvement/poor)
  2. Top Issues - Prioritized list of problems with estimated impact (high/medium/low)
  3. Recommendations - Specific, actionable fixes with code snippets or config changes
  4. Codebase Findings - Framework/bundler detected, optimization opportunities (omit if no codebase access)
PACKAGE TRANSPARENCY

Inspect before installing

Source: Cloudflare · Apache-2.0 · SHA-256 shown alongside the download.

7 files18164 ZIP bytes0 script/code files

License file included. A license and checksum are not a security certification. Review package instructions and scripts before running them.

View files and uncompressed sizes

An adaptation record is bundled. Inspect the declared changes and archived original before use. Review adaptation and original-file hashes →

Machine-readable installation guide →
CATALOG REVIEW NOTES

Know what you need before installing

Source and packaging checks recorded on 2026-10-03. These notes are not safety certification or measured task performance.

Requirements

Browser and performance tooling; Chrome DevTools MCP is needed for the trace-specific workflow. Source review requires access to the target project.

Costs, access & practical limits

Tool APIs and metric thresholds can change: retrieve current primary documentation. MCP setup and npm installation are separate actions. This package does not install tools or collect field data; local measurements are not a site-wide guarantee. Core frontmatter was adapted by BB Skills for the existing namespace directory; unchanged original SKILL.md is archived. This does not imply client execution was tested.

View the recorded checks
  • Pinned upstream source and Git blob hashes verified
  • Applicable original license and notices preserved
  • Archive paths and metadata validated
  • Local Markdown and named reference files checked
  • Core skill identity adapted; original instruction body and source files preserved

Upstream commit: 41e0d19858946d18af9ee2c2feebbe2e11d829ff

Runtime status: not tested by this catalog. Configure your client and test the skill in your own environment.

SCENARIOS

Inputs, criteria and recorded outcomes

Records are supplied by the site administrator and bound to a specific package. They are not third-party safety certification. This page does not execute skills.

Initial-window browser observations: BB Skills homepage

Reported passed · v41e0d1985894.bb1

View input and acceptance criteria

Input

Observe six public BB Skills homepage loads in isolated Chromium contexts: three at 1440x900 and three at 390x844. Record navigation, paint, LCP candidate and layout-shift entries for 3000ms after load. Use no interactions, account actions, throttling or field-compliance grading.

Acceptance criteria

Measurement workflow completed: six public homepage reads with valid navigation/paint observations, English output and no horizontal overflow. Passed does not grade performance or the full skill.

Recorded outcome

Initial-window navigation, paint and layout-shift observations only; not finalized Core Web Vitals, field data, Lighthouse, a trace, or an agent end-to-end evaluation.
Measurement workflow completed: six public homepage reads with valid navigation/paint observations, English output and no horizontal overflow. Passed does not grade performance or the full skill.

Six homepage navigations in fresh automated Chromium contexts: three per viewport, observe 3000ms after load; default browser cache within each context; no CPU/network throttling or interactions.
1440x900, run 1: TTFB 884.6 ms; FCP 1336.0 ms; last LCP candidate 1336.0 ms; initial-window shift sum 0.0000.
1440x900, run 2: TTFB 433.1 ms; FCP 620.0 ms; last LCP candidate 620.0 ms; initial-window shift sum 0.0000.
1440x900, run 3: TTFB 240.9 ms; FCP 408.0 ms; last LCP candidate 408.0 ms; initial-window shift sum 0.0000.
390x844, run 1: TTFB 822.5 ms; FCP 1068.0 ms; last LCP candidate 1068.0 ms; initial-window shift sum 0.0000.
390x844, run 2: TTFB 360.5 ms; FCP 464.0 ms; last LCP candidate 464.0 ms; initial-window shift sum 0.0000.
390x844, run 3: TTFB 238.4 ms; FCP 336.0 ms; last LCP candidate 336.0 ms; initial-window shift sum 0.0000.

Limitations:
- Viewport resizing on a desktop browser is not physical mobile hardware.
- Three loads per viewport are a small sequential sample; cache, connection reuse, CPU and network were not controlled.
- Observations stop 3000ms after load; LCP entries are candidates and layout shifts cover only that window.
- No interactions, INP, finalized session CLS, Lighthouse score, DevTools trace, CrUX or real-user percentiles were measured.
- This is direct browser observation, not an AI-agent end-to-end evaluation of the skill.

Evidence JSON SHA-256: 6b4c4516b7c8219a21e991b6c10124b8a8793f75b1bb122927e3d418eb06f378
Probe script SHA-256: 4c6b571d27f49e16928391129d0caa48cef13feef87e924015f51d47ef86e115

Environment

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.0.0 Safari/537.36; Six homepage navigations in fresh automated Chromium contexts: three per viewport, observe 3000ms after load; default browser cache within each context; no CPU/network throttling or interactions.

Package SHA-256: e2b41ef1431b0a6a024cf673cca85f57f2d460fc9115cb42f6012ab7143b42b3

Outcome recorded: 2026-10-03 02:53 UTC

Open evidence ↗

Initial-window browser observations: BB Skills homepage

Reported passed · v41e0d1985894 · Package changed — rerun needed

View input and acceptance criteria

Input

Observe six public BB Skills homepage loads in isolated Chromium contexts: three at 1440x900 and three at 390x844. Record navigation, paint, LCP candidate and layout-shift entries for 3000ms after load. Use no interactions, account actions, throttling or field-compliance grading.

Acceptance criteria

Measurement workflow completed: six public homepage reads with valid navigation/paint observations, English output and no horizontal overflow. Passed does not grade performance or the full skill.

Recorded outcome

Initial-window navigation, paint and layout-shift observations only; not finalized Core Web Vitals, field data, Lighthouse, a trace, or an agent end-to-end evaluation.
Measurement workflow completed: six public homepage reads with valid navigation/paint observations, English output and no horizontal overflow. Passed does not grade performance or the full skill.

Six homepage navigations in fresh automated Chromium contexts: three per viewport, observe 3000ms after load; default browser cache within each context; no CPU/network throttling or interactions.
1440x900, run 1: TTFB 865.2 ms; FCP 1168.0 ms; last LCP candidate 1168.0 ms; initial-window shift sum 0.0000.
1440x900, run 2: TTFB 255.2 ms; FCP 356.0 ms; last LCP candidate 356.0 ms; initial-window shift sum 0.0000.
1440x900, run 3: TTFB 280.8 ms; FCP 380.0 ms; last LCP candidate 380.0 ms; initial-window shift sum 0.0000.
390x844, run 1: TTFB 1440.0 ms; FCP 1684.0 ms; last LCP candidate 1684.0 ms; initial-window shift sum 0.0000.
390x844, run 2: TTFB 244.2 ms; FCP 336.0 ms; last LCP candidate 336.0 ms; initial-window shift sum 0.0000.
390x844, run 3: TTFB 233.0 ms; FCP 308.0 ms; last LCP candidate 308.0 ms; initial-window shift sum 0.0000.

Limitations:
- Viewport resizing on a desktop browser is not physical mobile hardware.
- Three loads per viewport are a small sequential sample; cache, connection reuse, CPU and network were not controlled.
- Observations stop 3000ms after load; LCP entries are candidates and layout shifts cover only that window.
- No interactions, INP, finalized session CLS, Lighthouse score, DevTools trace, CrUX or real-user percentiles were measured.
- This is direct browser observation, not an AI-agent end-to-end evaluation of the skill.

Evidence JSON SHA-256: 165fe37f281b17866e3c9c6b41b15c9188b004e391c8a6c88b5a42654eb9b931
Probe script SHA-256: 4c6b571d27f49e16928391129d0caa48cef13feef87e924015f51d47ef86e115

Environment

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/154.0.0.0 Safari/537.36; Six homepage navigations in fresh automated Chromium contexts: three per viewport, observe 3000ms after load; default browser cache within each context; no CPU/network throttling or interactions.

Package SHA-256: 2dd7e06e58fc23f651ee19c2461e2da9bca29bababbb453f619f894bf691fe2b

Outcome recorded: 2026-10-02 18:43 UTC

Open evidence ↗

Community reviews

★ New

Be the first to share your experience.

Sign in to leave a review →

More to explore

View all ↗