Last year I started building Acurio, a tool that verifies citations in academic theses against their sources. One pattern kept showing up in real student theses: bibliographies full of references that simply don't exist. Plausible-looking authors, plausible journal, plausible year — and no matching record anywhere. Most of them were LLM hallucinations the student never caught.

The existence check turned out to be the one piece that doesn't need any AI at all. So I extracted it into a small open-source CLI: citecheck.

What it does

Point it at a .bib, .ris, or CSL-JSON file — the export you get from Zotero, Mendeley, or EndNote — and it checks every reference against three public scholarly APIs:

Crossref and OpenAlex — does a matching record exist at all? A wrong DOI, a typo'd title, or a hallucinated reference shows up as not found.