一键导入
citecheck
Score \cite pertinence in a LaTeX file. Use when the user runs /citecheck on a .tex file or asks to verify references against InspireHEP/arXiv abstracts.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Score \cite pertinence in a LaTeX file. Use when the user runs /citecheck on a .tex file or asks to verify references against InspireHEP/arXiv abstracts.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Deep-check flagged and unresolved citations from a /citecheck run using full arXiv PDFs (Sonnet) and NotebookLM. Use when the user runs /citecheck-deep on a .tex file.
Score \cite pertinence in a LaTeX file. Use when the user runs /citecheck on a .tex file or asks to verify references against InspireHEP/arXiv abstracts.
Deep-check flagged and unresolved citations from a /citecheck run using full arXiv PDFs (Sonnet) and NotebookLM. Use when the user runs /citecheck-deep on a .tex file.
| name | citecheck |
| description | Score \cite pertinence in a LaTeX file. Use when the user runs /citecheck on a .tex file or asks to verify references against InspireHEP/arXiv abstracts. |
Score every \cite{...} in one or more LaTeX files against the cited paper's
abstract (InspireHEP preferred, arXiv as fallback), surface low-scoring or
title-mismatched citations for manual review.
tex_files — one or more absolute paths to .tex files passed by the user.--bib <path>, --refresh, --refresh-missing,
--no-arxiv-fallback, --cross-check,
--batch-size <n> (default 15), --parallel <n> (default 8).All scripts live under the plugin's skills/citecheck/scripts/ directory.
At the start of every bash block, set the SCRIPTS variable so the commands
work whether the skill was loaded from a plugin or from the local
.claude/skills/citecheck/ checkout:
SCRIPTS="${CLAUDE_PLUGIN_ROOT:+$CLAUDE_PLUGIN_ROOT/skills/citecheck/scripts}"
SCRIPTS="${SCRIPTS:-.claude/skills/citecheck/scripts}"
All outputs are written under .citecheck/ and .citecache/ rooted at the
current working directory.
Repeat steps 1–11 for each tex_file in order, one at a time. Do not
start the next file until the current one completes. Print
[1/N] Processing <tex_file> … before each file's step 1.
Resolve bib. If --bib was given, use it. Otherwise walk up from
tex_file until a bibliography.bib is found. Fail fast with a clear
message if none.
Build bib index. Clear any intermediates from a prior aborted run
first — .citecache/ (the abstract cache) is intentionally preserved.
rm -rf .citecheck/.tmp
mkdir -p .citecheck/.tmp
python3 ${SCRIPTS}/parse_bib.py \
<bib_path> .citecheck/.tmp/bib_index.json
Extract citations.
python3 ${SCRIPTS}/extract_citations.py \
<tex_file> .citecheck/.tmp/citations.json
If the citations file is empty, print
No \cite references found in <tex_file>. and skip to the next file.
Compute missing keys. Decides which bibkeys need a fresh fetch given the bib index, citations, and current cache. Skip rules:
bib_index.json → skip (will be marked
abstract_status: "missing_bib_entry" in step 6).title AND no arxiv_id AND no doi → skip
(will be marked abstract_status: "no_bib_metadata").source == "fetch_error" → always re-fetch.source == "not_found" → re-fetch only when
--refresh-missing is passed.--refresh is passed.python3 ${SCRIPTS}/compute_missing.py \
--citations .citecheck/.tmp/citations.json \
--bib-index .citecheck/.tmp/bib_index.json \
--cache-dir .citecache/abstracts \
--out .citecheck/.tmp/missing_keys.json \
[--refresh] [--refresh-missing]
Fetch missing abstracts.
python3 ${SCRIPTS}/fetch_abstracts.py \
--missing .citecheck/.tmp/missing_keys.json \
--cache-dir .citecache/abstracts \
--parallel <parallel> \
[--cross-check] [--no-arxiv-fallback]
Build batches.
python3 ${SCRIPTS}/build_batches.py \
--citations .citecheck/.tmp/citations.json \
--bib-index .citecheck/.tmp/bib_index.json \
--abstracts-dir .citecache/abstracts \
--out-dir .citecheck/.tmp/ \
--batch-size <batch_size>
Writes .citecheck/.tmp/batch_<n>_input.json (1-indexed). Each entry has
{id: "c<i>", bibkey, bib_title, fetched_title, abstract, abstract_status, paragraph, section_heading, line}. abstract_status is one of
ok, fuzzy, mismatch, not_found, fetch_error,
missing_bib_entry, no_bib_metadata. The script prints the batch count
on stdout.
Dispatch scorers. In a single message, issue one Agent call per
batch with:
subagent_type: "citecheck-scorer"description: "Score batch <n>"prompt: "input_path: .citecheck/.tmp/batch_<n>_input.json\noutput_path: .citecheck/.tmp/batch_<n>_output.json"Concurrency budget: at most 8 parallel Agent calls per wave. For more
than 8 batches, dispatch in waves of 8.
Validate outputs. For each batch, check that
.citecheck/.tmp/batch_<n>_output.json exists and parses as a JSON list
whose entries have {id, bibkey, score, reason}. On malformed/missing
output, retry that batch's Agent call once. If the retry also fails,
leave that batch's citations with score: null, reason: "scoring_failed"
and continue.
Collate report.
python3 ${SCRIPTS}/collate_report.py \
--citations .citecheck/.tmp/citations.json \
--scores-dir .citecheck/.tmp/ \
--abstracts-dir .citecache/abstracts \
--tex-path <tex_file> \
--output-md .citecheck/<basename>.md \
--output-json .citecheck/<basename>.json
Clean tmp. Remove .citecheck/.tmp/.
Print per-file summary. Read the report JSON (a dict, not a list) and print one line:
python3 -c "
import json, sys
d = json.load(open('.citecheck/<basename>.json'))
needing = d['scored_low'] + d['scored_borderline']
title_issues = len(d['title_match_issues'])
print(f\"{d['total_citations']} citations · {needing} needing review · {title_issues} title-match issues · report at .citecheck/<basename>.md\")
"
Combined summary (multi-file only). After all files are processed, if more than one file was given, print a single totals line:
Done. <total_citations> citations across <N> files · <total_needing> needing review · <total_title_issues> title-match issues
.tex file or bibliography.bib.Read and Write. Reject any other tool surface.