React Doctor
makeplane/plane
Scans React code for lint, accessibility, bundle size and architecture issues, reports a health score and checks that changes do not lower it.
Diagnose and fix Core Web Vitals issues on AEM Edge Delivery Services pages.
$ npx skills add adobe/skills --skill cwv-optimizer -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install adobe/skills cwv-optimizer --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/adobe/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/aem/edge-delivery-services-content-ops/skills/cwv-optimizer .claude/skills/cwv-optimizer && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "cwv-optimizer" agent skill from https://github.com/adobe/skills/tree/main/plugins/aem/edge-delivery-services-content-ops/skills/cwv-optimizer into .claude/skills/cwv-optimizer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cwv-optimizer", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/adobe/skills/tree/main/plugins/aem/edge-delivery-services-content-ops/skills/cwv-optimizerType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add adobe/skills --skill cwv-optimizer -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install adobe/skills cwv-optimizer --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/adobe/skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/aem/edge-delivery-services-content-ops/skills/cwv-optimizer .agents/skills/cwv-optimizer && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "cwv-optimizer" agent skill from https://github.com/adobe/skills/tree/main/plugins/aem/edge-delivery-services-content-ops/skills/cwv-optimizer into .agents/skills/cwv-optimizer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cwv-optimizer", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add adobe/skills --skill cwv-optimizer -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install adobe/skills cwv-optimizer --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/adobe/skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/aem/edge-delivery-services-content-ops/skills/cwv-optimizer .cursor/skills/cwv-optimizer && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "cwv-optimizer" agent skill from https://github.com/adobe/skills/tree/main/plugins/aem/edge-delivery-services-content-ops/skills/cwv-optimizer into .cursor/skills/cwv-optimizer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cwv-optimizer", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/adobe/skills.git --path plugins/aem/edge-delivery-services-content-ops/skills/cwv-optimizer--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add adobe/skills --skill cwv-optimizer -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install adobe/skills cwv-optimizer --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/adobe/skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/aem/edge-delivery-services-content-ops/skills/cwv-optimizer .gemini/skills/cwv-optimizer && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "cwv-optimizer" agent skill from https://github.com/adobe/skills/tree/main/plugins/aem/edge-delivery-services-content-ops/skills/cwv-optimizer into .gemini/skills/cwv-optimizer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cwv-optimizer", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install adobe/skills cwv-optimizerInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add adobe/skills --skill cwv-optimizer -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/adobe/skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/aem/edge-delivery-services-content-ops/skills/cwv-optimizer .github/skills/cwv-optimizer && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "cwv-optimizer" agent skill from https://github.com/adobe/skills/tree/main/plugins/aem/edge-delivery-services-content-ops/skills/cwv-optimizer into .github/skills/cwv-optimizer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cwv-optimizer", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add adobe/skills --skill cwv-optimizer -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install adobe/skills cwv-optimizer --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/adobe/skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/aem/edge-delivery-services-content-ops/skills/cwv-optimizer .opencode/skills/cwv-optimizer && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "cwv-optimizer" agent skill from https://github.com/adobe/skills/tree/main/plugins/aem/edge-delivery-services-content-ops/skills/cwv-optimizer into .opencode/skills/cwv-optimizer/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "cwv-optimizer", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
cwv-optimizerDiagnose and fix Core Web Vitals issues on AEM Edge Delivery Services pages.
Cwv Optimizer is an agent skill from adobe/skills. Diagnose and fix Core Web Vitals issues on AEM Edge Delivery Services pages. Goes deeper than generic CWV advice by understanding EDS-specific performance patterns including the 100KB LCP budget, E-L-D loading phases, block rendering behavior, and third-party script impact. Produces specific fixes for LCP, CLS, and INP issues with before/after projections. Use when the user asks about Core Web Vitals, page speed, or performance issues on AEM Edge Delivery Services (EDS/Franklin) sites.
Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including reference files (for example `CHANGELOG.md`, `package.json` and `references/cwv-eds-reference.md`).
It sits in Frontend & Design, covering Web performance. It works with Adobe Experience Manager. The repository describes itself as: Adobe Skills for Agents. The licence is Apache-2.0.
10 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit cbc9952. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
curlFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
bundles.aem.pageAlso links to:
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
RUM_DOMAIN_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Cwv Optimizer loads about 2.6k tokens when it runs, and up to ~3.5k if it reads all its reference files. Until then it costs about 126 tokens; SKILL.md has 1,122 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from adobe/skills at commit cbc9952, republished under its Apache-2.0 licence (© adobe). 1,122 words, ~2,620 tokens.
.claude/skills/cwv-optimizer/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.Diagnose and fix Core Web Vitals issues on AEM Edge Delivery Services pages using EDS-specific domain knowledge: the 100KB LCP budget, the Eager-Lazy-Delayed loading phases, block architecture, the createOptimizedPicture() function, and the /scripts/delayed.js pattern. Produces specific, implementable fixes with estimated impact projections, not generic performance advice.
This skill fetches external web pages for analysis. When fetching:
optel-interpreter first), non-EDS sites, or server-side TTFB/CDN issues.Before starting, create a checklist of all steps to track progress:
Fetch the page and collect baseline scores:
curl -s -o /dev/null -w "HTTP %{http_code} - %{size_download} bytes - %{time_total}s" "https://<domain>/<path>"Record baseline CWV values, total page weight, request count, and TTFB. A large FCP-to-LCP gap suggests render-blocking resources between first paint and largest paint.
Identify the LCP element from measured data, not from page structure. Use Chrome DevTools (Performance panel → the LCP marker, or the Lighthouse "Largest Contentful Paint element" audit) or RUM field data. In EDS the LCP element is commonly the first image or a large <h1> in the first section, but confirm it rather than assuming. Once confirmed, fetch the HTML and examine that element in the first section (before the first --- divider).
Inventory every eager-phase resource and measure actual transfer sizes. Build the budget table: HTML document, /styles/styles.css, /scripts/aem.js, /scripts/scripts.js, first-section block CSS/JS, preloaded fonts, and LCP image. Grade the total against the 100KB budget (see references/cwv-eds-reference.md for grading scale).
Use RUM field data to see real-user LCP for the page, and process it with Adobe's official @adobe/rum-distiller library (the same one the OpTel Explorer uses) rather than hand-parsing checkpoint events:
import { DataChunks, series, utils } from '@adobe/rum-distiller';
// The bundle API is path-based: https://bundles.aem.page/bundles/{domain}/{year}/{month}/{day}.
// The domain key is the ?domainkey= query parameter, not an Authorization header.
const resp = await fetch(
`https://bundles.aem.page/bundles/example.com/2026/06/28?domainkey=${RUM_DOMAIN_KEY}`,
);
const { rumBundles } = await resp.json();
// addCalculatedProps derives the cwvLCP/cwvCLS/cwvINP props that the series read.
rumBundles.forEach((b) => utils.addCalculatedProps(b));
const dc = new DataChunks();
dc.load([{ date: '2026-06-28', rumBundles }]);
dc.addSeries('lcp', series.lcp);
console.log(`p75 LCP: ${dc.totals.lcp.percentile(75)}ms`);Verify resources load in the correct phase:
Eager: Only first-section block CSS/JS. Check that below-fold blocks are not loading eagerly. Images in the first section must have loading="eager" with width and height; below-fold images must have loading="lazy".
Delayed: Fetch /scripts/delayed.js and verify all third-party scripts load there. Common violations: Google Tag Manager in <head> (~70KB, blocks render), analytics loaded synchronously, chat widgets loaded eagerly, consent banners in the eager phase.
Fonts: Verify font-display: swap, maximum 2 preloaded fonts, all WOFF2 format, each under 30KB. Fonts used only below the fold should not be preloaded.
Check whether images have explicit width and height:
curl -s "https://<domain>/<path>" | grep -oP '<img[^>]*>' | head -10Images without dimensions cause CLS. The createOptimizedPicture() function in aem.js does not set width/height attributes on the images it generates. Fix by adding the attributes in the block's decorate() function.
EDS automatically serves content images as responsive WebP through its <picture> pipeline (the ?width=…&format=webply&optimize=medium transform), regardless of the source format, so do not tell the agent to convert content images to WebP/AVIF or resize them by hand. The lever you actually control is the source image: an oversized original (e.g. 4000px wide) inflates the delivered derivatives. Check the delivered LCP image's transfer size in the network waterfall; if it is heavy, reduce the source image's intrinsic dimensions or crop it, not its format. Only images bundled in code (block icons/SVG) are optimized by you directly, so keep those small and prefer inline SVG. (EDS delivers WebP, not AVIF.)
EDS CLS comes from a predictable set of sources:
width/height from createOptimizedPicture().font-display: swap without size-adjust and ascent-override on the fallback @font-face.decorate(). Reserve space with CSS or make initial HTML match final layout.Look for long tasks (> 50ms), forced reflows, and slow event handlers (> 100ms). Common EDS offenders: carousel blocks recalculating all slide layouts, accordion/tab blocks triggering full reflows instead of CSS transitions, mega-menus injecting large DOM subtrees synchronously, and search blocks filtering on every keystroke without debouncing.
Measure LCP element render timing in a block's decorate() function:
// Measure LCP contribution from a block
export default async function decorate(block) {
const start = performance.now();
// ... block decoration logic ...
const elapsed = performance.now() - start;
if (elapsed > 50) {
console.warn(`[perf] ${block.dataset.blockName} decorate took ${elapsed.toFixed(1)}ms (budget: 50ms)`);
}
}Key fixes: debounce expensive handlers (150ms), batch DOM reads before writes to avoid forced reflows, use requestAnimationFrame for visual updates.
Inventory all external scripts from the HTML head and delayed.js:
curl -s "https://<domain>/<path>" | grep -oP '<script[^>]*src="[^"]*"' | head -20
curl -s "https://<domain>/scripts/delayed.js"Classify each script by current phase vs. correct phase. All third-party scripts must load via delayed.js (3+ seconds after page load). Scripts in the eager phase add directly to the 100KB budget. If GTM re-injects scripts dynamically, configure GTM triggers to fire only after a 3-second delay.
For each issue, produce a specific fix with estimated impact:
| Issue | Metric | Current | Fix | Projected After |
|---|---|---|---|---|
| Hero image 180KB | LCP | 3.2s | Reduce source image dimensions / crop (EDS already serves WebP) | 2.1s |
| GTM in head | LCP | 3.2s | Move to delayed.js | 2.4s |
| Images missing dimensions | CLS | 0.18 | Add width/height to createOptimizedPicture | 0.03 |
| Font swap without size-adjust | CLS | 0.18 | Add size-adjust to fallback | 0.08 |
| Carousel forced reflow | INP | 310ms | Batch DOM reads/writes | 150ms |
See references/cwv-eds-reference.md for projection benchmarks (image format savings, reflow reduction estimates).
| Metric | Before | Target | Projected After | Status |
|---|---|---|---|---|
| LCP | X.Xs | < 2.5s | X.Xs | Fix/Monitor/Pass |
| CLS | X.XX | < 0.1 | X.XX | Fix/Monitor/Pass |
| INP | Xms | < 200ms | Xms | Fix/Monitor/Pass |
Ranked list: highest-impact fix first, with metric affected, estimated improvement, and effort.
loading="eager" with width and heightloading="lazy"delayed.jsfont-display: swap with size-adjust fallbacks© adobe, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 3 other files (references) in plugins/aem/edge-delivery-services-content-ops/skills/cwv-optimizer of adobe/skills.
Open the folder on GitHubat commit cbc9952
Cwv Optimizer next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Cwv Optimizer this skilladobe/skills | 195 | — | ~2.6k | Automated safety check: Pass | Apache-2.0 | |
| React Doctormakeplane/plane | 60k | 12 repos | ~657 | Automated safety check: Pass | AGPL-3.0 | |
| Fixing Motion Performanceibelick/ui-skills | 9.4k | 5 repos | ~1.4k | Automated safety check: Pass | MIT | |
| GSAP Performance Tuninggreensock/gsap-skills | 16k | 4 repos | ~1k | Automated safety check: Pass | MIT | |
| React Frontend Development Guidelinesdiet103/claude-code-infrastructure-showcase | 10k | 2 repos | ~2.9k | Automated safety check: Pass | MIT | |
| Web Quality Auditaddyosmani/web-quality-skills | 2.9k | — | ~2.6k | Automated safety check: Pass | MIT |
makeplane/plane
Scans React code for lint, accessibility, bundle size and architecture issues, reports a health score and checks that changes do not lower it.
ibelick/ui-skills
Audits and fixes web animation performance: layout thrashing, work that belongs on the compositor, scroll-linked motion and costly blur effects.
greensock/gsap-skills
Guides the agent to keep GSAP animations smooth by animating transforms and opacity, batching DOM reads and writes, and avoiding layout-heavy properties.
diet103/claude-code-infrastructure-showcase
Guidelines for React 18 and TypeScript apps covering Suspense data fetching, lazy loading, feature folders, MUI v7 styling, TanStack Router and performance.
addyosmani/web-quality-skills
Run an evidence-led web quality audit covering performance, accessibility, SEO, best practices, and agentic browsing.
AgriciDaniel/codex-seo
Google SEO APIs: Search Console (Search Analytics, URL Inspection, Sitemaps), PageSpeed Insights v5, CrUX field data with 25-week history, Indexing API v3, and GA4 organic traffic.
adobe/skills
Scaffolds, implements, deploys and debugs Adobe Runtime actions in App Builder projects, with templates for webhooks, events, database CRUD, sequences and Asset Compute workers.
adobe/skills
Launches Chrome with an unpacked extension over CDP, opens its sidepanel, popup or options page, and hands over to cdp-connect for clicks, typing and screenshots.
adobe/skills
Extracts icons, metadata, text, forms, videos and social links from any web page with playwright-cli, with SVG icon classification and cleanup.
adobe/skills
Detect all languages used on a webpage — both declared (html@lang, hreflang alternate links, nested lang= attributes, meta content-language) and actually present in the body text (Google CLD3 via…
adobe/skills
Prepare any webpage for clean interaction by detecting and removing disruptive overlays (cookie banners, GDPR consent, modals, popups, newsletter signups, paywalls, login walls).
adobe/skills
Reduce a webpage to a structural skeleton with semantic tokens.
Works with
Categories
Diagnose and fix Core Web Vitals issues on AEM Edge Delivery Services pages. Cwv Optimizer is an agent skill from adobe/skills. Diagnose and fix Core Web Vitals issues on AEM Edge Delivery Services pages.
Cwv Optimizer fits situations like: the user asks about Core Web Vitals; performance issues on AEM Edge Delivery Services (EDS/Franklin) sites.
Run `npx skills add adobe/skills --skill cwv-optimizer -a claude-code`. Or copy the skill folder (plugins/aem/edge-delivery-services-content-ops/skills/cwv-optimizer in adobe/skills) into .claude/skills/cwv-optimizer in your project. Claude Code loads it when a task matches its description.
Run `npx skills add adobe/skills --skill cwv-optimizer -a codex`. Or copy the skill folder (plugins/aem/edge-delivery-services-content-ops/skills/cwv-optimizer in adobe/skills) into .agents/skills/cwv-optimizer in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add adobe/skills --skill cwv-optimizer -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/cwv-optimizer, .gemini/skills/cwv-optimizer, .github/skills/cwv-optimizer and .opencode/skills/cwv-optimizer in your project.
Going by SKILL.md and its folder, Cwv Optimizer needs the command-line tools its instructions call (curl) and credentials named RUM_DOMAIN_KEY. Our summary lists: A credential in RUM_DOMAIN_KEY.
SKILL.md names 2 domains. In commands or code: bundles.aem.page; the agent is likely to contact it when it follows the instructions. As links in the text: github.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Cwv Optimizer is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.6k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 905 tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Cwv Optimizer: React Doctor (makeplane/plane, 60k stars), Fixing Motion Performance (ibelick/ui-skills, 9.4k stars), GSAP Performance Tuning (greensock/gsap-skills, 16k stars) and React Frontend Development Guidelines (diet103/claude-code-infrastructure-showcase, 10k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
adobe (a GitHub organization) maintains it in adobe/skills, which has 195 GitHub stars. The repository holds 105 skills in this directory. The repository was last updated on October 6, 2026.
Source: adobe/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.