Skip to content
Content
Skill

/citation-receipts

Systematic per-citation verification protocol for academic writing. MUST be used whenever writing content that cites sources — papers, blog posts, SOTAs, or any document making factual claims about external work. Triggers (FR + EN) on any writing task involving references,

From plugin
paper-trail
56 skills6 agents22 commands3 hooks
Install
$ npx -y skills add roomi-fields/paper-trail --skill citation-receipts --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-receipts

Context preview

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

Systematic per-citation verification protocol for academic writing. MUST be used whenever writing content that cites sources — papers, blog posts, SOTAs, or any document making factual claims about external work. Triggers (FR + EN) on any writing task involving references,

SKILL.md

citation-receipts.SKILL.md
name: citation-receipts
description: >
  Systematic per-citation verification protocol for academic writing.
  MUST be used whenever writing content that cites sources — papers,
  blog posts, SOTAs, or any document making factual claims about external
  work. Triggers (FR + EN) on any writing task involving references,
  citations, or bibliographic claims, or when the user asks to "verify
  citations", "check sources", "audit references", "validate bibliography",
  "produce receipts", "/paper-trail:audit-article", "/paper-trail:receipts".
  Produces a structured RECEIPTS.md report classifying each citation as
  VALID / ADJUST / INVALID with reason. Optional --warn mode inserts
  inline warnings into a .bak copy of the source document. Combined with
  sota-auditor (upstream existence audit), this skill is the **downstream**
  per-claim check.

Skill : Citation Receipts

Why this skill exists

The plugin's mechanical safeguards (FSM, page 1 anti-homonymy, cascade) prevent citing a fabricated reference. But they don't prevent citing a real reference for a claim it doesn't actually make. Examples that have occurred :

  • **Inverted result** : citing a paper as proving NP-hardness when it

proves tractability

  • **Fabricated quote** : putting words in quotation marks that don't

appear in the cited source

  • **Wrong attribution** : citing the wrong author for a known result

(attribution chains)

  • **Equivalent ≠ formulated as** : saying X "is equivalent to" Y is

much stronger than X "is formulated as" Y

This skill enforces a per-citation read-before-cite protocol. Inspired by the `receipts` plugin (MIT, James Weatherhead) for the audit-PDF↔claim pattern.

The golden rule

**Read the source before you cite it.** Not the title. Not the abstract. Not what you think it probably says based on the author's reputation. The actual text where the result is stated. If you can't access the source, mark it UNVERIFIABLE explicitly — don't guess.

When this skill activates

This protocol applies to EVERY citation in :

  • Research papers (`paper-writer` skill output)
  • SOTAs / literature reviews (`sota-writer` skill output)
  • Blog posts and other academic content
  • `/paper-trail:audit-article <path>` — runs this skill on an existing

article file

  • `/paper-trail:receipts <path>` — local audit (no remote API calls)
  • Pre-submission audit checklist

Verification workflow (per citation)

For each source you intend to cite (or that's already cited in the document under audit), follow these steps in order.

Step 1 — Locate the source

Check these locations, in order :

1. **Local registry** : `$RESEARCH_REGISTRY_PATH/refs/<slug>.md`. If state is `page1_validated` or higher, the PDF is at `$RESEARCH_SOURCES_PATH/<pdf_path>`. 2. **`paper-search` MCP** for not-yet-acquired sources : `mcp__paper-search__search_papers(query=<title>)` then `get_crossref_paper_by_doi(<doi>)` for confirmed metadata 3. **`notebooklm` MCP** (optional, if configured) for book chapters 4. **Not found anywhere** → mark UNVERIFIABLE, flag to user, do not proceed with the citation as-is

Step 2 — Procure the source if missing

If the ref is in `candidate` state in the registry :

  • Invoke `pdf-cascade` skill to acquire and validate
  • Wait for `page1_validated` before proceeding to step 3

If the ref isn't in the registry at all :

  • Create a stub : `$RESEARCH_REGISTRY_PATH/refs/<slug>.md` with

`state: candidate`

  • Invoke `pdf-cascade` to acquire

Step 3 — Read the relevant section

Once the PDF is available locally, read the section containing the claim being cited. Extraction tools :

  • `pdftotext -layout <pdf> -` for general extraction
  • `pdftotext -layout -f N -l N <pdf>` for a specific page
  • Use `Read` tool on the corresponding ref's markdown body (which

should already contain notes from `sota-writer` phase C if the SOTA was created via the plugin)

Step 4 — Verify the claim

Before writing or accepting the citation, check :

1. **Does the source actually say what we claim ?** Read the relevant section — not just the abstract. 2. **Are we using the right verb ?** "prove" vs "show" vs "argue" vs "suggest" have different strengths. Match the source's own language. 3. **Are quotes verbatim ?** If using quotation marks, the exact words must appear in the source. If you can't verify, paraphrase instead. 4. **Is the attribution correct ?** The result belongs to the author who first established it, not necessarily the author who cites it in a survey. 5. **Are indices/numbers correct ?** Double-check any specific values (complexity bounds, page numbers, counts).

Step 5 — Classify the citation

| Verdict | Meaning | Action | |---|---|---| | **VALID** | Claim matches source exactly | Proceed | | **ADJUST** | Claim is approximately right but needs softening or rephrasing | Reformulate citing sentence before submitting | | **INVALID** | Claim contradicts source or quote is fabricated | Do not cite as-is. Fix or remove. Consider transitioning the ref to `retracted` via `sota-auditor` if the contradiction is structural. | | **UNVERIFIABLE** | Cannot access source after exhaustive search | Flag to user. Do not cite specific results from this source. |

RECEIPTS.md output format

When invoked via `/paper-trail:audit-article` or `/paper-trail:receipts`, produces a `RECEIPTS.md` file at the same location as the audited article. Format inspired by the `receipts` plugin (MIT) :

# RECEIPTS — <audited file path>

Generated: <ISO timestamp>
Source: <count> citations parsed
Skill: paper-trail/citation-receipts

---

## Citation 1 — [Smith2020] (DOI:10.1234/example)

**Status**: VALID

**Claim in manuscript** (line 42):
> "Smith and Doe proved that X is NP-hard for case Y."

**Source statement** (PDF p.5, §3):
> "Theorem 3.2. The problem X is NP-hard for all instances satisfying Y."

**Notes**: Attribution correct, verb « proved » matches the source's
formal theore
Read more
Ships withpaper-trail

Anti-hallucination plugin for academic research in Claude Code. Create literature reviews and papers guaranteed without fabricated citations.

Get the whole plugin

Other skills on paper-trail.