> Establish baseline → snapshot → compare → history monitoring for any KPI, config, or metric that can drift during PRD v0.8 Deployment & Ops. Triggers on requests to monitor drift, baseline a value for later comparison, or when user asks "how do we track if X changes?", "baseline this", "config drift", "performance regression", "metric drift", "compare to last week", "is this getting worse?". Outputs MON-DRIFT-* entries with baseline + comparison rules.
npx skills add https://github.com/mattgierhart/PRD-driven-context-engineering --skill prd-v08-drift-baseline-compare
Position in workflow: v0.8 Monitoring Setup → v0.8 Drift: Baseline / Compare / History → v0.8 Runbook Creation
Default is standard. See .claude/rules/08-skill-execution-modes.md for selection logic.
| Mode | What this skill produces |
|------|--------------------------|
| quick | One metric / config / dataset baselined; weekly compare schedule; simple threshold alert |
| standard | 3–5 things monitored; baseline + tiered thresholds (warn / critical); compare cadence; history retention |
| deep | Full portfolio; multi-dimensional comparison (per segment, per environment); regression-cause matrix; auto-baselining after intentional change |
Generalizes a pattern AgriciDaniel's claude-seo skill encodes for SEO drift — baseline → snapshot → compare → history — into a reusable monitoring shape that works for any metric, config, or dataset that can change over time and needs to be watched.
This is drift monitoring, distinct from alerting on absolute thresholds. Alerting answers "is X over the line right now?" Drift monitoring answers "is X different from last week's normal?" — which catches slow regressions that absolute thresholds miss.
Examples of things worth drift-monitoring:
status/baselines/, monitoring/snapshots/, etc.).Monitoring AI search position for the target query "best CRO tool for SaaS founders" across 3 surfaces. (Generalized from AEO Audit re-test cadence.)
Baseline (2026-04-01):
ChatGPT: not mentioned (rank: --)
Perplexity: rank 4 of 5, miscategorized as "analytics"
AI Overviews: not mentioned
Sources cited: [competitor1.com, competitor2.com, reddit.com/r/SaaS]
Thresholds:
Compare cadence: weekly during launch month, monthly after.
Re-snapshot (2026-04-15):
ChatGPT: rank 3 of 5 (NEW) ← improved
Perplexity: rank 3 of 5, category corrected (NEW) ← improved
AI Overviews: rank 5 of 7 (NEW) ← improved
Sources cited: [+ ourdomain.com (NEW), ...]
Compare output: 3 surfaces improved. Likely cause: alternatives-pages campaign + new CRO-anchored blog post indexed.
History append: 2026-04-01 → 2026-04-15 row added to history log.
Action: No alert; positive drift. Baseline can stay (next compare in 2 weeks). If the trend reverses, the baseline catches it.
status/drift-history/<id>.jsonl (or similar) — Append-only record of compare resultsscripts/drift/<id>.sh or equivalent) when automatable| Trigger | Mode |
|---------|------|
| Post-launch — need ongoing watch on KPIs | standard |
| AEO Audit results to maintain | standard |
| Competitor feature parity tracking | standard |
| Vendor / third-party pricing watch | quick |
| Performance regression hunting | deep |
| Infrastructure cost trend | quick |
Do not use for things that are already covered by threshold-based alerting (RED/USE metrics, MON-* alerts). Drift is for trends; alerting is for absolutes.
Type=Drift-Baseline — One per monitored thingstatus/drift-history/ — Append-only diff historyscripts/drift/ (when automatable)MON-DRIFT-XXX: Baseline — [What is being monitored]
Type: Drift-Baseline
Category: [KPI | AI-Search | Config | Performance | Cost | Vendor | Competitor]
Owner: [Person / role]
Status: Active
Subject: [Specific thing — e.g., "ChatGPT rank for query 'best CRO tool for SaaS'"]
Baseline (YYYY-MM-DD):
[Snapshot — values, list, config dump, etc.]
Thresholds:
Warn: [Condition — e.g., "rank change ≥1 OR sources list changes"]
Critical: [Condition — e.g., "dropped from any surface previously mentioned"]
Recalibrate-trigger: [What intentional change resets the baseline]
Compare cadence: [Hourly | Daily | Weekly | Monthly | Triggered]
Compare procedure: [Script path OR manual runbook reference]
History: status/drift-history/<id>.jsonl
Re-snapshot history:
- YYYY-MM-DD: [summary of last compare result]
- YYYY-MM-DD: ...
Linked IDs: MON-XXX (data source), KPI-YYY or CFD-ZZZ or GTM-AEO-AAA (subject)
| Pattern | Signal | Fix |
|---------|--------|-----|
| Stale baseline | Comparing today's value against a 12-month-old baseline that no longer reflects "normal" | Add recalibrate-trigger conditions; refresh after intentional changes |
| Drift alerting on noise | Critical alert fires every week for 2% movement | Threshold is too tight; widen warn, tighten critical |
| No history log | Snapshot, compare, alert, forget | Append-only history is the whole point; without it, you can't see trends |
| Monitoring everything | 50 MON-DRIFT-* entries, nobody reads any | Pick the 3–5 things that matter; archive the rest |
| No causal interpretation | "Drift detected" with no investigation path | Each drift signal should map to candidate causes (recent release, competitor move, AI surface change) |
| Drift instead of alerting | Using drift for things that need absolute thresholds | Drift = trends; absolutes (latency > 500ms) = alerting |
Before activating drift monitoring:
| Consumer | What it uses | Example |
|----------|--------------|---------|
| Runbook Creation (RUN-) | Drift criticals trigger investigation runbooks | MON-DRIFT-AEO critical → RUN-investigate-aeo-loss |
| Launch Metrics | Drift on launch KPIs informs go/no-go decisions | KPI-activation drift ≥10% → re-look at GTM |
| Feedback Loop Setup | Drift in customer-facing metrics drives CFD- investigation | Activation drift down → CFD- interview cohort |
| v0.9 AEO Audit (re-run) | Drift in AI search positions triggers re-audit | AEO drift → re-run aeo-audit |
| v1.0 Continuous Discovery | Drift patterns inform discovery questions | "Why is X drifting?" → Teresa Torres discovery |
seo-drift skill — original baseline/compare/history pattern for SEOreferences/ — pattern is reusable; the *content* lives in each MON-DRIFT- entry)Take mattgierhart/prd-v08-drift-baseline-compare from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.