scholar-search
Search scholarly works across arXiv, conferences, journals, and books via OpenAlex. Returns citation counts, reconstructed abstracts, venue, open-access PDF links, and external IDs (arXiv/DOI/PMID). No API key required. Use when the user says "search scholar", "search papers", "find papers with citations", "papers by author", "cross-discipline search", or "papers from <venue>". Complements arxiv-search (preprints-only).
How do I install this agent skill?
npx skills add https://github.com/dsebastien/ai-skill-scholar --skill scholar-searchIs this agent skill safe to install?
- Gen Agent Trust Hubpass
This skill allows searching for scholarly papers via the OpenAlex API. It uses standard Python libraries, includes rate-limiting logic, and communicates only with a recognized scholarly data service.
- Socketpass
No alerts
- Snykwarn
Risk: MEDIUM · 1 issue
What does this agent skill do?
Scholar Search
Search OpenAlex — an open catalog of 250M+ scholarly works — for papers across every major venue (not just arXiv). Returns structured JSON including citation counts, venue, reconstructed abstracts, and external IDs linking to arXiv / DOI / PubMed.
Why OpenAlex (not Semantic Scholar)
Both cover roughly the same data. OpenAlex wins on:
- No API key required. The free public endpoint just works.
- Generous rate limits. 10 req/sec anonymous, higher in the polite pool.
- Actually usable at scale. Semantic Scholar's public tier is shared and 429s are constant.
Why this over arxiv-search
| arxiv-search | scholar-search | |
|---|---|---|
| Preprints | yes | yes |
| Conferences (ICLR, NeurIPS, ACL, ...) | no | yes |
| Journals | no | yes |
| Books, chapters | no | yes |
| Citation counts | no | yes |
| Venue filtering | no | yes |
| Concept/topic tags | no | yes |
Use both together when doing a broad review (via literature-review).
Usage
# Basic query
python3 scripts/scholar_search.py "mechanistic interpretability" --limit 25
# Year + venue filter
python3 scripts/scholar_search.py "sparse autoencoders" \
--year 2024-2026 --venue "ICLR" --limit 30
# Citation floor (quality filter)
python3 scripts/scholar_search.py "scaling laws" --min-citations 50 --limit 20
# Open-access only (when you want readable papers)
python3 scripts/scholar_search.py "mixture of experts" --open-access --limit 20
# Concept filter (uses OpenAlex's topic taxonomy)
python3 scripts/scholar_search.py "alignment" \
--concepts "Machine learning" --limit 20
Flags:
--limit N— max results (1-200; default 25)--year YYYYorYYYY-YYYY— publication year filter--venue NAME— case-insensitive partial match on venue name--concepts NAME— OpenAlex concept (e.g.Machine learning,Computer vision)--min-citations N— quality floor--open-access— only works with a public PDF
Output JSON shape (per result):
{
"paper_id": "W4395065622",
"openalex_url": "https://openalex.org/W4395065622",
"title": "...",
"authors": ["Alice", "Bob"],
"year": 2024,
"venue": "ICLR 2024",
"work_type": "article",
"citation_count": 150,
"reference_count": 42,
"abstract": "...",
"concepts": ["Interpretability", "Machine learning"],
"arxiv_id": "2404.14082",
"doi": "10.48550/arxiv.2404.14082",
"is_open_access": true,
"open_access_pdf": "https://arxiv.org/pdf/2404.14082",
"landing_url": "http://arxiv.org/abs/2404.14082"
}
Polite pool (optional)
For heavy use, join OpenAlex's polite pool by setting an email:
export OPENALEX_EMAIL="you@example.com"
Priority routing + higher effective rate limits. No registration needed — the email just has to be valid so they can reach you if your traffic misbehaves.
Workflow
1. Parse intent
- "find papers on X" → basic query
- "high-citation papers on X" → add
--min-citations 50+ - "recent papers on X" →
--year 2024-2026 - "papers from venue Y" →
--venue "ICLR" - "open access only" →
--open-access
2. Run the search
Default --limit 25. Bump to 50-100 for broad reviews. OpenAlex is fast, so larger pages are fine.
3. Present results
Compact table: citation count | year | venue | authors | title | first-sentence-of-abstract. Sort by citation count unless the user asked for recency.
OpenAlex has no TLDR field (like Semantic Scholar did). Use the first ~50 words of the reconstructed abstract for fast screening instead.
4. Offer handoffs
- "Analyze paper X" → hand off to arxiv-analyze (if
arxiv_idpresent) or fetchopen_access_pdfdirectly - "Who cites this?" / "What does this cite?" → hand off to scholar-citations
- "Literature review" → hand off to literature-review
Token efficiency
- 25 results ≈ 8K-15K tokens (abstracts dominate). Override
--selectvia a future flag for screening-only passes. - OpenAlex abstracts are "inverted index" format server-side; this script reconstructs them to normal prose on the way through.
Rate limits
- Anonymous: 10 req/sec, 100k/day across shared pool
- Polite pool (with
OPENALEX_EMAIL): same limits but higher priority + fewer throttling events
Script self-throttles at 5 req/sec per process (shared via a cooldown file in ~/.cache/ai-skill-scholar/).
Hard rules
- No key-scraping: never prompt for an API key. OpenAlex doesn't have one;
OPENALEX_EMAILis optional and documented. - Don't hammer: the 5 req/sec throttle is load-bearing. Don't remove it.
- Abstracts can be missing: OpenAlex doesn't always have them. Report as empty, don't fabricate.
Requirements
- Python 3.11+ (stdlib only)
- Internet access to
api.openalex.org - Optional:
OPENALEX_EMAILenv var for polite-pool access
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/dsebastien/ai-skill-scholar/scholar-search">View scholar-search on skillZs</a>