anomaly-check

Installation
SKILL.md

Anomaly Check

Run a quiet health check on one property and speak only when something needs a human. It is meant for a scheduler: it calls no write tool, works with a read-only connection, and its quiet-case reply is one fixed line so a log stays readable. The user's request may contain a property (or several, checked one after another with the same rules), a cadence (daily or weekly; daily is the default) and a metric to focus on; nothing else is needed.

Workflow

  1. Resolve the property. If the user's request or the conversation names a property, use it. Site URLs use GSC formats: sc-domain:example.com or https://www.example.com/. Otherwise call list_sites and pick the obvious match. If several plausible properties exist, ask the user which one before continuing; a scheduled run with no clear match reports that as its finding. GSC data lags about 2 to 3 days: the tools end at the latest settled date, so the check window is the last 7 settled days for a daily run and the last 14 for a weekly one; never treat the most recent 2 days as complete.

  2. Single-day anomalies. Call detect_anomalies with metric: "clicks", days: 28 (minimum 21) and the default sensitivity (3.5; the range is 2 to 6 and lower finds more). Repeat with metric: "impressions".

    • Keep only anomalies whose date falls inside the check window; read severity (critical, high, medium, low, info), direction (up or down), actual, expected and deviationPercent.
    • summary carries the counts per severity. coverage.zeroFilledDays says how many days had no rows at all; a drop to zero is flagged, which is also what a data gap looks like.
  3. Level shift. Call detect_change_points with metric: "clicks", days: 60 and the default sensitivity of 2.

    • Read changePoints (date, direction, beforeMean, afterMean, changePercent) and keep entries dated within the last 14 days.
    • When count is 0, trendSummary.direction and trendSummary.ratio describe the slope. A gradual slide is not a finding for this check, but mention it in a weekly run when ratio is below 0.8.
  4. Week over week. Call get_site_summary with days: 7 (days: 14 for a weekly run).

    • Compare current with previous on clicks and impressions; derive the percentage change yourself and say so.
    • ctr is already a percentage on a 0-100 scale, never multiply it by 100; avgPosition is lower-is-better, so a move toward a lower number is an improvement.
Installs
2
First Seen
2 days ago