wjs-syndicating-articleslisted
Install: claude install-skill jianshuo/claude-skills
# wjs-syndicating-articles
每天把最新一篇还没分发过的公众号文章,扇出(syndicate)到各社交平台。**一套文案走天下**,有 API 的真发,没 API 的备好待发件箱让你手动粘。
## Core Principles
- **稳定第一**:每个平台是独立步骤,一个失败绝不影响其它。
- **幂等去重**:`state/history.jsonl` 按 `(slug, platform)` 记录;重复跑只补发没成功的,永不重复发。
- **凭证降级**:API 平台缺/过期凭证 → 自动转 outbox(手动),不报错。
- **署名 / CTA 用「王建硕」**(用户全局偏好),不写营销腔、不堆 hashtag/@/emoji(除非原文有)。
## Inputs
```
/wjs-syndicating-articles # 选最新未分发文章,走完整流程(默认/定时用)
/wjs-syndicating-articles <article-folder># 显式指定文章
/wjs-syndicating-articles --open # 交互模式:打开手动平台 web 页 + 文案进剪贴板
/wjs-syndicating-articles --dry-run # 只草拟,不发、不写 history
/wjs-syndicating-articles --mark <slug> <platform> # 手动标记某平台已发
```
`SKILL_DIR = ~/.claude/skills/wjs-syndicating-articles`
## Workflow (default / scheduled run)
### Step 0: --mark short-circuit
若调用是 `--mark <slug> <platform>`:`bash $SKILL_DIR/scripts/history.sh record <slug> <platform> posted` 然后告诉用户已标记,结束。
### Step 1: 选文章
```bash
bash $SKILL_DIR/scripts/pick-next-article.sh
```
- 显式指定了 `<article-folder>` 则跳过此脚本,直接用它。
- 输出为空 → 最近文章都分发完了,今天 rest day,结束。
- 记 `FOLDER`,`SLUG=$(basename "$FOLDER")`。
### Step 2: 抽一套核心文案(你来做,不是脚本)
读 `$FOLDER/article.md` 和 `$FOLDER/meta.json`。抽出**一段最 quotable 的核心句/小段,≤120 字**(保证塞进 X 的 280 字符;中文每字算 2),保���王建硕语气。再加一行软 CTA + 文章链接(公众号链接,没有就用 `meta.json` 里信息+ `article_url_base`)。
把最终文案写进 `$SKILL_DIR/outbox/<date>-<SLUG>/post.txt`(先 `mkdir -p`)。`<date>=$(date +%F)`。
`--dry-run` 时:打印 post.txt 内容 + 下面每个平台「将发什么」,**不**继续 Step 3+,结束。
### Step 3: 扇出(一