Skip to content
Automation
Skill

/citation-crosscheck

Double-blind bibliographic cross-check: one agent extracts each cited entry verbatim from the local .bib, a second independently re-fetches the same paper's record from the web while blind to the .bib, and a third extractor emits a mechanical field-by-field delta to catch

BOOST
From plugin
aris
18k85 skills1 agent1 command
Install
$ npx -y skills add wanshuiyin/Auto-claude-code-research-in-sleep --skill citation-crosscheck --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/citation-crosscheck

Context preview

The summary Claude sees to decide when to auto-load this skill.

Double-blind bibliographic cross-check: one agent extracts each cited entry verbatim from the local .bib, a second independently re-fetches the same paper's record from the web while blind to the .bib, and a third extractor emits a mechanical field-by-field delta to catch

SKILL.md

citation-crosscheck.SKILL.md
name: citation-crosscheck
description: "Double-blind bibliographic cross-check: one agent extracts each cited entry verbatim from the local .bib, a second independently re-fetches the same paper's record from the web while blind to the .bib, and a third extractor emits a mechanical field-by-field delta to catch dropped/re-ordered authors, wrong years, wrong venues, and bad DOIs/arXiv ids. The main agent (never a shard) assigns the MATCH/MINOR/MISMATCH verdict per reference, and exports a side-by-side spreadsheet. Use when user says \"citation crosscheck\", \"double-blind citation check\", \"verify bib against scholar\", \"bib field audit\", \"引用交叉核对\", or before submission when bibliography FIELD accuracy (not just existence) must be certified."
argument-hint: "[paper-directory-or-bib-file] [--xlsx <path>] [--cited-only|--all]"
allowed-tools: Bash(*), Read, Grep, Glob, Write, Agent, WebFetch, WebSearch

Citation Cross-Check (double-blind bib-vs-web field audit)

> 🔒 **Do not wrap this skill in `/loop`, `/schedule`, or `CronCreate`.** It is > verdict-bearing — it emits a per-reference verdict that gates `.bib` edits (an evidence > instrument, not a cross-model acquittal; see the acceptance-gate note in Step 2). > Re-running it on a timer adds no signal (the verdict changes only when the > *bibliography* changes). > Schedule the external wait that precedes it: bibliography finalized → run once. See > [`shared-references/external-cadence.md`](../shared-references/external-cadence.md).

Why this exists (and how it differs from `citation-audit`)

`citation-audit` is a single cross-model reviewer that judges three things holistically: existence, metadata, and **context-fit** (is the cited paper used for a claim it actually supports?). This skill does **not** do context-fit. It does one thing that a single reviewer cannot do reliably: an **adversarial, double-blind, field-level diff** of the local `.bib` entry against an *independently reconstructed* record.

The failure mode it targets is the hand-entry error that survives a plausibility read: a **dropped or re-ordered author**, a **wrong year**, a **swapped venue**, a **DOI that 404s**. A single reviewer that sees the `.bib` entry tends to anchor on it and rate it "looks correct." Two agents that never see each other's output cannot anchor — a discrepancy only survives if *both* independent records agree, and the verifier reports exactly where they diverge.

In practice it catches dropped/re-ordered authors, wrong years, and bad DOIs that a single-pass audit rated "looks clean" — while `NEEDS_WEBCHECK` stops it from false-flagging a legitimate non-arXiv (blog / tech-report) citation as fabricated. Use it **in addition to** `citation-audit`, not instead: `citation-audit` protects your *review score* (context-fit); this protects against the *integrity red flag* of a wrong or fabricated reference (existence + fields).

| | `citation-audit` | `citation-crosscheck` (this) | |---|---|---| | Owns | existence + metadata + **context-fit** | **existence + field accuracy**, adversarially | | Method | one cross-model reviewer | **two blind extractors + a mechanical field-diff** | | Reads the .tex claims? | yes | no (bibliographic only) | | Deliverable | KEEP/FIX/REPLACE/REMOVE per entry | **side-by-side .xlsx** + MATCH/MINOR/MISMATCH | | Best at catching | wrong-context citation | dropped/re-ordered author, wrong year/venue/DOI |

Constants

  • **BLIND = true** — the web agent (B) MUST be prompted with only each paper's title +

first author, plus its opaque `dedup_key` (a run-local ordinal that carries no bibliographic content), and MUST NOT read the `.bib` or any repo file. This is the whole point; do not relax it.

  • **SOURCES** = arXiv (`/abs/<id>`, `/bibtex/<id>`), DBLP, CrossRef, ACL Anthology,

NeurIPS/PMLR proceedings, OpenReview. Report what the fetched page shows; never fabricate a field.

  • **VERDICTS** (assigned by the **main agent only**, in Step 4 — never by a shard) =

`MATCH` (bibliographically equivalent, cosmetic-only) / `MINOR` (formatting or a preprint-vs-published venue, no correction required) / `MISMATCH` (real discrepancy: wrong/missing author, wrong year, wrong venue, wrong id) / `NEEDS_WEBCHECK` (B could not confirm existence, but the entry is a `@misc`/blog/tech-report whose `url` B's index-based search structurally cannot see — the main agent must fetch that `url` in Step 4 before any verdict; **never** downgrade such an entry straight to `MISMATCH`).

  • **SCOPE** = cited-only by default (entries that render in the `.bbl`); `--all` also

covers uncited `.bib` entries.

  • **OUTPUT** = `<paper-dir>/citation_crosscheck_<date>.xlsx` (+ the four intermediate JSONs —

`cx_A_ourbib`, `cx_B_web`, `cx_C_fielddiff`, and the gate's `cx_gate.json` — kept for audit).

Workflow

Step 1 — Resolve the citation set (deterministic, main agent)

# Search the paper's own source tree, not the whole repo: bundled author-kit /
# template .tex carry demo \cite{...} that inflate the set. Set PAPER_DIR to the dir of
# the main .tex (\documentclass + \bibliography); recurse (cites often live in
# sections/*.tex); exclude vendored/example dirs.
PAPER_DIR="<dir of the paper's main .tex>"
cd "$PAPER_DIR"
python3 - <<'PY'
import re, pathlib
# Skip vendored/example/template trees: bundled author kits carry demo \cite{...}.
# NOTE: this is a NAME match — a dir you *want* audited must not match (rename it or
# narrow SKIP), e.g. `examples_of_results/` would be skipped.
SKIP = re.compile(r'(?i)(^|/)(.*template.*|.*upstream.*|.*example.*|.*vendor.*)(/|$)')
# Verbatim-ish blocks AND inline \verb|...| / \lstinline are code samples, not citations.
VERB = re.compile(r'\\begin\{(verbatim|lstlisting|minted|Verbatim)\}.*?\\end\{\1\}', re.S)
# The optional arg may itself contain brackets: \lstinline[language={[LaTeX]TeX}]|...|
VERBINLINE = re.compile(r'\\(?:verb|lstinline)\*?'
                        r'(?:\[(?:[^\[\]]|\[
Read more
Ships witharis

· · · · · · · · 💬 Join Community · 🌱 ARIS is a methodology, not a platform. What matters is the research workflow — take it wherever you go.

Get the whole plugin

Other skills on aris.

alphaxiv
Skill

alphaxiv

Quick single-paper lookup via AlphaXiv LLM-optimized summaries with tiered source fallback. Use when user says "explain this…

@wanshuiyin@wanshuiyinInstall Skill
arxiv
Skill

arxiv

Search, download, and summarize academic papers from arXiv. Use when user says "search arxiv", "download paper", "fetch arxiv",…

@wanshuiyin@wanshuiyinInstall Skill