Add WeChat writer and moments poster skills with ZIP bundle
This commit is contained in:
@@ -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 配置外部依赖。
|
||||||
@@ -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. 提供排版和配图建议
|
||||||
@@ -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 节点都会被替换,不限于朋友圈场景
|
||||||
@@ -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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Binary file not shown.
Reference in New Issue
Block a user