Open source · Python CLI · v0.2.0

Check the citations, not just the prose.

CiteGuard checks URLs, source titles, redirects and weak claim-to-source word overlap in Markdown research reports. Local, deterministic, no API key or telemetry.

View source on GitHub · Quickstart and documentation

Install

python -m pip install "git+https://github.com/larrylot/citeguard.git"
citeguard check research.md --json

For an isolated CLI, use pipx install git+https://github.com/larrylot/citeguard.git. Requires Python 3.10 or newer.

What it actually checks

VerdictMeaning
cleanAvailable lexical checks passed. Not proof that the claim is true.
deadSource returned HTTP 404 or 410.
title_mismatchDescriptive link text differs from source title.
claim_weakWeak word overlap between claim and HTML text.
redirect_suspectRedirect to a different host without strong title match.
unverifiableDNS/network failure, oversized response or redirects that could not be followed.
uncheckedInsufficient readable/checkable HTML; includes PDFs.
blockedUntrusted address, embedded credentials or unsupported scheme.
http_errorOther HTTP error such as 403 or 500.
unresolvedURL absent from the offline fixture catalog.

Predictable CI behavior

Each citation occurrence receives its own result, while repeated URLs share a single HTTP fetch. Output is JSON or human-readable text. Exit 0 means every citation passed; exit 1 means at least one failed or nothing was found; exit 2 means an input error.

citeguard check fixtures/clean.md --fixtures
citeguard check fixtures/dead_link.md --fixtures --json

The offline fixture commands run from a repository checkout.

Scope matters. CiteGuard is not a fact checker or semantic entailment model. A source can contain the same words as a claim and still contradict it. `clean` means only the available heuristic checks passed.

Security and limitations

Private and non-global IP addresses are blocked by default; redirects and HTML body sizes are limited. Application-level DNS checks are not a full SSRF defense, so hosted services must add network-level egress controls. See Security policy and Changelog.