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…
Skill by wanshuiyin
Chalk Labs
Need help deploying citation-crosscheck?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code. Read the repository before you give any tool access to your data.
npx agentmarket install skill/wanshuiyin-citation-crosscheck
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: spreadsheets, security, research, agent-building
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Python package
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/citation-crosscheck
Tools it pre-approves 8
From allowed-tools in SKILL.md: the agent may use these without asking you each time.
Bash(*),Read,Grep,Glob,Write,Agent,WebFetch,WebSearch
What's inside
- Skill 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.
- License
- MIT
- Allowed tools
- Bash(*),, Read,, Grep,, Glob,, Write,, Agent,, WebFetch,, WebSearch
- Instructions
- 526 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
- Pre-approves some shell commands
- Instructions call the network
Agent Skills spec issues
- body: 526 lines (spec recommends under 500)
Files (2)
- SKILL.md
- cx_verify.py · scripts/
SKILL.md (first lines)
# 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)
```bash
# 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'(?:\[(?:[^\[\]]|\[[^\]]*\])*\])?\s*'
r'([^\sA-Za-z])(?:(?!\1).)*\1', re.S)
# url/href/path args may contain a literal % that is NOT a comment. Neutralize them
# BEFORE comment-stripping, or a real \cite later on that line is silently lost.
URLCMD = re.compile(r'\\(?:url|href|path|nolinkurl)\s*\{[^{}]*\}')
COMMENT = re.compile(r'(?m)(?<!\\)%.*$')
# EXPLICIT ALLOWLIST of cite commands. Do NOT build this from a prefix/suffix pattern:
# a Cartesian `(no|paren|auto|...)?cite(s|p|t|...)?` both invents commands (\citecite,
# \parenciteyear -> fake keys from any brace arg) and misses real ones (\footfullcite,
# \volcite, \notecite). Longest-first so \footfullcite wins over \footcite.
# volcite-family: the FIRST brace arg is a volume/page, NOT a cite key.
VOLCITE = {'volcite', 'Volcite', 'pvolcite', 'Pvolcite', 'fvolcite', 'ftvolcite',
'svolcite', 'tvolcite', 'avolcite',
'volcites', 'Volcites', 'pvolcites', 'Pvolcites', 'fvolcites', 'svolcites',
'tvolcites', 'avolcites', 'ftvolcite', 'ftvolcites'}
NAMES = sorted({
# natbib / LaTeX core (capitalized variants are real natbib commands)
'cite', 'Cite', 'citep', 'citet', 'citealp', 'citealt', 'citenum', 'citeyear', 'citeyearpar',
'citeauthor', 'citefullauthor', 'Citep', 'Citet', 'Citealp', 'Citealt', 'Citeauthor',
# biblatex singular + plural
'parencite', 'Parencite', 'footcite', 'footcitetext', 'footcitetexts', 'textcite',
'Textcite', 'smartcite', 'Smartcite', 'supercite', 'autocite', 'Autocite', 'fullcite',
'footfullcite', 'notecite', 'Notecite', 'pnotecite', 'Pnotecite', 'fnotecite',
'citetitle', 'citeurl', 'citedate', 'autocites', 'parencites', 'textcites',
'smartcites', 'supercites', 'footcites', 'cites', 'Cites', 'nocite', 'nocites',
# aliases + field/list forms + bibentry — real biblatex/natbib families
'citetalias', 'citepalias', 'Citetalias', 'Citepalias', 'citefield', 'citelist',
'bibentry', 'fullciter',
*VOLCITE,
}, key=len, reverse=True)
# (?![A-Za-z]) stops \cite matching the \citeXYZ of an unknown command; the trailing run
# accepts any mix of [opt] and {grp} so \cites{k1}[note]{k2} yields BOTH keys.
CITE = re.compile(r'\\(?:' + '|'.join(map(re.escape, NAMES)) + r')\*?(?![A-Za-z])'
r'((?:\s*(?:\[[^\]]*\]|\{(?:[^{}]|\{[^{}]*\})*\}))+)', re.S)
# Strip [optional] args BEFORE reading brace groups, or a braced note like
# \cite[see {Smith} p.3]{k} contributes 'Smith' as a phantom key.From wanshuiyin/Auto-claude-code-research-in-sleep, MIT.
More from wanshuiyin/Auto-claude-code-research-in-sleep
- 0.699score
figure-spec
wanshuiyin
Generate deterministic publication-quality architecture, workflow, and pipeline diagrams from structured JSON (FigureSpec) into editable SVG.
SkillAFreshness: A★ 18KClaude Code +9 - 0.699score
paper-illustration-image2
wanshuiyin
Generate publication-quality academic illustrations through a local Codex app-server bridge that uses Codex native image generation.
SkillAFreshness: A★ 18KClaude Code - 0.699score
proof-orchestrator
wanshuiyin
Manage a stateful, run-directory-based proof project with Codex: continuation across runs, run-local source bookkeeping, manual GPT Pro handoff packages when…
SkillAFreshness: A★ 18KClaude Code +9 - 0.699score
render-html
wanshuiyin
Render an ARIS Markdown / JSON artifact (IDEA_REPORT, AUTO_REVIEW, KILL_ARGUMENT, PAPER_PLAN, research-wiki state, etc.) into a single-file HTML view designed…
SkillAFreshness: A★ 18KClaude Code +9 - 0.699score
proof-orchestrator
wanshuiyin
Manage a stateful, run-directory-based proof project: continuation across runs, run-local source bookkeeping, manual GPT Pro handoff packages when a local…
SkillAFreshness: A★ 18KClaude Code - 0.699score
paper-poster-html
wanshuiyin
DEFAULT poster pipeline — build an academic conference poster (ICML/NeurIPS/ICLR/CVPR/...) as a single HTML/CSS file with measurement-driven hard gates, real…
SkillAFreshness: A★ 18KClaude Code - 0.699score
lean-formalize
wanshuiyin
Develop and verify a mathematical proof in Lean, continue an incomplete Lean project, or audit whether it proves the original statement.
SkillAFreshness: A★ 18KClaude Code - 0.695score
experiment-queue
wanshuiyin
SSH job queue for multi-seed/multi-config ML experiments with OOM-aware retry, stale-screen cleanup, and wave-transition race prevention.
SkillAFreshness: A★ 18KClaude Code - 0.694score
arxiv
wanshuiyin
Search, download, and summarize academic papers from arXiv.
SkillAFreshness: A★ 18KClaude Code +9 - 0.694score
claims-drafting
wanshuiyin
Draft patent claims for an invention.
SkillAFreshness: A★ 18KClaude Code - 0.694score
analyze-results
wanshuiyin
Analyze ML experiment results, compute statistics, generate comparison tables and insights.
SkillAFreshness: A★ 18KClaude Code +9 - 0.694score
alphaxiv
wanshuiyin
Quick single-paper lookup via AlphaXiv LLM-optimized summaries with tiered source fallback.
SkillAFreshness: A★ 18KClaude Code +9
Signals
- Stars
- 18,007
- Forks
- 1,488
- Open issues
- 58
- Last commit (this folder)
- Oct 19, 2026 (12 days ago)
- Last release
- Sep 28, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from wanshuiyin
- 0.699score
paper-poster-html
wanshuiyin
DEFAULT poster pipeline — build an academic conference poster (ICML/NeurIPS/ICLR/CVPR/...) as a single HTML/CSS file with measurement-driven hard gates, real…
SkillAFreshness: A★ 18KClaude Code - 0.699score
paper-illustration-image2
wanshuiyin
Generate publication-quality academic illustrations through a local Codex app-server bridge that uses Codex native image generation.
SkillAFreshness: A★ 18KClaude Code - 0.699score
lean-formalize
wanshuiyin
Develop and verify a mathematical proof in Lean, continue an incomplete Lean project, or audit whether it proves the original statement.
SkillAFreshness: A★ 18KClaude Code - 0.699score
figure-spec
wanshuiyin
Generate deterministic publication-quality architecture, workflow, and pipeline diagrams from structured JSON (FigureSpec) into editable SVG.
SkillAFreshness: A★ 18KClaude Code +9 - 0.699score
proof-orchestrator
wanshuiyin
Manage a stateful, run-directory-based proof project: continuation across runs, run-local source bookkeeping, manual GPT Pro handoff packages when a local…
SkillAFreshness: A★ 18KClaude Code - 0.699score
render-html
wanshuiyin
Render an ARIS Markdown / JSON artifact (IDEA_REPORT, AUTO_REVIEW, KILL_ARGUMENT, PAPER_PLAN, research-wiki state, etc.) into a single-file HTML view designed…
SkillAFreshness: A★ 18KClaude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get citation-crosscheck running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
citation-crosscheck skill. Agent Mart. https://agentmart.dev/skills/wanshuiyin-citation-crosscheck (last updated 2026-10-24)