Use this skill to verify CLAIM-LEVEL grounding of a documentation page (or set of pages) against the source code. Activate when you have specific pages to check for factual accuracy -- not when sweeping a whole corpus (use docs-corpus-audit for that) and not when triaging a PR diff (use docs-sync for that). Trigger nouns: "is this doc accurate", "verify the page against the code", "fact-check this section", "any claims that drifted from source", "fact-checking", "grounding audit", "drift hunt", "claim verification". Returns per-claim verdicts (GROUNDED | PARTIAL | CONTRADICTED | UNSUPPORTED) with file:line evidence citations. Catches paragraph-level inaccuracies that page-level audit averages over -- e.g. a paragraph with 5 claims where 4 are grounded and 1 is fabricated. Does NOT modify files (returns advisory only); does NOT re-architect the docs; does NOT triage PRs.
npx skills add https://github.com/microsoft/apm --skill docs-grounding-verifier
CLAIM-LEVEL grounding verification. Adapts the RAGAS faithfulness-eval
pattern (proven in RAG literature) to docs/code instead of generated-
answers/retrieved-context. Source code is the ground truth; docs
paragraphs are the candidate text under audit.
python-architect persona
doc-writer persona
This skill is a SIBLING of docs-corpus-audit and docs-sync. The
boundary is load-bearing:
| Skill | Trigger | Scope | Granularity |
| ---------------------- | -------------------------------------- | ---------------- | --------------- |
| docs-sync | PR opened/synchronized | PR diff only | Page-level |
| docs-corpus-audit | Maintainer asks for whole-corpus pass | Entire corpus | Page-level |
| docs-grounding-verifier | Verify specific pages factually | 1..N pages | CLAIM-level |
docs-corpus-audit invokes this skill in its VERIFY phase on the
highest-risk pages of each wave. docs-sync can invoke it on the
specific pages in a PR diff. The skill is also runnable standalone.
but actually consistent with the implementation.
docs-corpus-audit.docs-sync.editorial-owner persona directly.PARENT
-> [Stage 1: EXTRACT claims, fan-out PANEL]
per page -> LLM extracts atomic factual claims as JSON
script: scripts/extract-claims.py
-> [Stage 2: RETRIEVE evidence, deterministic S7]
per claim -> grep over src/ via keywords + hints
script: scripts/retrieve-evidence.sh (NO LLM)
-> [Stage 3: JUDGE grounding, adversarial A7]
per (claim, evidence) -> LLM rules GROUNDED|PARTIAL|CONTRADICTED|UNSUPPORTED
asset: assets/judge-prompt.md
-> [Stage 4: SYNTHESIZE]
aggregate ungrounded -> doc-writer for fix
re-verify after fix (A8 ALIGNMENT LOOP)
Stage 2 is the load-bearing design choice: evidence retrieval is
DETERMINISTIC (grep + AST hints), not LLM. The judge in Stage 3 can
only rule on evidence it actually receives -- it cannot hallucinate
support that the retriever did not find. This is the structural
guard against the failure mode "the LLM convinces itself the docs
match the code."
Input: list of page paths to verify (1..N). If a risk_class is
attached (e.g. "high-stakes"), prefer it; otherwise treat all as equal.
Out-of-scope:
docs/src/content/docs/ orpackages/apm-guide/.apm/skills/apm-usage/.
rather than force-extract.
For each page, dispatch ONE claim-extractor agent:
scripts/extract-claims.py <page> produces theprompt and embeds the page content.
"expected_source_areas"}]}` capped at 15 claims per page.
Parallel safe; no shared state between extractors.
For each claim, pipe to scripts/retrieve-evidence.sh:
"evidence_count"}`.
Sequential is fine (grep is fast). No LLM. Diagnostics on stderr,
data on stdout.
For each (claim, evidence) tuple, dispatch ONE grounding-judge agent:
assets/judge-prompt.md.judge-prompt.md.Batching across claims-of-one-page into a single judge call is fine
(prompt with all tuples at once). Across pages, fan out.
Aggregate verdicts. Materialize the report:
{
"summary": {
"pages_verified": N,
"claims_total": N,
"grounded": N, "partial": N, "contradicted": N, "unsupported": N,
"grounding_rate": N/total
},
"actionable": [
{"page", "claim", "verdict", "evidence_cited", "fix_suggestion"}
]
}
CONTRADICTED and PARTIAL are doc-writer work items. UNSUPPORTED is
split: if retrieval_fix_suggestion is plausible, retry retrieval
with the suggested keywords; if still empty, treat as CONTRADICTED.
Hand actionable items to doc-writer (one subagent per page). After
edits, RE-RUN the pipeline on the same pages. The grounding_rate
must MONOTONICALLY INCREASE between iterations or the loop has
diverged -- stop and escalate to the operator.
disproves it -- not vague "the code doesn't say that".
evals/) passes on the trigger evals andthe content evals before the skill is treated as production-ready.
scripts/extract-claims.py -- Stage 1 prompt builder. --help, --schema.scripts/retrieve-evidence.sh -- Stage 2 retriever. Deterministic. --help.scripts/verify-page.sh -- end-to-end orchestrator. --help.assets/judge-prompt.md -- Stage 3 adversarial judge prompt.evals/trigger-evals.json -- 20 dispatch queries (10 should, 10 shouldn't).evals/content-evals.json -- seeded-drift recall scenarios.evals/run-evals.sh -- the eval-runner that turns JSON into metrics.real evidence.
state, never in references/.
paths; A9 PROBE before invoking docs-corpus-audit's substrate.
split is the ship gate (must distinguish from docs-sync /
docs-corpus-audit triggers).
Assists in writing high-quality content by conducting research, adding citations, improving hooks, iterating on outlines, and providing real-time feedback on each section. Transforms your writing process from solo effort to collaborative partnership.
Identifies high-quality leads for your product or service by analyzing your business, searching for target companies, and providing actionable contact strategies. Perfect for sales, business development, and marketing professionals.
Use this skill to query your Google NotebookLM notebooks directly from Claude Code for source-grounded, citation-backed answers from Gemini. Browser automation, library management, persistent auth. Drastically reduced hallucinations through document-only responses.
Efficient database search tool for bioRxiv preprint server. Use this skill when searching for life sciences preprints by keywords, authors, date ranges, or categories, retrieving paper metadata, downloading PDFs, or conducting literature reviews.
Query and analyze scholarly literature using the OpenAlex database. This skill should be used when searching for academic papers, analyzing research trends, finding works by authors or institutions, tracking citations, discovering open access publications, or conducting bibliometric analysis across 240M+ scholarly works. Use for literature searches, research output analysis, citation analysis, and academic database queries.
Access USPTO APIs for patent/trademark searches, examination history (PEDS), assignments, citations, office actions, TSDR, for IP analysis and prior art searches.
Multiagent AI system for scientific research assistance that automates research workflows from data analysis to publication. This skill should be used when generating research ideas from datasets, developing research methodologies, executing computational experiments, performing literature searches, or generating publication-ready papers in LaTeX format. Supports end-to-end research pipelines with customizable agent orchestration.
Automated LLM-driven hypothesis generation and testing on tabular datasets. Use when you want to systematically explore hypotheses about patterns in empirical data (e.g., deception detection, content analysis). Combines literature insights with data-driven hypothesis testing. For manual hypothesis formulation use hypothesis-generation; for creative ideation use scientific-brainstorming.
Take microsoft/docs-grounding-verifier 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.