Search Paper
A single skill that wraps five platform drivers — two preprint archives (arXiv, IACR ePrint) and three metadata services (Semantic Scholar, DBLP, OpenAlex). The SKILL.md itself acts as the orchestrator: each script does one thing per platform, and the agent chains them.
Usage
Invoke this skill by name. On slash-command hosts: /search-paper "<query>".
search-paper "post-quantum threshold signatures" --source iacr --max-results 15
Scripts
Run via Bash. All scripts emit JSON on stdout.
arxiv.py — arXiv preprint server
python3 arxiv.py search "BFT consensus communication complexity" --max-results 10 --categories cs.CR,cs.DC
python3 arxiv.py recent "threshold signatures" --max-results 10 --categories cs.CR
python3 arxiv.py download 2305.12345 --output-dir reaper-workspace/papers/
python3 arxiv.py journal-ref 2305.12345
search— array of{arxiv_id, title, authors, year, abstract, categories, pdf_url, published, journal_ref}sorted by relevance.recent— same fields, sorted by submission date (newest first). Requires a query and/or--categories.download— saves PDF, returns{path, title}.journal-ref— author-supplied venue (sparse but authoritative when present).
iacr.py — IACR ePrint archive
python3 iacr.py search "threshold signatures" --max-results 10
python3 iacr.py recent --max-results 10
python3 iacr.py download 2024/1234 --output-dir reaper-workspace/papers/
python3 iacr.py url 2024/1234
python3 iacr.py pubinfo 2024/1234
search— array of{eprint_id, title, authors, year, abstract, publication_info, venue, pdf_url, url}. Top 5 results are enriched with metadata from the paper page (includingpublication_info).recent— most-recently-posted ePrint papers.download/url— PDF download and URL resolution.pubinfo— scrapes the "Publication info" line from the paper page (e.g. "A major revision of CRYPTO 2023") and best-effort parses out the venue acronym + year.
semantic_scholar.py — Semantic Scholar metadata
python3 semantic_scholar.py venue --arxiv 2305.12345
python3 semantic_scholar.py venue --title "HotStuff: BFT Consensus in the Lens of Blockchain"
python3 semantic_scholar.py citations 2305.12345 --max-results 20
venue— looks up the publication venue by arXiv ID (preferred when available — exact match) or by title (fuzzy match via/paper/search/match). Returns{found, venue, venue_full, venue_type, year, title, authors}.citations— forward (who cites this) + backward (what this builds on) citations. Each entry includesvenuewhen known.
dblp.py — DBLP (CS-focused)
python3 dblp.py venue "HotStuff: BFT Consensus" --author "Yin"
venue— title (+ optional author surname) lookup. DBLP is authoritative for CS conference and journal venues.
openalex.py — OpenAlex (broad coverage)
python3 openalex.py venue "HotStuff: BFT Consensus in the Lens of Blockchain"
venue— title-based lookup. Use when DBLP doesn't cover the venue (non-CS, niche workshops, books).
Role
- Standalone: Invoked directly by the user to search for papers, trace citations, or resolve a venue.
- Building block: Called by
/review-literatureand/investigatefor structured paper search and venue resolution.
Instructions
When invoked directly:
- Parse the user's query and any flags from the argument.
- Pick the right script(s):
- Crypto/security topic → run
iacr.py searchANDarxiv.py search --categories cs.CR. - General CS topic → run
arxiv.py searchwith appropriate categories. - Citation context →
semantic_scholar.py citations <arxiv_id>. - Venue resolution → follow the Venue Resolution Protocol below.
- Crypto/security topic → run
- Format paper results as a readable table:
| # | Title | Authors | Year | Venue | ID | Link |
|---|-------|---------|------|-------|----|------|
| 1 | ... | ... | ... | ... | arXiv:XXXX.XXXXX | [arXiv](https://arxiv.org/abs/XXXX.XXXXX) |
- For each highly relevant result, show the abstract excerpt.
Venue Resolution Protocol
A paper's archive ID (arXiv, ePrint) is not its publication venue. Resolve the actual venue (CRYPTO, S&P, PODC, …) for every paper that goes into a literature review or report references section. Run the layers in order and stop at the first success:
Layer 1 — Semantic Scholar (cheapest, highest hit-rate)
# arXiv-known papers
python3 semantic_scholar.py venue --arxiv <arxiv_id>
# ePrint-only papers
python3 semantic_scholar.py venue --title "<exact title>"
If found: true and venue is non-empty → done. Record source = "semantic_scholar".
Layer 2 — Author-supplied field on the source archive
Authors sometimes mark the venue on their own preprint:
# arXiv: the journal_ref field
python3 arxiv.py journal-ref <arxiv_id>
# ePrint: the "Publication info" line
python3 iacr.py pubinfo <eprint_id>
If a non-empty journal_ref / publication_info is returned → done. Record source = "arxiv_journal_ref" or "iacr_pubinfo".
Layer 3 — DBLP (CS-authoritative title+author search)
python3 dblp.py venue "<title>" --author "<first author surname>"
If found: true → done. Record source = "dblp".
Layer 4 — OpenAlex (broad coverage)
python3 openalex.py venue "<title>"
If found: true → done. Record source = "openalex".
Layer 5 — Preprint-only label
If all four layers fail, label the entry (preprint) rather than silently omitting. Do not guess a venue from the topic or author affiliation — an unverified guess is worse than an honest "preprint only".
Notes
- Layers 1 + 2 cover ~80% of papers at near-zero cost. Add layers 3 + 4 only when needed.
- Cache results in your workspace notes — don't re-resolve the same paper across cycles.
- When two sources disagree, prefer the higher-tier source name (Semantic Scholar's
publicationVenue.nameover DBLP's terse acronym, etc.). Record both if confidence is low.
Quality Criteria
- Search returns results (graceful error message if API is down or script fails)
- Results are formatted as a readable table with abstract excerpts for top hits
- For literature reviews and synthesized reports, every cited paper has a resolved venue or an explicit
(preprint)label — no entry shows only an arXiv/ePrint ID where a venue is expected - If a script fails (missing deps, network error), report the error to the caller and continue with other layers
Dependencies
pip install arxiv requests beautifulsoup4