agentleFS
ShaishavMaisuriaShaishavMaisuria/research-paper-lifecycle-skills/skills/fetch-paper/SKILL.md

fetch-paper

Skill59 starsChanged 5 months agoApache-2.0View on GitHub

Fetches a legal open-access copy of a paper from its DOI or arXiv ID — resolves through Unpaywall, arXiv PDF/HTML, and the open-access ACM Digital Library. Use when the user wants to fetch, download, read, or get the PDF or full text of a specific paper. Single polite fetch, transient processing only: it never stores paper text in the repo, never bypasses paywalls, and never uses shadow libraries. For finding papers by topic or venue, use find-papers first; this skill starts from an identifier.

2 other projects use a version of this.

Adopted by

Most recently taken up by

The file

We split this skill into the rules it gives an agent

5 rules. About 0 are common, 3 are distinctive, and 2 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈3

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    NOT for topic/title/venue search — run find-papers first to get the identifier.

    line 25
  2. Distinctive:

    Resolve the identifier: Run:

    line 38
  3. Very specific:

    Prefer html_url (arXiv HTML) when present — easiest to read directly.

    line 52
  4. Distinctive:

    Never write paper text, abstracts, or the PDF into the repository or any committed file.

    line 75
  5. Distinctive:

    Never submit anything to any system on the user's behalf.

    line 95

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Fetch Paper

Resolves one DOI or arXiv ID to a legal open-access copy (PDF URL, arXiv HTML rendering, landing page) and optionally downloads it for transient reading. This is the fetch layer that find-papers, literature-review, study-exemplars, and draft-related-work build on.

When to use

  • The user has a DOI, doi.org URL, arXiv ID, or arxiv.org URL and wants the paper.
  • Another skill needs full text for a paper it found (lit review, exemplar study).
  • The user asks "is there an open-access version of this paper?"
  • NOT for topic/title/venue search — run find-papers first to get the identifier.

Inputs

  • Exactly one identifier per fetch: a DOI (10.1145/3589132.3625571, https://doi.org/...) or an arXiv ID (2403.12345, arXiv:2403.12345v2, cs/0309136, or any arxiv.org URL). arXiv-issued DOIs (10.48550/arXiv.*) are auto-converted.
  • UNPAYWALL_EMAIL (or CONTACT_EMAIL) env var — a real address; Unpaywall rejects placeholders with HTTP 422. The script prompts if unset.

Process

  1. Resolve the identifier. Run:

    python3 scripts/resolve_oa.py <DOI-or-arXiv-ID> --json

    The script handles everything deterministic: identifier normalization, Unpaywall best_oa_location lookup, arXiv PDF/HTML URLs, the post-2026 ACM DL open-access fallback for 10.1145/* DOIs, rate limiting, 429 backoff, and response caching under .cache/fetch-paper/. Never hand-roll these API calls.

  2. Interpret the result (exit codes: 0 = OA found, 3 = no legal OA copy, 2 = bad input/config, 1 = network failure):
    • Prefer html_url (arXiv HTML) when present — easiest to read directly.
    • Otherwise use pdf_url. Read the meaning of oa_status, version, and license in references/oa-sources.md.
    • version: submittedVersion means a preprint — warn the user that the published version may differ before they quote or cite page numbers.
  3. Fetch the full text transiently. Either read the URL directly, or:

    python3 scripts/resolve_oa.py <ID> --download

    which saves the PDF to a fresh temp directory (never the repo). Read it, extract what the task needs, then delete it. dl.acm.org blocks scripted downloads — give the user the URL to open in a browser instead.

  4. If exit code is 3 (no legal OA copy): relay the script's suggestions — author homepages / institutional repositories (search via find-papers), arXiv by title, the user's library access, or emailing the authors. Never suggest Sci-Hub, LibGen, or any shadow library, and never try to bypass a paywall. Full rules: references/copyright-and-politeness.md.
  5. Process, don't persist. Quote at most short excerpts in your analysis. Never write paper text, abstracts, or the PDF into the repository or any committed file. Metadata (DOI, title, BibTeX fields) is always fine.

Output

  • A resolution report (human-readable, or JSON with --json): is_oa, oa_status, license, version, pdf_url, html_url, landing_url, source, plus notes.
  • With --download: a transient PDF in a temp directory, path printed to stderr.
  • Nothing is ever written into the repository.

Guardrails

  • One identifier per invocation — never loop this script over a list of DOIs for bulk harvesting (ACM ToU and arXiv policy both prohibit it). For a handful of papers in a session, run it one at a time and let the built-in rate limits breathe.
  • Legal sources only; transient processing only; no storage, no redistribution.
  • Cite the published DOI, not the preprint, when both exist — and verify every citation with verify-citations before it lands in a bibliography.
  • Never submit anything to any system on the user's behalf.

References

  • references/oa-sources.md — Unpaywall fields and errors, arXiv URL patterns, ACM DL open access, troubleshooting.
  • references/copyright-and-politeness.md — what is safe to keep vs. transient-only, politeness contract.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.