Skip to content
Automation
Skill

/aris-arxiv

Search, download, and summarize academic papers from arXiv. Use when user says "search arxiv", "download paper", "fetch arxiv", "arxiv search", "get paper pdf", or wants to find and save papers from arXiv to the local paper library.

From plugin
dr-claw
1.2k122 skills

Claude Code

$ npx -y skills add OpenLAIR/dr-claw --skill aris-arxiv --agent claude-code

SKILL.md

aris-arxiv.SKILL.md
name: aris-arxiv
description: Search, download, and summarize academic papers from arXiv. Use when user says "search arxiv", "download paper", "fetch arxiv", "arxiv search", "get paper pdf", or wants to find and save papers from arXiv to the local paper library.
argument-hint: "[query-or-arxiv-id]"
allowed-tools: Bash(*), Read, Write
license: MIT
metadata:
  author: wanshuiyin/ARIS
  version: "1.0.0"

arXiv Paper Search & Download

Search topic or arXiv paper ID: $ARGUMENTS

Constants

  • **PAPER_DIR** - Local directory to save downloaded PDFs. Default: `papers/` in the current project directory.
  • **MAX_RESULTS = 10** - Default number of search results.
  • **FETCH_SCRIPT** - `$ARIS_INFRA/tools/arxiv_fetch.py` (the ARIS helper bundle, located in Step 2). Fall back to inline Python if not found.

> Overrides (append to arguments): > - `/aris-arxiv "attention mechanism" - max: 20` - return up to 20 results > - `/aris-arxiv "2301.07041" - download` - download a specific paper by ID > - `/aris-arxiv "query" - dir: literature/` - save PDFs to a custom directory > - `/aris-arxiv "query" - download: all` - download all result PDFs

Workflow

Step 1: Parse Arguments

Parse `$ARGUMENTS` for directives:

  • **Query or ID**: main search term or a bare arXiv ID such as `2301.07041` or `cs/0601001`
  • **`- max: N`**: override MAX_RESULTS (e.g., `- max: 20`)
  • **`- dir: PATH`**: override PAPER_DIR (e.g., `- dir: literature/`)
  • **`- download`**: download the first result's PDF after listing
  • **`- download: all`**: download PDFs for all results

If the argument matches an arXiv ID pattern (`YYMM.NNNNN` or `category/NNNNNNN`), skip the search and go directly to Step 3.

Step 2: Search arXiv

Locate the fetch script:

# Locate the ARIS helper bundle (skills/aris-infra in Dr. Claw; it sits next to
# this skill's own folder). Non-fatal: the steps below fall back when it is missing.
ARIS_INFRA="${ARIS_INFRA:-}"
if [ ! -f "$ARIS_INFRA/tools/research_wiki.py" ]; then
  ARIS_INFRA=""
  for candidate in \
    "${CLAUDE_SKILL_DIR:-/nonexistent}/../aris-infra" \
    ".claude/skills/aris-infra" \
    ".agents/skills/library/aris-infra" \
    "skills/aris-infra" \
    "${HOME:-/nonexistent}/.claude/skills/aris-infra"; do
    if [ -f "$candidate/tools/research_wiki.py" ]; then ARIS_INFRA="$candidate"; break; fi
  done
fi
if [ -z "$ARIS_INFRA" ]; then
  # Project skill links point into the bundled skills folder, so ../aris-infra
  # resolves through any linked aris-* skill even when aris-infra is not linked.
  for linked in .claude/skills/aris-* .agents/skills/aris-* .agents/skills/library/aris-* .gemini/skills/aris-*; do
    if [ -f "$linked/../aris-infra/tools/research_wiki.py" ]; then ARIS_INFRA="$linked/../aris-infra"; break; fi
  done
fi

If `ARIS_INFRA` is still empty, it is the `aris-infra` folder beside this skill's own folder: set it to that absolute path.

SCRIPT="$ARIS_INFRA/tools/arxiv_fetch.py"
[ -n "$ARIS_INFRA" ] && [ -f "$SCRIPT" ] || SCRIPT=""

**If SCRIPT is found**, run:

python3 "$SCRIPT" search "QUERY" --max MAX_RESULTS

**If SCRIPT is not found**, fall back to inline Python:

python3 - <<'PYEOF'
import json
import urllib.parse
import urllib.request
import xml.etree.ElementTree as ET

NS = "http://www.w3.org/2005/Atom"
query = urllib.parse.quote("QUERY")
url = (f"http://export.arxiv.org/api/query"
       f"?search_query={query}&start=0&max_results=MAX_RESULTS"
       f"&sortBy=relevance&sortOrder=descending")
with urllib.request.urlopen(url, timeout=30) as r:
    root = ET.fromstring(r.read())
papers = []
for entry in root.findall(f"{{{NS}}}entry"):
    aid = entry.findtext(f"{{{NS}}}id", "").split("/abs/")[-1].split("v")[0]
    title = (entry.findtext(f"{{{NS}}}title", "") or "").strip().replace("\n", " ")
    abstract = (entry.findtext(f"{{{NS}}}summary", "") or "").strip().replace("\n", " ")
    authors = [a.findtext(f"{{{NS}}}name", "") for a in entry.findall(f"{{{NS}}}author")]
    published = entry.findtext(f"{{{NS}}}published", "")[:10]
    cats = [c.get("term", "") for c in entry.findall(f"{{{NS}}}category")]
    papers.append({
        "id": aid,
        "title": title,
        "authors": authors,
        "abstract": abstract,
        "published": published,
        "categories": cats,
        "pdf_url": f"https://arxiv.org/pdf/{aid}.pdf",
        "abs_url": f"https://arxiv.org/abs/{aid}",
    })
print(json.dumps(papers, ensure_ascii=False, indent=2))
PYEOF

Present results as a table:

| # | arXiv ID   | Title               | Authors        | Date       | Category |
|---|------------|---------------------|----------------|------------|----------|
| 1 | 2301.07041 | Attention Is All... | Vaswani et al. | 2017-06-12 | cs.LG    |

Step 3: Fetch Details for a Specific ID

When a single paper ID is requested (either directly or from Step 2):

python3 "$SCRIPT" search "id:ARXIV_ID" --max 1
# or fallback:
python3 -c "
import urllib.request, xml.etree.ElementTree as ET
NS = 'http://www.w3.org/2005/Atom'
url = 'http://export.arxiv.org/api/query?id_list=ARXIV_ID'
with urllib.request.urlopen(url, timeout=30) as r:
    root = ET.fromstring(r.read())
# print full details ...
"

Display: title, all authors, categories, full abstract, published date, PDF URL, abstract URL.

Step 4: Download PDFs

When download is requested, for each paper ID to download:

# Using fetch script:
python3 "$SCRIPT" download ARXIV_ID --dir PAPER_DIR

# Fallback:
mkdir -p PAPER_DIR && python3 -c "
import pathlib
import sys
import urllib.request

out = pathlib.Path('PAPER_DIR/ARXIV_ID.pdf')
if out.exists():
    print(f'Already exists: {out}')
    sys.exit(0)
req = urllib.request.Request(
    'https://arxiv.org/pdf/ARXIV_ID.pdf',
    headers={'User-Agent': 'arxiv-skill/1.0'},
)
with urllib.request.urlopen(req, timeout=60) as r:
    out.write_bytes(r.read())
print(f'Downloaded: {out} ({out.stat().st_size // 1024} KB)')
Read more
@openlair
Ships withdr-claw

A Super AI Lab with massive AI Doctors as Assistants. Best IDE for Research via AI Power.

1.2k122 skills
Get the whole plugin

Stars on GitHub

Momentum

stars in total
1.2k
Star history of OpenLAIR/dr-claw on GitHub, a chart by star-history.com

Other skills on dr-claw.

dr-claw

dr-claw

Dr. Claw skill for OpenClaw project discovery, idea intake, waiting-session triage, structured session control, event-driven…

@openlair@openlairInstall Skill
academic-researcher

academic-researcher

Academic research assistant for literature reviews, paper analysis, and scholarly writing. Use when: reviewing academic papers,…

@openlair@openlairInstall Skill
aris-ablation-planner

aris-ablation-planner

Use when main results pass result-to-claim (claim_supported=yes or partial) and ablation studies are needed for paper submission.…

@openlair@openlairInstall Skill
aris-auto-review-loop

aris-auto-review-loop

Autonomous multi-round research review loop. Repeatedly reviews via Codex MCP, implements fixes, and re-reviews until positive…

@openlair@openlairInstall Skill
aris-compute-guard

aris-compute-guard

Mandatory pre-flight compute resource check before running experiments. Detects whether local/remote GPU or compute resources are…

@openlair@openlairInstall Skill

More skills from other plugins.

agent-builder

agent-builder

Load immediately after an Agent intent, before the first agent_builder_* call. Governs how you create, configure, test, and…

n8n12d209k
@n8n-io@n8n-ioInstall Skill
browser-use

browser-use

Direct browser control via CDP for web interaction: automation, scraping, testing, screenshots, and site/app work. Also covers…

@browser-use@browser-useInstall Skill
agent-browser

agent-browser

Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling…

@vercel-labs-2@vercel-labs-2Install Skill
add-anydoc

add-anydoc

Add local office-document-to-Markdown conversion to NanoClaw agent containers with the pinned Firecrawl AnyDoc CLI. Use when…

@nanocoai@nanocoaiInstall Skill

Questions about aris-arxiv.

Which coding agents can use aris-arxiv?
aris-arxiv installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.