OneCite: auditable bibliographic references
OneCite
A Python CLI and library that turn DOIs, PMIDs, arXiv IDs, ISBNs and BibTeX drafts into auditable BibTeX or CSL-JSON
- 68 ★ on the repository
- Last commit
- MIT
Extended access
Why this level
- Identifiers and reference text go to external services such as Crossref, arXiv and PubMed
- An arbitrary URL in the data is fetched from the given host
Install
- Works in
In your terminal, with SkillFoxx CLI
npx skillfoxx add cli/oneciteDetects the agents on your machine, shows the access level and pins the version.
Other ways to install
Access and checks
How we reviewExtended accessThe tool runs code or makes network calls and only reads external data.
- Identifiers and reference text go to external services such as Crossref, arXiv and PubMed
- An arbitrary URL in the data is fetched from the given host
This is third-party code. Review the repository files before installing.
What it does
OneCite brings a messy reference list to one shape. The input is DOIs, PMIDs, arXiv IDs, ISBNs, URLs and BibTeX fragments from `.txt` or `.bib`, and the output is BibTeX or CSL-JSON. A four-stage pipeline (parse, identify, enrich, format) shows unresolved entries explicitly and hides nothing. Strong identifiers go to dedicated services: Crossref, arXiv, PubMed, Semantic Scholar, Google Books, DataCite and Zenodo. OneCite fills missing fields (journal, volume, pages, authors, abstract) from the response. The command `onecite process references.txt -o results.bib` emits only entries with a strong identifier. For incomplete references there is `onecite suggest "Attention is all you need, Vaswani et al., NIPS 2017"`, which returns ranked candidates for a human to review. The report raises a `text_metadata_mismatch` warning when the text around a DOI describes a different work: the classic pair of an invented title and a real DOI. Duplicates are emitted once. JSON and NDJSON output, exit codes and offline checks are included, and the repository ships a SKILL.md for agents under `skills/onecite/`.
Who it is for. Paper authors, researchers and agents who prepare a bibliography and want to catch invented or mismatched references before publishing.
Good fit when
- An AI-assisted paper draft carries references and you must check that DOIs match their titles
- A list of DOIs, arXiv IDs and ISBNs has to become one BibTeX file for Pandoc
- An agent runs a literature review and must return a machine-readable report with unresolved entries
- For an incomplete reference like Attention is all you need, Vaswani you look for matching candidates
Not a fit when
- You need a library manager with sync and Word plugins: OneCite does not replace one
- Sources have no strong identifier: `process` does not promote them without manual review
- Confidential references that cannot be sent to Crossref and other external services
Example request
Run references.txt through OneCite, save results.bib and show the entries that could not be resolved.Limitations
A normal run makes outbound requests: a DOI goes to Crossref, `suggest` queries go to Crossref, Semantic Scholar and arXiv, theses are searched in OpenAIRE and BASE, and an arbitrary URL is fetched from the given host. Redact confidential records before running.
Source resolution does not prove that a work is authentic, unretracted or correctly described in upstream metadata. The Google Scholar fallback in `suggest` is off by default, is installed as `pip install onecite[scholar]` and may hit a CAPTCHA. The public PyPI release is 0.1.1, while part of what the README describes belongs to the upcoming 0.2.0.
How to disable. Run `pip uninstall onecite`. Generated BibTeX files and reports stay where you wrote them and are deleted by hand.
FAQ
How do I install OneCite?
With `pip install onecite`. For the current repository version use `python -m pip install -e .` from a cloned folder.
How does `process` differ from `suggest`?
`process` emits entries only for strong identifiers, while `suggest` searches for candidates from incomplete text and emits nothing as verified.
Which output formats are supported?
BibTeX and CSL-JSON (`--output-format csl-json`), plus JSON and NDJSON for the report.
What does the text_metadata_mismatch warning mean?
The text around a resolved DOI looks like a description of a different work. The entry stays but is sent for manual review.
Can I embed OneCite in Python code?
Yes, `from onecite import process_references` is callable from scripts and batch jobs.
Discussion
No questions or reviews yet.
Related
CLI toolsBibTeX Verifier checks .bib files against OpenAlex, CrossRef and DataCite and flags references with errors or invented data.
BibTeX verification against Crossref, OpenAlex, PubMed and arXiv: a CLI, Python API and MCP server to flag wrong references
A skill that searches papers through Semantic Scholar, checks venue rankings and generates BibTeX for a manuscript.
Checks every reference of a paper against Crossref, dblp and arXiv before submission, with no language model in the verdicts.
Papis is a CLI for a research library: export references as BibTeX and open collected PDFs in your preferred application.
MCP server with 40 tools that checks quotes, numbers, DOIs and PRISMA counts in AI-written literature reviews. No model inside.
Comparison with similar tools
Cards that share the main search query, and how they differ.
| Tool | Official | Authentication | Repository stars | Main difference |
|---|---|---|---|---|
| OneCite: auditable bibliographic references (this card) | no | 68 | ||
| CiteProof | no | not required | 110 | another reference check for an agent; OneCite normalizes identifiers into BibTeX and CSL-JSON |
| Zotero Research Assistant Skill | no | 98 | works with a Zotero library; OneCite processes a reference list before any manager |
README in short
The README explains the purpose, shows a quick start with a reference file and BibTeX output, describes the `process` and `suggest` commands, the report format, a section on external services and privacy, a Python call and a roadmap.