Generated banner for Web Perf
Generated logo for Web Perf

Web Perf

CloudflareOfficialPublished by Cloudflare

  • Skill
  • Review and audit
  • Cloud and DevOps
  • Apache-2.0
  • No issues found

From the author

Audit, diagnose, or optimize website loading and interaction performance, Core Web Vitals, and Lighthouse performance scores.
— the description by Cloudflare

From the skill’s files

Taken from the skill’s own files (its description, section headings and stated usage). Not an AutoGineer summary, and not written by the author as one.

Audit, diagnose, or optimize website loading and interaction performance, Core Web Vitals, and Lighthouse performance scores. Your knowledge of web performance metrics, thresholds, and tooling APIs may be outdated. Prefer retrieval over pre-training when citing specific numbers or recommendations.

What it does

  • Retrieval Sources
  • FIRST: Verify MCP Tools Available
  • Key Guidelines
  • Quick Reference
  • Workflow
  • Phase 5: Codebase Analysis

When to use it

The skill’s files do not state this.

Advantages

The skill’s files do not state this.

Usage examples

The skill’s files do not state this.

Install

  1. Download the skill as a ZIP:

    https://mp-staging.autogineer.com/agent-skills/cloudflare/web-perf/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip web-perf.zip -d .agents/skills

Documentation by Cloudflare

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

SourceHow to retrieveUse for
web.devhttps://web.dev/articles/vitalsCore Web Vitals thresholds, definitions
Chrome DevTools docshttps://developer.chrome.com/docs/devtools/performanceTooling APIs, trace analysis
Lighthouse scoringhttps://developer.chrome.com/docs/lighthouse/performance/performance-scoringScore 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

TaskTool Call
Load pagenavigate_page(url: "...")
Start traceperformance_start_trace(autoStop: true, reload: true)
Analyze insightperformance_analyze_insight(insightSetId: "...", insightName: "...")
List requestslist_network_requests(resourceTypes: ["Script", "Stylesheet", ...])
Request detailsget_network_request(reqid: <id>)
A11y snapshottake_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:

MetricInsight NameWhat to Look For
LCPLCPBreakdownTime to largest contentful paint; breakdown of TTFB, resource load, render delay
CLSCLSCulpritsElements causing layout shifts (images without dimensions, injected content, font swaps)
Render BlockingRenderBlockingCSS/JS blocking first paint
Document LatencyDocumentLatencyServer response time issues
Network DependenciesNetworkRequestsDepGraphRequest 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:

ToolConfig Files
Webpackwebpack.config.js, webpack.*.js
Vitevite.config.js, vite.config.ts
Rolluprollup.config.js, rollup.config.mjs
esbuildesbuild.config.js, build scripts with esbuild
Parcel.parcelrc, package.json (parcel field)
Next.jsnext.config.js, next.config.mjs
Nuxtnuxt.config.js, nuxt.config.ts
SvelteKitsvelte.config.js
Astroastro.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)

Skill feedback

If the user reports that this skill gave incorrect or outdated guidance, or is missing information, read references/skill-feedback.md.

Files

references/skill-feedback.md

Skill feedback

GitHub issues are public: anyone can read an issue once it is posted. Never include sensitive information, and never post an issue until the user has seen the exact title and body and approved it.

Use this when the user reports that the web-perf skill gave incorrect or outdated guidance, is missing information, or could be improved. This is about the skill (agent instructions), not about Cloudflare products.

What not to include

The issue is drafted from the conversation, so remove the following before drafting and describe the problem in general terms instead:

  • Credentials, API tokens, secrets, and passwords

  • Account IDs, zone IDs, and other resource identifiers

  • Customer or personal data, such as names, email addresses, and IP addresses

  • Internal hostnames and URLs

  • Private code, configuration, and logs

Steps

  1. Ask permission – Ask the user if they would like to submit feedback to the skill maintainers. If they decline, move on.

  2. Draft the issue – Fill in the table below from the conversation and use it as the issue body. Always identify which specific file and section caused the problem. Leave out everything listed in What not to include.

  3. Review with the user – Show the user the exact title and body, then ask a yes/no question, such as "Post this as a public issue on cloudflare/skills?" Submit only after the user answers yes. If they ask for changes, apply them and ask again. If they answer no, do not post. Agreeing to send feedback in step 1 is not approval of the text.

  4. Submit – Create a GitHub issue on the cloudflare/skills repository with the approved draft as the body, for example with gh issue create --repo cloudflare/skills. The title must follow this format: skill-feedback: web-perf: <summary of the problem>.

  5. Share the result – Share the issue URL with the user after submission. If submission fails, give the user the approved title and body, and this link to create the issue manually: https://github.com/cloudflare/skills/issues/new

Issue body

FieldValue
Typebug (incorrect guidance), outdated, missing, or improvement
Skillweb-perf
SourceFile and section, e.g. SKILL.md > "Section name" or references/<file>.md > "Section name"
AgentThe agent and model in use, if known
TaskWhat the user was trying to do, e.g. "deploy a preview"
ExpectedWhat should have happened, e.g. "Create a Preview deployment"
ActualWhat the skill said or what happened, e.g. "Unknown option: --preview"
ImpactThe effect on the user, e.g. "Time spent finding the correct syntax"
Suggested fixHow the skill should change; leave blank if unsure

Requirements and compatibility

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Needs: Needs Node.js

Security

No issues found by our static scan· No issues found

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Published by
Cloudflare
Publisher
Cloudflare (Official)
Source
cloudflare/skills · skills/web-perf · commit 6eb6c78
Licence
Apache License 2.0 (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by Cloudflare.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download web-perf.zip