content-forge/.claude/skills/write-article/SKILL.md

15 KiB
Raw Blame History

name description
write-article Generate articles from Obsidian vault topics, optimized for traffic pool entry (click-through × dwell time × completion rate). Output: a publish-ready draft in 02-drafts/ with complete frontmatter, passing 27-item quality gate (material density + title + de-AI + completion rate). USE WHEN: User wants to create new long-form content (tech blog, opinion piece, tutorial, social post, lizi_kk-style article) from a structured topic in 01-topics/. Trigger phrases: 写文章、写作、生成草稿、技术博客、观点文、教程、社交短文、 article、blog post、draft、人格写作、栗子KK风格。 DON'T USE WHEN: - User wants to analyze/deconstruct existing content → use dao-analysis instead. - User wants to review/critique an existing draft → use multi-review or /review instead. - User wants to import an external draft into vault → use import-draft instead. - User wants to load vault context → use my-world instead. - User wants to edit an existing draft in 02-drafts/ → use obsidian CLI directly. - User says "分析"、"拆解"、"审查"、"导入" without creation intent → not this skill.

Write-ArticleObsidian 文章写作技能

目标

用统一流程产出能进流量池的可发布草稿。

核心公式:点击率 × 停留时长 × 完读率 = 流量池入场券。三项相乘,任一项为零则全盘归零。详见 references/content-quality.md

质量底线:

  • 标题:候选 ≥5 个,评分 ≥18/25
  • 去 AI 味:零容忍黑名单词汇,人味注入 ≥5 项
  • 完读率Hook 前 3 句到位,段间钩子不断,结尾金句+CTA

路由规则Use when / Don't use when

Use this skill when:

  • User wants to create new content from a topic brief in 01-topics/
  • User says "写文章"、"生成草稿"、"write an article"、"create a draft"
  • User specifies a style (tech_blog, opinion, tutorial, social_short, lizi_kk)
  • User provides source notes and wants a publish-ready draft

Do NOT use this skill when:

  • User wants to analyze existing content (article, transcript, concept) → use dao-analysis
  • User wants to review/critique a draft for quality → use multi-review or /review command
  • User wants to import an external draft into the vault → use import-draft
  • User wants to load vault context or see what's in the vault → use my-world
  • User wants to edit an existing draft (fix typos, update sections) → use obsidian CLI directly
  • User wants to format a draft for publishing → use format-markdown (baoyu skill)

Edge cases:

  • "帮我把这篇笔记改写成文章" → this skill (creation from notes = write-article)
  • "分析一下这篇文章为什么火" → not this skill (analysis = dao-analysis)
  • "审查我的草稿" → not this skill (review = multi-review)
  • "把 atomstorm 项目里的文章导入 vault" → not this skill (import = import-draft)

输入要求

必须提供:

  • topic文章主题1 句话)
  • styletech_blog | opinion | tutorial | social_short | lizi_kk
  • audience:目标读者
  • source_notes:至少 1 个 Obsidian note 路径vault 相对路径)
  • tags1-5 个标签

可选:

  • persona:人格激活(栗子KK),深度扮演作者身份
  • intensity:人格强度 light | medium | heavy(默认 medium
  • title文章标题如未提供Step 3 强制生成候选)
  • slug:文件 slug英文短横线
  • length_target:目标字数或段落数
  • cta:结尾行动建议
  • publish_channel:发布渠道
  • material_sources额外素材文件路径列表vault 相对路径),用于补充素材锚点

风格与人格联动:当 style: lizi_kk 时,自动加载 vault 内 templates/author-style-lizi-kk.mdpersonal-context/ 参考文章,无需额外指定参数。

stylepersona 交互矩阵

组合 行为
style: lizi_kkpersona 仅应用风格模板(结构+语言特征),不深度扮演
persona: 栗子KKstyle: lizi_kk 人格口吻叠加到所选风格上(如 tech_blog + 栗子KK 语气)
两者都设置 完整集成:风格模板 + 人格深度扮演(推荐)

强制工作流7 步,不得跳步)

Step 1a读取素材

逐个读取 source_notes 中的笔记,并搜索 vault 中相关素材,确认事实边界。

# 必须先 cd 到 vault 目录CLAUDE.md §6.1 强制要求)
cd "${VAULT_PATH:-/home/kang/apps/content-forge/content-forge}"

# 读取指定源笔记
obsidian read path="<source_note_path_1>"
obsidian read path="<source_note_path_2>"

# 搜索 vault 中相关素材(关键词来自 topic
obsidian search query="<topic关键词>"

# 读取匹配的 personal-context/ 文章(亲历锚点来源)
obsidian read path="personal-context/<matching_article>.md"

# 读取匹配的 09-viral-examples/ 案例(案例/数据锚点来源)
obsidian read path="09-viral-examples/<matching_example>.md"

# 读取用户额外指定的素材(如有 material_sources 参数)
obsidian read path="<material_source_path>"

执行要求:

  • source_notes 中每个路径都要读取。
  • 主动搜索 vault 中与 topic 相关的素材(personal-context/00-inbox/09-viral-examples/)。
  • 未读完素材前,禁止进入写作。
  • 素材来源优先级见 references/material-anchors.md §2。

Step 1b提取素材锚点

从 Step 1a 读取的所有素材中,提取四类素材锚点并输出素材脚手架。

详细规则见 references/material-anchors.md。核心约束:

  • 总锚点 ≥3Type A亲历≥1Type B 或 C数据/案例≥1
  • 必须输出结构化素材脚手架(格式见 references/material-anchors.md §3
  • 素材不足时输出 [?] 素材不足:缺少 <具体类型>禁止进入 Step 2

输出格式:

## 素材脚手架

### Type A 亲历锚点
1. [锚点描述] — 来源: [vault路径]
...

### Type B 数据锚点
1. [数据 + 来源归属] — 来源: [vault路径或URL]
...

### Type C 案例锚点
1. [命名实体 + 分析要点] — 来源: [vault路径或URL]
...

### Type D 观察锚点
1. [引用/对话 + 归属] — 来源: [vault路径]
...

### 统计
- 总锚点: X 个
- Type A: X 个 ✓/✗≥1
- Type B|C: X 个 ✓/✗≥1
- 判定: 通过 / [?] 素材不足

Step 2激活人格可选

如果提供了 persona 参数,按 references/personas.md 激活对应人格。

激活确认格式

收到,创作者。'栗子KK' 人格已上线强度medium。

> 风格预览说实话这个坑我踩了不下10次今天终于有空聊聊。

等待您的创作指令。

人格参数

  • persona: 人格名称(目前支持 栗子KK
  • intensity: light | medium | heavy(默认 medium

Step 3标题工程

标题决定 80% 的点击率。禁止只写一个标题直接用。

完整流程见 references/content-quality.md §1。核心约束

  • 生成 ≥5 个候选标题,覆盖不同公式(经历+数字+痛点 / 成本+悬念+真相 / 反常识 / 99%+反差 / 身份锚定)
  • 每个候选命中五要素 ≥3 项(第一人称"我"、具体数字、张力词、信息缺口、身份锚定)
  • 评分 ≥18/255 维度 × 1-5 分:好奇心缺口、情绪冲击、身份共鸣、具体度、可信度)
  • 标题 ≤35 字(微信折叠阈值)
  • 禁止学术腔、泛泛而谈、标题党

输出格式:

候选标题:
1. [标题] — 评分: XX/25 — 命中要素: [列表]
2. [标题] — 评分: XX/25 — 命中要素: [列表]
...

✦ 最终选定: [标题](原因: ...

Step 4生成文章草稿

references/writing-styles.md 选择对应风格模板生成正文。 如果激活了人格,同时应用 references/personas.md 的人格设定。

素材先行原则(详见 references/material-anchors.md §4

  • 正文必须围绕 Step 1b 的素材脚手架构建,每个主要论点必须锚定到具体素材。
  • Hook 第 1 句必须直接包含 ≥1 素材锚点(优先 Type A 或 Type B。不是"前 3 句",是"第 1 句"——铺垫后置。
  • 每个主要章节H2/编号段落)至少引用 ≥1 个锚点。
  • 结尾回扣开头锚点,形成首尾呼应。
  • 所有事实性断言必须追溯到素材锚点,或标记 [?] 待验证。

风格联动规则

  • style: lizi_kk 时,必须额外通过 obsidian read path="templates/author-style-lizi-kk.md" 读取风格指南,并参考 personal-context/ 目录的已发表文章(这些文件位于 vault 内,需在 vault 目录下执行 CLI

4a. 去 AI 味(强制)

详细规则见 references/content-quality.md §2。核心执行项

  • 黑名单零容忍:开头/过渡/结尾废话出现即重写(完整黑名单见 §2.1
  • 意义膨胀零容忍:删除"里程碑意义"、"划时代"、"引领新范式"等空洞修饰§2.1
  • 模糊引用零容忍:所有"研究表明"、"业内人士"必须给出具体来源否则删除§2.1
  • 打破 AI 结构:段落长短交替(每连续 3 段必须有 ≥1 段 ≤2 句话、打破对称、语气变化、偶尔不完整句、禁止绕路表述§2.2
  • 禁止抽象过度:每个抽象观点后必须紧跟一个具体场景(含时间/地点/数字/工具名禁止连续两个以上的纯观点段落§2.2
  • 禁止聚合清单:禁止在结尾或独立章节使用"我的N个思考/感悟/总结"式编号列表洞察必须散布在正文中§2.2
  • 人味注入 ≥5 项:不规则段落、口语化、括号吐槽、具体数字、个人经历、反问句、混合情绪、刻意凌乱等(完整清单 12 项见 §2.3
  • 二次审计:门禁检查后,通读全文自问"哪里一眼看出 AI 写的"→列出→修复§2.4

4b. 完读率优化(强制)

详细规则见 references/content-quality.md §3。核心执行项

  • 前 3 句 Hook:反直觉结论 / 真金白银 / 身份挑战 / 悬念制造(禁止背景介绍、自我介绍、目录式开头)
  • 段间钩子:每个 section 尾部制造"未完成感"
  • 小标题有信息量:不是"第一步"而是"第一步这个操作让90%的人栽跟头"
  • 阅读节奏:每 300-500 字视觉断点,每连续 3 段必须有 ≥1 段 ≤2 句话,代码块 ≤15 行
  • 结尾工程:回扣开头 + 金句 + 具体 CTA

执行要求:

  • 只使用已读取素材中的事实。
  • 观点必须有论证链,不得堆砌口号。
  • 内容结构必须匹配所选风格的"结构"要求。
  • 人格激活时,口吻必须符合人格的 voice_signaturecatchphrases

Step 5创建草稿文件

将 frontmatter + 正文一次性写入 02-drafts/ 目录,减少 CLI 调用开销。

obsidian create path="02-drafts/<YYYY-MM-DD>-<slug>.md" content="---
id: '<YYYY-MM-DD>-<slug>'
title: '<title>'
slug: '<slug>'
status: draft
content_type: article
channels:
  - wechat
  - x
language: zh-CN
source_urls: []
assets: []
cover_image: ''
template: article
owner: content-forge
created_at: '<YYYY-MM-DD>T00:00:00+08:00'
updated_at: '<YYYY-MM-DD>T00:00:00+08:00'
style: '<style>'
audience: '<audience>'
tags:
  - '<tag1>'
  - '<tag2>'
source_notes:
  - '<note1.md>'
---

<ARTICLE_BODY>"

执行要求:

  • 目标目录必须是 02-drafts/
  • 文件名必须包含日期前缀与 slug。
  • frontmatter 必填字段对齐 CLAUDE.md §4.2id, title, slug, status, content_type, channels, language, source_urls, assets, cover_image, template, owner, created_at, updated_at
  • 正文必须是 Markdown可直接发布或二次编辑。

Step 6验证 frontmatter

创建完成后,回读文件确认 frontmatter 完整性。

obsidian read path="02-drafts/<YYYY-MM-DD>-<slug>.md"

如果回读发现 frontmatter 字段缺失或格式异常,使用 property:set 逐项修补:

obsidian property:set path="02-drafts/<YYYY-MM-DD>-<slug>.md" name="<field>" value="<value>"

必填字段检查清单(对齐 CLAUDE.md §4.2

  • id, title, slug, status, content_type, channels, language
  • source_urls, assets, cover_image, template, owner
  • created_at, updated_at

Step 7质量检查

逐项验证并输出 [✓][✗]任一项 [✗] 时停止交付并修复

完整门禁清单见 references/content-quality.md §4。

基础门禁

  • 所有 source_notes 已执行 obsidian read
  • 草稿已通过 obsidian create 写入 02-drafts/
  • frontmatter 必填字段完整Step 6 回读验证通过)
  • 不存在事实捏造与无依据断言

标题门禁§4.1

  • 候选标题 ≥5 个
  • 最终标题评分 ≥18/25命中五要素 ≥3 项
  • 标题 ≤35 字

去 AI 味门禁§4.2

  • 前 50 字无黑名单词汇
  • 无"首先...其次...最后"四段式
  • 结尾无"综上所述/希望有帮助"
  • 无意义膨胀词汇("里程碑意义"、"划时代"、"深远影响"
  • 无模糊引用("业内人士表示"、"研究表明"须给出处)
  • 相邻段落字数差异 >20%(至少 3 组)
  • 人味注入清单命中 ≥5 项(含混合情绪/刻意凌乱)
  • 二次审计通过(自问"哪里一眼看出AI"→ 无残留)

完读率门禁§4.3

  • 前 3 句完成 Hook
  • 每个 section 尾部有段间钩子
  • 小标题有信息量
  • 每 300-500 字有视觉断点
  • 结尾有金句 + 具体 CTA
  • 全文无超过 15 行的代码块

素材密度门禁§4.4

  • 素材脚手架已在 Step 1b 输出,总锚点 ≥3
  • 亲历锚点Type A≥1
  • 数据/案例锚点Type B/C≥1
  • 第 1 句包含 ≥1 素材锚点(非标题,正文首句)
  • 每个主要章节引用 ≥1 锚点
  • 无未标注来源的事实性断言(或已标 [?]

输出约束

  • 输出仅包含文章草稿及必要元数据,不输出无关解释。
  • 文章语言默认中文,除非用户显式要求其他语言。
  • 禁止编造数据、案例、引文、实验结果。
  • 未确认的事实必须标记 [?],并明确缺失项。
  • 结构必须符合所选风格规范(见 references/writing-styles.md)。
  • 段落应可读,避免空泛套话与重复表达。

失败处理

  • 缺少必要输入时,返回:[?] 缺失输入:<字段名>,并停止写入。
  • obsidian 命令失败时,返回:[✗] <命令> 失败:<错误信息>,并停止后续步骤。
  • 如果无法确定风格,默认使用 tech_blog,同时显式告知用户。

风格参考

  • references/material-anchors.md — 素材锚点规范(四类锚点 + 脚手架 + 编织规则)
  • references/content-quality.md — 流量池质量框架(标题工程 + 去AI味 + 完读率 + 素材密度)
  • references/writing-styles.md — 5 种写作风格模板
  • references/personas.md — 人格化配置栗子KK
  • vault 内 templates/author-style-lizi-kk.md — 栗子KK 详细风格指南(通过 obsidian read 读取)
  • vault 内 personal-context/ — 已发表文章参考5 篇)