一键式公众号 AI 内容流水线 —— 从选题到上架 8 个子 skill 串联,公众号小编 / 自媒体 / 品牌内容团队一键产出整篇图文。
套件说明 ·
aws-wechat-article-*是公众号一条龙套件,共 9 个 slug:aws-wechat-article-main / topics / writing / review / formatting / images / publish / assets,外加aws-wechat-sticker。跨 skill 的相对引用依赖同一skills/根目录;推荐clawhub sync或逐个clawhub install一次性全装。源码: https://github.com/aiworkskills/wechat-article-skills
本 skill 作为一条龙套件 编排入口;真正调用外部 API 的是子 skill(writing / images / publish / sticker / review)。 本入口自身的 validate_env.py 脚本 行为:
aws.env 的 WRITING_MODEL_API_KEY / IMAGE_MODEL_API_KEY / WECHAT_{N}_APPID / WECHAT_{N}_APPSECRET, 仅用于校验键是否存在且非空,值不用于任何网络请求aws.env、 .aws-article/config.yaml、本篇 article.yaml.aws-article/(首次引导创建目录结构)、本篇 article.yaml 状态字段{python} {baseDir}/scripts/validate_env.py( {python} = 本机 Python 3 解释器,由下文 第 0 步 探测得出:Windows 用 py -3 -X utf8,macOS / Linux 用 python3)注意:整体套件(含子 skill)会调用外部 LLM、图像 API 与微信 API,并在调用时外发 API key 与本篇内容。完整行为见各子 skill 的「能力披露」。
本 skill 是 aws-wechat-article-* 一条龙公众号套件的入口,编排 8 个子 skill: topics / writing / review / formatting / images / publish / assets 以及 aws-wechat-sticker。
skills/ 根目录,才能走完整一条龙流程(选题→写稿→审稿→排版→配图→发布)。validate_env.py);进入内容流水线会因对应子 skill 缺失而无法执行相关步骤(工作流里的跨 skill 脚本调用 / 文档读取会遇到 file not found)。完整 9 slug 清单与安装指引见 源码仓库。
Agent 执行:确定本 SKILL.md 所在目录为 {baseDir}。
进入交互顺序「2) 全局账号约束」「3) 本篇准备」及内容流水线前 须完成 第 0~2.5 步 配置检测(任一步失败则 不得 继续)。 第 3 步 是 调用 publish.py 前 的核对(非流水线起点): .aws-article/config.yaml 中 publish_method 默认为 draft( publish.py full 只把图文写入 公众号草稿箱);仅当用户明确要求「发出去 / 对外发布」时,再将该键改为 published(或使用 full --publish 临时强制发布)。 微信: validate_env.py 默认要求公众号账号配齐(见第 2 步);用户 明确不接微信 时,先将 publish_method 设为 none 再过校验(脚本会跳过微信组),之后 publish.py full 仍直接跳过。要走草稿/发布,须补全 aws.env 与 config.yaml 微信槽位,并建议 check-wechat-env。 wechat_N_name 只用于展示,写作/图片模型是可选项,这三项缺失时只警告。文风与账号约束以 config.yaml 为准,发文元数据以本篇 article.yaml 为准。
智能体在执行下列检测命令前, 先判断当前环境:
test、 echo 等)。Test-Path 等)。再确定 {python}——本套件所有文档里的 {python} 都是占位符,不是可直接执行的命令,须先探测出本机实际可用的 Python 3 解释器再代入。 本次会话探测一次即可,之后所有 {python} 统一代入该结果。
Linux / macOS:
bash
python3 --version
输出 Python 3.x.x → {python} = python3。命令不存在则改试 python --version,同样要求输出 Python 3.;都不行 → 提示用户安装 Python 3.10+ 后再继续, 不得 继续后续步骤。
Windows(PowerShell):
powershell
py -3 --version
输出 Python 3.x.x → {python} = py -3 -X utf8。 py 不可用时改试 python --version,通过则 {python} = python -X utf8。
⛔ Windows 上不要探测 python3:未安装 Python 时它是系统预置的应用执行别名,会 静默打开 Microsoft Store 而不报错——你会拿到一个空输出、看不出失败原因。始终优先 py -3(python.org 官方安装器默认附带 py launcher,且不受该别名影响)。
⛔ Windows 上的 -X utf8 不可省略:本套件脚本输出大量中文,Windows 上 Python 的 stdout 编码默认跟随系统 locale(简体中文机器为 GBK),省略后你读到的会是乱码,进而误判脚本成败。
版本要求 Python 3.10+。 --version 显示低于 3.10 时先提示用户升级,再继续。
.aws-article/config.yaml 与 aws.env 是否存在#在 仓库根目录(当前工作目录为项目根)执行:
Linux / macOS:
bash
test -f .aws-article/config.yaml && test -f aws.env && echo "ok" || echo "missing"
Windows(PowerShell):
powershell
if ((Test-Path -LiteralPath ".aws-article\config.yaml") -and (Test-Path -LiteralPath "aws.env")) { "ok" } else { "missing" }
⛔ 输出为 missing(任一文件不存在)→ 按 首次引导 创建或补全:可参考 {baseDir}/references/config.example.yaml 得到 config.yaml,在仓库根创建 aws.env(仅密钥与微信 WECHAT_N_APPID / WECHAT_N_APPSECRET 等,键名可与 {baseDir}/references/env.example.yaml 对照)。
初始化约束:新建 .aws-article/config.yaml 时, publish_method 默认必须为 draft;除非用户明确指定不接微信,否则禁止初始化或改写为 none。
validate_env.py)#两文件均存在后,在仓库根运行:
bash
{python} {baseDir}/scripts/validate_env.py
(默认读取 .aws-article/config.yaml 与 aws.env;可用 --config / --env 指定路径。)
脚本检查(规则摘要,具体交互文案统一以 首次引导 为准):
wechat_accounts、 wechat_api_base 与 aws.env 中每个槽位的 WECHAT_{i}_APPID / WECHAT_{i}_APPSECRET 须完整;否则 failed + 微信公众号配置不完整, 退出码 1。 wechat_{i}_name 仅用于展示与按名选择,未填时只警告。 例外: publish_method: none 时跳过微信组校验。writing_model.base_url / model 与 WRITING_MODEL_API_KEY 仅供外部写作 API 使用;未配置时输出警告,不影响退出码,Agent 可通过 write.py prompt 获取约束后代写。image_model.base_url / model 与 IMAGE_MODEL_API_KEY 仅供外部生图 API 使用;未配置时输出警告,不影响退出码。退出码 0:微信组通过,或已声明 publish_method: none 跳过微信组 → True + 配置校验通过;三个可选项缺失会同时输出警告。 退出码 1:微信必要配置未通过 → 不得进入一条龙默认流水线,并引导 首次引导 补全或设为 publish_method: none 后重跑。
仅当第 2 步退出码为 0 才执行本步;执行成功后才允许进入「2) 全局账号约束」与后续流水线。
目录要求与命令以 首次引导第 2 步 为准(需覆盖 presets/* 与 tmp)。 业务资料库 .aws-article/products/{产品名}/ 不在本步建——由 AI 写第一份业务介绍时按 assets skill 自动 mkdir。
publish.py 前( publish_method + 微信)#publish_method( draft / published / none)写在 config.yaml, 默认 draft。 none = 用户明确不填微信: full 不调 API。要「发布出去」→ published 或 full --publish。aws.env;槽位在 config.yaml。 draft/ published 走 full 前须就绪; none 下不调用微信。publish.py full 前:确认 publish_method 合法(小写); 非 none 时建议 check-wechat-env。检测到 .aws-article/config.yaml 或 aws.env 缺失、 validate_env.py 退出码 1(微信配置不完整,且未声明 publish_method: none),或用户 已要求调用 publish.py 而微信槽位 / 凭证未就绪时:
failed 下的 微信公众号配置不完整;或即将 publish.py 但微信未配齐),并 统一按 首次引导 中「校验失败时的配置引导」文案执行。aws.env 与 config.yaml 并保存后,智能体协助重跑 validate_env.py 复检;若用户明确声明本次例外,按首次引导与本节约束继续处理。APPSECRET / API_KEY 等任何密钥;所有密钥由用户自己在编辑器里写入 aws.env(或通过 https://aiworkskills.cn/ 平台配置)。Agent 只校验存在性、不读取值、不外发值。模型配置是可选项:默认校验不因写作/图片模型缺失而阻断。进入对应阶段时,有外部 API 配置则可由脚本调用;没有时,写作由 Agent 根据
write.py prompt执行,配图则根据当前 Agent 能力执行或再向用户说明。
单步子 skill:用户只触发某一子能力(如仅排版、仅审稿)且 未走本总览流水线 时,仍以各子 skill 内说明为准; 一条龙 / 完整流程 / 从选题到发布 必须满足本节 BLOCKING 与上条「禁止自作主张」。
文件位置作用aws.env仓库根****密钥:写作/图片 *_API_KEY、微信 WECHAT_N_APPID / WECHAT_N_APPSECRET 等(键名见 references/env.example.yaml;与 config.yaml 一起由 validate_env.py 校验).aws-article/config.yaml仓库内非密钥配置:账号文风、模型 provider/ base_url/ model、微信槽位数与 wechat_api_base、各槽位展示名等(模板见 references/config.example.yaml)references/env.example.yaml仓库内示例仅文档: aws.env 键名说明references/config.example.yaml仓库内示例仅文档: config.yaml 结构示例article.yaml本篇目录 drafts/YYYYMMDD-标题slug/发文元数据(标题/作者/摘要/封面等)及状态字段: image_source(仅 generated / user;默认 generated,用户上传配图时改为 user)与 publish_completed(新建 false,发布闭环结束 true),与 config.yaml 分工
publish_method(默认 draft)、微信槽位元数据 等均在 .aws-article/config.yaml 维护; 密钥 仅在 aws.env。drafts/YYYYMMDD-标题slug/,并 优先 创建 article.yaml(含 publish_completed: false、标题/作者/摘要等;通常为本目录内 首个 应落盘的文件),再进入内容流水线。article.md 定稿须满足 review 第 5 步(文末 {embed:…},⛔ BLOCKING)后再排版。全程以 .aws-article/config.yaml 为账号与文风约束;典型产物依次为 topic-card.md / draft.md → article.md → article.html 与 imgs/ 等。draft → full 仅 草稿箱; published 或 full --publish → 再 提交发布; none → full 立即跳过、不调微信。前两档需微信凭证。再强调: aws.env = 密钥; config.yaml = 账号/文风/模型与微信元数据及 publish_method; 本篇 article.yaml = 发文元数据。
按以下顺序与用户交互, 上一步完成再进下一步;上一环节就绪后再进入下一环节。
config.yaml 与 aws.env 均存在 → 运行 validate_env.py 且退出码 0。 退出码 1 时按 首次引导 补全微信必要配置;用户明确不接微信时可设为 publish_method: none 后重跑。validate_env.py 退出码 0 后,必须立即执行「第 2.5 步目录创建」(可复用 首次引导第 2 步 命令);该步完成前, 禁止 进入「2) 全局账号约束」与任何写稿流程。validate_env.py 不检查 article_category、 target_reader、 default_author;须在 「2) 全局账号约束」 中单独检查并落盘。.aws-article/config.yaml)⛔#在 validate_env.py 已通过(或已按总览完成「本次例外」) 之后、进入「3) 本篇准备」之前, 必须 打开 .aws-article/config.yaml,检查下列键 trim 后是否非空:
article_category、 target_reader、 default_author任一项缺失或空白: 逐项询问用户(1.账号领域2.目标读者3.作者名字),取得 用户当轮明确答复 后再 写回 .aws-article/config.yaml,再进入 「3) 本篇准备」。 禁止 仅在对话里口头确认却不写入文件。 禁止 跳过本步直接假定可写稿。
⛔ 禁止擅自填写(必须写进行为约束)
article.yaml、历史草稿、 topic-card.md、对话记忆或仓库内任意文件**静默抄录、推断或「顺手补全」**后写入 article_category / target_reader / default_author。对 tone 等与账号画像强相关的全局项,要直接询问用户, 同样禁止 未询问就写盘。article.yaml 给 建议,只能 展示为待选文案,并问「是否采用 / 要改哪几个字」, 用户明确同意后再写入 config.yaml。drafts/…/article.yaml 反推 全局三键,避免误把单篇元数据当成整号定位。在完成「2) 全局账号约束」之后, 在不了解用户是要续写既有草稿还是新开一篇时(例如未指定 drafts/… 路径、且仓库 drafts/ 下存在进行中目录或多个候选): 须先询问 并让用户选定 「继续哪一篇」 或 「新开一篇」, 再 进入下列 A/B 或调用写作脚本。 禁止 默认「最近修改」目录、未确认就运行写作脚本、或假定沿用上一轮路径。
业务素材双向规则(涉及用户自身业务时强制,详见 assets skill):
ls .aws-article/products/ 看有无相关产品目录,进入后必读根下 *.md(业务介绍)作为底稿来源; images/ 子目录里有现成业务配图则优先复用。.aws-article/products/{产品名}/{文件名}.md(用 Write 工具直接落库;目录不存在时同时创建 images/),下次涉及业务的文章自动用上。写作意图 ⛔ BLOCKING:必须问清用户 本篇要写什么(具体主题、角度、体裁或目标)。若用户只想「帮我出选题」,须 明确确认 后再当无方向模式处理。
定题与 slug:在写作意图已明确的前提下,确定 发文章标题——用户从候选中选一个,或 自定义标题;据此生成 slug,目录名为 YYYYMMDD-标题slug(slug 规则:小写、连字符、与项目习惯一致即可)。
建目录与 article.yaml:创建 {drafts_root}/YYYYMMDD-标题slug/( drafts_root 以 config.yaml 为准,默认 drafts/)。随即初始化本篇 article.yaml(含 publish_completed: false,及标题、作者、摘要等;目录内 宜最先写入;可用 {baseDir}/../aws-wechat-article-publish/scripts/article_init.py)。
publish_method:默认 draft;要发出去 → published 或 full --publish;用户明确不填微信 → none。本篇预设单选落盘(必做):初始化后按场景执行: 新建首轮 以 .aws-article/config.yaml 为来源,按 custom_* > default_* 结合本篇主题/选题卡,为以下字段各选 单一预设 并写回本篇 article.yaml 为 单元素列表: default_structure、 default_closing_block、 default_title_style、 default_format_preset、 default_format_scheme、 default_cover_image_style、 default_article_image_style、 default_sticker_style。选排版模版与配色时 不要只看名字:先跑 format.py --list-themes,按其中「适合 / 不适合」对本篇题材,再按配色说明选一档(未选则用模版默认色)。 续写/重入 时若本篇 article.yaml 对应字段已为单元素列表,视为本篇已选并优先保留,不重选不覆盖。若 config.yaml 不存在或候选为空,可保持 []。
至此才进入 第 4 步内容流水线。
.aws-article/config.yaml(账号与发布策略);本篇目录内需有 article.yaml(或按用户状态后补)。若已有 article.html/ cover.jpg 可直接从流水线中靠后的步骤接入。须已具备 本篇目录 与 article.yaml(「已有目录」分支按上条处理);账号侧约束以 config.yaml 为准。
确认轮次优化:全局三键已非空时静默通过; publish_method 已为合法值时不重复盘问;多个待确认项可合并为一轮提问。用户意图明确时(如给出主题 + "写一篇文章"),理想轮次为 1 轮(确认标题/摘要)+ 写完后展示结果。配图方案在用户无特殊要求时按默认风格自动执行,不单独确认。
text
选题 → 写稿 → 审稿(内容审) → 排版 → 配图 → 审稿(终审)
.aws-article/config.yaml 与 topic-card.md(或用户素材); publish_method 见 config.yaml(上文「发布方式与时间线」);产物 draft.md → 内容审后 article.md。article.md 前 须按 review 第 5 步 ⛔ BLOCKING 完成文末 {embed:…}(或规则允许的省略并留痕); 未完成不得进入 formatting。article.md → article.html(用户当次指定排版主题可覆盖默认)。article.html 与 imgs/;有问题给出清单,等用户确认或修复。config.yaml 的 publish_method 为准; draft / published / none 含义见上文。 none 时运行 full 会无操作退出。draft/ published: 微信 须配齐后再调 publish.py;建议 check-wechat-env。 none:不调微信,说明即可。published_root。当用户说「草稿箱里图不满意,换我上传的图重新发」:
锁定目标 drafts/… 目录;
将新图放入本篇 imgs/,生成/更新 img_analysis.md(封面仅 1 张);
article.yaml: image_source: user;publish_completed 置回 false;依据分析结果更新 article.md 图片映射(允许重排);
重新执行 format.py 生成 article.html;
终审通过后执行 publish.py full( draft 写草稿箱);
发布命令成功且回执可用后,写回 publish_completed: true。
text
选题 → 写稿 → 审稿(内容审) → 排版 → 配图 → 审稿(终审) → 发布
进入下一步前,必须先检查本步所需中间产物;缺什么就先补什么,禁止跳步并宣称已完成。
阶段必要产物(最小集合)缺失时动作写稿完成article.md 存在且非空继续写稿或回滚到 writing排版完成article.html 存在,且由当前 article.md 重新生成先执行 formatting 重转配图完成文章目录存在 cover.(png/jpg/jpeg/webp); article.md 与 article.html 不含 placeholder先执行 images 生成并替换( image_source=user 时走用户供图映射与重排)发布就绪article.yaml 含 title/author/digest/content_source;发布环境检查通过先补齐元数据或环境发布闭环发布命令成功且回执可用才允许写回 publish_completed: true
禁止:仅凭单一信号(如“草稿创建成功”)就宣称全流程完成。若正文仍有 placeholder,状态必须标记为“草稿已提交,正文配图未完成”。
步骤子 skill读取产出选题topics**.aws-article/config.yaml**、 aws.env、web_searchtopic-card.md research.md写稿writingtopic-card.md、 .aws-article/config.yaml、 aws.env(专用写作 API)draft.md审稿reviewdraft.md、 aws.env、 .aws-article/config.yamlreview.md → article.md(定稿须含文末 embed,见 review 第 5 步)排版formattingarticle.md、 .aws-article/config.yamlarticle.html配图imagesarticle.md、 aws.env、 .aws-article/config.yamlimgs/终审reviewarticle.html、 imgs/、 .aws-article/config.yamlreview.md发布publisharticle.html + imgs/、 config.yaml、 aws.env(调用 publish.py 时)草稿 media_id / 发布 publish_id、URL、 out/ 记录
账号与文风约束:以 .aws-article/config.yaml 为准。
topics / web_search:须满足上文 3-A-1(用户已说明本篇写什么,或已确认「只帮忙出选题」)之后才可调研与生成选题;不得默认跳过提问直接搜索。
提示:发布前需就绪本篇
article.yaml(标题/作者/摘要/封面等元数据;content_source默认article.html)。可用{baseDir}/../aws-wechat-article-publish/scripts/article_init.py快速初始化或更新。
默认:与长文发文相关时 优先 main,由本 skill 按步编排;不要因用户说了「写」「选题」「发」就跳过 main 直连子 skill。
何时直连子 skill(可跳过 main 入口):用户 明确只要该步产物、且不隐含「从零到发出」整条链。例如:已有 article.md 只要排版;已有稿只要审稿清单;已有 article.html + imgs/ 只要发布前检查或提交;已有选题卡只要扩写等。
用户说法路由到从0开始、从零、从头、一条龙、完整流程、帮我发一篇、发到公众号(含各前置步)、今天发什么/写什么好(要成文并发)、不确定从哪步开始main****只要 选题卡、标题、摘要、排期、系列策划(明确不做后续编排)topics只要 在已有选题/大纲/草稿上写稿、改写、润色、续写(明确不要全流程)writing只要 审稿/校对/合规清单(成稿或已定版 HTML)review「能不能发」且含代为发布、或要从稿到发出整条收尾main****只要 排版、换主题、转 HTMLformatting只要 长文封面/正文配图(有正文或插图位)images贴图、图片消息、多图推送、九宫格(非长文图文链路)sticker****只要 执行发布/提交/群发(已有约定产物)publish
用户说「一条龙」「完整流程」时启用。按 交互顺序 的 1→2→3→4→5 执行; 3-A 内子步骤亦须逐步完成。流水线中每步完成后 暂停 等用户确认。审稿有 🔴 项时进入修改循环。
用户 明确只要某一步 且已有对应输入产物(或声明不做全流程)时,可仅执行该步骤;若表述含糊、可能还要后续发文,仍从 main 问起或按一条龙拆步确认。
路由到独立的 aws-wechat-sticker skill。
aws.env(仓库根,密钥)与 .aws-article/config.yaml(非密钥与模型/微信元数据及 publish_method):校验 {baseDir}/scripts/validate_env.py; aws.env 键名见 references/env.example.yamlconfig.yaml / article.yaml / aws.env 字段说明: references/articlescreening-schema.md{baseDir}/../aws-wechat-article-publish/scripts/publish.py check-wechat-env(仓库根执行,试换微信 access_token;凭证在 aws.env)