paper-fetch-skill
$
npx mdskill add Dictation354/paper-fetch-skill/paper-fetch-skillFetches and verifies academic papers using DOI, URL, or title
- Solves the problem of retrieving or validating specific academic papers
- Relies on academic publishers' APIs and browser runtime for content extraction
- Decides based on user input like DOI, URL, title, or reference lists
- Delivers structured metadata or Markdown summaries directly to the user or agent
SKILL.md
.github/skills/paper-fetch-skillView on GitHub ↗
--- name: paper-fetch-skill description: "适用场景:按 DOI、URL 或标题抓取已知论文,或核验一组可识别的参考文献;在主题检索、文献推荐或综述生成中,可根据上下文用于抓取/核验候选论文。" --- # 论文抓取技能 当代理需要获取特定论文的内容或全文可用性,或在主题检索、文献推荐、综述生成过程中增强候选论文阅读时,使用这个技能。 ## 适用场景 - 用户提供了 `doi`、论文 `url` 或论文 `title`。 - 用户要求阅读、总结、比较、批判、翻译,或提取某篇特定论文的方法/结果。 - 用户给出参考文献列表或书目,想知道哪些具体论文可读或可抓取。 - 用户正在做主题检索、文献推荐或综述生成,且已有候选论文、参考文献、标题、DOI 或 URL,需要抓取全文或核验可读性。 - 你需要可直接放入模型上下文的精简 Markdown 或结构化元数据。 > ## 🚨 全局执行纪律(强制) > > **本工作流是严格的串行流水线。以下规则具有最高优先级,违反任意一条都构成执行失败:** > > 1. **串行执行**:步骤必须按顺序执行;每一步的输出都是下一步的输入。相邻的非 BLOCKING 步骤在前置条件满足后可以连续推进,无需等待用户说“继续”。 > 2. **BLOCKING = 强制暂停**:标记为 ⛔ BLOCKING 的步骤必须完全暂停;AI 必须等待用户明确回复后才能继续,且不得替用户做决定。 ## Provider 特殊规则 - 对 `ProviderSpec.requires_browser_runtime=True` 的 provider(当前 `wiley`、`science`、`pnas`、`ams`、`annualreviews`、`acs`、`iop`、`aip`、`mdpi`),第一次抓取前用 `provider_status()` 确认 CloakBrowser runtime;浏览器链路首次失败时,排除明显配置错误后最多重试 `2` 次,优先绕过缓存,仍失败则明确说明失败发生在浏览器链路。 ## 不适用场景 - 用户只要求发现论文、生成推荐列表或撰写综述,但没有候选论文、参考文献、标题、DOI 或 URL 等可核验目标;此时本工具不替代检索、推荐或综述能力,应先形成候选后再按需调用。 - 对话或工作区里已经有经过核验的完整论文文本,不需要再次抓取。 ## 工作流 ### 第 1 步:确认保存方式 GATE:在进入任何实际抓取动作前,必须先拿到保存决策。若用户已经明确说明是否保存、保存位置(如需保存)以及是否下载图片资源,则本步可直接视为已完成,并继续做参数映射。 BLOCKING:⛔ BLOCKING。只要以下任一信息缺失,就必须暂停并等待用户明确回复后再继续:`是否保存`、`保存到哪里`(当选择保存时)、`是否下载图片资源`。不得替用户默认这些选项。 1. 如果用户没有明确要求保存,在实际抓取前先确认3个问题:是否需要保存、保存到哪里、是否需要下载图片资源。 2. 将“是否保存”映射到 `save_markdown`、`artifact_mode` 和 `no_download`:保存 Markdown 用 `save_markdown=true`;只关闭 provider artifact/资产但保留 MCP cache 用 `artifact_mode="none"`;尽量不落盘用 `no_download=true`。将“保存到哪里”优先映射到 Markdown 主体文件的 `markdown_output_dir`,需要隔离 cache/artifact scope 时再设置 `download_dir`。将“是否下载图片资源”映射到 `strategy.asset_profile`:不下载用 `none`,正文资源用 `body`,正文加补充材料用 `all`;实际下载资产还要求 `no_download=false` 且 `artifact_mode!="none"`。 3. 当用户选择保存 Markdown 时,默认使用 `save_markdown=true`;此时 MCP 响应只返回保存路径和诊断字段,不直接返回全文 `markdown` 或包含正文 sections 的 `article`。后续需要正文时,从 `saved_markdown_path` 读取所需片段。 ### 第 2 步:给出CLI操作 GATE:仅当第 1 步已经完成参数映射后,才能判断是否需要建议 CLI;判断依据是当前任务是否要处理 `>=3` 篇文献,或是否明显属于成批抓取/核验场景。若用户已经明确表示坚持不用 CLI,则本步只需简短说明“仍可直接抓取”,随后进入第 3 步。 BLOCKING:条件性 ⛔ BLOCKING。若判断应建议 CLI(通常是 `>=3` 篇文献或批量任务),在给出 CLI 用法后必须等待用户明确选择“改用 CLI”或“继续由当前代理直接抓取”;在用户作出选择前不得擅自进入批量抓取。若任务不是批量场景,则本步非 BLOCKING,可直接进入第 3 步。 1. 完成映射后,判断用户是否要抓取>=3篇文献,若是,建议用户改用 `paper-fetch` CLI 自助批量处理,并优先使用 `--query-file <path>`(每行一个 DOI、URL 或标题,空行和 `#` 注释会被忽略)。 2. 当你建议用户使用 CLI 时,说明这是为了提高下载效率、节省 token。 3. 当你建议用户使用 CLI 时,按用户在第 1 步已选定的保存方式,给出对应的 CLI 操作方法,例如 `paper-fetch --query-file ./queries.txt --output-dir ./papers --batch-concurrency 4`;如需自定义汇总位置,补充 `--batch-results ./papers/results.jsonl`。 4. 当你建议用户使用 CLI 时,要明确说明:如果用户坚持不使用 CLI,也可以继续由当前代理直接抓取。 ### 第 3 步:抓取 GATE:只有在保存策略已确认完毕,且 CLI 分流结果也已明确后,才能开始抓取。对标题或其他可能歧义的输入,必须先完成 `resolve_paper(...)` 并拿到唯一目标;对依赖浏览器运行时的 provider,必须先按上面的 `Provider 特殊规则` 确认 CloakBrowser runtime 健康。 BLOCKING:默认非 BLOCKING,可连续执行抓取与后续处理;但遇到以下情况时必须立即暂停并等待用户明确回复:`resolve_paper(...)` 返回多个候选、输入信息不足以唯一定位论文、或用户尚未决定是否改用 CLI。除这些情形外,不需要逐步征求“继续”许可。 1. 确认好保存问题,并确认不使用CLI后,如果用户提供的是论文标题,不要直接拿标题进入抓取;先调用 `resolve_paper(...)` 定位 DOI 或落地页,再用解析后的 DOI 或 URL 抓取。若解析结果不唯一,先向用户确认目标论文。 2. 只要可用,优先使用 MCP 工具。 3. 在多轮会话里,重新抓取前先调用 `list_cached()` 或 `get_cached(doi)`。 4. 如果用户给的是标题,先调用 `resolve_paper(query | title, authors, year)` 定位 DOI 或落地页;确认唯一候选后,后续抓取一律优先使用解析出的 DOI,其次使用落地页 URL,不要继续直接拿标题调用 `fetch_paper(...)`。 5. 如果查询可能有歧义,也先调用 `resolve_paper(query | title, authors, year)` 并在必要时向用户消歧。 6. 如果是单篇文献,先询问用户是否保存、保存位置、是否下载图片资源,再决定 `save_markdown`、`download_dir` / `markdown_output_dir` 和 `strategy.asset_profile`。 7. 如果是多篇文献且用户有保存需求,也先按整批询问是否保存、保存位置、是否下载图片资源,再统一决定 `save_markdown`、`download_dir` / `markdown_output_dir` 和 `strategy.asset_profile`。 8. 对书目或参考文献列表任务,先调用 `batch_check(queries, mode, concurrency)` 做分诊;如果用户确实要处理多篇文献,优先建议他们改用 `paper-fetch` CLI。 9. 如果只需要低成本判断能否读取全文,调用 `has_fulltext(query)`。 10. 如果目标 provider 是 `wiley`、`science`、`pnas`、`ams`、`annualreviews`、`acs`、`iop`、`aip` 或 `mdpi`,在第一次抓取前调用 `provider_status()` 确认本地 CloakBrowser runtime 健康。 11. 如果提供方凭证、Wiley / Science / PNAS / AMS / Annual Reviews / ACS / IOP / AIP / MDPI 的本地运行时状态,或 IEEE Xplore 访问上下文可能影响结果,在第一次抓取前调用 `provider_status()`。 12. 当你需要适合 AI 的 Markdown、结构化文章数据或元数据时,调用 `fetch_paper(query, modes, strategy, include_refs, max_tokens, prefer_cache, no_download, artifact_mode, save_markdown, markdown_output_dir, markdown_filename, download_dir)`;如果 `save_markdown=true`,把返回结果视为路径和质量诊断,不要期待本轮工具结果携带全文。 13. 如果浏览器链路抓取失败,先检查 `provider_status()`、确认运行时健康,并优先以 `prefer_cache=false` 重试;总重试次数最多 `2` 次,不要无限重跑。 14. 不要仅因为本地没有 PDF 或缓存文本文件,就断定“不可读”。 15. 如果拿不到全文,也要继续利用返回的仅摘要或仅元数据结果,并明确告诉用户当前基于元数据或摘要工作。 ## 参考资料 - 当你需要提供方凭证、下载目录行为,Wiley / Science / PNAS / AMS / Annual Reviews / ACS / IOP / AIP / MDPI 运行时要求,或 IEEE 访问边界时,读取 [`references/environment.md`](references/environment.md)。 - 当 MCP 不可用,或用户明确要求 shell 命令时,读取 [`references/cli-fallback.md`](references/cli-fallback.md)。 - 当结果为 `ambiguous`、`no_access`、`rate_limited` 或仅有元数据时,读取 [`references/failure-handling.md`](references/failure-handling.md)。