signals-scout-web-vitals

Detects and reports Core Web Vitals regressions across pages using PostHog $web_vitals event data.

713|118|Updated Aug 11, 2020
One-click install
npx skills add https://github.com/PostHog/posthog-foss --skill signals-scout-web-vitals
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: signals-scout-web-vitals
Source: https://github.com/PostHog/posthog-foss/tree/main/products/signals/skills/signals-scout-web-vitals
Command: npx skills add https://github.com/PostHog/posthog-foss --skill signals-scout-web-vitals

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve?

Web performance problems often go unnoticed because teams lack continuous monitoring of Core Web Vitals at the page level. This Skill acts as an autonomous scout that watches each page's p75 LCP, INP, CLS, and FCP against Google's thresholds, catches regressions, and files actionable reports naming the metric, band, likely cause, and fix.

Core Features & Use Cases

  • Band-classified detection: Identifies standing-poor pages, band-crossing regressions, in-band degradations, and site-wide shifts using volume-gated p75 queries against the PostHog events table.
  • Onset dating and cause attribution: Narrows a regression to a sub-hour UTC boundary and correlates it with deploy markers (annotations) and feature flag rollouts (activity logs), confirming causes via variant splits.
  • Report authoring with dedupe: Authors or edits inbox reports directly, maintains scratchpad memory of baselines and known-slow pages, and attaches metric-specific remediations.
  • Use Case: A team's checkout page INP p75 jumps from 180ms to 620ms after a flag rollout. The scout dates the onset to a 20-minute window, confirms the flag variant split, and files a report naming the rollout, the remediation, and the responsible reviewer.

Quick Start

Ask the agent to run a web vitals scan of the project's $web_vitals events and report any pages whose p75 LCP, INP, CLS, or FCP sit in the poor band or regressed recently.

Frequently Asked Questions about signals-scout-web-vitals

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I monitor Core Web Vitals with PostHog data?

Query the $web_vitals event in the PostHog events table and compute p75 values for LCP, INP, CLS, and FCP per host and path. Classify each page against Google's bands (e.g., LCP poor above 4000ms) and gate on sample counts so low-volume percentiles are excluded.

How to find what deploy caused a web vitals regression?

Date the onset by bucketing the page's p75 into 20-minute UTC intervals around the step day, then compare that boundary against deploy annotations and feature flag activity logs. Confirm a flag cause by splitting the metric on the variant property and checking exposure share.

What are the Core Web Vitals thresholds for LCP, INP, CLS, and FCP?

At p75: LCP good is 2500ms or less and poor above 4000ms; INP good is 200ms or less and poor above 500ms; CLS good is 0.1 or less and poor above 0.25; FCP good is 1800ms or less and poor above 3000ms.

Why does a site's aggregate p75 regress without any code change?

A site-wide step is often a composition effect: more mobile users or traffic from distant regions moves the aggregate percentile. Split the recent window by device type and country code; if the shift disappears within slices, it is a population change, not a code regression.

Does this work if $web_vitals capture is not enabled?

No. $web_vitals is opt-in via the capture_performance SDK option, so the scout first verifies capture with a cheap 7-day event count. A near-zero count means the surface is not instrumented and the run closes out as not-in-use.

When should a slow page not be reported as a regression?

Pages with too few prior samples lack a trustworthy baseline to regress from, and chronically slow pages already recorded in memory should not be re-filed. Low-volume percentiles are noise and are gated out by minimum sample thresholds.