citefact – audit a manuscript against the full text of its Zotero sources (citations, quotes, claims
I built a small open-source CLI that might be useful to people here. Existing tools check that citations exist; citefact reads the full text of every cited source and checks that it supports what you wrote.
It runs three checks, cheapest first:
1. Citations – does every in-text citation exist in the bibliography, with a source PDF? (deterministic, free)
2. Quotes – is every direct quote really verbatim in its cited source? Shows word-level diffs for near-misses. (deterministic, free)
3. Claims – does the source actually support the claim attached to it? (optional, uses an LLM with your own API key; every verdict comes with a verbatim evidence quote so you judge, not the model)
The Zotero part: point it at a collection and it reads metadata and attached PDFs through Zotero's local API – no exports, no Better BibTeX needed:
The first two checks make zero network requests and need no key (
Example report (claims check with evidence):
https://s3.amazonaws.com/zotero.org/images/forums/u178395/21tp7zihv9i8oq8bbcwm.png
MIT licensed, Python 3.11+. Markdown manuscripts and author-year citation styles only for now (DOCX and numeric styles are on the roadmap).
GitHub: https://github.com/hearthresearch/citefact
I'm the author of ZotSeek (https://github.com/introfini/ZotSeek) and MCP Server Zotero Dev (https://github.com/introfini/mcp-server-zotero-dev) as well; this came out of the same PhD workflow. Feedback very welcome, especially on citation styles you'd want supported next.
It runs three checks, cheapest first:
1. Citations – does every in-text citation exist in the bibliography, with a source PDF? (deterministic, free)
2. Quotes – is every direct quote really verbatim in its cited source? Shows word-level diffs for near-misses. (deterministic, free)
3. Claims – does the source actually support the claim attached to it? (optional, uses an LLM with your own API key; every verdict comes with a verbatim evidence quote so you judge, not the model)
The Zotero part: point it at a collection and it reads metadata and attached PDFs through Zotero's local API – no exports, no Better BibTeX needed:
uvx citefact check manuscript.md --zotero-collection "PhD/Chapter 3"The first two checks make zero network requests and need no key (
--skip-claims). Output is a single self-contained HTML report plus JSON. Everything is cached, so re-runs after edits are fast and only re-verify what changed.Example report (claims check with evidence):
https://s3.amazonaws.com/zotero.org/images/forums/u178395/21tp7zihv9i8oq8bbcwm.png
MIT licensed, Python 3.11+. Markdown manuscripts and author-year citation styles only for now (DOCX and numeric styles are on the roadmap).
GitHub: https://github.com/hearthresearch/citefact
I'm the author of ZotSeek (https://github.com/introfini/ZotSeek) and MCP Server Zotero Dev (https://github.com/introfini/mcp-server-zotero-dev) as well; this came out of the same PhD workflow. Feedback very welcome, especially on citation styles you'd want supported next.
Upgrade Storage