Add WeChat writer and moments poster skills with ZIP bundle

This commit is contained in:
2026-09-26 15:47:38 +08:00
commit d6864fd7a7
6 changed files with 363 additions and 0 deletions
+14
View File
@@ -0,0 +1,14 @@
# Wechat Friend Circle Writer
包含两个微信相关 Skill,保留原始目录和文件内容。
- `wechat-article-writer/`:公众号文章写作流程。
- `wechat-moments-poster/`:微信朋友圈自动发送操作说明、JSON 动作脚本及评估用例。
## 下载
可直接下载 [wechat-skills.zip](./wechat-skills.zip),解压后得到上述两个文件夹。
## 依赖说明
`wechat-moments-poster` 引用的外部项目 `scripts/launcher.py` 不在原始文件夹中,因此本仓库未包含该执行器;使用前请按对应 SKILL.md 配置外部依赖。
+62
View File
@@ -0,0 +1,62 @@
---
name: wechat-article-writer
description: 公众号文章自动化写作流程。支持资料搜索、文章撰写、爆款标题生成、排版优化。当用户提到写公众号、微信文章、自媒体写作、爆款文章、内容创作时使用此 skill。
---
# 公众号文章写作流程
4 步完成高质量公众号文章:搜索资料 → 撰写文章 → 生成标题 → 排版优化
## Step 1: 搜索资料
使用 Search 工具搜索主题相关资料:
```
搜索要求:
1. 并行搜索多个来源(官方文档、X/Twitter、Reddit、技术论坛)
2. 优先获取最新资料(当月/当季)
3. 可启动多个并行 Task 加速搜索
4. 深度总结搜索结果
```
## Step 2: 撰写文章
**必须先读取用户的 AGENTS.md 获取写作风格**
撰写要求:
- 1000-1500 字
- 故事化开头,带情感色彩(兴奋/焦虑/好奇)
- 准备 2-3 个备选标题
- 结构:效果展示 → 问题描述 → 步骤教学 → 升华总结
- 遵循 AGENTS.md 中定义的写作风格和结尾语
## Step 3: 生成标题
生成 5 个爆款标题,特点:
- **痛点明确**:直击读者痛处("还在手动...")
- **数字吸引**:具体数字更有说服力("3分钟"、"5个技巧")
- **结果导向**:承诺具体收益("效率暴涨10倍")
- **情绪调动**:惊、神技、秘籍等词汇
- **悬念设置**:引发好奇心
## Step 4: 排版优化
优化建议:
1. **段落结构**:每段 3-5 行,重要数据单独成段加粗
2. **配图位置**:标题下方封面图、步骤后效果图、结尾总结图
3. **代码块**:前后留白,语法高亮
4. **金句**:单独成段,增强记忆点
## 示例
用户请求:
```
帮我写一篇关于 OpenCode 使用技巧的公众号文章
```
执行流程:
1. 搜索 OpenCode 最新功能和使用技巧
2. 读取 AGENTS.md 获取写作风格
3. 撰写 1200 字左右的教程文章
4. 生成 5 个爆款标题供选择
5. 提供排版和配图建议
+54
View File
@@ -0,0 +1,54 @@
---
name: wechat-moments-poster
description: >
微信朋友圈自动发送 — 当用户想要自动发朋友圈、需要 Claude 帮忙操作电脑发朋友圈时使用此 skill。
触发关键词:"自动发朋友圈"、"发朋友圈"、"帮我发朋友圈"、"发一条朋友圈"、"朋友圈自动发送"。
此 skill 会读取 JSON 动作脚本,调用项目中的自动化启动器执行鼠标点击和文字输入操作,
支持在运行时注入自定义文案(通过 --text 参数替换 text_input 节点的内容),
完成后返回成功/失败信号。
---
# 微信朋友圈自动发送
当用户需要自动发送朋友圈时,调用项目中的 `scripts/launcher.py` 脚本,读取 JSON 动作脚本并执行自动化操作。
## 绑定脚本
此 skill 内置了 JSON 动作脚本,路径相对于 skill 根目录:
- `scripts/wechat-moments.json` — 朋友圈单图发送动作脚本(包含激活微信→全屏→点击朋友圈→输入文案→发送等步骤)
- 项目 `scripts/launcher.py` — JSON 点击脚本启动器
## 前置条件
- 项目目录下存在 `scripts/launcher.py`
- 已安装依赖:`pip install pyautogui pyperclip`
- 系统设置 > 隐私与安全性 > 辅助功能 中已允许 Terminal 运行
## 工作流程
### Step 1: 确定朋友圈文案
如果用户已提供文案,直接使用。如果用户只说"发朋友圈"但未指定内容,先用 `moments-writer` skill(朋友圈生成器)生成一篇文案,或询问用户想发什么。
### Step 2: 执行自动化(带文案注入)
```bash
python3 <project>/scripts/launcher.py <skill>/scripts/wechat-moments.json --text "<朋友圈文案>" -i 1.0
```
- `<project>` 为定位小助手项目根目录
- `<skill>` 为 skill 根目录
- `--text` 参数会将 JSON 中所有 `text_input` 节点的 `buttonName` 替换为指定的文案
- `-i 1.0` 每步间隔 1 秒
### Step 3: 返回执行结果
- 全部成功 → 告知用户"朋友圈发送完成"
- 有失败 → 告知用户失败步骤详情
## 注意事项
- 执行期间会接管鼠标和键盘,用户不应操作电脑
- 按 Ctrl+C 可中断执行
- 也可先用 `--dry` 预览:加上 `--dry` 参数,不实际点击
- `--text` 参数是通用的——任何 JSON 中的 text_input 节点都会被替换,不限于朋友圈场景
+17
View File
@@ -0,0 +1,17 @@
{
"skill_name": "wechat-moments-poster",
"evals": [
{
"id": 1,
"prompt": "帮我发一条朋友圈,内容我已经准备好了,JSON 脚本在 scripts/wechat-moments.json",
"expected_output": "成功调用 launcher.py 执行脚本,返回成功信号",
"files": []
},
{
"id": 2,
"prompt": "自动发朋友圈,用 scripts/my-moments.json 这个脚本",
"expected_output": "成功调用 launcher.py 执行指定路径的 JSON 脚本,返回执行结果",
"files": []
}
]
}
@@ -0,0 +1,216 @@
{
"version": 2,
"exportTime": "2026-05-09T17:32:56.339Z",
"order": [
{
"id": "1fa6b5e2-da2b-4605-a6a3-5b9690cea8f8",
"imageId": "window",
"filePath": "",
"fileName": "激活窗口",
"description": "请输入要激活的窗口名",
"buttonName": "微信",
"bbox": [
0,
0,
0,
0
],
"type": "activate_window"
},
{
"id": "702e4ec8-1bcc-4e84-b1ec-7848e5e8225f",
"imageId": "window",
"filePath": "",
"fileName": "窗口最大化",
"description": "最大化当前窗口",
"buttonName": "最大化窗口",
"bbox": [
0,
0,
0,
0
],
"type": "maximize_window"
},
{
"id": "901d078b-4e5c-4724-9a2a-8478e74abbc1",
"imageId": "recording",
"filePath": "",
"fileName": "屏幕录制",
"description": "全局屏幕坐标",
"buttonName": "点击 #3",
"bbox": [
30,
272,
30,
272
],
"type": "recording"
},
{
"id": "33dc1b1a-9d5f-4ac7-b86e-6c7febbcf7d2",
"imageId": "recording",
"filePath": "",
"fileName": "屏幕录制",
"description": "全局屏幕坐标",
"buttonName": "点击 #4",
"bbox": [
959,
195,
959,
195
],
"type": "recording"
},
{
"id": "ff38b555-3dae-46c4-b13a-6f7cb7797d63",
"imageId": "recording",
"filePath": "",
"fileName": "屏幕录制",
"description": "全局屏幕坐标",
"buttonName": "点击 #5",
"bbox": [
421,
333,
421,
333
],
"type": "recording"
},
{
"id": "8c3c50ec-71ae-425d-a50b-6291e1ae5ebe",
"imageId": "recording",
"filePath": "",
"fileName": "屏幕录制",
"description": "全局屏幕坐标",
"buttonName": "点击 #6",
"bbox": [
532,
342,
532,
342
],
"type": "recording"
},
{
"id": "04b84948-9c00-47e2-be68-597df52ea1a0",
"imageId": "recording",
"filePath": "",
"fileName": "屏幕录制",
"description": "全局屏幕坐标",
"buttonName": "点击 #7",
"bbox": [
767,
340,
767,
340
],
"type": "recording"
},
{
"id": "2867a239-3b15-430b-994d-79d2c021b99e",
"imageId": "recording",
"filePath": "",
"fileName": "屏幕录制",
"description": "全局屏幕坐标",
"buttonName": "点击 #8",
"bbox": [
1047,
653,
1047,
653
],
"type": "recording"
},
{
"id": "98de2565-8534-4fcb-b0d6-65bb61f9116b",
"imageId": "text_input",
"filePath": "",
"fileName": "文字输入",
"description": "模拟键盘输入文本",
"buttonName": "成功!",
"bbox": [
0,
0,
0,
0
],
"type": "text_input"
},
{
"id": "fa785144-a927-41b0-8e9d-d35c48a76f66",
"imageId": "recording",
"filePath": "",
"fileName": "屏幕录制",
"description": "全局屏幕坐标",
"buttonName": "点击 #9",
"bbox": [
663,
277,
663,
277
],
"type": "recording"
},
{
"id": "c825cb40-5a20-42b8-b106-4a95fa6958a0",
"imageId": "recording",
"filePath": "",
"fileName": "屏幕录制",
"description": "全局屏幕坐标",
"buttonName": "点击 #10",
"bbox": [
814,
584,
814,
584
],
"type": "recording"
},
{
"id": "3924a9aa-df29-41be-95fe-35662887fb37",
"imageId": "recording",
"filePath": "",
"fileName": "屏幕录制",
"description": "全局屏幕坐标",
"buttonName": "点击 #11",
"bbox": [
585,
396,
585,
396
],
"type": "recording"
},
{
"id": "a453fbe6-0be9-419c-b294-5e329c4dcebe",
"imageId": "recording",
"filePath": "",
"fileName": "屏幕录制",
"description": "全局屏幕坐标",
"buttonName": "点击 #12",
"bbox": [
759,
620,
759,
620
],
"type": "recording"
},
{
"id": "d8ff8521-abb2-4303-b0f1-d8f6499e82eb",
"imageId": "recording",
"filePath": "",
"fileName": "屏幕录制",
"description": "全局屏幕坐标",
"buttonName": "点击 #13",
"bbox": [
768,
669,
768,
669
],
"type": "recording"
}
]
}
BIN
View File
Binary file not shown.