henry-ai-skills 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "henry-ai-skills",
3
+ "owner": {
4
+ "name": "Henry Xue",
5
+ "email": "henry@findhappyman.com"
6
+ },
7
+ "metadata": {
8
+ "description": "Henry 的 AI 技能集合 · Claude Code 插件",
9
+ "version": "1.0.0"
10
+ },
11
+ "plugins": [
12
+ {
13
+ "name": "article-optimizer",
14
+ "description": "多平台文章优化工具:将文章适配微信公众号、X(推特)、小红书,并生成 AI 配图 Prompt",
15
+ "source": "./",
16
+ "strict": false,
17
+ "skills": [
18
+ "./article-optimizer"
19
+ ]
20
+ }
21
+ ]
22
+ }
package/README.md ADDED
@@ -0,0 +1,51 @@
1
+ # AI Skills · Henry Xue
2
+
3
+ 我日常使用的 AI 技能文档,用于 Claude Code。每个技能是一个独立文件夹,包含 `skill.md`。
4
+
5
+ ## 安装方式
6
+
7
+ ### 方法一:npm(一行命令,自动安装到本地)
8
+
9
+ ```bash
10
+ npm install -g henry-ai-skills
11
+ ```
12
+
13
+ 安装时会自动将技能文件复制到 `~/.claude/skills/`,重启 Claude Code 即可使用。
14
+
15
+ > 如果用 `--ignore-scripts` 安装,可手动运行 `henry-ai-skills` 触发安装。
16
+
17
+ ---
18
+
19
+ ### 方法二:Claude Code /plugin 命令(从 GitHub 在线安装)
20
+
21
+ 在 Claude Code 终端中运行以下命令,将此仓库注册为插件市场:
22
+
23
+ ```
24
+ /plugin marketplace add findhappyman/ai-skills
25
+ ```
26
+
27
+ 然后安装具体技能(以 article-optimizer 为例):
28
+
29
+ ```
30
+ /plugin install article-optimizer@henry-ai-skills
31
+ ```
32
+
33
+ 安装完成后直接对话即可触发,无需额外操作。
34
+
35
+ ---
36
+
37
+ ### 方法三:手动复制
38
+
39
+ 将对应文件夹中的 `skill.md` 内容复制到 Claude Projects 的自定义指令中,或放入 `~/.claude/skills/<skill-name>/` 目录下使用。
40
+
41
+ ---
42
+
43
+ ## 技能列表
44
+
45
+ | 文件夹 | 技能名称 | 功能 |
46
+ |--------|----------|------|
47
+ | [article-optimizer](./article-optimizer/skill.md) | Article Optimizer | 将原始文章优化并适配微信公众号、X(推特)、小红书三个平台,同时生成 AI 配图 Prompt |
48
+
49
+ ## 开源协议
50
+
51
+ MIT
@@ -0,0 +1,330 @@
1
+ # 微信公众号排版指南
2
+
3
+ ## 目的
4
+
5
+ 将微信公众号版的 Markdown 内容转换为一个排版精美的 HTML artifact,用户可以预览,也可以在浏览器中打开后复制粘贴到微信公众号编辑器,格式完整保留。
6
+
7
+ ## 微信公众号 HTML 兼容性规则
8
+
9
+ 微信编辑器对 HTML/CSS 有严格限制,生成的 HTML 必须遵守以下规则:
10
+
11
+ ### 必须做的
12
+ - 所有样式写成 inline style(`style="..."`),这是微信唯一可靠支持的方式
13
+ - 使用 `<section>` 作为主要容器标签
14
+ - 使用 `<span>`、`<strong>`、`<em>`、`<br>` 等基础标签
15
+ - 图片用 `<img style="max-width: 100%; height: auto;">`
16
+ - 正文使用 `text-align: justify`(两端对齐),提高整洁度
17
+
18
+ ### 绝对不能做的
19
+ - 不用 `<style>` 标签——微信会删除
20
+ - 不用 `<script>` 标签——微信会删除
21
+ - 不用 CSS class 或 id——微信会删除 id,class 不生效
22
+ - 不用 `<a>` 标签——微信正文中链接会被过滤
23
+ - 不用 `position` 属性——微信会删掉
24
+ - 不用 `border-radius`——微信支持不稳定
25
+ - 不用 `<ul>`/`<ol>`/`<li>`——微信渲染不一致,改用卡片式段落或带编号的段落代替
26
+ - 不用 `<hr>`——微信渲染不一致,用装饰元素模拟
27
+ - 不用 `<header>`/`<footer>`/`<nav>`/`<article>`/`<div>` 等标签——用 `<section>` 替代
28
+ - 不用外部字体、外链资源
29
+ - 不用 `<p>` 标签——统一用 `<section>` 包裹段落,避免微信对 p 标签的默认间距干扰
30
+
31
+ ### 关于 linear-gradient
32
+ 微信公众号对 `background: linear-gradient(...)` 的支持**不稳定**——在部分安卓机型上不生效。在以下场景中处理:
33
+ - 标题区域渐变背景:保留使用,因为即使不生效也会 fallback 到白色背景,不会破坏布局
34
+ - 文字高亮效果(荧光笔底色):保留使用,因为即使不生效文字仍然加粗可读,只是少了底色装饰
35
+
36
+ 不要在关键布局元素上依赖 gradient,只在装饰性元素上使用。
37
+
38
+ ## 设计风格
39
+
40
+ **有特点但舒服**——在简约的基础上加入精致的设计细节:编号色块小标题、荧光笔高亮、大号引号装饰、卡片式列表。保持大量留白和清晰的层次感,装饰元素有节制,不花哨。
41
+
42
+ ## 配色方案
43
+
44
+ - 主题色:`#3d7de0`(明亮蓝,用于编号色块、引用边框、高亮底色、关注引导文字等)
45
+ - 主题色浅:`#a8c8f0`(装饰圆点中色)
46
+ - 主题色最浅:`#d4e4f7`(装饰圆点浅色、大号引号颜色)
47
+ - 高亮底色:`#dbeafe`(荧光笔效果的底色)
48
+ - 正文色:`#3d3d3d`
49
+ - 标题色:`#1a1a1a`
50
+ - 引用/辅助文字色:`#777777`
51
+ - 次要信息色:`#aaaaaa`
52
+ - 淡次要信息色:`#b0b0b0`
53
+ - 卡片/引用块背景:`#f8f9fb`
54
+ - 细分隔线色:`#f0f0f0`
55
+
56
+ 如果文章主题明显偏向某个调性,可以微调主题色系(如暖色调用 `#e07d3d` 系),但要同步调整浅色和高亮色保持和谐。
57
+
58
+ ## 字体规范
59
+
60
+ 微信环境下字体由系统决定,不指定 font-family。
61
+
62
+ | 元素 | font-size | line-height | color | 其他 |
63
+ |------|-----------|-------------|-------|------|
64
+ | 公众号名(标题区顶部) | 13px | — | #b0b0b0 | letter-spacing: 3px |
65
+ | 文章大标题 | 24px | 1.5 | #1a1a1a | font-weight: bold; letter-spacing: 1px; 居中 |
66
+ | 作者与日期 | 14px | 1.6 | #aaaaaa | |
67
+ | 首段引言 | 19px | 2.0 | #555555 | 底部带细线分隔 |
68
+ | 正文段落 | 17px | 2.0 | #3d3d3d | text-align: justify |
69
+ | 小标题编号 | 13px | 1.8 | #ffffff | 蓝色背景色块内 |
70
+ | 小标题文字 | 20px | 1.5 | #1a1a1a | font-weight: bold |
71
+ | 引用文字 | 16px | 1.9 | #777777 | text-align: justify |
72
+ | 引号装饰 | 40px | 1 | #d4e4f7 | font-weight: bold |
73
+ | 列表项文字 | 17px | 1.8 | #3d3d3d | 卡片内 |
74
+ | 结尾金句 | 18px | 1.9 | #1a1a1a | font-weight: bold; letter-spacing: 0.5px; 居中 |
75
+ | 金句副文字 | 14px | — | #aaaaaa | |
76
+ | END 文字 | 14px | — | #aaaaaa | letter-spacing: 2px |
77
+ | 关注引导 | 17px | — | #3d7de0 | font-weight: bold |
78
+
79
+ ## HTML 结构模板
80
+
81
+ 生成的 HTML 是一个完整网页(用于 artifact 预览),内部文章区域全部用 section + inline style(用于复制到微信)。
82
+
83
+ ```html
84
+ <!DOCTYPE html>
85
+ <html>
86
+ <head>
87
+ <meta charset="UTF-8">
88
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
89
+ <title>公众号文章预览</title>
90
+ <style>
91
+ /* 仅用于预览容器,不会被复制到微信 */
92
+ * { margin: 0; padding: 0; box-sizing: border-box; }
93
+ body {
94
+ background-color: #f0f0f0;
95
+ display: flex;
96
+ flex-direction: column;
97
+ align-items: center;
98
+ padding: 20px 0;
99
+ }
100
+ .preview-wrapper {
101
+ max-width: 580px;
102
+ width: 100%;
103
+ background: #ffffff;
104
+ box-shadow: 0 1px 4px rgba(0,0,0,0.08);
105
+ }
106
+ .copy-tip {
107
+ text-align: center;
108
+ padding: 12px 16px;
109
+ background-color: #2C2C2C;
110
+ color: #ffffff;
111
+ font-size: 13px;
112
+ line-height: 1.5;
113
+ position: sticky;
114
+ top: 0;
115
+ z-index: 100;
116
+ letter-spacing: 0.5px;
117
+ }
118
+ </style>
119
+ </head>
120
+ <body>
121
+ <div class="preview-wrapper">
122
+ <div class="copy-tip">💡 选中下方文章内容 → 复制 → 粘贴到微信公众号编辑器</div>
123
+ <!-- ====== 文章内容开始(复制这部分) ====== -->
124
+ <section style="padding: 0; background-color: #ffffff;">
125
+
126
+ {{标题区域}}
127
+ {{首段引言}}
128
+ {{正文内容}}
129
+ {{文末装饰}}
130
+ {{关注引导卡片}}
131
+
132
+ </section>
133
+ <!-- ====== 文章内容结束 ====== -->
134
+ </div>
135
+ </body>
136
+ </html>
137
+ ```
138
+
139
+ ## 各区域的具体 HTML
140
+
141
+ ### 1. 标题区域
142
+
143
+ 渐变背景 + 公众号名 + 标题 + 三圆点装饰 + 作者日期。
144
+
145
+ 公众号名固定「薛衡 HENRY」(大写英文,letter-spacing 拉开),作者名「薛衡」,日期取当天。
146
+
147
+ ```html
148
+ <section style="background: linear-gradient(180deg, #f0f4f8 0%, #ffffff 100%); padding: 40px 24px 30px 24px; text-align: center;">
149
+ <!-- 公众号名 -->
150
+ <section style="font-size: 13px; color: #b0b0b0; letter-spacing: 3px; margin-bottom: 20px;">
151
+ 薛衡 HENRY
152
+ </section>
153
+ <!-- 标题 -->
154
+ <section style="font-size: 24px; font-weight: bold; color: #1a1a1a; line-height: 1.5; letter-spacing: 1px; padding: 0 10px;">
155
+ {{文章标题}}
156
+ </section>
157
+ <!-- 三圆点装饰 -->
158
+ <section style="margin: 20px auto 0 auto; text-align: center;">
159
+ <span style="display: inline-block; width: 6px; height: 6px; background-color: #3d7de0; margin: 0 4px;"></span>
160
+ <span style="display: inline-block; width: 6px; height: 6px; background-color: #a8c8f0; margin: 0 4px;"></span>
161
+ <span style="display: inline-block; width: 6px; height: 6px; background-color: #d4e4f7; margin: 0 4px;"></span>
162
+ </section>
163
+ <!-- 作者与日期 -->
164
+ <section style="margin-top: 16px; font-size: 14px; color: #aaaaaa; line-height: 1.6;">
165
+ 薛衡 · {{YYYY年M月D日}}
166
+ </section>
167
+ </section>
168
+ ```
169
+
170
+ ### 2. 首段引言
171
+
172
+ 文章的第一个段落,字号稍大,底部细线分隔,营造"引言"的感觉。
173
+
174
+ ```html
175
+ <section style="font-size: 19px; color: #555555; line-height: 2.0; margin: 30px 24px 25px 24px; padding: 20px 0; border-bottom: 1px solid #f0f0f0;">
176
+ {{第一段内容}}
177
+ </section>
178
+ ```
179
+
180
+ 注意:只有第一段用这个样式。后续段落用普通正文样式。
181
+
182
+ ### 3. 正文内容
183
+
184
+ 逐段转换 Markdown 内容。
185
+
186
+ **普通段落:**
187
+ ```html
188
+ <section style="font-size: 17px; color: #3d3d3d; line-height: 2.0; margin-bottom: 20px; padding: 0 24px; text-align: justify;">
189
+ 段落文字...
190
+ </section>
191
+ ```
192
+
193
+ **加粗重点文字(荧光笔高亮):**
194
+
195
+ 对应 Markdown 中的 `**加粗文字**`,使用蓝色底色高亮效果:
196
+ ```html
197
+ <strong style="color: #1a1a1a; background: linear-gradient(180deg, transparent 60%, #dbeafe 60%); padding: 0 2px;">重点文字</strong>
198
+ ```
199
+
200
+ **小标题(对应 ## 或 ###):**
201
+
202
+ 使用编号色块 + 标题文字的组合。编号从 01 开始递增。
203
+
204
+ ```html
205
+ <section style="margin: 35px 24px 18px 24px; display: flex; display: -webkit-flex;">
206
+ <section style="display: inline-block; background-color: #3d7de0; color: #ffffff; font-size: 13px; padding: 4px 10px; font-weight: bold; letter-spacing: 1px; margin-right: 12px; line-height: 1.8; white-space: nowrap;">
207
+ 01
208
+ </section>
209
+ <section style="display: inline-block; font-size: 20px; font-weight: bold; color: #1a1a1a; line-height: 1.5; padding-top: 1px;">
210
+ 小标题文字
211
+ </section>
212
+ </section>
213
+ ```
214
+
215
+ **引用块(对应 > 内容):**
216
+
217
+ 大号引号装饰 + 浅灰背景 + 蓝色左边框。
218
+
219
+ ```html
220
+ <section style="margin: 20px 24px 25px 24px; padding: 25px 24px 20px 24px; background-color: #f8f9fb; border-left: 3px solid #3d7de0;">
221
+ <section style="font-size: 40px; color: #d4e4f7; line-height: 1; margin-bottom: 8px; font-weight: bold;">
222
+ "
223
+ </section>
224
+ <section style="font-size: 16px; color: #777777; line-height: 1.9; text-align: justify;">
225
+ 引用内容...
226
+ </section>
227
+ </section>
228
+ ```
229
+
230
+ **列表项(对应 - 或 * 列表):**
231
+
232
+ 每项独立一个浅灰卡片,带蓝色编号。编号用带圈数字 ①②③ 或普通数字。
233
+
234
+ ```html
235
+ <section style="margin: 10px 24px 10px 24px; padding: 14px 18px; background-color: #f8f9fb; font-size: 17px; color: #3d3d3d; line-height: 1.8;">
236
+ <span style="color: #3d7de0; font-weight: bold; margin-right: 8px;">①</span>列表项内容
237
+ </section>
238
+ ```
239
+
240
+ 最后一个列表项 margin-bottom 改为 20px。
241
+
242
+ **结尾金句(文章最后一段如果是总结性的有力句子):**
243
+
244
+ 居中显示,上下细线框住。可选——如果文章末尾没有明显的金句,就用普通段落结尾。
245
+
246
+ ```html
247
+ <section style="margin: 30px 24px 20px 24px; padding: 20px; text-align: center; border-top: 1px solid #f0f0f0; border-bottom: 1px solid #f0f0f0;">
248
+ <section style="font-size: 18px; color: #1a1a1a; line-height: 1.9; font-weight: bold; letter-spacing: 0.5px;">
249
+ 金句内容,如果太长可以用 <br> 手动换行
250
+ </section>
251
+ <section style="font-size: 14px; color: #aaaaaa; margin-top: 8px;">
252
+ 可选的补充说明
253
+ </section>
254
+ </section>
255
+ ```
256
+
257
+ **正文中的分隔(对应 Markdown 的 ---):**
258
+
259
+ 用三圆点装饰代替线条:
260
+ ```html
261
+ <section style="text-align: center; margin: 30px 0;">
262
+ <span style="display: inline-block; width: 6px; height: 6px; background-color: #3d7de0; margin: 0 4px;"></span>
263
+ <span style="display: inline-block; width: 6px; height: 6px; background-color: #a8c8f0; margin: 0 4px;"></span>
264
+ <span style="display: inline-block; width: 6px; height: 6px; background-color: #d4e4f7; margin: 0 4px;"></span>
265
+ </section>
266
+ ```
267
+
268
+ ### 4. 文末装饰
269
+
270
+ 同上三圆点,margin 略大:
271
+ ```html
272
+ <section style="text-align: center; margin: 35px 0 30px 0;">
273
+ <span style="display: inline-block; width: 6px; height: 6px; background-color: #3d7de0; margin: 0 4px;"></span>
274
+ <span style="display: inline-block; width: 6px; height: 6px; background-color: #a8c8f0; margin: 0 4px;"></span>
275
+ <span style="display: inline-block; width: 6px; height: 6px; background-color: #d4e4f7; margin: 0 4px;"></span>
276
+ </section>
277
+ ```
278
+
279
+ ### 5. 关注引导卡片
280
+
281
+ ```html
282
+ <section style="margin: 0 24px 40px 24px; padding: 24px; background-color: #f8f9fb; text-align: center;">
283
+ <section style="font-size: 14px; color: #aaaaaa; letter-spacing: 2px; margin-bottom: 10px;">
284
+ — END —
285
+ </section>
286
+ <section style="font-size: 15px; color: #777777; line-height: 1.8;">
287
+ 感谢阅读,如果觉得有启发
288
+ </section>
289
+ <section style="font-size: 17px; color: #3d7de0; font-weight: bold; margin-top: 6px; letter-spacing: 0.5px;">
290
+ 欢迎关注「薛衡 Henry」
291
+ </section>
292
+ </section>
293
+ ```
294
+
295
+ ## Markdown → HTML 转换规则
296
+
297
+ 解析微信公众号版的 Markdown 内容时:
298
+
299
+ 1. `### 标题:XXX` → 提取 XXX 作为文章大标题
300
+ 2. `## 小标题` 或 `### 小标题`(非"标题:"和"配图 Prompt") → 编号色块小标题,编号从 01 递增
301
+ 3. 文章第一个段落 → 首段引言样式(17px,底部细线)
302
+ 4. `> 引用内容` → 大号引号引用块
303
+ 5. `**加粗**` → 荧光笔高亮 `<strong>` 标签
304
+ 6. `*斜体*` → `<em>斜体</em>`
305
+ 7. `---` → 三圆点装饰分隔
306
+ 8. `- 列表项` 或 `* 列表项` → 卡片式列表,带 ①②③ 编号
307
+ 9. 有序列表 `1. 内容` → 同上卡片式,编号直接用数字
308
+ 10. `![alt](url)` → `<img>` 标签,提醒用户需替换为微信素材库链接
309
+ 11. 空行分隔的连续文字 → 独立段落
310
+ 12. 段落内的换行 → `<br>`
311
+ 13. 文章末尾如果有一句明显的总结性金句(通常加粗),可以使用结尾金句样式
312
+
313
+ ## 判断结尾金句
314
+
315
+ 如果文章最后一个段落满足以下条件之一,使用结尾金句样式:
316
+ - 整段加粗(`**整段都加粗了**`)
317
+ - 是一句简短有力的总结(通常不超过两行)
318
+ - 带有明显的观点输出或情感收束
319
+
320
+ 如果最后一段是普通的收尾叙述,就用普通段落样式,不强制使用金句样式。
321
+
322
+ ## 重要提醒
323
+
324
+ - **绝对不要修改文章内容**——只做排版,一个字都不改
325
+ - **日期自动生成**——取当天日期
326
+ - **图片提醒**——如果原文有图片链接,保留 img 标签但提醒用户需要手动上传到微信素材库
327
+ - **编号连续性**——小标题的编号(01、02、03...)要全文连续递增
328
+ - **列表编号**——无序列表统一用 ①②③,有序列表用原文的数字
329
+ - **padding 统一**——正文区域左右 padding 统一为 24px,保持对齐
330
+ - **不要过度使用金句样式**——一篇文章最多一处,通常在结尾
@@ -0,0 +1,146 @@
1
+ # X 平台内容格式指南
2
+
3
+ ## 目的
4
+
5
+ 将微信公众号版的完整内容转换为适合 X 平台的格式。根据内容长度分两种输出:
6
+
7
+ 1. **X Article(长文)**:Markdown 格式,支持标题、加粗、斜体、列表
8
+ 2. **X 推文/Thread**:纯文本格式,用 Unicode 粗体模拟加粗效果
9
+
10
+ ---
11
+
12
+ ## 一、X Article 长文格式(Markdown)
13
+
14
+ ### 适用场景
15
+
16
+ 内容较长(>500 字),有结构化小标题,适合发布为 X Article。
17
+
18
+ ### 格式规范
19
+
20
+ X Article 编辑器原生支持 Markdown 渲染,包括:
21
+ - `## 小标题`(H2 标题,加粗加大)
22
+ - `**加粗文字**`
23
+ - `*斜体文字*`
24
+ - `> 引用块`
25
+ - `- 无序列表`
26
+ - `1. 有序列表`
27
+ - 换行(空行分段)
28
+
29
+ ### Markdown 模板
30
+
31
+ ```markdown
32
+ # {{文章标题}}
33
+
34
+ *薛衡 · {{Mon DD, YYYY}}*
35
+
36
+ ---
37
+
38
+ *{{导语:从文章提炼 1-2 句核心观点,斜体}}*
39
+
40
+ ---
41
+
42
+ ## {{小标题1}}
43
+
44
+ 正文段落...
45
+
46
+ **重点内容用加粗标记。**
47
+
48
+ > 引用内容放在引用块中
49
+
50
+ ## {{小标题2}}
51
+
52
+ 正文段落...
53
+
54
+ ---
55
+
56
+ **{{结尾金句}}**
57
+
58
+ @薛衡Henry
59
+ ```
60
+
61
+ ### 内容转换规则
62
+
63
+ 1. 标题直接使用公众号版标题
64
+ 2. 从文章中提炼 1-2 句导语,用斜体标记
65
+ 3. 公众号版的编号色块小标题 → `## 小标题`
66
+ 4. 公众号版的加粗/荧光笔 → `**加粗文字**`
67
+ 5. 公众号版的引用块 → `> 引用内容`
68
+ 6. 公众号版的结尾金句 → 加粗居中
69
+ 7. 结尾互动语改为适合 X 平台的表达
70
+ 8. 不使用编号色块(01、02),用纯 Markdown 标题
71
+
72
+ ### 输出
73
+
74
+ - 文件格式:`.md`
75
+ - 文件名:`[主题关键词]_X_Article.md`
76
+ - 保存到:`/mnt/user-data/outputs/`
77
+
78
+ ---
79
+
80
+ ## 二、X 推文 / Thread 格式(纯文本)
81
+
82
+ ### 适用场景
83
+
84
+ 核心内容可以在 280 字符(约 140 个中文字)以内表达 → 单条推文。
85
+ 内容较长或有多个要点 → Thread(连续推文)。
86
+
87
+ ### 单条推文格式
88
+
89
+ ```
90
+ {{推文内容,≤280字符}}
91
+
92
+ @薛衡Henry
93
+ ```
94
+
95
+ ### Thread 格式
96
+
97
+ ```
98
+ 1/N {{Thread 标题或 hook}}
99
+
100
+ {{第一条内容,抓人}}
101
+
102
+ ---
103
+
104
+ 2/N {{要点一}}
105
+
106
+ {{展开说明}}
107
+
108
+ ---
109
+
110
+ ...
111
+
112
+ N/N {{总结或行动号召}}
113
+
114
+ @薛衡Henry
115
+ ```
116
+
117
+ ### 加粗效果
118
+
119
+ X 免费用户不支持原生加粗。如需强调,使用以下方式:
120
+ - 用「」或【】包裹关键词
121
+ - 或使用 Unicode 粗体字符(如 𝗔𝗕𝗖),但中文无法 Unicode 加粗,所以中文用符号强调
122
+
123
+ ### 内容转换规则
124
+
125
+ 1. 提炼文章核心观点,大幅压缩
126
+ 2. 第一条推文必须是 hook,让人想往下看
127
+ 3. 每条推文独立成段,有完整意思
128
+ 4. 最后一条总结或呼吁行动
129
+ 5. 简洁有力,每句话都要有信息量
130
+
131
+ ### 输出
132
+
133
+ - 文件格式:`.txt`
134
+ - 文件名:`[主题关键词]_X_推文.txt`
135
+ - 保存到:`/mnt/user-data/outputs/`
136
+
137
+ ---
138
+
139
+ ## 重要提醒
140
+
141
+ - **内容与公众号版一致**——只改格式和风格,不改核心文字
142
+ - **日期格式**:英文月份缩写 + 日 + 年,如 Mar 28, 2026
143
+ - **署名格式**:@薛衡Henry
144
+ - **X Article 用 Markdown**,不用 HTML
145
+ - **推文用纯文本**,不用 HTML
146
+ - **整体风格**:比公众号更简洁、更直接,减少修饰性文字
@@ -0,0 +1,98 @@
1
+ # 小红书笔记格式指南
2
+
3
+ ## 目的
4
+
5
+ 将微信公众号版的完整内容转换为适合小红书笔记的纯文本格式。用户可以直接复制粘贴到小红书编辑器中发布。
6
+
7
+ ## 设计风格
8
+
9
+ **温暖、干净、手机优先**——模拟小红书 App 的阅读体验。段落简短,行距宽松,适合拇指滑动阅读。不使用 emoji,保持文字本身的质感。
10
+
11
+ ## 格式规范
12
+
13
+ 小红书笔记编辑器支持的格式:
14
+ - **加粗文字**(编辑器内选中文字 → 点击"B"按钮)
15
+ - 换行分段
16
+ - 表情符号(但本指南不使用)
17
+
18
+ 不支持的格式:
19
+ - HTML 标签
20
+ - Markdown 语法
21
+ - 自定义字体/字号
22
+ - 标题层级(无 H1/H2)
23
+
24
+ ## 纯文本模板
25
+
26
+ ```
27
+ {{文章标题}}
28
+
29
+ 薛衡 · {{YYYY.MM.DD}}
30
+
31
+ ——————
32
+
33
+ {{导语或第一段,直接进入正文}}
34
+
35
+ 「{{小标题1}}」
36
+
37
+ 正文段落...
38
+
39
+ 重点内容用加粗标记(在小红书编辑器中手动加粗)。
40
+
41
+ 「{{小标题2}}」
42
+
43
+ 正文段落...
44
+
45
+ 引用内容可以用竖线标记:
46
+ |引用文字放在这里
47
+ |多行引用也可以
48
+
49
+ 「{{小标题3}}」
50
+
51
+ 正文段落...
52
+
53
+ ——————
54
+
55
+ {{结尾金句}}
56
+
57
+ 如果你对此有任何感想,欢迎在评论区聊聊
58
+ ```
59
+
60
+ ## 格式标记说明
61
+
62
+ 由于小红书纯文本不支持 Markdown,使用以下约定标记需要加粗的文字:
63
+
64
+ - **小标题**:用「」包裹,如 `「这是小标题」`。粘贴到小红书后,选中小标题文字点"B"加粗
65
+ - **重点文字**:用 `**文字**` 标记(Markdown 风格)。粘贴后手动加粗这些文字,再删除 `**` 符号
66
+ - **引用**:用全角竖线 `|` 开头,视觉上模拟引用效果
67
+ - **分隔线**:用 `——————`(六个全角破折号)
68
+ - **不使用 emoji**
69
+ - **不使用话题标签**(标签由用户自己在小红书编辑器中添加)
70
+
71
+ ## 内容转换规则
72
+
73
+ 使用微信公众号版的完整内容,转换时:
74
+
75
+ 1. 标题直接使用公众号版标题
76
+ 2. 不需要导语区分——直接进入正文
77
+ 3. 公众号版的编号色块小标题 → 用「」包裹的文字
78
+ 4. 公众号版的加粗/荧光笔 → 用 `**文字**` 标记
79
+ 5. 公众号版的引用块 → 用 `|` 开头的引用行
80
+ 6. 公众号版的结尾金句 → 单独一行,用 `**` 标记
81
+ 7. 不使用编号(01、02...),小标题用「」即可
82
+ 8. 段落保持简短,每段 2-4 句
83
+
84
+ ## 输出
85
+
86
+ - 文件格式:`.txt`
87
+ - 文件名:`[主题关键词]_小红书.txt`
88
+ - 保存到:`/mnt/user-data/outputs/`
89
+
90
+ ## 重要提醒
91
+
92
+ - **内容与公众号版完全一致**——只改格式,不改文字
93
+ - **纯文本输出**——不使用 HTML
94
+ - **不使用 emoji**——保持文字质感
95
+ - **不使用话题标签**——由用户自行添加
96
+ - **日期格式**:YYYY.MM.DD,如 2026.03.28
97
+ - **段落简短**:每段 2-4 句,适合手机滑动阅读
98
+ - **加粗标记**:用 `**文字**` 在输出中标记,提示用户粘贴后手动加粗
@@ -0,0 +1,263 @@
1
+ ---
2
+ name: article-optimizer
3
+ description: "优化中文文章并生成适配微信公众号、X(推特)、小红书三个平台的版本,同时自动生成微信公众号精美排版 HTML、X Article 长文排版 HTML、小红书长文排版 HTML(均可直接复制粘贴到对应平台编辑器)。 当用户要求\"优化文章\"、\"改写文章\"、\"帮我润色\"、\"发公众号/小红书/推特\"、 \"把这篇文章改成适合社交媒体发布的版本\"、\"帮我生成多平台内容\"时触发此技能。 也适用于用户直接粘贴一篇文章并要求修改、改写、优化、或适配不同平台的情况。 当用户要求\"排版公众号文章\"、\"微信排版\"、\"公众号排版\"、\"格式化公众号\"、\"粘贴到公众号\"、\"X Article排版\"、\"小红书排版\"、\"小红书长文\"时也应触发此技能。 即使用户只提到其中一个平台,也应使用此技能,因为它包含完整的多平台适配逻辑和三平台排版功能。"
4
+ ---
5
+
6
+ # 文章优化技能 (Article Optimizer)
7
+
8
+ ## 概述
9
+
10
+ 将用户提供的中文文章优化为通俗易懂、逻辑通顺的版本,并分别生成适合微信公众号、X(推特)、小红书三个平台发布的内容。同时为每个平台版本提供创意配图的 AI 生图 prompt。
11
+
12
+ 最终输出为一个 Markdown 文件供用户下载。
13
+
14
+ ---
15
+
16
+ ## 工作流程
17
+
18
+ ### 第一步:分析原文
19
+
20
+ 收到用户文章后,先进行分析(不要输出分析过程,直接用于指导优化):
21
+
22
+ 1. **主题提炼**:文章的核心观点是什么?
23
+ 2. **受众判断**:文章面向什么样的读者?
24
+ 3. **风格识别**:原文是正式/学术/口语/叙事/议论?
25
+ 4. **问题诊断**:
26
+ - 是否有逻辑跳跃或断裂?
27
+ - 是否有晦涩难懂的表达?
28
+ - 是否有冗余或重复?
29
+ - 结构是否清晰?
30
+
31
+ ### 第二步:优化原文
32
+
33
+ 基于分析结果优化文章,遵循以下原则:
34
+
35
+ - **保留原意**:这是最高优先级。不改变作者的观点和立场
36
+ - **通俗易懂**:用更简单的词汇替换晦涩术语(必要时保留术语但加解释)
37
+ - **逻辑通顺**:确保段落之间有清晰的逻辑衔接
38
+ - **精简冗余**:删除重复表达,但不过度删减导致信息丢失
39
+ - **语感自然**:读起来像人写的,不像机器翻译或 AI 生成的
40
+ - **必要时调整结构**:如果原文的段落顺序不利于阅读体验或论点展开,可以重新编排章节顺序(例如将核心观点前置、将论据或案例后移),但调整后的结构必须仍然忠实于原文的所有内容,不遗漏、不添加
41
+
42
+ ### 第三步:标题创作(核心环节)
43
+
44
+ 标题是文章最重要的部分——决定了读者会不会点进来。必须在标题上花足够的心思。
45
+
46
+ #### 标题创作原则
47
+
48
+ 1. **制造信息缺口**:标题要让读者觉得"不点进去就亏了"。给出一半信息,留一半悬念。避免在标题中把结论说完——说完了就没人点了
49
+ 2. **要有逻辑性**:标题本身要是一个完整的、说得通的短句或短语,不能为了吸引眼球而语法混乱或拼凑关键词
50
+ 3. **要有画面感或冲突感**:好的标题让人脑子里能浮现出一个场景,或者感受到一种张力。比如"我爸退休后干的第一件事,是让 AI 帮他炒股"就比"AI 与投资"有画面得多
51
+ 4. **不要标题党**:吸引人和标题党的区别在于——点进去之后,内容是否兑现了标题的承诺。标题可以夸张,但不能欺骗
52
+ 5. **三个平台的标题必须各不相同**:不是改几个字,而是从不同角度切入,适配各平台用户的阅读心理
53
+
54
+ #### 标题创作方法
55
+
56
+ 每个平台至少构思 3 个备选标题,从中选出最好的一个。构思时可以从以下角度切入:
57
+
58
+ - **悬念型**:抛出一个让人好奇的问题或半句话("录了一小时才发现,声音全废了")
59
+ - **反差型**:利用身份、行为、结果之间的反差("60 岁的老股民,开始写代码了")
60
+ - **场景型**:用一个具体场景把人拉进去("口袋里的手机录了一路,打开一听全是杂音")
61
+ - **观点型**:直接亮出一个锐利的判断("搜索引擎正在变成上一代的产品")
62
+ - **共鸣型**:说出读者心里想说但没说出来的话("AI 迟早会像空气一样,没人再提它")
63
+
64
+ #### 各平台标题适配
65
+
66
+ - **微信公众号**:可以稍长(15-20 字),信息量大一些,适合叙事型或悬念型标题
67
+ - **X(推特)**:要短要锐(10-18 字),适合观点型或反差型,在信息流中一眼抓住人
68
+ - **小红书**:口语化、有温度(12-20 字),适合场景型或共鸣型,像朋友在跟你聊天
69
+
70
+ ### 第四步:生成三个平台版本
71
+
72
+ #### 1. 微信公众号版
73
+
74
+ - **标题**:遵循第三步的标题创作方法论,从备选中挑出最佳标题。15-20 字,信息量大,有悬念或叙事感
75
+ - **风格**:根据文章内容灵活调整——
76
+ - 严肃话题 → 正式但不生硬
77
+ - 生活/科技话题 → 轻松、有温度
78
+ - 观点类文章 → 有立场但不偏激
79
+ - **排版要求**:
80
+ - 段落短一些(手机阅读体验),每段 3-5 句为宜
81
+ - 适当使用小标题分隔章节
82
+ - 开头要有吸引力(金句、提问、场景描写等)
83
+ - 结尾可以设置互动引导(但不要生硬)
84
+ - **长度**:保持与原文相当,不需要大幅压缩
85
+
86
+ #### 2. X(推特)版
87
+
88
+ - **标题**:遵循第三步的标题创作方法论。10-18 字,短且锐利,适合信息流中一眼抓人
89
+ - **形式判断规则**:
90
+ - 如果优化后的核心内容能在 **280 字符**(约 140 个中文字)以内表达清楚 → 生成**单条推文**
91
+ - 如果内容较长或有多个要点 → 生成 **thread**(连续推文),每条推文标注序号如 1/5, 2/5...
92
+ - **风格**:
93
+ - 简洁有力,每句话都要有信息量
94
+ - 可以用更直接、更锐利的表达
95
+ - 适合碎片化阅读
96
+ - **Thread 规则**(如适用):
97
+ - 第一条是 hook,要抓人
98
+ - 每条推文独立成段,有完整意思
99
+ - 最后一条可以总结或呼吁行动
100
+
101
+ #### 3. 小红书版
102
+
103
+ - **标题**:遵循第三步的标题创作方法论。12-20 字,口语化、有温度,像朋友在聊天
104
+ - **风格**:
105
+ - 保持简洁,不使用 emoji 和话题标签
106
+ - 口语化但不幼稚
107
+ - 段落简短,适合手机滑动阅读
108
+ - 可以用「」强调关键词
109
+ - **结构**:
110
+ - 开头直接抛出核心观点或引发好奇
111
+ - 中间用简短段落展开
112
+ - 结尾一句话总结或引发思考
113
+ - **长度**:通常比公众号版短,控制在 300-800 字
114
+
115
+ ### 第五步:生成配图 Prompt
116
+
117
+ 为每个平台版本生成 **1 个配图的 AI 生图 prompt**,要求:
118
+
119
+ - **目标工具**:Midjourney(prompt 格式必须适配 Midjourney 语法)
120
+ - **语言**:英文
121
+ - **Midjourney 格式规范**:
122
+ - 不要使用完整的英文句子,使用逗号分隔的短语/关键词风格
123
+ - 在 prompt 末尾附加 Midjourney 参数,如 `--ar 16:9`(微信公众号封面)、`--ar 1:1`(X/推特)、`--ar 3:4`(小红书)
124
+ - 可酌情添加 `--style raw`、`--s` (stylize)、`--c` (chaos) 等参数
125
+ - 将最重要的画面描述放在 prompt 开头(Midjourney 对前置词权重更高)
126
+ - **与文章内容紧密相关**:配图要能反映文章的核心主题或情感
127
+ - **有创意**:不要太直白(比如文章讲 AI 就画个机器人),要有隐喻、意象或独特视角
128
+ - **风格指引**:包含具体的画风关键词(photography, illustration, watercolor, cyberpunk, minimalist 等,视文章内容而定)
129
+ - **构图和细节**:包含构图、色调、光影等关键词
130
+ - **格式**:每个 prompt 控制在 30-80 词(英文短语),加上末尾参数
131
+
132
+ 三个平台的配图 prompt 应该各不相同,反映各平台的视觉风格差异:
133
+ - 微信公众号:可以更正式、有质感(如杂志封面风格)
134
+ - X:更抢眼、视觉冲击力强(信息流中要脱颖而出)
135
+ - 小红书:更生活化、有审美感(符合小红书的视觉调性)
136
+
137
+ ### 第六步:生成微信公众号排版 HTML
138
+
139
+ 完成前五步后,额外生成一个排版精美的 HTML 文件,让用户可以直接复制粘贴到微信公众号编辑器。
140
+
141
+ **操作方法**:读取 `references/wechat-format-guide.md`,按照其中的排版规范、HTML 模板和微信兼容性规则,将微信公众号版的标题 + 正文转换为全 inline style 的 HTML 文件。
142
+
143
+ **关键要求**:
144
+ - 只做排版,不改任何文字内容
145
+ - 所有 CSS 必须写成 inline style(微信不支持 class/id/style 标签)
146
+ - 作者名固定「薛衡」,公众号名固定「薛衡 Henry」,日期取当天
147
+ - HTML 文件保存到 `/mnt/user-data/outputs/[主题关键词]_公众号排版.html`
148
+
149
+ ### 第七步:生成 X 平台内容
150
+
151
+ 基于微信公众号版的完整内容(标题 + 正文),生成两个 X 平台格式的文件。
152
+
153
+ **操作方法**:读取 `references/x-article-format-guide.md`,按照其中的格式规范转换。
154
+
155
+ **输出 1 — X Article(Markdown)**:
156
+ - 使用微信公众号版的完整内容,不做删减
157
+ - 输出 Markdown 格式(`## 小标题`、`**加粗**`、`> 引用`)
158
+ - 包含导语(Lede)、正文、结尾金句
159
+ - 作者署名 @薛衡Henry,日期英文格式
160
+ - 保存为 `/mnt/user-data/outputs/[主题关键词]_X_Article.md`
161
+
162
+ **输出 2 — X 推文/Thread(纯文本)**:
163
+ - 大幅压缩核心观点
164
+ - 短内容(≤280字符) → 单条推文;长内容 → Thread(1/N 格式)
165
+ - 保存为 `/mnt/user-data/outputs/[主题关键词]_X_推文.txt`
166
+
167
+ ### 第八步:生成小红书笔记内容
168
+
169
+ 基于微信公众号版的完整内容(标题 + 正文),生成适合小红书的纯文本文件。
170
+
171
+ **操作方法**:读取 `references/xiaohongshu-format-guide.md`,按照其中的格式规范转换。
172
+
173
+ **关键要求**:
174
+ - 使用微信公众号版的完整内容,不做删减
175
+ - 输出纯文本格式(不是 HTML)
176
+ - 小标题用「」包裹,需要加粗的文字用 `**文字**` 标记
177
+ - 引用用全角竖线 `|` 开头
178
+ - 风格温暖、口语化,段落简短,适合手机滑动阅读
179
+ - 不使用 emoji,不使用话题标签
180
+ - 保存为 `/mnt/user-data/outputs/[主题关键词]_小红书.txt`
181
+
182
+ ---
183
+
184
+ ## 输出格式
185
+
186
+ 生成一个 Markdown 文件,结构如下:
187
+
188
+ ```markdown
189
+ # 文章优化结果
190
+
191
+ ## 原文分析摘要
192
+
193
+ > 简要说明做了哪些主要优化(2-3 句话)
194
+
195
+ ---
196
+
197
+ ## 一、微信公众号版
198
+
199
+ ### 标题:[标题,不超过20字]
200
+
201
+ [正文内容]
202
+
203
+ ### 配图 Prompt
204
+
205
+ > [英文 AI 生图 prompt]
206
+
207
+ ---
208
+
209
+ ## 二、X(推特)版
210
+
211
+ ### 标题/引导语:[标题,不超过20字]
212
+
213
+ [正文内容 — 单条或 thread 格式]
214
+
215
+ ### 配图 Prompt
216
+
217
+ > [英文 AI 生图 prompt]
218
+
219
+ ---
220
+
221
+ ## 三、小红书版
222
+
223
+ ### 标题:[标题,不超过20字]
224
+
225
+ [正文内容]
226
+
227
+ ### 配图 Prompt
228
+
229
+ > [英文 AI 生图 prompt]
230
+ ```
231
+
232
+ ---
233
+
234
+ ## 输出流程
235
+
236
+ 1. 先在对话中简要告诉用户做了哪些关键优化(1-2 句话即可)
237
+ 2. 生成 Markdown 文件保存到 `/mnt/user-data/outputs/` 目录
238
+ 3. 生成微信公众号排版 HTML 文件(参照 `references/wechat-format-guide.md`)
239
+ 4. 生成 X Article 排版 HTML 文件(参照 `references/x-article-format-guide.md`)
240
+ 5. 生成小红书长文排版 HTML 文件(参照 `references/xiaohongshu-format-guide.md`)
241
+ 6. 使用 `present_files` 工具将所有文件提供给用户下载——公众号 HTML 排第一位,X Article 第二,X 推文第三,小红书第四,Markdown 总览最后
242
+ 7. 文件命名格式:
243
+ - Markdown 总览:`[主题关键词]_优化版.md`
244
+ - 公众号 HTML:`[主题关键词]_公众号排版.html`
245
+ - X Article:`[主题关键词]_X_Article.md`(Markdown 格式)
246
+ - X 推文:`[主题关键词]_X_推文.txt`(纯文本)
247
+ - 小红书:`[主题关键词]_小红书.txt`(纯文本)
248
+ 8. 简要告知用户:
249
+ - 公众号:浏览器打开 HTML → 选中内容复制 → 粘贴到公众号编辑器
250
+ - X Article:复制 Markdown 内容 → 粘贴到 X Article 编辑器(支持 Markdown 渲染)
251
+ - X 推文:直接复制纯文本 → 粘贴发布
252
+ - 小红书:复制纯文本 → 粘贴到小红书编辑器 → 手动加粗 `**` 标记的文字
253
+
254
+ ---
255
+
256
+ ## 注意事项
257
+
258
+ - **英文词汇加中文注释**:文中出现的英文单词或短语(如 thread、hook、roadmap 等)需要在后面用括号附上简短的中文解释,例如"thread(连续推文)"。但英文产品名称、品牌名、专有名词(如 ChatGPT、Midjourney、OpenClaw、GitHub、Linux 等)不需要加注释,保持原样即可
259
+ - **不要过度改写**:用户是原作者,要尊重原文的个人风格和观点
260
+ - **不要添加原文没有的观点**:可以补充衔接语,但不要添加新论点
261
+ - **不要使用 AI 味重的表达**:避免"在当今社会"、"不言而喻"、"值得注意的是"等套话
262
+ - **标题是最高优先级**:标题决定了有没有人会看这篇文章。必须严格遵循第三步的标题创作方法论,每个平台至少构思 3 个备选,选出最有吸引力且逻辑通顺的一个。三个平台的标题必须从不同角度切入
263
+ - **配图 prompt 要具体**:不要写泛泛的描述,要有具体的画面感和创意方向
package/bin/install.js ADDED
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env node
2
+
3
+ const fs = require('fs');
4
+ const path = require('path');
5
+ const os = require('os');
6
+
7
+ const pkgDir = path.join(__dirname, '..');
8
+ const claudeSkillsDir = path.join(os.homedir(), '.claude', 'skills');
9
+
10
+ function copyDir(src, dest) {
11
+ fs.mkdirSync(dest, { recursive: true });
12
+ for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
13
+ const srcPath = path.join(src, entry.name);
14
+ const destPath = path.join(dest, entry.name);
15
+ if (entry.isDirectory()) {
16
+ copyDir(srcPath, destPath);
17
+ } else {
18
+ fs.copyFileSync(srcPath, destPath);
19
+ }
20
+ }
21
+ }
22
+
23
+ // 找出所有包含 skill.md 的技能目录
24
+ const SKIP = new Set(['.git', '.claude-plugin', 'bin', 'node_modules']);
25
+ const skillDirs = fs.readdirSync(pkgDir, { withFileTypes: true })
26
+ .filter(d => d.isDirectory() && !SKIP.has(d.name))
27
+ .filter(d =>
28
+ fs.existsSync(path.join(pkgDir, d.name, 'skill.md')) ||
29
+ fs.existsSync(path.join(pkgDir, d.name, 'SKILL.md'))
30
+ );
31
+
32
+ if (skillDirs.length === 0) {
33
+ console.log('No skills found to install.');
34
+ process.exit(0);
35
+ }
36
+
37
+ console.log(`\nInstalling ${skillDirs.length} skill(s) to ${claudeSkillsDir}\n`);
38
+
39
+ for (const dir of skillDirs) {
40
+ const src = path.join(pkgDir, dir.name);
41
+ const dest = path.join(claudeSkillsDir, dir.name);
42
+ copyDir(src, dest);
43
+ console.log(` ✓ ${dir.name}`);
44
+ }
45
+
46
+ console.log('\nDone! Restart Claude Code to activate the skills.');
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "henry-ai-skills",
3
+ "version": "1.0.0",
4
+ "description": "Henry 的 AI 技能集合 · Claude Code 插件",
5
+ "bin": {
6
+ "henry-ai-skills": "./bin/install.js"
7
+ },
8
+ "scripts": {
9
+ "postinstall": "node ./bin/install.js"
10
+ },
11
+ "files": [
12
+ "bin/",
13
+ "article-optimizer/",
14
+ ".claude-plugin/"
15
+ ],
16
+ "keywords": [
17
+ "claude",
18
+ "claude-code",
19
+ "ai-skills",
20
+ "skill"
21
+ ],
22
+ "author": "Henry Xue",
23
+ "license": "MIT",
24
+ "repository": {
25
+ "type": "git",
26
+ "url": "https://github.com/findhappyman/ai-skills.git"
27
+ }
28
+ }