---
name: article-writing
description: 写「待发布」分享文章的标准流程与写作规范。当用户说"写文章""写待发布文章""写一篇分享""写实战复盘""给XX写篇文章""写公众号文章""写微信文章"时触发。覆盖:渠道区分(技术平台/微信公众号)、标题写法、六步流程(含人工确认节点)、frontmatter 规范、文件命名、脱敏、图片对接。
---

# 写文章（待发布分享文）标准流程与规范

把「写一篇待发布分享文章」从凭感觉变成固定流水线。**每次写新文章都按这个走，不要跳步、不要换会话就忘。**

## 〇、渠道区分（写文章前第一步：确认发哪个渠道）

两个渠道，**目录、读者、写法、发布方式都不同**，动手前必须先确认：

| | **技术平台渠道**（默认） | **微信公众号渠道** |
|---|---|---|
| 发往 | CSDN / 掘金 / 知乎 | 公众号「产品小游 AI 提效笔记」 |
| **写作目录** | `06 - 长期记忆库/待发布/_草稿/` | `06 - 长期记忆库/公众号-产品小游AI提效笔记/_草稿/` |
| **就绪目录**（定时任务扫） | `06 - 长期记忆库/待发布/*.md` | —（wechat_publish 直接读 _草稿/） |
| **归档目录** | `06 - 长期记忆库/已发布/{csdn,juejin,zhihu,url}/` | `06 - 长期记忆库/公众号-产品小游AI提效笔记/已推草稿/` |
| 配图目录 | `待发布/imgs/<主题slug>/` | `公众号-产品小游AI提效笔记/imgs/<主题slug>/` |
| 读者 | 开发者 / 技术 PM | **IT 产品经理 / 研发**（想用 AI 提效但还没真正用起来，非纯小白） |
| 内容来源 | 实战复盘原创 | **与技术平台内容允许重复**（2026-08-25 起）：同一主题可一文双发，按渠道改标题/frontmatter 即可，无需强行重写；仅当素材本身结构不适合手机阅读时才重构 |
| 发布 | 技术平台：`publish-workflow`（手动移送+定时）；微信：`vault-scripts/wechat_publish.py` | 微信默认推草稿箱人工发表，`--publish` 可全自动 |

**微信公众号渠道的专门约定：**

1. **双渠道允许重复**（2026-08-25 用户确认，替代原「必须重新构思」）：微信与技术平台内容可以一致——同一篇按渠道换标题/frontmatter/配图密度即可双发。只在两种情况下重写：① 旧文缺图或结构不适合手机阅读；② 素材间内容相互重复需取舍。
2. **每篇单独生成**：一次只写一篇，单独走完六步流程和确认卡点，**不批量生产**。素材间内容重复的去重取舍、结构不适合手机阅读的重搭、缺图的补全——都在写本篇时处理。
3. **视角**：第一人称「小游」，普通学历 IT 产品经理，去精英化——术语可以出现，但第一次出现必须给一句大白话解释；多讲「我当时踩了 3 小时」这类真实细节。
4. **篇幅**：1500~2500 字（比技术平台短），一段一图，手机阅读友好。
5. **frontmatter 加渠道标记**：`channel: 微信公众号`；技术平台文章不写该字段（默认）。
6. **目录结构**：`公众号-产品小游AI提效笔记/` 下自带 `README.md`（定位/栏目/选题库），写新篇前先同步选题库状态。

## ⭐ 核心：六步流程（两个「人工确认」是硬卡点）

```
① 写文章   →  ② 人工确认内容  →  ③ 生图+压缩   →  ④ 人工确认图片  →  ⑤ 脱敏+图片传CSDN图床  →  ⑥ 进入待发布
 (draft)      【停！等确认】      (生图即压)      【停！等确认】       (脚本兜底再压)           (publish-workflow)
```

| 步骤 | 做什么 | 产出 / 工具 | 卡点 |
|------|--------|------------|------|
| **① 写文章** | **先做「一、标题写法·第零步立项分析」**（标题独立吸引力三问，答不出不动笔），再按本 skill 规范写正文 + frontmatter，写到**对应渠道的 `_草稿/` 目录** | 技术平台：`待发布/_草稿/AI工具-XXX.md`；微信：`公众号-产品小游AI提效笔记/_草稿/标题.md` | — |
| **② 人工确认内容** | 把文章给用户看，确认观点、事实、结构 | 用户点头才往下 | ⛔ **未确认不生图** |
| **③ 配图** | **每篇按实际需要 3-5 张，可读性优先；来源不限**——真实截图或 `article-illustrations` 生图均可。**生图脚本落盘后立刻压缩**（宽≤1280 JPEG，volces/agnes 内置，禁止跳过） | 压缩后的图落对应渠道 `imgs/<主题>/`（多为 `.jpg`） | — |
| **④ 人工确认图片** | 把生成的图给用户看，确认风格/形象/文字对 | 用户点头才往下 | ⛔ **未确认不上传** |
| **⑤ 脱敏 + 图片上传** | 跑 `sensitive_check.py` → 跑 `publish.py --images`（技术平台，传 CSDN 图床回填公网 URL）；微信渠道无需传图（wechat_publish 推送时本地图直传微信图床），只跑 `wechat_publish.py --dry-run` 预览 | 公网 URL 回填进 .md（技术平台）| 脱敏命中必须改；未压缩的 6MB PNG 禁止传 |
| **⑥ 进入就绪队列** | 技术平台：移送 `待发布/_草稿/` → `待发布/`，让定时任务扫到；微信：直接交 `wechat_publish.py` 推草稿。确认 `status: 待发布` | 草稿箱/待发布队列就绪 | — |

**关键纪律：**
- **②和④是人工确认硬卡点，不能省。** 内容没确认就生图、图没确认就上传，都是返工重灾区。
- **⑤的两件事顺序固定：先脱敏、再传图。** 脱敏不过不许传（避免带真名的图先上云）。传的必须是③已压缩的图。
- **③的顺序固定：生图 → 立刻压缩 → 才进④确认。** 禁止把 2560×1440 / 6MB PNG 原样插入正文或 `--images`——CSDN 会「图片转存失败」。
- **技术平台写作阶段文章必须放 `_草稿/`，定时任务不扫子目录，不会误触未就绪的文章。** 图片传完 CSDN 图床后再移送 `待发布/` 顶层。
- 每步完成立即更新 TodoWrite，跨会话靠 skill 触发词唤起，不靠记忆。

## 一、标题写法

### 第零步：立项分析（动笔前必做，2026-09-26 起）

写任何一篇之前（含系列中的单篇），先做第一性原理分析，**三个问题答不出来就不动笔**：

**1. 读者怎么看到这篇文章？**
途径只有两种：**搜索**（技术平台）和**推送/朋友圈**（公众号）。两种场景下读者都**只看到孤立的单篇标题，看不到系列结构**——系列是写给自己的骨架，对读者不存在。所以每篇标题必须独立成立，不能靠「系列第 N 篇」的上下文活着。

**2. 标题独立吸引人吗？套公式自检：**

```
独立吸引力 = 痛点词（搜得到）× 结果感（数字/对比）× 身份代入（和我有关）
```

三项缺任何一项，标题就弱：缺痛点词→搜索吃不到；缺结果感→没有点击理由；缺身份代入→「你的事关我什么事」。

**3. 如果我是读者，我会点开这篇吗？**
代入目标读者（想用 AI 提效但还没用起来的 IT PM/研发）诚实回答「我想看什么」。经验判断：
- 会点：横评类（帮我省试错时间）、结果前置的实战（输入多随意、输出多能打）、反共识避坑（AI 干不了的活）
- 不点：「我的调研报告」「我的选型标准」「我的方法论原则」——供给方视角，闻着像软文或年终总结；「过程记录」类（翻车、迁移、迭代）对读者是过程不是结果，降级为正文素材，不单独成篇

**系列文章额外检查**：把每篇标题单独列出来逐个过这三问，「能独立活着」的才保留成篇；活不了的合并进能活的篇里做小节。

### 渠道标题差异

**技术平台渠道**（服务搜索率 + 点击率）：核心矛盾是吸睛点和关键词争位置——把可搜索的核心词顶到最前，收益点紧随其后。

**微信公众号渠道**（服务打开率 + 转发）：读者靠订阅推送和朋友圈看到，**不追搜索词，追「反差感 + 身份代入」**。公式：

```
[普通人身份/数字反差] + [具体结果] + [悬念或收益]
```

✅ 微信好标题：
- `一个月发了 40+ 篇技术博客：一个普通学历产品经理的 AI 提效笔记开篇`
- `不会写代码的我，用 AI 做了个自动发文章的工具`
- `学 AI 不用先学会：普通产品经理的 6 个月实操自白`

❌ 微信标题避免：纯术语堆砌（`Claude Code Token 进阶法`）、无人物无数字的抽象题。

### 技术平台标题五条准则

| 准则 | 服务指标 | 怎么做 |
|------|---------|--------|
| **关键词前置** | 搜索率 | 读者会搜的词（免费API / IP形象 / skill / Claude Code / 跨图一致）放标题**前 15 字**，别藏在冒号后 |
| **具体收益/结果** | 点击率 | 说清「读完得到什么」，有数字/结果/「附代码」「实战」更有点击欲 |
| **保留技术词** | 搜索率 | Claude Code、skill、生图 API 等搜索热词必须出现在标题里 |
| **砍文艺修饰** | 两者 | 「谁懂啊」「诞生记」「太治愈了」无搜索价值又稀释关键词，删 |
| **长度 ≤ 30 字** | 点击率 | 列表页折叠，核心信息前 15 字必须可见 |

### 标题公式

```
[可搜索核心词] + [动作/方案] + : + [具体收益/结果（含技术词）]
```

✅ 好标题（关键词前置 + 收益清晰）：
- `免费生图 API 实战：用 Agnes 给文章自动配图（附完整接入代码）`
- `AI 生图跨图一致性方案：把照片做成 Q 版 IP 形象（图生图实战）`
- `Claude Code skill-creator 入门：把踩坑经验做成会增值的 skill`

❌ 坏标题（文艺在前、关键词在后，搜索吃不到）：
- `把自己的照片做成「跨图一致」的Q版形象：一个头像skill的诞生`（关键词埋后半段）
- `现成的不香吗？为什么我不用原生skill`（无搜索词）

### ⚠️ YAML 写法坑

标题含冒号 `：` 时，frontmatter 的 `title:` **必须加引号**，否则 YAML 解析断裂：
```yaml
title: "Claude Code skill 自建还是引入？3 个开源项目的改造判断标准"
```
写完用 `parse_frontmatter` 验证能正确解析出 title（别凭肉眼看）。

## 二、frontmatter 规范

```yaml
---
title: "关键词前置的标题（≤30字）"
series: AI 工具人 PM 实战
tags: ["Claude Code", "技能包", "..."]   # 含搜索热词
created: 2026-08-12
status: 待发布
pillar: 技能包实战
---
```

微信公众号渠道在此基础上**加 `channel` 字段**，`series` 固定为公众号名：

```yaml
---
title: "一个月发了 40+ 篇技术博客：一个普通学历产品经理的 AI 提效笔记开篇"
channel: 微信公众号
series: 产品小游 AI 提效笔记
tags: ["AI 提效", "普通人学AI", "..."]
created: 2026-08-15
status: 待发布
pillar: 认知科普
---
```

- **必填**：`title / series / tags / created / status / pillar`
- **排序按 `created` 创建时间，不再手填 `series_order`**——发布与篇间导航都由创建时间驱动，生成文章时不要写 `series_order` 字段
- 正文第一行写 `# 同标题 H1`（Obsidian 阅读用），发布脚本自动剥重，不用手动删

## 三、正文风格

- **实战复盘风**：讲「我怎么做的 + 踩了什么坑 + 沉淀出什么规律」，不空谈理论
- **真实感优先**：放真实代码块（curl/python 可运行）、真实目录树、真实 frontmatter、过程迭代图——读者认「这人真跑过」
- **结构化**：多用对比表、编号步骤、流程箭头；一张图讲不清就「总分总」拆多张
- **系列钩子**：篇尾带「下一篇预告」，篇间互相链接
- **互动引导语（必有）**：正文最后一行固定加一行 `>` 引导语，三件套缺一不可——**关注**（引系列名）+ **评论**（抛一个和本篇主题相关的具体问题）+ **收藏**。关键词加粗。模板：
  ```
  > 如果这篇对你有用，欢迎**关注**看「<系列名>」系列更新；<一个和本篇相关的具体问题>，**评论**聊聊；觉得有用就**收藏**备用。
  ```
  **微信渠道变体**：三件套改为 **关注**（公众号名）+ **留言**（具体问题）+ **转发**，并按需追加群钩子：
  ```
  > 我是小游，一个普通学历的产品经理。**关注**「产品小游 AI 提效笔记」，下周更新《<下篇主题>》；<具体问题>，**留言**告诉我；觉得有用就**转发**给那个也想学 AI 的朋友。想一起实操的，后台回复【提效】进群。
  ```
  群钩子只在篇尾自然出现一次，开篇文重在立人设、可只埋「回复【提效】」的口令不甩二维码。

## 四、文件命名规范

文件命名字符串与 frontmatter `title` 严格对应，写作完成立刻更新文件名。

**规则：**
1. 文件名 = `文章前缀-标题去掉难理解英文和标点的版本.md`
2. **只去掉难理解的英文**——`skill`、`HTML`、`API`、`Token`、`Claude Code`、`Chart.js` 等属于技术读者日常阅读范围的词**保留**
3. **去掉非通俗英文**——如 `exec-briefing`、`post-mortem`、`frontmatter` 这类需要专门解释的词，换成中文或直接删掉
4. **去掉所有标点**——冒号、问号、感叹号、书名号、引号、括号等全部删掉，用 `-` 连接
5. **前缀按栏目固定**：

| 栏目 | 前缀 | 示例 |
|------|------|------|
| skill / 工具实战 | `AI工具-` | `AI工具-我给AI造了一个写汇报页的工具.md` |
| AI Agent 概念 | `AI Agent-` | `AI Agent-什么是Agent.md` |
| 内容流水线 | `AI工具-AI内容流水线-N-...md` | `AI工具-AI内容流水线-06-终篇skill状态机不用workflow.md` |
| 公众号 | 无前缀，直接用标题 | `我给AI造了一个写汇报页的工具.md` |

**常见词汇处理对照：**

| 保留（通俗技术词） | 替换/删除（难理解英文） |
|-------------------|----------------------|
| skill | 保留 skill |
| HTML | 保留 HTML |
| API | 保留 API |
| Token | 保留 Token |
| Claude Code | 保留 Claude Code |
| exec-briefing | 删除，用中文标题替代 |
| post-mortem | 删除或替换为「复盘」 |
| frontmatter | 删除或替换 |

**❌ 错误示范：**
- `exec-briefing-skill创建实战.md`（含 exec-briefing）
- `AI工具-exec-briefing-skill创建实战.md`（含 exec-briefing）

**✅ 正确示范：**
- `AI工具-我给AI造了一个写汇报页的工具.md`
- `AI工具-领导5分钟看不完汇报材料.md`
- `我给AI造了一个写汇报页的工具.md`

**执行时机：** 写完文章正文、确认 frontmatter 标题后，**立刻**用 `mv` 命令更新文件名，不允许文件名和标题长期不一致。

---

## 五、脱敏（写作阶段就要做，红线）

**凡对外发布，严禁真实项目名 + 真实人名。写完立刻查，不拖到发布。**

```bash
python vault-scripts/sensitive_check.py "06 - 长期记忆库/待发布/_草稿/某篇.md"
```

- 三层检测：黑名单 + 配置字段嗅探 + 疑似人名
- **已知误报边界**：「动词+用」三字词（如「回填进」「继续用」）会被疑似人名规则误抓 → 改措辞绕开（如「写回 SKILL.md」「不断循环」），不动规则本身
- 脱敏用词：真实项目→「我的产品线/某 SaaS 产品」；作者→「我」；同事→「后端同学」

## 六、图片对接（步骤③④⑤）

生图统一走 **`article-illustrations` skill**（触发词「为文章配图」），本 skill 只管流程衔接：

1. **默认风格 `zh-handbook`**（中文手账风），别用 flat-doodle
2. **图片落固定目录** `待发布/imgs/<主题slug>/`，结构化思维 + 总分总拆分（详见 article-illustrations）
3. **确认图片后**，跑 `publish.py --images "<文章>"` 把**已压缩的本地图**传 CSDN 图床、回填公网 URL
4. 文章里图片引用最终必须是 `https://pd-text...` 公网 URL，零本地 `./` 残留才算完成
5. **顺序硬约束：生图 → 压缩 → ④确认 → ⑤传 CSDN 图床。** 禁止未压缩直接传。

## 七、固定路径速查

| 用途 | 路径 |
|------|------|
| 文章输出（技术平台写作） | `06 - 长期记忆库/待发布/_草稿/<文件名>.md` |
| 文章就绪（技术平台发布） | `06 - 长期记忆库/待发布/<文件名>.md` |
| 文章配图（技术平台） | `06 - 长期记忆库/待发布/imgs/<主题slug>/` |
| 文章输出（微信公众号写作） | `06 - 长期记忆库/公众号-产品小游AI提效笔记/_草稿/<文件名>.md` |
| 文章配图（微信公众号） | `06 - 长期记忆库/公众号-产品小游AI提效笔记/imgs/<主题slug>/` |
| 技术平台归档 | `06 - 长期记忆库/已发布/{csdn,juejin,zhihu,url}/` |
| 微信公众号归档（已推草稿） | `06 - 长期记忆库/公众号-产品小游AI提效笔记/已推草稿/` |
| 公众号定位/选题库 | `06 - 长期记忆库/公众号-产品小游AI提效笔记/README.md` |
| IP 形象底片 | `06 - 长期记忆库/assets/avatar/avatar-base.png` |
| 形象约束 | `06 - 长期记忆库/assets/avatar/my-avatar-dna.md` |
| 生图脚本 | `~/.claude/skills/article-illustrations/scripts/volces_image.py`（火山方舟，默认；落盘即压缩） |
| 压缩脚本 | `~/.claude/skills/article-illustrations/scripts/compress_image.py`（生图内置调用；也可手跑目录） |

## 协作边界

- **写作 + 流程 + 标题 + 命名 + 脱敏** → 本 skill（article-writing）
- **生图方法论 + 风格 + 目录** → article-illustrations
- **审核 + 发布 + 归档** → `publish-workflow`（技术平台+微信公众号全覆盖，含 _草稿/ 流转逻辑）
- **微信公众号发布脚本** → ✅ 已落地：`e:/Obsidian/vault-scripts/wechat_publish.py`。官方 API（draft/add），md→内联样式 HTML→本地图直传微信图床（兼容公网图转存）→封面自动压缩 64KB→草稿箱；默认只推草稿，`--publish` 直接发布（订阅号每天限 1 次）；凭证在 `~/.claude/skills/.env`（WECHAT_APPID/SECRET），家用宽带 IP 变动需更新后台白名单（报错 40164 时会提示当前 IP）。推成功后自动移入 `已推草稿/`

三个 skill 串成完整流水线，换会话靠各自触发词唤起，不依赖记忆。
