Aws wechat article writing
Skill aiworkskills/wechat-article-skills/skills/aws-wechat-article-writing
微信公众号 AI 运营助手 | 选题、写稿、审稿、排版、配图、发布全流程 Skill,支持 OpenClaw / Claude Code / Cursor / Codex
npx -y skills add aiworkskills/wechat-article-skills --skill aws-wechat-article-writingAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
What its author says it does
Copied from the file, not written here
公众号写稿|长文写作|文章润色|改写续写 — 公众号长文 AI 写作,从话题或提纲生成完整初稿,支持改写、续写、润色、开头结尾优化,可调 DeepSeek / GPT / Claude 或由 Agent 代写。面向自媒体作者、公众号运营、品牌文案。触发词(**单独触发仅限对已有稿子的修改**):「改写」「润色」「续写」「续一段」「往下写」「接着这段写」「重写开头」「改结尾」「调整语气」「这段润色下」「把这段改活泼点」「优化用词」「用 GPT 重写」「用 DeepSeek 重写」。新写一篇请走 aws-wechat-article-main(main 内部会调用本 skill 生成初稿);需要多环节串联(写+审+排+配图+发)也走 main。
SKILL.md
24.6 KB, as published. Nobody here has run it
长文写作
公众号长文 AI 写作引擎 —— 从提纲或话题生成完整初稿,支持改写、续写、润色,多模型可切。
套件说明 · 本 skill 属
aws-wechat-article-*一条龙套件(共 9 个 slug,入口aws-wechat-article-main)。跨 skill 的相对引用依赖同一skills/目录,建议一并clawhub install全套。源码:https://github.com/aiworkskills/wechat-article-skills
能力披露(Capabilities)
本 skill 调用 write.py 生成文章初稿,会把文章内容发送给用户配置的 LLM 端点。使用前请阅读以下全部行为说明:
- 凭证读取:
write.py读取仓库根aws.env的WRITING_MODEL_API_KEY - 凭证外发:该 API key 以
Authorization: Bearer <key>头发送到用户在config.yaml.writing_model.base_url配置的外部端点(常见为 DeepSeek / OpenAI / Anthropic 等 Chat Completions 兼容 API)。请使用专用 key 并配置可信端点或内部代理 - 内容外发:Prompt 内包含本篇
article.yaml/topic-card.md/ 合并配置 / 用户通过--reference指定的参考文档.md全文 → 整体 POST 给上述端点 - 文件读(仓库内):
.aws-article/config.yaml、本篇article.yaml、topic-card.md、.aws-article/products/{产品名}/*.md(业务介绍 .md,直接挂在产品根) - 文件读(仓库外):若仓库内
.aws-article/缺失,write.py会从用户家目录~/.aws-article/读取writing-spec.md与presets/(只读预设,不读凭证) - 文件写:仅本篇目录下
draft.md、article.md - shell:仅
python3 {baseDir}/scripts/write.py
可使用 write.py prompt 子命令只输出 prompt JSON 不调用 LLM,由 Agent 代写 —— 想避免把内容发给第三方时用这条路径。
配套 skill(informational)
本 skill 是 aws-wechat-article-* 一条龙公众号套件的写稿环节(入口 aws-wechat-article-main)。工作流中的若干步骤会读取同级 ../aws-wechat-article-main/references/*.md 等共享文档(首次引导、env/config 示例、articlescreening schema 等)。
- 套件完整装齐到同一
skills/根目录时,跨 skill 引用都能读到。 - 单独安装本 skill 时,跨 skill 引用的步骤会在读取阶段遇到
file not found;本 skill 内的纯本地步骤仍可用。
完整 9 slug 清单见 源码仓库。
路由
从零发文、一条龙、完整流程 → aws-wechat-article-main。
配置检查 ⛔
任何操作执行前,必须按 首次引导 执行其中的 「检测顺序」。检测通过后才能进行以下操作(或用户明确书面确认「本次不检查」):
从选题到发布的前置规则(阻断、禁止擅自降级、「本次例外」等)见 aws-wechat-article-main/SKILL.md;本 skill 只描述写稿步骤。
写作模型:writing_model(provider、base_url、model 等)在 .aws-article/config.yaml;WRITING_MODEL_API_KEY 在仓库根 aws.env。键名对照 {baseDir}/../aws-wechat-article-main/references/env.example.yaml。
交互约定:须遵守 main 的智能体行为约束——未通过环境校验且未获用户明确「本次例外」时,不得默认改由当前 Agent 代写并假装流程完整。环境检查未通过时,只按 首次引导 处理配置选项,不要在同一条回复里混入写稿、草稿路径或多草稿选择;配置闭环后再进入本 skill 工作流。
工作流
写稿进度:
- [ ] 第0步:⛔ [首次引导 · 检测顺序](../aws-wechat-article-main/references/first-time-setup.md)
- [ ] 第1步:⛔ **`.aws-article/config.yaml`** 中 **`article_category`**、**`target_reader`**、**`default_author`**(trim 后)须**均非空**;缺则**逐项问用户**、用户确认后再**写回文件**;**禁止**从 **`article.yaml`** 等擅自抄录(与 [main](../aws-wechat-article-main/SKILL.md)「2) 全局账号约束」一致);**须先于**续旧/新开
- [ ] 第2步:⛔ **在不了解**用户要**续写既有草稿**还是**新开一篇**时,**须先询问**并确定本篇 `drafts/…` 目录,**再**进入以下步骤;**禁止**未确认就调用写作脚本(见 [main](../aws-wechat-article-main/SKILL.md)「3) 本篇准备」开头)
- [ ] 第3步:读取本篇约束与写作规范;**写稿前先按下文「业务资料库」判断是否查阅/是否传 `--reference`**
- [ ] 第4步:发布方式(`publish_method`)⛔
- [ ] 第5步:确定输入与写作方式
- [ ] 第6步:写作
- [ ] 第7步:自检与修正
- [ ] 第8步:展示并等待用户确认 ⛔
说明:第 2 步在用户已明确路径或意图(例如直接给出 drafts/…、或明确说「新开一篇」)时可不再重复盘问。
多草稿 / 未闭环:与第 2 步同原则——不了解续写/新开时须先问,禁止自动选中某一 drafts/… 跑写作脚本。
确认轮次优化
以下步骤可合并或静默通过以减少交互轮次:
- Step 1(全局三键):若
article_category、target_reader、default_author已非空 → 静默通过,无需再确认。 - Step 4(publish_method):若已是
draft/published/none(合法值)→ 静默通过(规则第3条已允许)。 - 合并询问:当需要同时确认 Step 2(新篇/续写)和 Step 4(发布意图)时,合并为一轮提问。
- 配图确认:若用户已给出明确主题且未提出风格要求,images skill 可按默认风格自动生成,无需单独确认配图方案。
最少轮次:用户意图明确时(如给出主题 + "写一篇文章"),理想轮次为 1 轮(确认标题/摘要)+ 写完后展示结果。
第1步:全局账号三键(.aws-article/config.yaml)⛔
在续旧/新开询问之前,打开 .aws-article/config.yaml,检查 article_category、target_reader、default_author 是否 trim 后均非空。任一项缺失:逐项询问用户,取得用户当轮明确答复后再写回该文件,再进入第 2 步。禁止从 article.yaml、其它草稿或仓库文件静默推断并写盘;可把从某文件读到的内容仅作建议展示,须用户同意后再写入。禁止跳过本步。禁止仅在对话里确认却不落盘。与 main「2) 全局账号约束」一致。
第2步:续旧稿还是新稿(不了解时须先问)⛔
当不清楚用户是要续写 drafts/ 下某篇进行中草稿还是新开一篇时:须先询问(可列出候选目录),待用户选定后再进入第 3 步。须在第 1 步全局三键已落盘之后执行。已明确时跳过本步询问。
目录命名:新开一篇时,目录名必须为 YYYYMMDD-标题slug(如 drafts/20260406-wechat-article-skills/)。YYYYMMDD 为当日日期,slug 为小写、连字符分隔的标题缩写。禁止省略日期前缀。
第3步:读取本篇约束与写作规范
⛔ 关键字段不得空跑:在调用 write.py 或按合并约束让 Agent 代写之前,确认合并后的 article_category、target_reader 均为非空字符串(trim 后);default_author 非空 或 本篇 article.yaml 的 author 非空。若任一项不满足,须暂停写稿,引导用户补全 .aws-article/config.yaml(及/或本篇 article.yaml),并实际写入文件——不要仅用对话表格收集「读者」却不落盘。全局三键的优先检查顺序见 main「2) 全局账号约束」;若第 1 步已正确落盘,此处多为合并 article.yaml 覆盖后的复核。
约束从哪来:write.py 会先读全局 .aws-article/config.yaml,再读本篇目录下的 article.yaml,把两边的键叠成一张表用来生成写作提示——若同一键在两份文件里都有,以本篇 article.yaml 为准。字段分工见 articlescreening-schema.md。
.aws-article/config.yaml:文风、结构预设、禁用词、字数、embeds等与「写什么、怎么写」有关的顶层字段会进入这张表。
writing_model/image_model两段只给脚本连 API 用(地址、模型名等),不整段放进给大模型的「写作说明」里,以免把技术配置当成正文要求。- 本篇
article.yaml:本篇标题、作者、摘要、publish_completed等;与 config 重名的键会覆盖 config。
write.py 在仓库根执行,按输入 .md 所在目录找到本篇 article.yaml;叠完后的约束表不能为空(一般只要 config.yaml 里已有账号/文风等即可)。publish_completed:新建或补全本篇 article.yaml 时须为 false;本篇发布真正结束后由 publish skill 改为 true;publish.py 不修改此字段。
default_structure / default_closing_block 指向的 预设正文来自 .aws-article/presets/(及用户目录下同名 presets),与配置中的文件主名对应。两者在本篇 article.yaml 中必须为单元素列表 [名](或空列表 []);write.py 对预设选择仅读取本篇 article.yaml,不再在执行阶段从 custom_* / default_* 候选池推断。
多候选自动选择:当 default_structure(或 default_closing_block)含多个候选时,Agent 须:
- 读取每个候选预设文件(如
.aws-article/presets/structures/<名>.md),了解其适用场景; - 结合本篇主题 / 选题卡内容,判断最匹配的一个;
- 将该名写入
article.yaml同键为单元素列表[名]; - 然后再调用
write.py。 禁止盲选第一个——须基于内容匹配。若无法判断,向用户展示候选及说明后请用户选择。
另加载 .aws-article/writing-spec.md(如有)。
| 字段 | 用途 |
|---|---|
target_reader | 读者画像 → 深度、用词、案例 |
tone | 调性 → 语气与句式 |
writing_style | 结构表达方式(口语/书面/故事/方法论等) |
配置中其它与写稿相关的键(如 topic_direction、forbidden_words、heading_density、target_word_count)一并写入约束。
业务资料库(写稿前 + 写后)⛔
目的:.aws-article/products/{产品名}/ 是用户业务(产品/软件/服务)的原始资料库——业务介绍 .md 直接挂在产品根(如 项目介绍.md),images/ 子目录存业务配图。
触发口径:
- 若本篇主题涉及用户自身业务(对外介绍 / 教程 / 案例 / 自家业务安利):必须先
ls .aws-article/products/,对相关产品根下的*.md必读,已有同主题文档优先增量改写而非另起炉灶。 - 若本篇主题与用户自身业务无关(行业资讯 / 通用教程等):不读、不强求查阅。
写作只有 两种方式,业务资料用法如下(二选一,勿混用同一条命令里的职责)。
方式一:智能体直接写稿
- 写稿前:先
ls .aws-article/products/;若本篇涉及某产品业务,必读该产品根下相关*.md。 - 写作时:将业务资料转化为账号文风后引用;与业务无关或无相关文档时不引用,不阻断写稿。
draft.md:凡正文中实际引用或依据了某份业务介绍的,在该处表述之后用括号附上该文件的仓库相对路径(路径须真实存在);未引用则不必加括号。- 配图占位(硬性):当
image_source不为user(合并config.yaml+ 本篇article.yaml)时,按image_density生成配图占位;若未配置或为空,默认每节一图。格式必须为,每个占位独占一行,封面占位放在标题之前;类型名与细则见 references/structure-template.md「配图标记」。 - 下游产物
article.md:本 skill 产物只到draft.md,括号路径保留在draft.md中用于事实溯源。article.md是 review skill 第 5 步 的产物,由 review 调用write.py strip-citations <draft.md> -o <临时文件>自动剥离括号路径,再追加文末{embed:…}后写入。writing 阶段禁止自行命名article.md、自行剥离括号路径、或假装"自检"等同于审稿。
方式二:write.py 写稿
- 运行脚本前:同样先
ls .aws-article/products/,判断是否有相关产品的业务介绍.md。 - 有相关文档:在仓库根执行
write.py时传入--reference <路径>(可重复,最多 5 个;路径须形如.aws-article/products/<产品名>/<文件名>.md——直接挂在产品根,不接受images/子目录下的图片说明.md,详见脚本与 usage)。脚本将全文注入系统提示「参考资料库」,并约定模型在依据处标注资料路径。 - 无相关文档:不传
--reference,仅靠选题卡与合并配置写稿即可。 - 若写作 API 因上下文/token 超限失败,减少
--reference篇数或换更短文档后重试。
写后识别(双向回写):若本次写作产生的内容语义属于用户业务介绍(不是文章主体而是侧重产品/服务自介),按 assets skill 一、业务介绍 .md 入库 引导用户保存到 .aws-article/products/{产品名}/,下次写涉及业务的文章会自动用上。
禁止:将与主题无关的文档硬塞进正文;伪造业务资料中不存在的事实。
第4步:发布意图(publish_method)⛔
在调用 write.py 或进入第6步写作之前,确认 .aws-article/config.yaml 中的 publish_method(与 发布 skill、articlescreening-schema.md 一致):
| 取值 | 含义(向用户说明时用 plain 语言) |
|---|---|
draft(默认) | 定稿后若走 publish.py full,只把图文写入公众号草稿箱,不自动「发出去」。 |
published | 定稿后 publish.py full 会在创建草稿后再提交发布(异步)。也可用 full --publish 单次强制带发布。 |
none | 询问微信配置后用户明确不想填写:写入 publish_method: none。publish.py full 会直接跳过、不调微信;写稿/审稿/排版等照常。 |
规则:
- 默认保持或写入
publish_method: draft,除非用户明确要对外发布 → 改为published;明确不填微信、不走上传 → 改为none。 - 微信:提醒发布需要
aws.env;用户拒绝填写 →none,不要代跑publish.py full(跑了也会无操作退出)。 - 若已是
draft/published/none(小写):可不重复盘问。
禁止:在 publish_method 非法时调用 write.py;禁止未经同意默认 published。
第5步:确定输入与写作方式
输入:topic-card.md / 用户提供的提纲或素材 / 用户口述主题;并已按上文「说明文档资源库」完成判断(直接写稿则已决定是否引用;走 write.py 则已决定是否传 --reference)。
写作方式(优先级):
- 优先:调用第三方模型(
write.py draft/rewrite/continue)— 依赖config.yaml的writing_model+aws.env的WRITING_MODEL_API_KEY(见 usage.md) - 自动降级:模型未配置(退出码 2)→ 先
write.py prompt <mode> <input>获取提示词 JSON,再由 Agent 按相同提示词直接写,无须「本次例外」确认 - 故障降级:调用失败(退出码 1)→ 按下方重试/排错逻辑
必须告知用户当前使用的方式:
- 已配置且调用脚本 →
ℹ️ 使用 write.py 调用第三方模型({model}) - 模型未配置自动降级 →
ℹ️ 写作模型未配置,本次由当前对话模型直接写稿(使用相同写作约束) - 故障降级 Agent 直写 →
ℹ️ 第三方 API 不可用,本次由当前对话模型代写(使用相同写作约束),并说明原因
write.py 退出码处理(智能体必选分支)
运行脚本后须把终端里的具体报错原样摘要给用户(或引用关键行),勿只说「调用失败」。
按退出码与报错类型分支处理:
| 类型 | 判断线索 | 智能体动作 |
|---|---|---|
| 未配置(退出码 2) | stderr 含 [NO_MODEL] | 自动降级:运行 write.py prompt <mode> <input> 获取提示词 JSON({"system_prompt": "...", "user_prompt": "..."})→ Agent 按该 system_prompt 和 user_prompt 写文章 → 输出到 -o 指定路径或展示给用户。无须用户确认或「本次例外」。 |
| 网络类(退出码 1) | 超时、连接失败、URLError、网络错误:、临时性 502/503 等 | 必须自动再试 1 次(可简短等待后重跑同一命令,并告知用户「正在重试」)。第二次仍为网络类失败 → 改用 write.py prompt 获取提示词后由 Agent 按相同约束代写;必须明确告知:第三方 API 网络不可用,本次由对话模型代写。 |
| 配置/凭证类(退出码 1) | 401/403、Key 无效、未找到写作约束、YAML 解析失败等 | 不要为「省事」自动降级掩盖问题。列出须检查项(config.yaml 的 writing_model、aws.env 的 WRITING_MODEL_API_KEY、本篇目录是否有 article.yaml 等),请用户修正后重跑 write.py。若用户明确打字愿意本次改由 Agent 代写,再按 main「本次例外」处理并留痕。 |
| 业务/内容类(退出码 1) | 4xx 中除鉴权外(如 400 参数)、模型返回空等 | 将 API 返回体摘要给用户;可先根据提示改 model / 请求参数再试一次;仍失败则与用户商定是否 Agent 代写。 |
Agent 代写时提示词获取:无论哪种降级路径,Agent 代写前都应先运行 write.py prompt <mode> <input>(--instruction 按需传入),取回与 write.py 调第三方模型时完全相同的 system_prompt 和 user_prompt,确保写作约束一致。
禁止:配置明显错误时静默改用 Agent 写稿却不说明;网络降级后不告知用户「本次未走第三方模型」。
第6步:写作
写作时必须遵循第3步读取的 target_reader、tone、writing_style(来自合并后的约束):深度与用词贴合读者,语气贴合调性,结构与表达方式贴合文章风格。
用户供图分支(image_source: user):
- 用户图片须先放入本篇
imgs/;随后由智能体读图分析并生成或补全img_analysis.md(可用user_image_prepare.py先生成模板再填写)。未落盘img_analysis.md不得调用write.py,否则脚本会报错退出。 img_analysis.md是写稿时配图与章节顺序的唯一依据:write.py会把它并入提示,按「建议章节 / 推荐用途」把每张图放到合理位置(可重排章节以匹配叙事)。img_analysis.md中“推荐用途:封面”必须且只能有 1 处;否则不得写稿。- 写稿时直接使用用户图片路径(
imgs/xxx.png),不再输出placeholder。 image_source只允许:generated/user。禁止写user_provided。- 该字段由智能体按流程动态更新:默认
generated;进入用户供图替换流程时写为user。
状态切换规则(article.yaml):
- 新建文章默认:
image_source: generated、publish_completed: false。 - 当进入“用户上传图片替换/重写”流程时:将
image_source改为user,并将publish_completed置回false(表示需重新发布闭环)。 - 重新发布成功且有回执后:再写回
publish_completed: true。
文章结构:按优先级加载结构预设:
- 用户指定(「用清单体结构」)
- 本篇
article.yaml的default_structure(单元素列表) .aws-article/presets/structures/下的文件- 内置默认:references/structure-template.md
文末区块:按优先级加载:
- 本篇
article.yaml的default_closing_block指定的文件(单元素列表) - 合并约束中
closing_block非空字符串(若有) - fallback:内置默认文末(分割线 + 一句关注引导):
---\n觉得有用?点个关注,持续获取优质内容。
默认模式下,写作时在需要图的位置插入配图标记 (规则见 write.py 系统提示与 references/structure-template.md「配图标记」)。
调用第三方模型时的脚本用法:references/usage.md
第7步:自检与修正(仅粗扫,不替代 review)
仅做粗扫:禁用词、段落长度、开头吸睛度、小标题密度,发现明显问题自动修正。不替代 review skill 的内容审 —— 完整的合规、敏感词、文末 embed、引用标注剥离均归 review 处理;本步禁止越界做 review 的工作。
配图占位自检(默认模式):当 image_source != user 时,核对 draft.md 是否满足 image_density(未配置则按每节一图);缺失或格式不合法时,先补齐/修正  再进入审稿或配图步骤。
续写补充(中间产物门禁):
- 续写新增
时,必须把该占位计入“待配图清单”(供 images 步骤生成与替换)。 - 进入发布相关步骤前,必须复核本篇正文产物:
article.md/article.html若仍含placeholder,只能标记为“正文配图未完成”,禁止宣称发布闭环完成。
第8步:展示并等待用户确认 ⛔
向用户展示 draft.md,确认后移交 review skill 做内容审。
⛔ 产物边界(硬性):本 skill 产出只到 draft.md。禁止在 writing 阶段:
- 自行写入
article.md(article.md是 review 第 5 步 ⛔ BLOCKING 的产物,须含文末{embed:…}且已剥离引用标注) - 自行剥离
(资料路径:...)引用标注(剥离动作由 review 调用write.py strip-citations完成) - 跳过 review 直接进入 formatting
过程文件
| 读取 | 产出 |
|---|---|
topic-card.md、.aws-article/config.yaml、本篇 article.yaml | draft.md(含配图标记);本 skill 可能更新 publish_method(发出去 → published;不填微信 → none;默认 draft);新建/补全 article.yaml 时保持 publish_completed: false |