AI Visibility Monitor
Produce a hash-pinned Visibility Run from immutable research, a formal frozen Query Corpus, repeated raw answer captures, retrieval traces where the surface exposes them, and citation reviews. This skill measures what was observed; it does not prescribe changes or claim why a metric moved. Legacy 1.0.0 runs remain readable; create new work with schema 2.0.0.
Required inputs
- Require a contract-valid Research Pack produced by
ai-search-research; bind its bundle-relative path and SHA-256 into every run. - Require a valid
query-corpus.jsonwhose Research Pack hash matches, whosefrozen_atprecedes every observation, and whose selected query text, locale, engine, surface, entities, andfact_idsresolve. Do not invent hidden fan-out queries. - Require dated raw answer captures for observed cells. Preserve inaccessible, blocked, unavailable, and error states as explicit null-answer observations.
- For a comparison, require the prior Visibility Run as an immutable hash-pinned artifact.
- Read measurement-protocol.md before collecting, scoring, or comparing observations.
Procedure
- Validate the complete Research Pack and its semantic provenance before measurement.
- Freeze the query corpus before collection. Record timezone-aware
frozen_at, hash it, and requirefrozen_at <= observed_atfor every cell; never add, remove, reword, translate, or silently substitute a query during a run. - Declare planned/completed repeats, confidence method, confidence level, and fresh-session policy. Collect every query/engine/surface/locale/repeat cell without choosing the most favorable answer.
- Record
observed_at, access state, disclosed model, conversation turn, user location, device, authentication/personalization state, retrieval mode, collection method, and either a hash-pinned raw answer or access-attempt receipt. - Preserve only actually disclosed executed/grounding queries and consulted sources. Keep consulted sources distinct from visible citations. Never reconstruct hidden retrieval behavior.
- Preserve every cited URL exactly as observed, derive its canonical form separately, and review each citation-to-claim link with a hash-pinned support verdict. Citation presence is not claim support.
- Resolve mentioned entities only when a supplied Research Pack name or alias appears in the raw answer. Do not infer mentions from citations alone.
- Score only explicit metrics using the canonical versioned
definition_idand exact definition for that metric, with visible numerators, denominators, sample size, repeat count, confidence interval or a declarednot-estimatedstate, results, and uncertainty notes. Missing access is not a negative result. - Check every fact declared for every observed corpus cell/repeat against Research Pack ground truth. Automatic
correctrequires both the extracted claim and complete normalized answer to equal the accepted value; bind every other verdict to a hash-pinned review artifact. - For comparisons, verify prior hash, identity, chronology, Research Pack and corpus hashes, repeat profile, metric definition, score target, access profile, and referral source/method/window duration. Mark changed cohorts non-comparable and explain the warning.
- Describe movement as observational drift. Never state or imply that an optimization, publication, schema change, crawler setting, or other intervention caused movement.
- Create schema
2.0.0visibility-run.jsonwith stable IDs, hash-pinned artifacts, explicit limitations, and no optimization recommendations. - Let
<suite-root>mean${CLAUDE_PLUGIN_ROOT}in Claude Code. In Codex, read.seo-suite-runtime.jsonbeside thisSKILL.mdwhen present and use itssuite_rootvalue; otherwise use the absolute repository checkout. Runpython "<suite-root>/scripts/validate_ai_visibility_monitor.py" validate-run <artifact> --bundle <bundle>and close all critical or important findings. Put minor findings in backlog.
Metric boundaries
mention_rate: share of eligible observed answers that explicitly mention one Research Pack entity.citation_rate: share of eligible observed answers containing at least one citation.cited_source_share: share of distinct canonical sources per observed answer matching one declared canonical source URL.answer_accuracy: share of all declared fact-to-observation checks assessedcorrect;partialandunverifiableremain in the denominator.referral_rate: use only when a hash-pinned referral envelope binds a supported raw event export. Recompute the numerator and denominator from eligibleai/non_aievents inside the declared window. Otherwise omit it.
Do not combine these metrics into a universal visibility score. Do not compare percentages whose corpora, access states, time windows, locales, or metric definitions are not comparable.
Ownership boundaries
- Route new query discovery, source collection, or Research Pack repair to
ai-search-research. - Route direct-answer and extractability audits to
seo-aeo. - Route entity, evidence, citation-suitability, and documented engine-control audits to
seo-geo. - Route a validated audit and any needed baseline evidence to
seo-action-planbefore implementation; this monitor does not rewrite, optimize, or approve a change.
Never bypass authentication, bot controls, rate limits, paywalls, or unavailable product access. Record the access state and continue with the observable cohort.
Severity and review rule
critical: the run would be materially false, fabricated, unsafe, or unusable.important: provenance, denominator, raw-evidence binding, comparison integrity, or ownership is materially incomplete or misleading.minor: a non-blocking clarity or maintainability improvement.
Close critical and important findings. Backlog minor findings. Review each candidate hash at most twice.