# Read Weread Coach

> 微信读书教练 — 把读过的书"用起来"。三种用法：(1) 推荐 - 想搞懂一个领域时，先判段位再给阶梯书单；(2) 引用 - 写作时基于已读划线给出可引用的书与原话；(3) 回顾 - 每天推送一条历史划线，自动去重，支持手动与定时触发。触发词："我想搞懂 XX"、"入门书单"、"阶梯书单"、"我想引用一本书"、"这个观点哪本书讲过"、"今日笔记"、"推一条划线给我"、"读书回顾"。

- Skill: `spacezephyr/read-weread-coach` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add spacezephyr/read-weread-coach`
- Raw SKILL.md: https://api.skillmd.com/api/skills/spacezephyr/read-weread-coach/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: spacezephyr (https://skillmd.com/u/spacezephyr)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/spacezephyr/read-weread-coach

---


# weread-coach — 微信读书使用教练

把读过的书"用起来"。覆盖三个真实场景：学新东西、写东西要引用、把读过的东西反复激活。

## 前置依赖

- `weread-skills` 已安装
- 环境变量 `WEREAD_API_KEY` 已配置
- 缓存目录：`/tmp/read-weread-coach/`（数据缓存 24 小时）
- 状态目录：`~/.claude/skills/read-weread-coach/state/`

---

## 功能 1：推荐 · 阶梯书单

### 触发词
- "我想搞懂 XX / 入门 XX / 学 XX"
- "给我一个 XX 阶梯书单"
- "XX 从哪本书读起"

### 流程

**步骤 1：判段位（必问）**

```
你目前对【XX】的水平？

a. 完全新手，零基础
b. 听说过、读过零星文章，没系统
c. 有一定基础，想突破到前沿
d. 已经熟练，想找冷门好书
```

**步骤 2：拉用户书架数据**
调 `/user/notebooks` + `/shelf/sync` 获取已读+在读书单。

**步骤 3：生成 5 层阶梯书单**

| 层级 | 用途 | 数量 |
|------|------|------|
| ① 引子 | 一篇文章或一本薄书破除门槛 | 1 |
| ② 入门 | 体系化的基础书 | 1-2 |
| ③ 经典 | 该领域绕不开的奠基作 | 1-2 |
| ④ 前沿 | 近 3-5 年的代表作 | 1-2 |
| ⑤ 实践 | 把知识转化为行动的工具书 | 1 |

**步骤 4：标注**
- 用户已读 → 标 ✅ + 标记 "你已读 X% / Y 条划线"
- 在书架但没读 → 标 📚 "已在书架"
- 完全新书 → 标 🆕

根据段位调整起点：a 从 ① 开始，b 从 ② 开始，c 从 ③ 起跳，d 直接到 ④⑤。

**步骤 5：给出 1 条建议**
基于阶梯的第一个未读项，告诉用户：本周读哪本，预计多久，读完做什么。

---

## 功能 2：引用 · 从已读书中找证据

### 触发词
- "我在写关于 XX 的内容，能引用哪本书"
- "这个观点哪本书讲过"
- "我想引用一个关于 XX 的观点"

### 流程

**步骤 1：确认引用主题**
让用户用一句话说清楚：要论证的观点 / 文章的角度。

**步骤 2：在用户已读语料中检索**

执行：
```bash
python3 ~/.claude/skills/read-weread-coach/scripts/fetch_corpus.py
```
脚本会缓存 `/tmp/read-weread-coach/corpus.json`（24h 内复用）。

然后扫描两个语料库：
- `marks_corpus`：所有划线原文
- `reviews_corpus`：所有想法/书评

按关键词 + 语义匹配，找出 5-8 条最相关的划线/想法。

**步骤 3：输出**

每条引用包含：
- 划线原文（≤ 50 字）
- 书名 + 作者
- 划线时间
- **建议用法**：直接引用 / 作为论据 / 反向引用（用作对照） / 改写后用

**步骤 4：若已读不够用**
当用户已读语料中找不到 3 条以上强相关时，额外推荐 2-3 本未读但相关的书（来自 weread 商城或经典推荐）。

---

## 功能 3：回顾 · 每日推送一条划线

### 触发词
- "今日笔记 / 推一条划线 / 读书回顾 / 给我一条今日 review"
- 或由 `/loop` / OpenClaw cron / Claude Code schedule 定时触发

### 流程

**步骤 1：保证缓存最新**
执行 `scripts/fetch_corpus.py`（自动跳过 24h 内缓存）。

**步骤 2：调脚本挑选并写入历史**

```bash
python3 ~/.claude/skills/read-weread-coach/scripts/pick_review.py
```

脚本逻辑：
- 加载所有划线（来自 corpus.json）
- 过滤掉 `state/review_history.jsonl` 中已出现过的 bookmarkId
- 按时间反向加权（越老的越可能被选中，激活遗忘的内容）
- 输出 JSON：bookmarkId / 书名 / 作者 / 章节 / 划线原文 / 划线时间
- 追加到 `state/review_history.jsonl`

**步骤 3：包装输出**

格式示例：
```
📖 今日回顾 · 2026-05-19

《书名》— 作者
🔖 第 X 章 · 划线时间 YYYY-MM-DD

> 划线原文（最长 100 字）

💭 一句话激活提问：
基于这条划线给一个引导性问题，让用户回到当时的思考语境。
```

**步骤 4：去重保证**
- `review_history.jsonl` 每行一个 JSON：`{"bookmarkId":"...","shown_at":"YYYY-MM-DD HH:MM"}`
- 当所有划线都已被推送过一遍后，清空历史重新轮（脚本会在没有未推送项时自动重置，并提示"已完成全集一轮，开始第 N 轮"）

### 定时推送配置

#### 选项 A：Claude Code `/loop`
在终端执行：
```
/loop 1d 推一条今日读书回顾给我
```

#### 选项 B：OpenClaw / cron
crontab 加一行（每天早 8 点）：
```
0 8 * * * /usr/bin/python3 ~/.claude/skills/read-weread-coach/scripts/pick_review.py --notify
```
脚本带 `--notify` 时会调用 macOS `osascript -e 'display notification'` 发送系统通知。

#### 选项 C：Claude Code `schedule` skill
```
/schedule create "每天 8 点推送一条微信读书回顾" --cron "0 8 * * *"
```

---

## 通用注意事项

1. **不重复抓取**：三个功能共享 `/tmp/read-weread-coach/corpus.json`，24 小时内不重抓
2. **去重严格**：回顾功能必须用 `bookmarkId` 作为唯一键，不能因为划线内容相同而误判
3. **加密风险**：API Key 不要写入任何缓存文件，只从环境变量读
4. **回顾的"激活提问"质量**：不要敷衍写"你怎么看"。要结合划线内容设计具体问题，例如对斯多葛划线问"今天哪件事最适合用这条原则"
5. **引用功能避免幻觉**：只输出真实存在于用户语料里的划线原文，不要编造

