From academic-research
Verifies that manuscript citations are honestly supported by their sources using staged abstract-then-fulltext analysis and a defined classification scheme. Used internally by fact-check and critic-loop skills.
How this skill is triggered — by the user, by Claude, or both
Slash command
/academic-research:verifying-citationsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
A citation is verified when an externally consulted source (Zotero PDF fulltext or abstract — never training memory) directly supports the claim the manuscript attributes to it. Verification is staged: read the abstract first; escalate to full text only when the abstract is silent, ambiguous, or insufficient for the kind of claim being made.
A citation is verified when an externally consulted source (Zotero PDF fulltext or abstract — never training memory) directly supports the claim the manuscript attributes to it. Verification is staged: read the abstract first; escalate to full text only when the abstract is silent, ambiguous, or insufficient for the kind of claim being made.
This skill is the single source of truth for citation-verification doctrine. fact-check (one-shot audits) and the evidence critic in critic-loop (iterative revision) both load it so that when the rules change, two skills don't drift.
Insertion vs verification. The complementary skill grounded-citations governs inserting a citation during drafting — same externalised-consultation rule, but it escalates on recency / context staling (a faded context-window memory needs re-fetching). This skill governs auditing an existing citation, and it escalates on claim type — quoted passages, specific β coefficients, and method details always require fulltext regardless of what the abstract says. Same demand for grounding; different decision axis.
Unit of dispatch: one subagent per unique citation, not per mention. A paper cited five times in a manuscript becomes one subagent (with five mentions in its prompt), not five subagents. This (a) fetches the source once and (b) lets the subagent catch cross-mention inconsistency — e.g. the manuscript citing the same paper for X in Methods and ¬X in Discussion — which per-mention dispatch can't see. See Multiple mentions of one source below.
| Classification | When to assign |
|---|---|
| VERIFIED | The source directly supports the claim — sign, direction, finding, and magnitude all match. |
| MINOR | The claim overreaches the source: oversimplified finding, missing caveat the source considers important, paraphrase that mildly overstates. |
| MAJOR | The paper doesn't exist under that key; wrong paper for the key; direction reversal; fabricated quote; specific finding not supported by the source. Blocks publication. |
| UNVERIFIABLE | Verification requires the full text and no PDF is attached to the Zotero item. The issue is access, not accuracy — recommend running enrich_pdfs.py to populate the library, or replacing the citation. Callers may map UNVERIFIABLE to MAJOR for their own report when the workflow can't ship an unresolved citation (e.g. inside critic-loop). |
The caller may pass the citation in one of two forms:
@bbtkey form (rendered manuscripts, where citations have been
resolved already) → mcp__zotero__zotero_search_by_citation_key to
resolve the BBT key to a Zotero item key.mcp__zotero__zotero_search_items
with the surname(s) and year (and a second co-author surname if
present in the prose to disambiguate). If multiple candidates match,
pick the one whose title/venue is consistent with the surrounding
context.If nothing resolves — neither the BBT key nor any Author-Year search finds a matching item — the citation is MAJOR (paper not in library) for every mention of it, with the recommendation: "add the paper to Zotero, or replace the citation with one that supports the claim."
mcp__zotero__zotero_get_item_metadata on the resolved item key.
| Abstract says... | Action |
|---|---|
| Directly states the claim, with matching direction / sign / finding | VERIFIED — done. |
| Directly contradicts the claim (direction reversal, contrary finding) | MAJOR — done. |
| Is silent on the specific claim, or consistent but inconclusive | Escalate to Stage C. |
mcp__zotero__zotero_get_item_fulltext — works when the PDF is attached. Verify against the body:
If zotero_get_item_fulltext returns no content (no PDF attached, OCR empty), classify UNVERIFIABLE with a message naming what's missing — e.g. "no PDF attached for @key; run enrich_pdfs.py then re-run, or replace the citation."
Do not fall back to OpenAlex / Semantic Scholar / publisher MCPs inside this skill. The plugin already has scripts/pipelines/enrich_pdfs.py for populating Zotero from publisher sources (ScienceDirect, Wiley TDM, browser fallbacks). Broadening the fulltext source pool is that script's job, not the auditor's.
Skip Stage B and go straight to Stage C — the abstract cannot conclusively support these claim types regardless of how it reads:
The caller dispatches one subagent per unique citation with all of the manuscript's mentions of that citation in the prompt. The subagent should:
A subagent returns one block per mention plus, optionally, one cross-mention block:
@citekey (or the Author-Year surface form when no @key exists yet)
Mention 1 — location: "<section / quoted excerpt>"
Classification: VERIFIED | MINOR | MAJOR | UNVERIFIABLE
Stage: abstract | fulltext | unverifiable
Evidence: <one line — direct quote or paraphrase of the relevant source content>
Recommendation: <one line — what the author should do, if anything>
Mention 2 — location: "..."
Classification: ...
...
Cross-mention (only if applicable):
Finding: <one line — describe the internal inconsistency>
Severity: MAJOR | MINOR
Recommendation: <one line>
When a citation has only one mention, the cross-mention block is omitted and there is exactly one mention block.
This is the contract between this skill and its callers. Callers
reshape these blocks into their own report formats — fact-check's
console table or report file, critic-loop's ISSUES: numbered list.
grounded-citations enforces the same rule at insertion time; this skill enforces it at audit time.)enrich_pdfs.py's responsibility. UNVERIFIABLE is the correct outcome here.npx claudepluginhub mronkko/claude-academic-research --plugin academic-researchValidates whether in-text citations are actually supported by their cited sources, classifying each as supported, partially supported, unsupported, or uncheckable.
Verifies citations in academic/legal manuscripts by checking existence, accuracy, quotes, and claim grounding using Paperpile, BibTeX, and RAG.
Verifies every citation in a manuscript by fetching cited works to detect ghost papers, wrong IDs, inverted claims, and dead links. Includes optional fix mode for bib corrections and claim rewrites.