paper-fetch
Agents365-ai/paper-fetchИнструмент для легальной загрузки PDF научных статей по DOI через цепочку из 5 источников: Unpaywall, Semantic Scholar, arXiv, PMC, bioRxiv. Поддерживает пакетный режим, структурированный JSON-вывод и все основные AI-агенты.
Установка
git clone https://github.com/Agents365-ai/paper-fetch.gitREADME
paper-fetch — Легальный загрузчик PDF в открытом доступе
Что делает
- Загружает PDF статей по DOI (или пакетному файлу DOI) из легальных источников открытого доступа
- Цепочка из 5 источников: Unpaywall → Semantic Scholar
openAccessPdf→ arXiv → PubMed Central OA → bioRxiv/medRxiv - Нулевые зависимости — только стандартная библиотека Python,
pip installне требуется - Автоматическое именование файлов —
{first_author}_{year}_{short_title}.pdf - Пакетный режим — передайте файл с DOI через
--batchили через stdin с--batch - - Нативная поддержка агентов — стабильный JSON-конверт в stdout, NDJSON-прогресс в stderr, машиночитаемая подкоманда
schema, автоопределение формата по TTY, идемпотентные повторы через--idempotency-key, типизированные коды выхода (0/1/3/4), частично успешные пакеты с подсказкамиnextдля повтора - Безопасные повторы — повторный запуск пропускает уже загруженные файлы;
--idempotency-keyвоспроизводит точный конверт без сетевых запросов - Никогда не обходит пейволлы — если OA-копия не найдена, сообщает об ошибке с метаданными для обращения через МБА
- Самообновление — при установке через
git cloneкаждый вызов запускает фоновыйgit pull --ff-only(не чаще раза в 24 часа). Никаких действий от пользователя не требуется. Отключается черезexport PAPER_FETCH_NO_AUTO_UPDATE=1.
Охват дисциплин
Скилл не привязан к конкретной дисциплине — работает для любой области, не только для биологии или информатики. Охват зависит от наличия легальной OA-версии статьи, а не от её тематики.
| Источник | Охват дисциплин |
|---|---|
| Unpaywall | ✅ Все дисциплины (охватывает все DOI Crossref — гуманитарные, социальные науки, физика, химия, экономика и др.) |
| Semantic Scholar | ✅ Все дисциплины (межотраслевой академический граф) |
| arXiv | Физика, математика, CS, статистика, количественные финансы, экономика, электротехника |
| PubMed Central | Только биомедицина |
| bioRxiv / medRxiv | Только препринты по биологии / медицине |
На практике Unpaywall + Semantic Scholar вместе покрывают OA-статьи по химии, материаловедению, экономике, психологии, гуманитарным наукам и всем остальным областям через институциональные репозитории, SSRN, RePEc и OA-копии у издателей. arXiv/PMC/bioRxiv — дополнительные источники для своих специфических областей. Если легальная OA-копия нигде не найдена, скилл честно сообщает об ошибке — он никогда не обходит пейволлы вне зависимости от дисциплины.
Поддержка платформ
Работает со всеми основными AI-агентами, поддерживающими формат Agent Skills:
| Платформа | Статус | Детали |
|---|---|---|
| Claude Code | ✅ Полная поддержка | Нативный формат SKILL.md |
| OpenClaw / ClawHub | ✅ Полная поддержка | Пространство имён metadata.openclaw |
| Hermes Agent | ✅ Полная поддержка | Устанавливается в категорию research |
| pi-mono | ✅ Полная поддержка | Пространство имён metadata.pimo |
| OpenAI Codex | ✅ Полная поддержка | Sidecar-файл agents/openai.yaml |
| SkillsMP | ✅ Индексирован | Настроены GitHub-топики |
Сравнение
vs агент без скилла
| Возможность | Нативный агент | Этот скилл |
|---|---|---|
| Получение PDF по DOI | Произвольный веб-поиск | Детерминированная цепочка из 5 источников |
| Интеграция с Unpaywall | Нет | Да — максимальный охват OA |
| Fallback на arXiv / PMC / bioRxiv | Вручную | Автоматически |
| Пакетная загрузка | Нет | Да — --batch dois.txt или --batch - (stdin) |
| Единообразные имена файлов | Нет | Да — author_year_title.pdf |
| Машиночитаемая схема | Нет | Да — fetch.py schema |
| Структурированный вывод | Нет | Стабильный JSON-конверт + NDJSON-прогресс |
| Идемпотентные повторы | Нет | --idempotency-key воспроизводит кешированный конверт |
| Типизированные коды выхода | Нет | 0/1/3/4 — оркестратор может маршрутизировать ошибки |
| Гарантия легальности | Нет | Жёсткий отказ от обхода пейволлов |
| Зависимости | Варьируются | Только stdlib Python |
Требования
- Python 3.8+ (только стандартная библиотека, дополнительные пакеты не нужны)
- Контактный email для Unpaywall (необязательно, но рекомендуется) — задаётся один раз:
export UNPAYWALL_EMAIL=you@example.com
Добавьте в ~/.zshrc / ~/.bashrc для сохранения. Без него Unpaywall пропускается, но оставшиеся 4 источника (Semantic Scholar, arXiv, PMC, bioRxiv/medRxiv) всё равно используются.
Установка скилла
Claude Code
# Глобальная установка
git clone https://github.com/Agents365-ai/paper-fetch.git ~/.claude/skills/paper-fetch
# Установка на уровне проекта
git clone https://github.com/Agents365-ai/paper-fetch.git .claude/skills/paper-fetchOpenClaw / ClawHub
clawhub install paper-fetch
# Или вручную
git clone https://github.com/Agents365-ai/paper-fetch.git ~/.openclaw/skills/paper-fetchHermes Agent
git clone https://github.com/Agents365-ai/paper-fetch.git ~/.hermes/skills/research/paper-fetchИли добавьте в ~/.hermes/config.yaml:
skills:
external_dirs:
- ~/myskills/paper-fetchpi-mono
git clone https://github.com/Agents365-ai/paper-fetch.git ~/.pimo/skills/paper-fetchOpenAI Codex
# На уровне пользователя
git clone https://github.com/Agents365-ai/paper-fetch.git ~/.agents/skills/paper-fetch
# На уровне проекта
git clone https://github.com/Agents365-ai/paper-fetch.git .agents/skills/paper-fetchSkillsMP
skills install paper-fetch
Сводная таблица путей установки
| Платформа | Глобальный путь | Путь проекта |
|---|---|---|
| Claude Code | ~/.claude/skills/paper-fetch/ | .claude/skills/paper-fetch/ |
| OpenClaw | ~/.openclaw/skills/paper-fetch/ | skills/paper-fetch/ |
| Hermes Agent | ~/.hermes/skills/research/paper-fetch/ | Через external_dirs |
| pi-mono | ~/.pimo/skills/paper-fetch/ | — |
| OpenAI Codex | ~/.agents/skills/paper-fetch/ | .agents/skills/paper-fetch/ |
| SkillsMP | N/A (устанавливается через CLI) | N/A |
Использование
Один DOI:
python scripts/fetch.py 10.1038/s41586-021-03819-2
Пользовательская директория вывода:
python scripts/fetch.py 10.1038/s41586-021-03819-2 --out ~/papers
Пакетный режим:
python scripts/fetch.py --batch dois.txt --out ~/papers
Через stdin:
cat dois.txt | python scripts/fetch.py --batch -
Машиночитаемая схема:
python scripts/fetch.py schema