From researcher
Verify scientific claims against published literature. Triggers when user says: 'fact check', 'verify claim', 'is this true', 'check this statement', 'verify citations', 'evidence for', 'is this supported', 'check my claims', 'validate findings', 'source check'. Searches literature to find evidence supporting or contradicting a specific claim, classifies evidence strength, and produces structured fact-check reports. Use this skill whenever the user needs to verify the accuracy of a scientific statement or check claims in a manuscript; reconciling many sources into one thesis is research-convergence.
How this skill is triggered — by the user, by Claude, or both
Slash command
/researcher:fact-checkingThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Verify scientific claims and statements against published literature with evidence classification.
Verify scientific claims and statements against published literature with evidence classification.
NEVER mark a claim as "Supported" without actual retrieved evidence. If no evidence is found, classify as "Unsupported", not "Supported" with fabricated sources. Absence of evidence is reported honestly.
search / get), then verify each source's identity and status (verify-ref). See Deterministic backend below.faithfulness, axis c), then assess relevance, quality, and stance toward the claim. See Deterministic backend below.Evidence retrieval, source identity, and claim anchoring run through the researcher-core CLI, so a fact-check is reproducible and its verdicts rest on actual retrievals rather than recall. Skills never import the kernel; they shell out and read --json. Full command and field reference: references/core-cli.md.
Standard invocation (two fallbacks documented in the reference, for a Codex install or a checkout without uv):
uv run --project "${CLAUDE_PLUGIN_ROOT}/core" python -m researcher_core <cmd> ... --json
1. Retrieve evidence (search, get). For each claim, pull candidate sources:
uv run --project "${CLAUDE_PLUGIN_ROOT}/core" python -m researcher_core search "<claim key terms>" --json
uv run --project "${CLAUDE_PLUGIN_ROOT}/core" python -m researcher_core get <doi-or-arxiv-id> --json
Consume records[] (CSL-JSON: title, author, issued, DOI, container-title), counts{}, and sources[]. A failing source lands in warnings[] and never fails the search: a downed index is not evidence for or against a claim. Default sources are openalex,crossref,arxiv; add semantic_scholar,pubmed,datacite via --sources.
2. Verify the identity and status of any source you cite as evidence (axes a, b, d), never a boolean:
uv run --project "${CLAUDE_PLUGIN_ROOT}/core" python -m researcher_core verify-ref "<doi-or-title>" --json
Consume per entry: verdict (verified / mismatch / unresolvable / inconclusive), refusal_grade (read it, do not re-derive the rule), the status block (current / corrected / retracted / expression-of-concern), and accessibility (full-text / abstract-only / unavailable). A status.checked: false is an absence of evidence, not a clean bill of health.
3. Anchor the claim against the source's passages (axis c):
uv run --project "${CLAUDE_PLUGIN_ROOT}/core" python -m researcher_core passages index <doi-or-url> --json
uv run --project "${CLAUDE_PLUGIN_ROOT}/core" python -m researcher_core passages search "<claim>" --doc <id> --json
uv run --project "${CLAUDE_PLUGIN_ROOT}/core" python -m researcher_core faithfulness "<claim>" --doc <id> --json
Consume from faithfulness: each claims[] entry's verdict (supported / partial / contradicted / insufficient-passage), its passage anchors (IDs, offsets, page coordinates), and summary{coverage, abstention_rate}. These four verdicts are the per-source claim-anchor vocabulary this skill records; they feed, but are not the same as, the synthesis-level classification below.
Degradation path (the plugin never hard-fails without core, D3). If uv or core/ is unavailable, say so in the output and fall back in order: (1) MCP servers where connected (Scite for citation context, Zotero for the user's library), then (2) web search. Name the tier that produced each result. A fact-check produced without core is labeled as such, and its claim anchors are not passage-backed.
Consume the four-state identity verdict, never a boolean (D9). A finding is refusal-grade, meaning this skill flags it as an integrity problem and will not endorse the claim as supported, ONLY when one of these holds:
unresolvable or mismatch (axis a): the cited source cannot be resolved, or resolves to a different paper;retracted (axis b): the evidence has been withdrawn;contradicted (axis c): the source says the opposite of the claim.NEVER refusal-grade, surfaced instead as open items (never accusations, never dropped as fabricated):
inconclusive: a source was rate-limited, or only one index holds the paper. A real citation is routinely inconclusive; treating it as fabrication accuses an honest author, which is the worst failure this system can make.insufficient-passage: no OA full text, so there was nothing to anchor on. The claim is NOT clean and NOT faithful; it is unverified at the passage layer. Surface it every time, never drop it.An expression-of-concern or corrected status is not refusal-grade, but it is a human checkpoint: surface it beside the verdict rather than absorbing it silently.
Every claim verdict names the layer it was checked at:
passages + faithfulness).insufficient-passage, never supported or "faithful". The layer is reported next to the verdict, always.Axis (c) is a LEXICAL baseline: BM25 retrieval plus token-overlap and polarity heuristics, measured coverage 0.750 (evals/BENCHMARKS.md). It cannot read. An overstatement that reuses the passage's own tokens scores as supported (measured: 12 of 26 partial claims were called supported). So a supported anchor is a FLOOR, not a proof: report it as "consistent with the cited passage at the lexical level", never as "the source proves the claim". This weakness is in-spec; the deferred semantic layer is what tightens it.
Primary path: the core fan-out (search, get) queries OpenAlex, Crossref, and arXiv by default (add Semantic Scholar, PubMed, and DataCite via --sources), deduplicates, and ranks, so the skill does not hand-roll per-API calls. Verification (verify-ref) adds Crossref, OpenAlex, and DataCite for axes (a), (b), (d), and citations / references add OpenCitations for citation-context checks.
Enrichment when connected (MCP tier): Scite for smart citation context (supporting / contrasting / mentioning), Zotero for the user's library. Final fallback when core is unavailable: web search, labeled as such.
Triangulate: prefer at least two independent confirming sources per claim (the two-confirmation bar core uses for a verified identity). If Scite is connected, include its citation context.
These five classes are the SYNTHESIS-level verdict for a claim across all of its sources. Each rests on the per-source axis (c) anchors (supported / partial / contradicted / insufficient-passage) together with source identity (a) and status (b). Two rules bind the synthesis: a contradicted anchor against a source cited to support the claim is refusal-grade, and a claim whose only anchors are insufficient-passage, or whose sources are all inconclusive, is not "Supported": it is unverified at the passage layer and is listed as an open item.
Multiple independent sources confirm the claim. High confidence.
Some evidence agrees, but with important qualifications.
Active disagreement in the literature.
No evidence found for or against the claim.
Evidence directly opposes the claim.
For each piece of evidence, assess:
| Factor | Weight | Notes |
|---|---|---|
| Study design | High | RCTs and meta-analyses rank highest |
| Sample size | Medium | Larger samples provide stronger evidence |
| Recency | Medium | Recent studies may supersede older findings |
| Citation count | Low | Popular ≠ correct, but indicates engagement |
| Journal quality | Low | Proxy for peer review rigor |
| Replication status | High | Replicated findings are strongest |
When the Scite MCP connector is available, use its smart citation classifications:
A claim backed by a paper with many supporting citations and few contrasting ones is stronger than one with mixed citation context.
Always check editorialNotices for retractions or corrections before using any paper as evidence.
## Fact-Check: "[original claim]"
**Classification:** [Supported | Partially Supported | Contested | Unsupported | Contradicted]
**Confidence:** [High | Medium | Low]
**Source identity (a):** [verified | mismatch | unresolvable | inconclusive] **Status (b):** [current | corrected | retracted | expression-of-concern]
### Evidence
**For (supporting):**
1. [Author et al. (Year)]: "[relevant excerpt or finding]"
Source: [journal], DOI: [doi]
Claim anchor (c): [supported | partial | insufficient-passage] at layer [full-text | abstract]; passage [passage-id]
Citation context: [supporting/mentioning] Identity (a): [verified | inconclusive]
2. ...
**Against (contradicting):**
1. [Author et al. (Year)]: "[relevant excerpt or finding]"
Source: [journal], DOI: [doi]
Claim anchor (c): [contradicted] at layer [full-text]; passage [passage-id]
Citation context: [contrasting]
### Evidence provenance
core [search | get | faithfulness]; sources: [openalex, crossref, ...]; queries: ["<query>", ...]; snapshots: [<response_hash>, ...]; retrieved_at: [<timestamp>]; mode: [live | replay | record]
### Assessment
[2-3 sentences explaining the classification and any important nuances. Name the layer each verdict was checked at, and note that a `supported` anchor is a lexical floor, not proof.]
### Recommendation
[Action for the author: keep as-is, add qualifier, revise, add citation, remove claim, or resolve an open item (inconclusive source, insufficient-passage)]
# Fact-Check Report: [Section Name]
**Claims checked:** [N]
**Supported:** [n] | **Partially supported:** [n] | **Contested:** [n] | **Unsupported:** [n] | **Contradicted:** [n]
**Refusal-grade (unresolvable / mismatch / retracted / contradicted):** [n] | **Open items (inconclusive / insufficient-passage):** [n]
Each claim entry below carries its axis verdicts (a, b, c), the layer verified, and an Evidence provenance line, exactly as in the single-claim report.
## Claims Requiring Attention
### Claim 1 (Line ~[N]): "[claim text]"
Classification: [status]
[Brief evidence summary and recommendation]
### Claim 2 ...
## Open Items
[Claims whose sources are `inconclusive`, or whose anchors are `insufficient-passage`: unverified, NOT accusations. List each with what would resolve it, e.g. a re-run when the index is reachable, or OA full text.]
## Claims Verified
[List of claims that passed verification, with sources and the layer each was checked at]
Verify that cited statistics actually appear in the cited source. Common issue: "60% of X according to [Source]" where Source says something different.
Flag claims based on evidence that has been superseded by newer studies, particularly in fast-moving fields.
Check every cited paper against retraction databases (core status / verify-ref, axis b). A manuscript citing retracted work needs immediate attention; retracted is refusal-grade, expression-of-concern and corrected are human checkpoints.
Detect when a paper is cited to support a claim but the paper actually says something different or more nuanced. Anchor the claim against the source's passages (core faithfulness, axis c): a contradicted anchor is refusal-grade, partial is a qualifier problem, and insufficient-passage means no full text was available to check. Scite's citation statements enrich this when connected.
unresolvable / mismatch (identity, axis a), retracted (status, axis b), and contradicted (faithfulness, axis c). inconclusive (identity) and insufficient-passage (faithfulness) are NEVER refusal-grade: surface them as open items, never as accusations, and never as clean. Read refusal_grade from the core JSON rather than re-deriving this rule.Canonical copy: references/integrity-constraints.md.
npx claudepluginhub sokolmarek/researcher --plugin researcherValidates whether in-text citations are actually supported by their cited sources, classifying each as supported, partially supported, unsupported, or uncheckable.
Guides citation verification in academic writing using canonical scholarly sources (DOI, arXiv, CrossRef) to prevent fake citations and ensure accuracy.
Verifies claims using adversarial search: finds supporting and contradicting evidence, assesses source quality by tiers, and issues structured verdict with confidence. Counters LLM confirmation bias.