arxiv

arxiv is a skill for Claude Code from zjunlp/Mechanist. It costs 61 tokens per session (1,834 once invoked), scanned A, a copy of arxiv, MIT.

A tool for finding, downloading, and summarizing research papers from arXiv, an open online repository for scientific papers. It can save the papers as PDFs in a local project folder.

In plain words
What is it for?
Use it to search by topic or paper ID, download one or many papers, choose a save directory, and summarize research papers.
Why use it?
It avoids manually searching arXiv, copying paper details, and downloading files one at a time. It also puts papers in a predictable local library.

Skill for Claude Code

Written for Claude Code: allowed-tools in frontmatter.

Part of the mechanist plugin — 54 skills, 4 agents shipped together

Good fit Use it to search by topic or paper ID, download one or many papers, choose a save directory, and summarize research papers.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/zjunlp/mechanist/arxiv
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add zjunlp/Mechanist --skill arxiv
Clone the repo
git clone --depth 1 https://github.com/zjunlp/Mechanist

Made for: Claude Code.

Or install mechanist, the plugin that ships this one along with the rest of its 54 skills, 4 agents.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for arxiv

README.md
[![agentmods](https://agentmods.dev/badge/skills/zjunlp/mechanist/arxiv.svg)](https://agentmods.dev/skills/zjunlp/mechanist/arxiv)
Your own site
<a href="https://agentmods.dev/skills/zjunlp/mechanist/arxiv"><img src="https://agentmods.dev/badge/skills/zjunlp/mechanist/arxiv.svg" alt="Measured on agentmods" height="20"></a>
Per session 61 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,834 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 1 finding. A grade says what 26 rules found in the file — not that it is safe.
Origin 81% copy Near-identical to another mod in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00061 $0.01834
Opus 5 $0.00030 $0.00917
Sonnet 5 $0.00012 $0.00367
Haiku 4.5 $0.00006 $0.00183

Measured 8d ago against content hash 11acc9d1f93d, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-08, from the pricing page.

Security

Grade A, and why

arxiv scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 8d ago.

The scan reads SKILL.md. This mod also ships 1 executable file (scripts/arxiv_fetch.py), listed below but not scanned — reading those needs a real analyzer, not pattern matching.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Makes network callslowCapability

Not a fault in itself. Listed so you know the mod talks to something, and to what.

import urllib.parse
Origin

This is a copy

81% identical to arxiv — 94 lines differ, which has more behind it and is treated as the original. This page carries a canonical link to it rather than competing with it.

skills/arxiv/SKILL.md · 195 lines

How it starts

The opening of the file, as written. The whole thing — 195 lines — stays where its author put it; the contents beside it link to each section on GitHub.

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 - Bundled at scripts/arxiv_fetch.py inside this skill. Resolve via ${CLAUDE_SKILL_DIR}/scripts/arxiv_fetch.py; fall back to inline Python if not found.

Overrides (append to arguments):

  • /arxiv "attention mechanism" — max: 20 - return up to 20 results
  • /arxiv "2301.07041" — download - download a specific paper by ID
  • /arxiv "query" — dir: literature/ - save PDFs to a custom directory
  • /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:

SCRIPT="${CLAUDE_SKILL_DIR}/scripts/arxiv_fetch.py"
[ -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

Read the full file on GitHub · 195 lines

Files

What ships with it

1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 8d ago First seen · 195 lines · 61 tokens per session scan A 11acc9d1f93d

Subscribe to this mod's changes

arxiv is a skill published in the GitHub repository zjunlp/Mechanist (72 stars, last pushed 13d ago), licensed MIT. It adds 61 tokens to every session and 1,834 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 1 finding (makes network calls). It is 81% identical to arxiv, differing in 94 lines, and is treated as a copy.

Related

Other skills, from other repositories