paper-gap
paper-gap is a local, on-demand Rust CLI for finding research papers that appear to lack useful public code, or only have weak/prototype/stale implementations.
It is not a recommender. It does not rank by user preference, hardware fit, or subjective interest.
What it does
- Fetches papers from arXiv and OpenAlex.
- Normalizes paper metadata.
- Checks Papers with Code for known code links.
- Searches public code forges:
- GitHub
- GitLab
- Forgejo/Gitea, with Codeberg enabled by default
- Produces markdown or JSON reports.
- Explains the transparent additive implementation-gap score.
- Lists configured and discoverable sources.
Install / run
Build and install paper-gap so it is on your PATH:
Then run:
Examples
Scan recent or queried papers:
OpenAlex participates in query scans. arXiv-specific --category scans remain arXiv-only.
Inspect one arXiv paper:
Write JSON, then render a markdown report later:
List sources:
Discover possible new sources, informational only. Set BRAVE_SEARCH_API_KEY to use the official Brave Search API; otherwise discovery falls back to DuckDuckGo HTML.
Output
Reports are written to stdout unless --output is supplied. Progress messages go to stderr so stdout can be piped safely.
Markdown reports are ranked by implementation_gap_score. JSON reports include the underlying papers, code links, repository results, score components, and gap explanations.
Scoring
The score is additive and intentionally simple:
implementation_gap_score =
no_code_score
+ prototype_only_score
+ stale_repo_score
+ packaging_gap_score
+ docs_gap_score
+ tests_gap_score
+ license_gap_score
+ reproducibility_gap_score
+ ecosystem_gap_score
Each non-zero score should have an explanation in the report.
API notes and rate limits
paper-gap is local and only runs when you invoke it, but it still calls public APIs. arXiv may rate-limit repeated scans. If that happens:
- wait a few minutes;
- retry with a smaller
--limit; - prefer targeted
--category,--query, or date ranges.
For broader scholarly metadata, query scans also use OpenAlex. OPENALEX_EMAIL is optional and identifies requests to the OpenAlex polite pool.
Repository searches can also hit anonymous rate limits. Optional tokens are supported via environment variables:
Current MVP limits
- Background jobs, local database storage, and a web dashboard are optional future features, not required defaults.
- LLM judgement, subjective preference ranking, and hardware-fit ranking are optional future experiments, not part of the default score.
- Source discovery optionally uses Brave Search API and otherwise falls back to DuckDuckGo HTML; it remains informational only.
- Repository search is heuristic; gap scoring explains signals rather than claiming certainty.