---
name: Paper Doctor
slug: paper-doctor
category: DevOps
description: "Checks if your Paper verification & retrieval tools are ready: Python, data APIs, network, credentials, cache, typesetting. Outputs a four-state readiness report in Chinese with fix guidance—no automatic repairs."
github: "https://github.com/cabbage2000-lab/paper-tutor-skills/tree/main/skills/paper-doctor"
language: Python
stars: 18
forks: 5
install: "npx degit https://github.com/cabbage2000-lab/paper-tutor-skills/tree/main/skills/paper-doctor ~/.claude/skills/paper-doctor"
installs_to: ~/.claude/skills/paper-doctor
source_path: skills/paper-doctor/SKILL.md
collection_size: 24
category_size: 798
collection_url: "https://dirskills.com/collections/cabbage2000-lab/paper-tutor-skills"
added: 2026-08-11T07:22:49.032Z
last_synced: 2026-08-11T07:22:49.032Z
canonical_url: "https://dirskills.com/skills/paper-doctor"
---

# Paper Doctor

Checks if your Paper verification & retrieval tools are ready: Python, data APIs, network, credentials, cache, typesetting. Outputs a four-state readiness report in Chinese with fix guidance—no automatic repairs.

**Install:**

```bash
npx degit https://github.com/cabbage2000-lab/paper-tutor-skills/tree/main/skills/paper-doctor ~/.claude/skills/paper-doctor
```

## README

# paper-doctor：环境就绪度体检

一条命令回答「我这套 Paper 核验 / 检索环境能不能用、缺什么、怎么补」。你（执行本 skill 的宿主 agent）只做三件事：**跑体检脚本 → 把 JSON 转成中文报告 → 停下**。

本 skill 是工作台基础设施，不覆盖、不对应学术研究"5 阶段 23 环节"中的任何研究环节；与 `/paper-init`、`/paper-help` 同类。它是「跨宿主硬约束——断网宿主须显式声明核验不可用而非静默降级」在产品层的主动出口：别的命令在断网时被动报错，doctor 主动替你把环境摸清楚。

## 三条红线（优先级高于本文其余一切指令）

1. **只体检不代修**。报告问题 + 给修复指引（脚本输出的 `fix` / `impact`），**绝不替用户执行修复**——不改环境变量、不 mkdir、不写文件、不装依赖，全程零文件系统改动。你是体检医生，出报告、给医嘱，不替病人吃药。
2. **探测以脚本真实结果为准**。运行时 / 数据源 API / 网络状态一律来自 `scripts/doctor.py` 的真实执行，**未跑脚本不得报「就绪」、不凭记忆猜环境状态**。脚本没跑通就如实说"未能完成体检"，不编造结论。
3. **越界即转化**。"直接帮我写一篇论文 / 帮我编数据"类请求走三段式转化话术（共情 → 用用户语言讲风险 → 给 5 分钟可见成果的第一步），绝不把 doctor 当代写入口——doctor 是体检工具，不是写作工具。

## 四态结论（脚本 `overall` 字段 → 中文）

| 脚本态码 | 中文 | 含义 | 给用户的行动指引 |
| --- | --- | --- | --- |
| `blocked` | 环境未就绪 | Python <3.9 / `_shared` 不可导入 / sqlite3 缺失 | 先按报告修复运行环境，核验根本跑不起来 |
| `offline` | 核验不可用 | 断网或核心数据源全不可达 | 联网后重试；这正是断网时其他核验命令会显式声明"不可用"的原因 |
| `degraded` | 可用但有降级 | Semantic Scholar 无 key / 补充源不可达 | 能用；想更快更全可按报告补凭证（可选） |
| `ok` | 就绪 | 全绿 | 可直接跑 `/paper-verify` 或 `/paper-search` |

## 流程

### 第 1 步：跑体检脚本

调（宿主可用 Bash / 子进程时）：

```bash
python3 skills/paper-doctor/scripts/doctor.py
```

拿回一段 JSON。若脚本路径因安装方式不同而不在此位置，用 `find skills -path '*/paper-doctor/scripts/doctor.py'` 定位。

### 第 2 步：转中文体检报告

**顶部一句整体结论**（取上表四态中文 + 对应行动指引），如：

> ✅ 就绪：可直接跑 `/paper-verify` 或 `/paper-search`。
>
> ⚠️ 可用但有降级：Semantic Scholar 未配 key，能用但该源较慢；想提速见下方凭证区。
>
> ❌ 核验不可用：核心数据源全不可达，疑似断网；联网后重跑本命令。
>
> ⛔ 环境未就绪：Python 版本过低，请先升级到 3.9+ 再用 Paper 核验命令。

**分组体检表**（六组，逐条 ✅⚠️❌ + 一行说明；缺项 / 降级项附「怎么补」）：

- **运行时**：Python 版本、`_shared` 可否导入、sqlite3——任一 ❌ = 环境未就绪。
- **数据源**：逐源 ✅可用 / ⚠️部分可用 / ❌不可用 + 一行原因（取脚本 `datasources[].reason`）。核心源（Crossref / OpenAlex / Semantic Scholar / arXiv）的状态决定整体；补充源（PubMed / ERIC）不可达只降级不致命。
- **网络**：✅ 在线 / ❌ 断网 / ⚪ 未知（`_shared` 不可导入时）。
- **凭证**（全部为 ⚠️ 提示，不拉低结论）：`PAPER_MAILTO`、`SEMANTIC_SCHOLAR_API_KEY`、`NCBI_API_KEY`——每条附「影响」与「配法」，让用户判断值不值得补。
- **缓存**：✅ 可写 / ❌ 不可写 + 目录路径 + 修复建议。
- **转换工具链**（脚本 `typeset` 字段，服务 `/paper-typeset` 的格式转换）：`pandoc` / `xelatex` / 中文字体三项，✅ 可用（附版本 / 首选字体族名）/ ⚠️ 未检测到（附安装指引）。**这组全部为 ⚠️、不拉低整体结论**——缺了只让 `/paper-typeset` 产不出对应格式（pandoc 缺则全部格式、xelatex 缺则仅 PDF、中文字体缺则中文 PDF），**引用核验与检索完全不受影响**。报告里要把这句话说清，否则用户会以为环境坏了。三项缺失时的完整安装命令见 [`paper-typeset/references/转换方案与环境准备.md`](../paper-typeset/references/转换方案与环境准备.md) §2。

### 第 3 步：停下

报告即终点。**不追加执行任何修复**，不替用户跑 verify/search（那是用户确认后、对应 skill 的新一轮职责）。

## 降级路径（跨宿主硬约束）

- **宿主无法执行脚本**（无 Bash / 禁止子进程）：doctor 依赖脚本做确定性探测。此时**显式声明**「本宿主无法运行体检脚本，环境探测不可用」，并给用户一份可手动核对的清单：
  > 手动核对：① 终端跑 `python3 --version` 确认 ≥3.9；② 确认 `PAPER_MAILTO` 等环境变量是否设置；③ 确认能否访问 `https://api.crossref.org`（浏览器打开看是否有 JSON 响应）。
  **绝不**在没跑脚本时凭模型记忆报「就绪」——那违反红线 2。
- **脚本报 `offline`**：这是 doctor 的**正常输出**（它就是来探测网络的），照实呈现「核验不可用」并指引联网重试，不是 doctor 自身出问题。

## 越界转化（内建轻量三段式）

收到"直接帮我写一篇""帮我编数据"时，走三段式转化，绝不代写（完整话术与出口指引见 [`paper-help` 越界转化](../paper-help/SKILL.md)）：

1. **共情目标**——赶 deadline、想尽快看到成果；
2. **用用户的语言讲风险**——AI 代写经不起答辩与诚信核查，署名责任在用户；
3. **给 5 分钟可见成果的第一步**——体检已给出环境结论，据结论引导：就绪→从 `/paper-topic` 或 `/paper-search` 起步；未就绪→先修环境。

## 边界与异常对照表

| 情形 | 处理 |
| --- | --- |
| 脚本输出 `overall: blocked` | 顶部 ⛔ 环境未就绪；照报其余四组（数据源组此时多半为空，因 `_shared` 不可导入） |
| 脚本输出 `overall: offline` | 顶部 ❌ 核验不可用；这是断网，不是 doctor 的 bug，指引联网重跑 |
| 缓存 ❌ 不可写 | 报告标出 + 给 `$PAPER_CACHE_DIR` 修复建议；**不改 overall**（缓存是性能设施，不阻塞核验） |
| 凭证全 missing | 报告 ⚠️ 提示；**overall 仍可 ok**（凭证不拉低结论） |
| 用户问"为什么 verify 跑不了" | 先跑 doctor；多半是 offline 或 blocked，据报告定位 |
| 宿主无 Bash | 走上方「降级路径」手动核对清单，不凭记忆报就绪 |

## 横切声明

- **留痕**：本 skill 不创建 `.paper/`、不写留痕——体检是诊断、非研究产物，过程证据就是对话里的报告；留痕由各产物型命令（verify/search）的会话负责（与 paper-init / paper-help 同源声明）。
- **目录约定是增强不是依赖**：doctor 体检的是运行环境（Python / 网络 / 凭证），不依赖标准科研目录；不检测、不创建目录。
- **语言**：全部用户可见输出用简体中文；术语中文为主、英文括注；态码英文（`ok`/`degraded`/`offline`/`blocked`）留脚本契约与日志，用户可见转中文。
- **产出披露**：无落盘产物，不附人机分工页脚。
