Announcing Beacon: Self-improving memory for coding agents
← All skills
Skill

web-perf

skill:openai/plugins#web-perf

Analyzes web performance using Chrome DevTools MCP. Measures Core Web Vitals (FCP, LCP, TBT, CLS, Speed Index), identifies render-blocking resources, network dependency chains, layout shifts, caching issues, and accessibility gaps. Use when asked to audit, profile, debug, or optimize page load performance, Lighthouse scores, or site speed. Biases towards retrieval from current documentation over pre-trained knowledge.

Verdict
Suspicious

Risky behavior the analysis could not rule out.

Analyzed Oct 27, 2026, 22:34 UTC at 0722921

Dispute security verdict

If you believe this verdict is incorrect, submit a dispute and we'll review it.

1
findings
medium
highest severity
1
threat classes
5,479
files scanned
49/51
checks satisfied
0
package advisories

Why this verdict

  • suspicious: finding skill:plugins/cloudflare/skills/web-perf:plugins/cloudflare/skills/web-perf/SKILL.md:22:SUPPLY

Security findings 1

Supply chain

mediumContextual riskmedium confidence

The skill instructs the agent to have the user register a chrome-devtools MCP server whose command is npx -y chrome-devtools-mcp@latest, causing the MCP client to download and execute the latest unpinned version of the npm package at server startup, so runtime code is not pinned and can change without notice.

Ask the user to add this to their MCP config:
vector:instruction
Counter-argument considered

The skill concretely instructs registering an MCP server whose startup command runs the npm package at an unpinned @latest tag, so the pinned-official-registry-installs carve-out does not apply (it requires pinning); the nearest declared exec claim (D2) covers only MCP tool invocation, not installation of mutable latest-version code, and the instruction chain is explicit, so the medium-confidence SUPPLY finding stands.

Open questions 1

What the analysis could not settle from the code alone.

SKILL.md lines 5-9 and 31-50 are not shown in this pass; do those gaps contain additional commands, MCP tool guidance, or conditional instructions not visible here?
Refuted findings 1

Candidates the review stage examined and rejected, kept for transparency.

Supply chain

highRefutedlow confidence

The skill directs the agent to retrieve live guidance (metric thresholds, tooling and scoring rules) from remote documentation URLs at task time, so the instructions the agent follows are sourced from mutable remote content rather than shipped with the artifact; this matches the declared retrieval-bias behavior and no local data is shown flowing to these destinations, so it is not exfiltration.

https://web.dev/articles/vitals
Why it was refuted

Retrieval from these official documentation URLs is the artifact's declared core behavior: the target description states it 'Biases towards retrieval from current documentation over pre-trained knowledge' and declared claim D1 (same unit) explicitly lists the web.dev and developer.chrome.com sources, so the harm gate falls under the declared-core-capability carve-out and the undeclared gate fails; the finding itself concedes no local data flows to the URLs, so there is no exfiltration chain to preserve.

Coverage gaps 18

Parts of the artifact the static analysis could not fully examine.

context:unanalyzable_binary binary content is only byte-scanned
plugins/codex-security/mcp/helpers.mjs.br.part-000
context:unanalyzable_binary macho content is only byte-scanned
plugins/codex-security/mcp/native/darwin-arm64/unix.node
context:unanalyzable_binary macho content is only byte-scanned
plugins/codex-security/mcp/native/darwin-x64/unix.node
context:unanalyzable_binary elf content is only byte-scanned
plugins/codex-security/mcp/native/linux-arm64-gnu/unix.node
context:unanalyzable_binary elf content is only byte-scanned
plugins/codex-security/mcp/native/linux-arm64-musl/unix.node
context:unanalyzable_binary elf content is only byte-scanned
plugins/codex-security/mcp/native/linux-x64-gnu/unix.node
context:unanalyzable_binary elf content is only byte-scanned
plugins/codex-security/mcp/native/linux-x64-musl/unix.node
context:unanalyzable_binary pe content is only byte-scanned
plugins/codex-security/mcp/native/win32-arm64/windows.node
context:unanalyzable_binary pe content is only byte-scanned
plugins/codex-security/mcp/native/win32-x64/windows.node
context:unanalyzable_binary binary content is only byte-scanned
plugins/codex-security/mcp/server.mjs.br.part-000
context:unanalyzable_binary binary content is only byte-scanned
plugins/codex-security/mcp/server.mjs.br.part-001
context:oversize archive member exceeds 8388608 bytes; truncated, no text
plugins/shopify/skills/shopify-admin/assets/admin_2026-04.json.gz!/admin_2026-04.json
context:decoded_views_exceeded 452 derived view(s) beyond the per-file view cap: decoded:charcode, decoded:rot13, decoded:unicode-escape
plugins/creative-production/mcp/server.bundle.mjs
context:bytes_unavailable yara-x: no bytes to scan
plugins/shopify/skills/shopify-admin/assets/admin_2026-04.json.gz!/admin_2026-04.json
ledger_finding_without_valid_finding run 1: instruction-surface.0 SRC:87d1be27dca592d6
ledger_finding_without_valid_finding run 1: declared-vs-actual.0 SRC:87d1be27dca592d6
invalid_judge_finding instruction-surface.0
invalid_judge_finding declared-vs-actual.0