aspero
Find, resolve and verify scholarly references from the command line — built for AI agents first, and humans too.
Agents asked to cite literature tend to recall DOIs from memory (often wrong) or try web search (usually blocked for bots). aspero asks the open scholarly APIs instead — OpenAlex, Crossref, DataCite, doi.org, Europe PMC and Open Library — politely, with caching, and answers in JSON with exit codes an agent can act on.
$ aspero verify "LeCun Y, Bengio Y, Hinton G. Deep learning. Nature. 2015. doi:10.1038/nature14540"
MISMATCH LeCun Y, Bengio Y, Hinton G. Deep learning. Nature. 2015. doi:10.1038/nature14540
doi:10.1038/nature14540 is "Reinforcement learning improves behaviour from evaluative feedback" (2015), openalex:W1589747210, but the citation matches "Deep learning" (2015), doi:10.1038/nature14539
Install
|
Optional environment:
| Variable | Purpose |
|---|---|
OPENALEX_API_KEY |
Free OpenAlex key ($1/day budget; lookups free, searches $0.001) |
ASPERO_MAILTO |
Your contact address, sent to polite API pools (Crossref) |
ASPERO_CACHE_DIR |
Where to keep the answer cache |
Use
# Does this citation refer to a real work, with matching details?
# Check a whole bibliography (CI-friendly: exits 9 on errors)
# Look up identifiers: DOIs, arXiv IDs, PMIDs, PMCIDs, NBK IDs, ISBNs, URLs
# Find the identifiers in documents (offline), then look them up
|
# Search, resolve, and include abstracts
# Watch the requests (and concurrency) as they happen
On a terminal, results are tables (a single verify is a short report);
piped, they're JSON. Pick explicitly with --format table|text|json|jsonl:
text is a detailed report per result. Every command's --help has
examples and the exit codes.
What verify and check catch: invented papers, real DOIs attached to the
wrong work, nonexistent DOIs (with the right one suggested), wrong years,
misattributed authors, retracted papers, duplicates, and missing DOIs.
Lookalike re-deposits of famous papers are told apart by year and authors.
How it behaves
- Cheap: free sources first; paid OpenAlex searches only when needed, with spend reported. A day's free budget covers hundreds of verifications.
- Polite: per-provider pacing, backoff on rate limits, contact address in the user agent; lookups fall back provider by provider rather than asking all at once.
- Cached: answers are kept (records 7 days, searches and "not found" 1
day), so re-checking a bibliography is near-instant and free.
aspero cache stats|clear|path.
Library
The CLI is a thin adapter over aspero-engine; providers are separate
crates behind features. See DESIGN.md for the architecture,
scoring rules, provider gotchas and plans.
Licence
MIT OR Apache-2.0, at your option.