Atlas / Skills / yuan1z0825 / nature-downloader

nature-downloaderBLOCK

skills/yuan1z0825/nature-downloader

符合nature论文学术表达和科研绘图的Skill

Verdict
BLOCK
Grade
D
Trust score
69 /100
Version
—
Hosts
2 documented
License
Apache-2.0
Stars
50,294
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

nature-downloader 按文献语言、出版商和可用凭据自动选择合法下载路线:

确认是否下载 SI
→ 中文文献:只走 CNKI / 知网机构授权
→ 英文文献
├─ Elsevier / Springer Nature / IEEE 且有可用 Key
│  ├─ 出版商 API 成功:结束,不强制判断 OA
│  └─ API 失败:PMC → Unpaywall → 出版商 OA / 合法仓储
└─ 其他出版商:先查 OA,OA 不可用时走 Web Access 机构授权

工作方式

  1. 先判断文献语言、出版商和 SI 需求,再决定路由。
  2. 能走合法 API 就优先走 API;API 不通时再降级到 OA / 仓储 / 机构授权路径。
  3. 输出时同时记录访问路径、失败原因和可复用配置,方便后续批量任务。
  4. 全程不绕过付费墙、DRM、验证码或双重认证,也不读取或导出浏览器 cookie、密码、localStorage 或 session 文件。

下载前必须确认 SI

所有下载命令必须显式选择一次:

--no-si  # 只下载正文
--si     # 下载正文和可找到的 Supporting Information

两者均未提供时,脚本返回 si_confirmation_required,且不会创建输出目录或下载文件。两者同时提供时参数校验失败。批量任务的选择作用于整个批次。

配置

图书馆与 CNKI

优先保存用户实际使用的图书馆资源入口:

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 --force

普通配置保存在 ~/.config/lit-dl/school.json。

出版商 API

非 OA 英文文献命中对应出版商时才需要配置:

使用隐藏输入保存 API key:

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 show
python3 scripts/configure_credentials.py validate elsevier
python3 scripts/configure_credentials.py delete elsevier

当用户已经主动在对话中提供出版商 API key 时,agent 应直接使用标准输入安全保存,不要求重新生成,也不在命令参数、回复或 manifest 中回显:

python3 scripts/configure_credentials.py set elsevier --stdin
Read from source at commit 1bbfe57c0917OBSERVED · 2026-10-23
Advertisement
02

Host compatibility

What the documentation claims. We have not run a compatibility test.

HostStatusNotes
claude-codementioned
codexmentioned
03

What it tells the agent

The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.

---
name: nature-downloader
description: Use when a user needs lawful academic full text, CNKI institutional access, English OA retrieval, publisher API access, institutional browser fallback, or supporting information downloads.
metadata:
  compatibility: Requires Node.js 22+ and Python 3. CNKI, Web Access, and SI routes additionally require the user's authenticated Chrome session and remote debugging. Uses only lawful OA, publisher API, and user-authorized institutional access.
---

# Nature Literature Downloader

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 `--si` or `--no-si`. Without either flag the script returns `si_confirmation_required` and 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.

```text
规范化 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, `zh` metadata language, explicit CNKI source URL, or `--route cnki` must use CNKI even if another OA copy appears to exist. Reuse the user's current Chrome library/CNKI login state and prefer configured `discovery.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_required` and 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 `%PDF` response and report `no_authorized_pdf_found` / `pdf_fetch_failed` when none exists. Do not save CAJ, HTML, or a login page as if it were a PDF.

## Download Intake and First-Run Configuration

For every download request, first establish the paper list and ask:

```text
是否同时下载这些文献的 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.

### Paid Library Resource Configuration

Ask for the library resource URL the user actually uses:

```text
请发你平时进入图书馆电子资源/数据库的平台链接。
可以是资源门户、数据库列表、Web of Science 入口、某个数据库详情页,
或跳转到统一身份认证的登录链接。
```

Then infer the authorization route from the URL before saving config:

```bash
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 --force
```

The 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:

```text
~/.config/lit-dl/school.json
```

For tests or isolated profiles, set:

```bash
LIT_DL_CONFIG_DIR=/path/to/configdir
```

The 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`.

### API-First and Open-Access Fallback

For an English article, identify its publisher before deciding when to resolve article-leve
04

Trust audit

BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)FAIL
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (1 observation(s))
Network
declared (9 observation(s))
Shell
declared (1 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (18)

CRITICALPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
SKILL.md:130
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 rege
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
HIGHPrompt injection · prompt.credential_read · CWE-94, CWE-1427
SKILL.md:31
> **Chinese literature is CNKI-only.** A Chinese title, `zh` metadata language, explicit CNKI source URL, or `--route cnki` must use CNKI even if another OA copy appears to exist. Reuse the user's cur
Why it matters. asks the agent to read credentials
HIGHPrompt injection · prompt.credential_read · CWE-94, CWE-1427
SKILL.md:171
**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, pas
Why it matters. asks the agent to read credentials
HIGHPrompt injection · prompt.credential_read · CWE-94, CWE-1427
SKILL.md:358
references as permission to bypass access controls or to expose credentials, cookies, or session
Why it matters. asks the agent to read credentials
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
SKILL.md:304
Invoke-WebRequest -UseBasicParsing -Uri "http://127.0.0.1:3456/targets" -TimeoutSec 10
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
scripts/browser_pdf_downloader.mjs:17
node browser_pdf_downloader.mjs --url <pdf-url> --out <file.pdf> [--proxy http://127.0.0.1:3456] [--close] [--allow-non-pdf]
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
scripts/browser_pdf_downloader.mjs:18
node browser_pdf_downloader.mjs --target <targetId> --out <file.pdf> [--proxy http://127.0.0.1:3456]
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
scripts/cdp_open_url.mjs:6
node cdp_open_url.mjs --url <url> [--proxy http://127.0.0.1:3456] [--wait]
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
tests/python/test_config_credentials.py:17
secret = "publisher-secret-12345678"
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
scripts/lib/provider-registry.mjs:3
const file = new URL("../../data/publishers.json", import.meta.url);
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/unit/batch-cli.test.mjs:8
import { parseArgs, selectBatchDois } from "../../scripts/batch_download.mjs";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/unit/batch-cli.test.mjs:14
const script = fileURLToPath(new URL("../../scripts/batch_download.mjs", import.meta.url));
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/unit/batch-cli.test.mjs:66
const script = fileURLToPath(new URL("../../scripts/batch_download.mjs", import.meta.url));
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/unit/cnki.test.mjs:12
} from "../../scripts/lib/cnki.mjs";
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
references/institutional-browser-workflow.md:160
--proxy <url>        CDP proxy URL, default http://127.0.0.1:3456
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
requirements.txt
pdfplumber, pypdf, PyYAML, jsonschema
Why it matters. 4 requirement(s) not pinned with ==
Fix. pin exact versions
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
README_EN.md:12
4. Never bypass paywalls, DRM, CAPTCHAs, or two-factor verification, and never read or export browser cookies, passwords, localStorage, or session files.
Why it matters. asks the agent to read credentials
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
README_EN.md:166
- The skill does not bypass paywalls, use mirror sites, or read/export cookies, passwords, localStorage, or session files.
Why it matters. asks the agent to read credentials

Gates applied: critical_finding, no_behavioural_pass, undeclared_transfer.

Audited 2026-10-23 · audit v0.4.1 · source sha 1bbfe57c0917full audit observations/trust-audit/skill/yuan1z0825__nature-downloader.json · Report an issue / request a re-scan
05

Audit history

Every audit this skill has had.

DateSourceVerdictGradeScoreChange
2026-10-231bbfe57c0917BLOCKD69first audit
06

Questions

What does the nature-downloader — yuan1z0825/nature-skills skill do?

符合nature论文学术表达和科研绘图的Skill

Is nature-downloader — yuan1z0825/nature-skills safe to install?

No — not without reading the findings first. The audit graded it D (69/100) and found 4 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What can nature-downloader — yuan1z0825/nature-skills access on my machine?

The audit observed that it reaches the network, runs shell commands and reads or writes files. Each of those is consistent with what it says it does. Secrets in the source: found — see the findings.

Which assistants does nature-downloader — yuan1z0825/nature-skills work with?

Its documentation mentions claude-code and codex. That is what the text claims, not a compatibility test we ran.

How current is this page?

The grade is for one exact copy of the source (1bbfe57c0917), read on 2026-10-23. The repository is watched, and a new audit runs when it changes — this is the first audit.

Add this badge to your README

Shows this page's audit result and links back to it. It updates when the audit does.

ModelsAtlas audit badge

Markdown
[![ModelsAtlas audit: nature-downloader](https://modelsatlas.com/skills/yuan1z0825/nature-downloader/badge.svg)](https://modelsatlas.com/skills/yuan1z0825/nature-downloader/)

Not your listing, or something out of date? Claim or update your listing.

Advertisement