Read arXiv Paper
karpathy/nanochat
Fetches the TeX source of an arXiv paper from its URL, reads it and writes a markdown summary tied to the nanochat project.
Routes literature requests to lawful full-text sources: open access, publisher APIs, CNKI and institutional browser access, with a supporting-information gate.
$ npx skills add Yuan1z0825/nature-skills --skill nature-downloader -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Yuan1z0825/nature-skills nature-downloader --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/Yuan1z0825/nature-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/nature-downloader .claude/skills/nature-downloader && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "nature-downloader" agent skill from https://github.com/Yuan1z0825/nature-skills/tree/main/skills/nature-downloader into .claude/skills/nature-downloader/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nature-downloader", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Yuan1z0825/nature-skills/tree/main/skills/nature-downloaderType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Yuan1z0825/nature-skills --skill nature-downloader -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Yuan1z0825/nature-skills nature-downloader --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Yuan1z0825/nature-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/nature-downloader .agents/skills/nature-downloader && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "nature-downloader" agent skill from https://github.com/Yuan1z0825/nature-skills/tree/main/skills/nature-downloader into .agents/skills/nature-downloader/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nature-downloader", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Yuan1z0825/nature-skills --skill nature-downloader -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Yuan1z0825/nature-skills nature-downloader --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Yuan1z0825/nature-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/nature-downloader .cursor/skills/nature-downloader && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "nature-downloader" agent skill from https://github.com/Yuan1z0825/nature-skills/tree/main/skills/nature-downloader into .cursor/skills/nature-downloader/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nature-downloader", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Yuan1z0825/nature-skills.git --path skills/nature-downloader--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Yuan1z0825/nature-skills --skill nature-downloader -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Yuan1z0825/nature-skills nature-downloader --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Yuan1z0825/nature-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/nature-downloader .gemini/skills/nature-downloader && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "nature-downloader" agent skill from https://github.com/Yuan1z0825/nature-skills/tree/main/skills/nature-downloader into .gemini/skills/nature-downloader/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nature-downloader", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Yuan1z0825/nature-skills nature-downloaderInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Yuan1z0825/nature-skills --skill nature-downloader -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Yuan1z0825/nature-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/nature-downloader .github/skills/nature-downloader && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "nature-downloader" agent skill from https://github.com/Yuan1z0825/nature-skills/tree/main/skills/nature-downloader into .github/skills/nature-downloader/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nature-downloader", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Yuan1z0825/nature-skills --skill nature-downloader -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Yuan1z0825/nature-skills nature-downloader --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Yuan1z0825/nature-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/nature-downloader .opencode/skills/nature-downloader && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "nature-downloader" agent skill from https://github.com/Yuan1z0825/nature-skills/tree/main/skills/nature-downloader into .opencode/skills/nature-downloader/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "nature-downloader", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
nature-downloaderRoutes literature requests to lawful full-text sources: open access, publisher APIs, CNKI and institutional browser access, with a supporting-information gate.
A batch_download.mjs orchestrator normalizes the DOI or title, detects language and publisher, then routes the request. Chinese literature always goes through CNKI using the user's existing browser login, with no cookie export and no collection of institutional passwords. For English Elsevier, Springer Nature and IEEE papers with usable credentials, the publisher API is tried first; if it fails or lacks entitlement, legitimate open-access sources are checked. Other publishers check open access first.
Institutional web access is never switched to automatically: the agent asks once, and only after both the API and open-access routes fail. Before any download it must ask whether supporting information is wanted and run with exactly one of the si or no-si flags, otherwise the script refuses. Verified school routes are examples, so each institution starts from the user's actual library resource URL. The skill ships school and publisher data files, provider modules and a retry template.
7 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit e605b35. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/, which the agent can run.
Shell commands in SKILL.md call:
python3nodepipFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
kns.cnki.netwebofscience.comdev.elsevier.comdev.springernature.comdeveloper.ieee.orgarxiv.orgFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Nature Literature Downloader loads about 6k tokens when it runs, and up to ~11k if it reads all its reference files. Until then it costs about 52 tokens; SKILL.md has 2,513 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from Yuan1z0825/nature-skills at commit e605b35, republished under its MIT licence (© Yuan1z0825). 2,513 words, ~5,954 tokens.
.claude/skills/nature-downloader/SKILL.md (or your agent's skills folder). This skill also uses 74 other files; get the full folder from GitHub.This skill routes literature through lawful open-access, publisher-API, CNKI institutional, and browser-based institutional providers. scripts/batch_download.mjs is the orchestration entry point; school configuration, publisher credentials, metadata/OA resolution, provider downloads, content validation, and manifests are separate modules.
Verified routes are examples, not defaults. Every institution should start from the user's actual library resource URL, because resource portals, CAS callbacks, EZproxy, WebVPN, IP-authenticated database pages, and database detail pages reveal the live authorization path more reliably than a school name.
SI confirmation gate — do this first. Before downloading any PDF, CAJ, HTML, XML, archive, or attachment, ask whether the user wants Supporting Information. An explicit request for SI counts as yes; an explicit request for正文 only counts as no. Otherwise ask once for the whole batch. Run the downloader with exactly one of
--sior--no-si. Without either flag the script returnssi_confirmation_requiredand does not create the output directory.
Main workflow. Normalize the DOI/title and identify language and publisher before routing. Chinese literature always uses CNKI. For English Elsevier, Springer Nature, and IEEE articles with usable provider credentials, try the publisher API first and do not require an OA determination after a successful API download. If that API attempt fails, automatically check legitimate OA sources. Other English publishers check OA first, then use the institutional Web Access route when OA is unavailable.
规范化 DOI/题名并识别语言、出版商
├─ 中文文献:直接走 CNKI
└─ 英文文献
├─ Elsevier / Springer Nature / IEEE,且已配置有效 Key
│ ├─ 优先通过出版商 API 下载
│ ├─ API 下载成功:结束,不强制判断 OA
│ └─ API 下载失败:检查文章级 OA,再走 PMC / Unpaywall / 合法仓储
└─ 其他出版商
├─ 检查文章级 OA
└─ OA 不可用:走 Web Access 机构授权Chinese literature is CNKI-only. A Chinese title,
zhmetadata language, explicit CNKI source URL, or--route cnkimust use CNKI even if another OA copy appears to exist. Reuse the user's current Chrome library/CNKI login state and prefer configureddiscovery.cnki_url. Never export cookies or collect the institutional password.
Publisher API fallback. A valid API key does not guarantee full-text entitlement. When an Elsevier, Springer Nature, or IEEE API attempt returns no entitlement or no usable full text, automatically try legitimate OA sources first. Return
api_fallback_confirmation_requiredand ask once whether to use Web Access only after both the publisher API and OA routes fail. Do not switch to institutional Web Access automatically.
Browser-state principle. Authorized downloads depend on the exact browser profile where the user is logged in. If a proxy, CDP session, or browser automation tool opens a fresh profile or a different browser with no login state, do not treat the failure as missing library permission. Switch to a control path that reuses the user's active browser session, or ask the user to authenticate in the controlled browser instance.
Format principle. PDF, HTML full text, and database-native formats such as CAJ are different deliverables. If the user asks for PDF only, require a real PDF link or
no_authorized_pdf_found/pdf_fetch_failedwhen none exists. Do not save CAJ, HTML, or a login page as if it were a PDF.
For every download request, first establish the paper list and ask:
是否同时下载这些文献的 Supporting Information(SI,补充材料)?Do metadata lookup before this question only when needed to identify the requested papers. Do not download files until the answer is known. Configure a library only when the selected route is CNKI or Web Access. Configure a publisher API only when the selected English article belongs to Elsevier, Springer Nature, or IEEE; an OA determination is not required before trying a configured provider API.
Ask for the library resource URL the user actually uses:
请发你平时进入图书馆电子资源/数据库的平台链接。
可以是资源门户、数据库列表、Web of Science 入口、某个数据库详情页,
或跳转到统一身份认证的登录链接。Then infer the authorization route from the URL before saving config:
python3 scripts/configure_school.py infer "https://example.edu/library/resources"
python3 scripts/configure_school.py url "https://example.edu/library/resources"
python3 scripts/configure_school.py show
python3 scripts/configure_school.py health --forceThe distributed skill contains no school presets. If the user cannot provide a resource URL, ask them to locate their institution's library/database entry instead of guessing a school-specific domain.
The default config path is:
~/.config/lit-dl/school.jsonFor tests or isolated profiles, set:
LIT_DL_CONFIG_DIR=/path/to/configdirThe downloader reads this config automatically. If discovery.web_of_science_url is present, scripts/batch_download.mjs uses it as the Web of Science entry; otherwise it falls back to https://www.webofscience.com/wos/woscc/basic-search.
For Chinese literature, the downloader also reads discovery.cnki_url when present. If absent, scripts/batch_download.mjs --title "<中文题名>" falls back to https://kns.cnki.net/kns8s/defaultresult/index.
For an English article, identify its publisher before deciding when to resolve article-level OA:
Collect a DOI, PMID, exact title, article URL, or a definite paper list, then normalize its metadata and publisher.
If it belongs to Elsevier, Springer Nature, or IEEE and usable provider credentials are configured, try that publisher API first. On success, record accessMode: publisher_api and oa_status: not_checked_api_first; do not run OA resolution only to label the article.
If the publisher API fails, automatically search legitimate OA sources such as PMC, Unpaywall, publisher OA pages, arXiv, and other lawful repositories or clearly open PDF URLs. Preserve the failed API attempt in the manifest.
For all other English publishers, search those legitimate OA sources before Web Access.
For an exact title or an explicit OA-only request, prefer:
node scripts/batch_download.mjs --title "<exact title>" --open-access --no-si --out "<project>"Use --pdf-url when the user supplies a known legitimate OA PDF URL.
Verify the downloaded file and record the source. Mark a successful PDF as open_access_downloaded.
If no lawful OA full text is found, mark oa_not_found. For a supported publisher whose API already failed, request confirmation before Web Access. For another publisher, continue to Web Access. If --route open_access was explicitly requested, stop after the OA result.
Configure credentials lazily, only when the route first needs them:
python3 scripts/configure_credentials.py set elsevier
python3 scripts/configure_credentials.py set springer_nature
python3 scripts/configure_credentials.py set ieee --fulltext-endpoint 'https://issued-endpoint.example/articles/{doi}'
python3 scripts/configure_credentials.py set elsevier --stdin
python3 scripts/configure_credentials.py show
python3 scripts/configure_credentials.py validate <provider>
python3 scripts/configure_credentials.py delete <provider>
python3 scripts/configure_credentials.py contact-email researcher@example.orgGive the user the official registration link: Elsevier https://dev.elsevier.com/, Springer Nature https://dev.springernature.com/docs/quick-start/api-access/, or IEEE https://developer.ieee.org/member/register.
Do not proactively ask the user to paste an API key into chat. If the user voluntarily sends a publisher API key, treat that as authorization to save that exact key: do not reject it, ask them to regenerate it, or repeat it back. Pass it to configure_credentials.py set <provider> --stdin, keep it out of command-line arguments, logs, replies, and manifests, then report only the masked confirmation and validation status. The local hidden prompt remains the preferred path when the key has not already been provided. IEEE Metadata API access is not paid full-text access; require the issued Full-Text Access endpoint/template before treating IEEE as downloadable through the API. Secrets are stored in ~/.config/lit-dl/credentials.json with mode 0600.
Classify the user-provided URL before choosing an access path:
cas.* / /authserver/login CAS / SSO login page; inspect service= callback, then return to the service portal
idp/shibboleth / carsi CARSI / Shibboleth institutional route
ezproxy / libproxy EZproxy remote-access proxy
webvpn / vpn WebVPN route
metaersp / metaauth / uas Library resource aggregation portal
webofscience / sciencedirect Database or publisher entry; check whether it was reached through a portalIf the URL is a login page with a service= parameter, treat the callback host as the resource service and do not make the login page the whole workflow. For example, https://login.university.example/authserver/login?service=https://resources.university.example/callback means the identity service returns to the user's resource portal after authentication.
Confirm against what actually appears in the user's address bar; correct these for each institution instead of assuming a preset is complete.
Library home / aggregation: library.example.edu, resources.example.edu
Discovery/database entry: webofscience.com, clarivate.com, cnki.net, sciencedirect.com, provider.example.com
Unified identity / SSO: sso.example.edu, cas.example.edu, idp.example.edu
Federation / WAYF: ds.carsi.edu.cn, wayf.example.org, shibboleth/openathens hosts
Proxy / WebVPN: ezproxy.example.edu, webvpn.example.eduTreat configured institutional login, federation, proxy, and database-login hosts as sign-in stages. Do not treat reaching them as a final failure.
Use only the user's legitimate institutional access. Do not bypass paywalls, DRM, or two-factor authentication.
Verification-first rule: When a visible slider, checkbox, robot check, or simple verification control appears in the user's authenticated Chrome session, attempt it in the browser before asking the user to intervene. Keep the attempt bounded (at most two attempts on one tab), verify that the challenge disappeared, and continue from that same tab when successful.
Continue, Verify, or equivalent visible controls: click once, then re-check the page state.User handoff: Ask the user only after the bounded attempt fails, or immediately when the page requires secret or identity-bearing input such as an image-selection answer, QR approval, SMS/OTP, passkey, hardware key, or two-factor authentication. Keep the challenged tab open and never ask the user to paste credentials or codes into chat.
Avoid unbounded or indiscriminate downloading. Process only the definite paper list confirmed by the user, apply provider-friendly pacing, and leave a clear audit trail of what was downloaded, from where, and whether supporting information was found.
Do not ask the user to paste institutional passwords, database passwords, OTP codes, recovery codes, or session tokens into chat or terminal. If the user offers one of those identity-bearing secrets, decline and use the handoff-login workflow instead. Publisher API keys follow the separate save-on-receipt rule above.
Exception for saved institutional login pages: if the user explicitly says that the browser has already filled credentials and authorizes clicking the visible login/confirm button, the agent may click that button once on the expected institutional SSO / CAS / CARSI / Shibboleth page without reading, copying, or typing any credential. This exception does not apply to CAPTCHA, QR login, SMS/OTP, publisher bot checks, consent/security warnings, or any page outside the expected institutional login flow.
Do not inspect or export cookies, passwords, local storage, browser profiles, or session files. Use the browser's already-authenticated page context only.
Before attempting downloads, confirm the conditions that apply to the selected access branch.
For the OA-only branch, confirm the target paper identifier/list, output folder, Node.js 22+, and Python 3 when PDF verification needs it. Do not require a library configuration or institutional browser login.
For the paid-library branch, confirm these conditions:
python3 scripts/configure_school.py show.python3 scripts/configure_school.py preset "<school name>" or guide the user through src/wizard.py.chrome://inspect/#remote-debugging and enable remote debugging for the current browser instance.node --version.node is not on PATH in Codex Desktop, try %LOCALAPPDATA%\OpenAI\Codex\bin\node.exe.python3 --version.pip install -r requirements.txt when needed.%USERPROFILE%\.claude\skills\web-access-main\scripts\check-deps.mjs.%USERPROFILE%\.agents\skills\web-access-main\scripts\check-deps.mjs.%USERPROFILE%\.codex\skills\web-access-main\scripts\check-deps.mjs.If Claude Code says this skill is not installed, install or copy it to:
$env:USERPROFILE\.claude\skills\nature-downloaderCodex and other agent setups may instead use .codex\skills or .agents\skills; treat the three locations as install targets, not as different skill versions.
Definite DOI/title/PMID lists are supported without a fixed per-batch paper-count recommendation.
Operational safeguards:
Do not turn a broad keyword search into unlimited automatic downloading. Do not download whole journal issues, volumes, or large result sets.
Classify every paper into one of these statuses, and keep the status in the manifest:
downloaded
downloaded_with_si
open_access_downloaded
full_text_html_available
available_not_downloaded
native_fulltext_downloaded
si_confirmation_required
credentials_missing
credentials_invalid
api_not_entitled
api_fulltext_unavailable
api_fallback_confirmation_required
oa_not_found
oa_resolution_inconclusive
metadata_ambiguous
carsi_waiting_user
carsi_resolved_retry_needed
publisher_verification_waiting_user
sciencedirect_robot_check
retry_after_user_verification
verification_auto_passed
verification_auto_failed
do_not_auto_retry
url_needs_repair
library_no_permission
no_full_text_link
publisher_blocked_waiting_user
no_authorized_pdf_found
failed_after_retryUse verification_auto_passed when an automatic CAPTCHA/slider/robot check was successfully solved by the skill, and the download then proceeded normally.
Use verification_auto_failed when auto-verification was attempted but could not pass the challenge. This is a user-handoff status, not a final failure.
Use carsi_waiting_user only when the browser is visibly at an institutional SSO / CAS / CARSI-Shibboleth / OpenAthens / database authentication page. Do not treat this as a final failure.
Use publisher_verification_waiting_user or sciencedirect_robot_check when a publisher page shows a verification challenge but no automatic interaction was possible. When a bounded automatic attempt was made and failed, use verification_auto_failed instead. None of these is a final download failure.
Use open_access_downloaded when a legitimate open-access route such as PMC, the publisher's OA PDF, arXiv, or another lawful open PDF source provides the downloaded PDF without institutional authorization.
For a successful API-first download, record oa_status: not_checked_api_first; this means OA resolution was intentionally skipped, not that the article is non-OA. Use api_fallback_confirmation_required only after a supported publisher API attempt and its automatic OA fallback both fail.
Use full_text_html_available when the library/full-text resolver grants access to a readable HTML full text but no valid PDF link or %PDF response is available. This is a successful full-text access result, not a PDF download. Save the HTML/text if the user asked for the article, and explicitly tell the user that the PDF was not available through the current authorized route.
Use library_no_permission when the library portal, SFX/OpenURL resolver, database, or publisher page clearly says the user's institution has no full-text entitlement for the paper. Tell the user plainly that the current library resources do not have permission for this article. Do not retry direct publisher access as if it were a temporary network problem.
Use the web-access CDP proxy when it can attach to the same logged-in browser instance the user is using. If the task depends on existing login state and CDP opens a blank/new profile, prefer a browser-control channel that reuses the user's active browser session.
On Windows PowerShell:
$node = "node"
if (-not (Get-Command node -ErrorAction SilentlyContinue)) {
$node = "$env:LOCALAPPDATA\OpenAI\Codex\bin\node.exe"
}
$checkDepsCandidates = @(
"$env:USERPROFILE\.claude\skills\web-access-main\scripts\check-deps.mjs",
"$env:USERPROFILE\.agents\skills\web-access-main\scripts\check-deps.mjs",
"$env:USERPROFILE\.codex\skills\web-access-main\scripts\check-deps.mjs"
)
$checkDeps = $checkDepsCandidates | Where-Object { Test-Path $_ } | Select-Object -First 1
if (-not $checkDeps) { throw "web-access-main/scripts/check-deps.mjs not found" }
& $node $checkDepsThen test:
Invoke-WebRequest -UseBasicParsing -Uri "http://127.0.0.1:3456/targets" -TimeoutSec 10If this hangs or fails:
%TEMP%\cdp-proxy.log.For anything beyond a single paper, run scripts/batch_download.mjs instead of driving the browser step-by-step. OA and publisher APIs run without CDP; CNKI, Web Access, and requested SI lazily attach to the authenticated browser. Large DOMs and file bytes remain inside the scripts.
The script reads ~/.config/lit-dl/school.json automatically. When the config contains discovery.web_of_science_url, that URL is used as the Web of Science entry; otherwise the script falls back to its compiled default Web of Science URL.
# by topic (collects N records from Web of Science Core Collection):
node scripts/batch_download.mjs --topic "rice blast resistance gene" --count 10 --no-si --out "<project>"
# by explicit DOIs:
node scripts/batch_download.mjs --dois "10.1007/s00122-021-03957-1,10.1111/pbi.14066" --no-si --out "<project>"
# by exact open-access title (arXiv fallback, useful for DOI-less papers):
node scripts/batch_download.mjs --title "Attention Is All You Need" --open-access --no-si --out "<project>"
# by Chinese exact title (default CNKI route):
node scripts/batch_download.mjs --title "乡村振兴背景下数字治理研究" --no-si --out "<project>"
# by Chinese exact title, PDF only:
node scripts/batch_download.mjs --title "乡村振兴背景下数字治理研究" --cnki-format pdf --no-si --out "<project>"
# by Chinese exact title with a library-provided CNKI entry:
node scripts/batch_download.mjs --title "乡村振兴背景下数字治理研究" --cnki-url "https://kns.cnki.net/kns8s/defaultresult/index" --no-si --out "<project>"
# by known PDF URL:
node scripts/batch_download.mjs --pdf-url "https://arxiv.org/pdf/1706.03762" --title "Attention Is All You Need" --no-si --out "<project>"
# replace --no-si with --si only after the user explicitly requests SIOutput includes { summary, manifest, results }. The script writes <project>/manifest.json with route, OA evidence, access mode, format, MIME, bytes, SHA-256, SI choice, and typed failures; secret-looking fields are removed recursively. PDFs go under PDFs/, native HTML/XML under FullText/, CAJ under CNKI/, and supplements under SupportingInformation/.
Token discipline (applies to all paths): never eval a whole page DOM, search result, or PDF/SI bytes back into the agent context. Keep large data inside Node/scripts/*.mjs and surface only compact status. Reserve interactive /eval + cdp_open_url.mjs for the single-paper route below or for diagnosing one stuck paper after the batch run.
Keep this router compact and load the detailed operational references only when their conditions apply:
The boundaries, SI confirmation gate, browser-state principle, status semantics, and token discipline in this router remain mandatory when either reference is loaded. Do not treat the references as permission to bypass access controls or to expose credentials, cookies, or session data.
© Yuan1z0825, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 74 other files (scripts, references, assets) in skills/nature-downloader of Yuan1z0825/nature-skills.
Open the folder on GitHubat commit e605b35
We found 2 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 2 other GitHub owners. This page covers the copy in Yuan1z0825/nature-skills, which our catalogue first saw on October 7, 2026.
Nature Literature Downloader next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Nature Literature Downloader this skillYuan1z0825/nature-skills | 47k | 2 repos | ~6k | Automated safety check: Pass | MIT | |
| Read arXiv Paperkarpathy/nanochat | 59k | 1 repos | ~494 | Automated safety check: Pass | MIT | |
| Perplexity Web Searchdavila7/claude-code-templates | 33k | 11 repos | ~3.5k | Automated safety check: Notes | MIT | |
| Literature Reviewneflibata-feng/MyArxiv-Agent | 126 | 20 repos | ~5.9k | Automated safety check: Notes | MIT | |
| Openalex Databaseneflibata-feng/MyArxiv-Agent | 126 | 12 repos | ~3k | Automated safety check: Pass | Custom licence | |
| Citation ManagementK-Dense-AI/claude-scientific-writer | 2.4k | 2 repos | ~3.9k | Automated safety check: Notes | MIT |
karpathy/nanochat
Fetches the TeX source of an arXiv paper from its URL, reads it and writes a markdown summary tied to the nanochat project.
davila7/claude-code-templates
Runs web-grounded searches through Perplexity's Sonar models over OpenRouter for current events, recent literature and cited facts beyond the model's training cutoff.
neflibata-feng/MyArxiv-Agent
Conduct comprehensive, systematic literature reviews using multiple academic databases (PubMed, arXiv, bioRxiv, Semantic Scholar, etc.).
neflibata-feng/MyArxiv-Agent
Query and analyze scholarly literature using the OpenAlex database.
K-Dense-AI/claude-scientific-writer
Finds papers in OpenAlex, PubMed and Google Scholar, turns DOIs, PMIDs and arXiv IDs into clean BibTeX, and validates citations for a manuscript or thesis.
LigphiDonk/Oh-my--paper
Searches bioRxiv life sciences preprints by keyword, author, date range or category with a Python script, returning JSON metadata and optional PDF downloads.
Yuan1z0825/nature-skills
Builds a structured deep-reading card for one scientific paper, covering methods, how experiments support claims, limitations and research ideas, with a script to prepare the source.
Yuan1z0825/nature-skills
Creates, revises, audits and exports manuscript-ready scientific figures in Python or R, and routes AI-generated graphical abstracts to a separate workflow.
Yuan1z0825/nature-skills
Drafts Chinese invention patent applications and technical disclosures from research papers or inventor materials, tying each claim feature to source evidence.
Yuan1z0825/nature-skills
Composes, revises or audits research proposals and opening reports through an evidence-first state machine with argument maps, section contracts and dynamic expert reviewers.
Yuan1z0825/nature-skills
Rebuilds slide images, screenshots, scanned PDFs or image-only PPTX files as PowerPoint with editable objects, using a local CLI with per-page manifests and QA.
Yuan1z0825/nature-skills
Audits or rewrites the statistical reporting in a manuscript: experimental units, replication, tests, uncertainty and figure legends, without inventing missing details.
Categories
Routes literature requests to lawful full-text sources: open access, publisher APIs, CNKI and institutional browser access, with a supporting-information gate. mjs orchestrator normalizes the DOI or title, detects language and publisher, then routes the request. Chinese literature always goes through CNKI using the user's existing browser login, with no cookie export and no collection of institutional passwords.
Nature Literature Downloader fits situations like: getting the lawful full text of a paper by DOI or title; downloading Chinese-language papers through CNKI institutional access; fetching supporting information alongside an article; trying a publisher API or open-access copy before institutional access.
Run `npx skills add Yuan1z0825/nature-skills --skill nature-downloader -a claude-code`. Or copy the skill folder (skills/nature-downloader in Yuan1z0825/nature-skills) into .claude/skills/nature-downloader in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Yuan1z0825/nature-skills --skill nature-downloader -a codex`. Or copy the skill folder (skills/nature-downloader in Yuan1z0825/nature-skills) into .agents/skills/nature-downloader in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Yuan1z0825/nature-skills --skill nature-downloader -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/nature-downloader, .gemini/skills/nature-downloader, .github/skills/nature-downloader and .opencode/skills/nature-downloader in your project.
Going by SKILL.md and its folder, Nature Literature Downloader needs the command-line tools its instructions call (python3, node and pip). Our summary lists: Publisher API credentials for Elsevier, Springer Nature or IEEE, where used; An institutional library login in Chrome for CNKI or web access; Node, to run batch_download.mjs.
SKILL.md names 6 domains. In commands or code: kns.cnki.net, webofscience.com, dev.elsevier.com, dev.springernature.com, developer.ieee.org and arxiv.org; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Nature Literature Downloader is published under the MIT licence (from the LICENSE file in the skill folder). It allows redistribution, so the full SKILL.md is shown on this page.
About 6k tokens (SKILL.md is roughly 24k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 5k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Nature Literature Downloader: Read arXiv Paper (karpathy/nanochat, 59k stars), Perplexity Web Search (davila7/claude-code-templates, 33k stars), Literature Review (neflibata-feng/MyArxiv-Agent, 126 stars) and Openalex Database (neflibata-feng/MyArxiv-Agent, 126 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Yuan1z0825 (a GitHub user) maintains it in Yuan1z0825/nature-skills, which has 47,222 GitHub stars. The repository holds 23 skills in this directory. The repository was last updated on October 11, 2026.
Source: Yuan1z0825/nature-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.