New to Claude Skills? Learn how to install them →

nousresearch on GitHub

arXiv Research

Free

Easily search and retrieve academic papers from arXiv.

Get this skill

Free · Opens the source repo

What arXiv Research does

The arXiv Research skill allows users to search and retrieve academic papers from the arXiv repository using simple command-line queries. By leveraging the arXiv REST API, this skill provides a straightforward way to access a wealth of academic literature without the need for an API key or additional dependencies. Users can search for papers by keywords, authors, categories, or specific IDs, making it a versatile tool for researchers, students, and developers alike.

The skill utilizes the curl command to interact with the arXiv API, returning results in Atom XML format. Users can easily parse this XML output using standard tools like grep, sed, or Python scripts, allowing for flexible and customizable output formats. For those who prefer a more user-friendly experience, a helper script is included that simplifies the process of searching and parsing results, providing clean and readable output directly in the terminal.

In addition to searching, users can retrieve specific papers by their arXiv ID and access both the abstract and full PDF versions of the papers. This functionality is particularly useful for quickly gathering information or conducting literature reviews. The skill also supports generating BibTeX entries for citations, streamlining the process of referencing academic work in research papers or projects.

Overall, the arXiv Research skill is an essential tool for anyone involved in academic research or interested in staying current with the latest developments in their field. Its ease of use and powerful search capabilities make it an invaluable resource for accessing high-quality academic content.

When to use it

Use this skill when you need to quickly find academic papers by specific queries or access full-text PDFs for research purposes.

When not to use it

This skill may not be suitable if you require citation data or recommendations, as it does not provide these features.

What you can build with it

Searching for Recent Papers

Quickly find the latest papers in your field by using the search functionality with specific keywords or categories.

Retrieving Specific Papers

Access a specific paper directly by its arXiv ID to read the abstract or download the full PDF.

Generating Citations

Easily create BibTeX entries for papers you want to cite in your research work.

How to install arXiv Research

View source

1. Install with the skills CLI

npx skills add nousresearch/hermes-agent/arxiv --agent claude-code

2. Or install it manually

Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.

Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs

Inside SKILL.md

Written by nousresearch

arXiv Research

Search and retrieve academic papers from arXiv via their free REST API. No API key, no dependencies — just curl.

Quick Reference

ActionCommand
Search paperscurl "https://export.arxiv.org/api/query?search_query=all:QUERY&max_results=5"
Get specific papercurl "https://export.arxiv.org/api/query?id_list=2402.03300"
Read abstract (web)web_extract(urls=["https://arxiv.org/abs/2402.03300"])
Read full paper (PDF)web_extract(urls=["https://arxiv.org/pdf/2402.03300"])

Searching Papers

The API returns Atom XML. Parse with grep/sed or pipe through python3 for clean output.

Basic search

curl -s "https://export.arxiv.org/api/query?search_query=all:GRPO+reinforcement+learning&max_results=5"

Clean output (parse XML to readable format)

curl -s "https://export.arxiv.org/api/query?search_query=all:GRPO+reinforcement+learning&max_results=5&sortBy=submittedDate&sortOrder=descending" | python3 -c "
import sys, xml.etree.ElementTree as ET
ns = {'a': 'http://www.w3.org/2005/Atom'}
root = ET.parse(sys.stdin).getroot()
for i, entry in enumerate(root.findall('a:entry', ns)):
    title = entry.find('a:title', ns).text.strip().replace('\n', ' ')
    arxiv_id = entry.find('a:id', ns).text.strip().split('/abs/')[-1]
    published = entry.find('a:published', ns).text[:10]
    authors = ', '.join(a.find('a:name', ns).text for a in entry.findall('a:author', ns))
    summary = entry.find('a:summary', ns).text.strip()[:200]
    cats = ', '.join(c.get('term') for c in entry.findall('a:category', ns))
    print(f'{i+1}. [{arxiv_id}] {title}')
    print(f'   Authors: {authors}')
    print(f'   Published: {published} | Categories: {cats}')
    print(f'   Abstract: {summary}...')
    print(f'   PDF: https://arxiv.org/pdf/{arxiv_id}')
    print()
"

Search Query Syntax

PrefixSearchesExample
all:All fieldsall:transformer+attention
ti:Titleti:large+language+models
au:Authorau:vaswani
abs:Abstractabs:reinforcement+learning
cat:Categorycat:cs.AI
co:Commentco:accepted+NeurIPS

Boolean operators

# AND (default when using +)
search_query=all:transformer+attention

# OR
search_query=all:GPT+OR+all:BERT

# AND NOT
search_query=all:language+model+ANDNOT+all:vision

# Exact phrase
search_query=ti:"chain+of+thought"

# Combined
search_query=au:hinton+AND+cat:cs.LG

Sort and Pagination

ParameterOptions
sortByrelevance, lastUpdatedDate, submittedDate
sortOrderascending, descending
startResult offset (0-based)
max_resultsNumber of results (default 10, max 30000)
# Latest 10 papers in cs.AI
curl -s "https://export.arxiv.org/api/query?search_query=cat:cs.AI&sortBy=submittedDate&sortOrder=descending&max_results=10"

Fetching Specific Papers

# By arXiv ID
curl -s "https://export.arxiv.org/api/query?id_list=2402.03300"

# Multiple papers
curl -s "https://export.arxiv.org/api/query?id_list=2402.03300,2401.12345,2403.00001"

BibTeX Generation

After fetching metadata for a paper, generate a BibTeX entry:

{% raw %}

curl -s "https://export.arxiv.org/api/query?id_list=1706.03762" | python3 -c "
import sys, xml.etree.ElementTree as ET
ns = {'a': 'http://www.w3.org/2005/Atom', 'arxiv': 'http://arxiv.org/schemas/atom'}
root = ET.parse(sys.stdin).getroot()
entry = root.find('a:entry', ns)
if entry is None: sys.exit('Paper not found')
title = entry.find('a:title', ns).text.strip().replace('\n', ' ')
authors = ' and '.join(a.find('a:name', ns).text for a in entry.findall('a:author', ns))
year = entry.find('a:published', ns).text[:4]
raw_id = entry.find('a:id', ns).text.strip().split('/abs/')[-1]
cat = entry.find('arxiv:primary_category', ns)
primary = cat.get('term') if cat is not None else 'cs.LG'
last_name = entry.find('a:author', ns).find('a:name', ns).text.split()[-1]
print(f'@article{{{last_name}{year}_{raw_id.replace(\".\", \"\")},')
print(f'  title     = {{{title}}},')
print(f'  author    = {{{authors}}},')
print(f'  year      = {{{year}}},')
print(f'  eprint    = {{{raw_id}}},')
print(f'  archivePrefix = {{arXiv}},')
print(f'  primaryClass  = {{{primary}}},')
print(f'  url       = {{https://arxiv.org/abs/{raw_id}}}')
print('}')
"

{% endraw %}

Reading Paper Content

After finding a paper, read it:

# Abstract page (fast, metadata + abstract)
web_extract(urls=["https://arxiv.org/abs/2402.03300"])

# Full paper (PDF → markdown via Firecrawl)
web_extract(urls=["https://arxiv.org/pdf/2402.03300"])

For local PDF processing, see the ocr-and-documents skill.

Common Categories

CategoryField
cs.AIArtificial Intelligence
cs.CLComputation and Language (NLP)
cs.CVComputer Vision
cs.LGMachine Learning
cs.CRCryptography and Security
stat.MLMachine Learning (Statistics)
math.OCOptimization and Control
physics.comp-phComputational Physics

Full list: https://arxiv.org/category_taxonomy

Helper Script

The scripts/search_arxiv.py script handles XML parsing and provides clean output:

python scripts/search_arxiv.py "GRPO reinforcement learning"
python scripts/search_arxiv.py "transformer attention" --max 10 --sort date
python scripts/search_arxiv.py --author "Yann LeCun" --max 5
python scripts/search_arxiv.py --category cs.AI --sort date
python scripts/search_arxiv.py --id 2402.03300
python scripts/search_arxiv.py --id 2402.03300,2401.12345

No dependencies — uses only Python stdlib.


Semantic Scholar (Citations, Related Papers, Author Profiles)

arXiv doesn't provide citation data or recommendations. Use the Semantic Scholar API for that — free, no key needed for basic use (1 req/sec), returns JSON.

Get paper details + citations

# By arXiv ID
curl -s "https://api.semanticscholar.org/graph/v1/paper/arXiv:2402.03300?fields=title,authors,citationCount,referenceCount,influentialCitationCount,year,abstract" | python3 -m json.tool

# By Semantic Scholar paper ID or DOI
curl -s "https://api.semanticscholar.org/graph/v1/paper/DOI:10.1234/example?fields=title,citationCount"

Get citations OF a paper (who cited it)

curl -s "https://api.semanticscholar.org/graph/v1/paper/arXiv:2402.03300/citations?fields=title,authors,year,citationCount&limit=10" | python3 -m json.tool

Get references FROM a paper (what it cites)

curl -s "https://api.semanticscholar.org/graph/v1/paper/arXiv:2402.03300/references?fields=title,authors,year,citationCount&limit=10" | python3 -m json.tool

Search papers (alternative to arXiv search, returns JSON)

curl -s "https://api.semanticscholar.org/graph/v1/paper/search?query=GRPO+reinforcement+learning&limit=5&fields=title,authors,year,citationCount,externalIds" | python3 -m json.tool

Get paper recommendations

curl -s -X POST "https://api.semanticscholar.org/recommendations/v1/papers/" \
  -H "Content-Type: application/json" \
  -d '{"positivePaperIds": ["arXiv:2402.03300"], "negativePaperIds": []}' | python3 -m json.tool

Author profile

curl -s "https://api.semanticscholar.org/graph/v1/author/search?query=Yann+LeCun&fields=name,hIndex,citationCount,paperCount" | python3 -m json.tool

Useful Semantic Scholar fields

title, authors, year, abstract, citationCount, referenceCount, influentialCitationCount, isOpenAccess, openAccessPdf, fieldsOfStudy, publicationVenue, externalIds (contains arXiv ID, DOI, etc.)


Complete Research Workflow

  1. Discover: python scripts/search_arxiv.py "your topic" --sort date --max 10
  2. Assess impact: curl -s "https://api.semanticscholar.org/graph/v1/paper/arXiv:ID?fields=citationCount,influentialCitationCount"
  3. Read abstract: web_extract(urls=["https://arxiv.org/abs/ID"])
  4. Read full paper: web_extract(urls=["https://arxiv.org/pdf/ID"])
  5. Find related work: curl -s "https://api.semanticscholar.org/graph/v1/paper/arXiv:ID/references?fields=title,citationCount&limit=20"
  6. Get recommendations: POST to Semantic Scholar recommendations endpoint
  7. Track authors: curl -s "https://api.semanticscholar.org/graph/v1/author/search?query=NAME"

Rate Limits

APIRateAuth
arXiv~1 req / 3 secondsNone needed
Semantic Scholar1 req / secondNone (100/sec with API key)

Notes

  • arXiv returns Atom XML — use the helper script or parsing snippet for clean output
  • Semantic Scholar returns JSON — pipe through python3 -m json.tool for readability
  • arXiv IDs: old format (hep-th/0601001) vs new (2402.03300)
  • PDF: https://arxiv.org/pdf/{id} — Abstract: https://arxiv.org/abs/{id}
  • HTML (when available): https://arxiv.org/html/{id}
  • For local PDF processing, see the ocr-and-documents skill

ID Versioning

  • arxiv.org/abs/1706.03762 always resolves to the latest version
  • arxiv.org/abs/1706.03762v1 points to a specific immutable version
  • When generating citations, preserve the version suffix you actually read to prevent citation drift (a later version may substantially change content)
  • The API <id> field returns the versioned URL (e.g., http://arxiv.org/abs/1706.03762v7)

Withdrawn Papers

Papers can be withdrawn after submission. When this happens:

  • The <summary> field contains a withdrawal notice (look for "withdrawn" or "retracted")
  • Metadata fields may be incomplete
  • Always check the summary before treating a result as a valid paper

Frequently asked questions about arXiv Research

Similar skills