---
name: paper-recall
description: "从 ~/papers/ 论文库中检索已读论文。支持按关键词、tag、作者、年份、最低评分过滤。每条返回一句话核心收获 + 跨论文关联建议。当用户想知道'我之前读过哪些相关的'、'我打过 5 星的 VLA 论文有哪些'、或想在写作中复用过往笔记时使用。"
argument-hint: "<查询关键词> [--tag <tag>] [--year <year>] [--min-rating <0-5>] [--author <name>] [--limit <N>]"
allowed-tools: Bash, Read
---

# 📚 Paper Recall — 从论文库检索已读论文

你是用户的"过往阅读记忆"。`~/papers/` 论文库中保存了用户之前用 `/paper-read`、`/paper-insight`、`/paper-compare` 读过的所有论文报告，每篇带 frontmatter（含 tags、rating、key_takeaway）。本 skill 把这些已读论文调出来，按相关度排序展示，并指出跨论文的潜在联系。

## 阶段零：参数解析

从 `$ARGUMENTS` 中识别：

| 标志 | 说明 |
|------|------|
| `--tag <tag>` | 仅返回含该 tag 的论文 |
| `--year <year>` | 仅返回该年发表的论文 |
| `--min-rating <0-5>` | 仅返回综合评分（4 维度均值）≥ 该值的论文 |
| `--author <name>` | 仅返回作者列表中包含该名字的论文 |
| `--limit <N>` | 返回数量上限（默认 10） |

剩余非标志部分作为自由文本查询 `$QUERY`。

如果用户用自然语言（"我打过 5 星的最近读的关于 VLA 的"），转化为：
- `$QUERY = "VLA"`
- `--tag VLA` 或不设
- `--min-rating 4.5`
- 用 `--limit` 限制为最近的 N 条（按 date_read 倒序，paper_lib 默认就是这个排序）

## 阶段一：调用 paper_lib 检索

### 自由文本检索（有 `$QUERY`）

用 `Bash`：
```bash
python3 .claude/scripts/paper_lib.py search "$QUERY" --limit "${LIMIT:-10}" --json
```

返回的 JSON 数组每项含 `{title, arxiv_id, tags, rating, key_takeaway, score, path}`。

### 过滤检索（无自由文本，仅过滤器）

用 `Bash`：
```bash
python3 .claude/scripts/paper_lib.py list \
    [--tag $TAG] [--year $YEAR] [--min-rating $MIN_RATING] [--author $AUTHOR] \
    --json
```

### 二者结合

如果用户既有自由文本也有过滤器，**先用 search 得到 score 排序的初筛集合，然后在 prompt 里手动按过滤器再筛一遍**（paper_lib.py search 没有合并所有过滤器）。

## 阶段二：呈现结果

### 📚 已读论文召回: "{$QUERY 或过滤条件描述}"

> 库内总数: {N}（用 `python3 .claude/scripts/paper_lib.py list --json | jq length` 或 `wc -l` 取）
> 本次匹配: {命中数量}

#### 命中清单（按相关度降序）

| # | 标题 | arXiv | 年 | Tags | 评分 | 核心收获 |
|---|------|-------|---|------|-----|---------|
| 1 | [标题] | [id] | [year] | tag1, tag2 | ⭐⭐⭐⭐ | [一句话 key_takeaway] |
| 2 | ... | | | | | |

如果命中 0 条，给出友好提示并建议放宽条件或先去 `/paper-search` 搜新论文。

#### 跨论文联想（仅当命中 ≥ 2 篇）

观察 frontmatter 的 `related_papers` 字段，看命中清单里有没有相互引用的：

> 💡 你读过的这些论文之间有以下关联：
> - [论文 A] → [论文 B] （A 的 frontmatter related_papers 含 B 的 arxiv_id）
> - ...

如果发现明显的"研究方向链条"（多篇论文同 tag、相邻年份、互相引用），用一句话总结："你在 {方向} 方向上已经积累了 N 篇阅读，主要兴趣点是 X"。

#### 后续动作建议

针对命中结果，建议下一步：

- 如果命中清单看起来分散：建议用 `--tag` 收窄
- 如果命中是同方向多篇：建议 `/paper-compare @<id1> @<id2> @<id3>` 做系统对比
- 如果命中包含某篇评分高但很久没看的：建议复习、或基于它跑 `/paper-insight` 挖新 idea

## 阶段三（可选）：详细查看某篇

如果用户在结果里指定某篇（"打开第 2 篇" / "看 2401.12345 的全文"），用：

```bash
python3 .claude/scripts/paper_lib.py get <arxiv-id-或-stem>
```

把整篇 markdown 输出给用户。

## 边界情况

- **库为空**：第一次使用，告知用户先用 `/paper-read` 读几篇就会自动入库
- **查询匹配很多但无明显聚类**：建议加 `--min-rating 4` 看精华
- **arxiv_id 为 null 的条目**（来自非 arxiv 输入）：用 filename stem 作为标识

---

## 后续操作提示

1. 📄 深度阅读新论文 → `/paper-read [arxiv 链接]`
2. 📊 对比命中的几篇 → `/paper-compare @<id1> @<id2>`
3. 💡 重新挖某篇的 insight → `/paper-insight @<id>`
4. 🔎 搜索领域新论文 → `/paper-search [关键词]`
