Skip to main content

SciWrite Linter

Open-source manuscript linter, runs on your own machine

Catch AI hallucinations while drafting with AI

Drafting with GenAI is fast. But can you trust it? Did it hallucinate references? Do the papers actually say what your text claims?

Checking fifty references by hand is a day's work. SciWrite Linter takes up to half an hour on the first run, and minutes on every run after that, all on your own machine.

It verifies every reference in academic databases, downloads and reads the openly available papers, and reports unsupported claims. Then it checks internal consistency: numbers that drift between sections, captions that do not match their figures, and contributions promised but never delivered.

It reports but does not rewrite. Every finding is a place to check, and the judgment stays yours.

The software is open source under the MIT licence, and the method is written up in the paper below.

Paper

What It Checks

More than twenty checks in one pass, from a missing bibliography entry to a source that does not support the sentence citing it.

Do your references exist?

Every entry in your bibliography is looked up in the academic databases. One that no database knows about is reported, along with what was searched for, so you can see whether it is a typo or a paper that was never written.

Under the hood
OpenAlex, then Semantic Scholar, then CrossRef, then Open Library and the Library of Congress, each one handling only what the last could not resolve. A reference with no identifier is matched on title, then scored down for author and year mismatches, with venue as a tiebreaker, so one wrong field does not read as a missing paper.

Are the details right?

Title, authors, year and venue in your bibliography are compared against the canonical record for that paper. Where they disagree, you see both, and you decide which one is wrong.

Under the hood
The canonical record is whichever database resolved the reference. Mismatches are reported per field rather than as one pass or fail, because a wrong year and a wrong author list are different mistakes with different fixes.

Has anything been retracted?

Every reference is checked against the public record of withdrawn papers. If something you cite has been retracted, you find out before a reviewer does.

Under the hood
The Retraction Watch database, keyed by DOI, covering retractions, expressions of concern, corrections and reinstatements. Where a paper was retracted and later reinstated, the reinstatement wins.

Does the source say what you say it says?

This is the check nobody does by hand on fifty references. SciWrite Linter downloads the cited paper, reads it, and reports the places where your sentence claims more than the source supports. It can only read what it can get, so the more of your bibliography is open access, the more of it actually gets checked.

Under the hood
Full text comes from 14 open-access sources, among them arXiv, PubMed Central, Europe PMC, Unpaywall and bioRxiv. Each paper is parsed, its sections indexed, and every claim checked against the passage that ought to support it. A reference it has read counts for more in the score than one it could only confirm exists. Papers you have access to but the tool cannot download go in a folder by hand, and are read the same way.

What is each citation doing?

A citation offered as evidence and a citation offered as background are different promises. The tool works out which one you are making, and weighs the finding accordingly.

Under the hood
Eight purposes, each with its own weight: evidence, contrast, method, definition, example, attribution, tool, context. The weight is what the score uses, so an unsupported evidence citation counts five times as heavily as an unsupported piece of background.

Do your sources hold up in turn?

It follows the chain one step further and checks the bibliographies of the papers you cite. A source resting on references that do not exist is a weaker source than it looks.

Under the hood
The same existence, metadata and retraction checks, run in batch over the reference lists of your cited papers.

Does the manuscript agree with itself?

Numbers that drift between sections. A sample size that changes with no explanation. Percentages that do not sum. An abstract claiming what the results section does not show. Causal wording on a correlational finding.

Under the hood
Cross-section consistency, text against tables, arithmetic and percentages, sample-size tracking, p-values against their verbal reading, abstract against body, and contributions promised in the introduction that never arrive. All of it read by a language model running on your own machine.

Do the figures match the words?

Whether the caption describes what the figure shows, whether the text describes the figure accurately, and whether the axis labels and units agree with what you claim from them.

Under the hood
A vision model reads the figure image itself. Its reading is compared against the caption, against the prose that refers to the figure, and against any table carrying the same numbers.

The mechanical checks

A citation with no bibliography entry, a cross-reference with no target, a figure included but never mentioned. These are deterministic: no model reads them, and nothing goes over the network.

Under the hood
LaTeX, PDF and pandoc markdown all work. A .tex file is read directly, a PDF is parsed first by a container on your own machine, and markdown is checked with pandoc-style citations against a sibling .bib file.

One score at the end

The findings gather into a single number, so you can see whether a revision improved the paper or only moved the problems around.

Under the hood
The SciLint Score multiplies internal consistency by referencing quality by contribution. The contribution component turns five frameworks from philosophy of science, Popper, Lakatos, Kitcher, Laudan and Mayo, into computable properties: empirical content, progressiveness, unification, problem-solving effectiveness and test severity. It is released as experimental code and sits at 1.0 until you ask for it.

Your manuscript never leaves your machine

Parsing, model inference and figure reading all happen on your own computer. What goes out is citation metadata: a DOI, a title, an author name, sent to the free public databases that verify them. No part of your text is sent anywhere, and we never see your draft.

Under the hood
The language models are open-weights and pinned to specific versions, so a run today and a run next year give the same answer rather than drifting when a cloud provider updates a model. No key is needed for any of the verification databases. Optional keys raise rate limits, and one of the fourteen full-text sources, NASA ADS, needs a key before it is used at all.

What You Need to Run It

This is software you install, not a website. That keeps your manuscript on your machine, but it takes particular hardware to run.

Hardware
An NVIDIA GPU with 16 GB of video memory or more, and 32 GB of system memory. The models run locally, and that is what they need.
Software
uv, a container runtime (podman or docker), CUDA drivers and the NVIDIA Container Toolkit. uv fetches Python 3.13 itself, and leaves any Python you already have alone.
Platform
Developed and tested on Windows under WSL2. Native Linux uses the same code path but is not actively tested. macOS is not tested.
Install SciWrite Linter from PyPI

Installs as sciwrite-lint. Built by Authentic Research Partners, which operates the Society of Teen Scientists.