wjs-tweeting-from-articleslisted
Install: claude install-skill jianshuo/claude-skills
# wjs-tweeting-from-articles
每天一条 X tweet,灵感**直接从最近发的公众号文章**里抠。文章是源头,tweet 是更短的萃取。
## Core Principle
**文章已经过了一轮王建硕式的精炼,tweet 只是再短一格的版本。** 不要重新构思——从 article.md 里直接抠最 quotable 的一句 / 一段,按 X 的节奏切。
**一天最多一条,一篇文章只推一次。** 状态文件 `state/history.jsonl` 记录哪些 article 已经推过;不重复。(**例外:批量排期模式**——一次把多篇排进队列、按每 N 小时一条自动发,见下文。)
**真发,不暂存。** 用户确认后立刻 `xurl POST`。失败原文 dump 给用户重试。
## When This Skill Fires
- 用户说「今天的 tweet」/「发一条 X」/「从文章里发推」
- 用户跑 `/wjs-tweeting-from-articles`
- 用户设了 `/schedule daily /wjs-tweeting-from-articles` 之后每天自动调
## When NOT to use
- 用户要发的内容**和最近的公众号文章无关**——直接 `xurl POST /2/tweets` 即可
- 用户要发的是产品 / skill 推广——用 `/publish-skill` 或 `/wjs-promoting-skills`
## Workflow
### Step 1: 挑今天要推的文章
```bash
scripts/pick-next-article.sh
```
输出最新一篇**还没推过**的文章的 folder 路径(最近一周内,按日期倒序找第一个未推的)。已经全推完 → 退出 0、空输出,告诉用户「最近 7 天的文章都推过了,今天 rest day」。
如果用户想推**特定**那一篇:跳过此脚本,直接用 `<folder>`。
### Step 2: 读文章 + 草拟 3 条 tweet 候选
读 `<folder>/article.md`,按下面**三个角度**各起草一条:
| 角度 | 选材 | 例子 |
|------|------|------|
| **A · 金句** | 从文中挑一句最 quotable 的,可以加一句铺垫 | "笔头钝了,写不出锋——蘸点墨,在砚台上转两圈,重新有了尖。" |
| **B · 比喻** | 文章的核心比喻 + 一句把比喻落到读者头上 | "写 prompt 跟画画一样,是手感活儿。每天都得写点。" |
| **C · 反差** | 「不是 X,是 Y」式的认知翻转 | "不是变聪明,是手感来了。" |
**长度硬约束**:tweet ≤ **280 字符**(X 限制;中文每字算 2)——所以中文 tweet 实际 ≤ **140 字**。**留 buffer 到 120 字以内**比较稳。
**风格**:保留王建硕语气——平实、家常比喻、不写营销腔。**不要**加 hashtags、不要加 @、不要加 emoji(除非原文有)。**不要**加 mp.weixin 链接(默认);如果用户问要不要带链接,提示可以 reply 里附。
### Step 3: 让用户挑一条
用 `AskUserQuestion` 给出 A/B/C 三条候选 + 「四选其他」。用户选一条之后进入 Step 4