Skip to content
Back to skills

weread-shelf-organizer

ASecurity

微信读书书架自动整理技能 — 书架重组(白名单确认)、增量归类、自动创建分组、清理旧分组与迁移核验。当用户要求整理微信读书书架、按表格/规则给书籍分类、创建书架分组、每周定期整理书架、把新书归档到分组时使用。需要 macOS + 已登录的微信读书 Mac 客户端。

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 16, 2026
developmentpythongobashapi

Works with

  • api

Security analysis

A100/100

Pro scans all 12 files and shows the line behind each finding

Scanned October 16, 2026

npx -y skills add tanyaqiong31029/weread-shelf-organizer --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of weread-shelf-organizer?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for weread-shelf-organizer
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tanyaqiong31029-weread-shelf-organizer/badge)](https://www.skillsdirectory.com/skills/tanyaqiong31029-weread-shelf-organizer)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: weread-shelf-organizer
description: 微信读书书架自动整理技能 — 书架重组(白名单确认)、增量归类、自动创建分组、清理旧分组与迁移核验。当用户要求整理微信读书书架、按表格/规则给书籍分类、创建书架分组、每周定期整理书架、把新书归档到分组时使用。需要 macOS + 已登录的微信读书 Mac 客户端。
---

# 微信读书书架自动整理 (WeRead Shelf Organizer)

通过本机微信读书 Mac 客户端的登录凭据调用其官方书架接口,实现书架分组的批量整理:
书架重组(按用户提供的分类表,仅限显式白名单分组)、增量归类(只整理新书/未分组书)、分组创建与清理、迁移后核验。

## 前置条件

- macOS + 已登录的**微信读书 Mac 客户端**(App Store 版;平时无需保持打开,脚本会自动启动)
- `python3`(标准库即可,无第三方依赖)
- 本技能目录下的 `scripts/weread_shelf.py`

**开始前必须先调用 `weread_shelf.py` 的子命令完成凭据验证(见工作流第 1 步)。**
凭据从客户端本地日志提取(vid/skey),只驻留内存,不落盘、不回显、不写入任何输出文件。

## 核心约束(安全红线)

1. **默认只移动「未分组」的书**。用户放入其他自定义分组的书一律跳过;
   唯一例外是**重组模式**(`--reorganize --source-group "白名单"`),
   且只动白名单里的来源分组,执行时必须 `apply --yes` 人工确认。
2. **执行前强制重校验**:`apply`/`review` 会重新同步书架,逐本核对
   「当前分组 == 计划记录的来源分组」,不符自动跳过——计划过期或被篡改都无法越过本红线。
3. **不删除书籍、不移出书架、不改变私密状态、不动专辑/文章收藏**。
4. 迁移后**必须核验落位**(`verify`),报告未落位清单。
5. 先 `--dry-run` 出计划,向用户展示或确认后再 `apply`。
6. 拿不准分类的书**宁可保留「需复核」也不要硬塞**,在报告中列出请用户定夺。

## 脚本用法

所有命令先 `cd` 到本技能 `scripts/` 目录(或用绝对路径):

```bash
S=scripts/weread_shelf.py

python3 $S creds                      # 提取并验证凭据(失败→见"凭据失效")
python3 $S sync -o snapshot.json      # 书架快照
python3 $S plan  --rules rules.json [--baseline base.csv] \
                 [--reorganize --source-group "旧榜单A,旧榜单B"] [-o plan.json] [--dry-run]
python3 $S apply --plan plan.json [--yes] [--json-report report.json]
python3 $S review --decisions d.json [--json-report report.json]
python3 $S groups --list              # 列出分组
python3 $S groups --create "01 成长学习"
python3 $S groups --purge-empty       # 清理空分组
python3 $S verify --plan plan.json    # 独立核验
```

## 工作流

### 第 0 步:准备规则文件

分组规则 JSON(示例见 `examples/rules.example.json`):

```json
{
  "groups": [
    {"name": "01 成长学习", "description": "个人成长、学习方法、教育、职场与考试"},
    {"name": "02 语言写作", "description": "语言学、翻译、外语、写作与学术研究"}
  ],
  "category_map": {
    "个人成长-成长方法论": "01 成长学习",
    "经济理财-商业": "03 商业经济",
    "精品小说": "09 类型小说"
  }
}
```

- `groups`:目标分组(name 需以两位数字前缀开头便于识别,description 用于 AI 复核时判断)
- `category_map`:微信平台分类 → 分组。支持完整分类(`经济理财-商业`)和主栏目(`精品小说`)
- `confidence`:命中置信度(完整命中默认 0.95,主栏目命中默认 0.75)
- `min_confidence`:自动迁移阈值(默认 0.6)。低于阈值的进复核清单;
  有候选但低于阈值时,`plan.json` 的 review 条目会带 `suggest` 字段供复核参考
- 可选 `--baseline base.csv`(`bookId,target_group` 两列):用户已有分类表(如 Excel 导出)时,
  基线优先级最高(confidence=1.0);无基线则纯靠 category_map + AI 复核

### 第 1 步:凭据验证

```bash
python3 $S creds
```

**凭据失效**(stderr 出现 FATAL):提示用户打开微信读书 Mac 客户端确认登录(必要时重新扫码),用户确认后重试。不要绕过、不要重试超过 2 次。

**无 Mac 客户端的环境**(Linux/Windows/CI):可设环境变量 `WEREAD_VID` / `WEREAD_SKEY`
(可选 `WEREAD_V`)提供凭据,脚本验证通过即用,无需客户端。

### 第 2 步:生成计划

```bash
python3 $S plan --rules rules.json -o plan.json --dry-run
```

产出 `plan.json`:
- `moves[]`:自动迁移清单(含 `from` 来源分组、去向、依据;`from: null` 表示计划时未分组)
- `review[]`:低置信度待复核清单(书名/作者/平台分类/提示/来源)
- `source_snapshot`:重组模式下白名单来源分组的书籍快照(审计用)
- `missing_groups`:不存在的目标分组
- `skipped_custom_groups`:用户自定义分组(不会触碰)

**分组缺失时先创建**:

```bash
python3 $S groups --create "01 成长学习"   # 逐个创建 missing_groups
```

### 第 3 步:AI 复核定类

读取 `plan.json` 的 `review[]`,逐本按以下优先级定类:

1. **平台分类**:`category` 字段语义 → 对照规则文件的 `description`
2. **书名与作者**:题材判断(小说/文学/社科/实用…)
3. **一致性**:同作者或同系列的书,跟随已迁移书籍的分组

写出 `decisions.json`:

```json
[{"bookId": "3300138205", "group": "01 成长学习", "from": null}]
```

- `group` 必须是规则文件中的分组名(中文名,不是代码)
- `from` 从 `review[]` 条目原样复制(重组模式下来自某个分组时必须带上,
  否则执行时会因状态不符被跳过)
- 确实拿不准的**不要写入**,让它留在复核清单里向用户汇报

### 第 4 步:执行迁移

```bash
python3 $S apply --plan plan.json        # 自动部分
python3 $S review --decisions decisions.json   # 复核部分
```

脚本自动:40 本/批、失败重试 3 次、迁移后重新同步核验落位。

### 第 5 步:收尾与报告

```bash
python3 $S groups --purge-empty    # 可选:清理迁移后清空的旧分组(仅空分组)
python3 $S verify --plan plan.json
```

向用户汇报(中文,简洁):
- 本次迁移几本、复核定类几本、无法定类几本(列书名)
- 各分组最终数量
- 未落位/失败清单(如有)

## 三种典型场景

| 场景 | 做法 |
|------|------|
| **书架重组**(用户给出分类表 + 指定要打散的旧分组) | 表格转 baseline CSV → `plan --baseline --reorganize --source-group "旧榜单A,旧榜单B"` → **人工复核 plan.json** → `apply --yes`。只动白名单分组,其他分组永不触碰 |
| **从零分类**(无表,只有分组设想) | 写 rules.json(分组 + category_map)→ plan → AI 对 review[] 全量定类 → apply |
| **增量整理**(日常新书归类) | 直接 `plan`(默认只处理未分组书)→ apply → review |

## 退出码(自动化集成)

| 码 | 含义 |
|----|------|
| 0 | 成功 |
| 1 | 存在迁移失败或核验错位 |
| 2 | 凭据失效 |
| 3 | 重组迁移未加 `--yes` 确认 |

`apply`/`review` 支持 `--json-report 文件路径`,输出结构化
`moved/failed/stale/wrong` 结果,供定时任务判断成败。

## 参考文件

- `references/api.md` — 接口明细、请求头、错误码、常见问题
- `examples/rules.example.json` — 12 分组示例规则(可直接改用)
- `tests/` — 离线回归测试(`python3 -m unittest discover -s tests`,全 mock 无网络);
  改动分类/迁移逻辑后必须先跑通测试

Files in this skill

  • .pre-commit-config.yaml898 B
  • AGENTS.md1.6 KB
  • CHANGELOG.md4.3 KB
  • CONTRIBUTING.md722 B
  • SECURITY.md1.2 KB
  • SKILL.md7.7 KB
  • docs/walkthrough.md3.4 KB
  • examples/rules.example.json4.1 KB
  • pyproject.toml1.6 KB
  • references/api.md3.5 KB
  • scripts/weread_shelf.py33.4 KB
  • tests/test_weread_shelf.py35.4 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.