跳到主要内容
知仓学习社ZHICANG

aws-wechat-article-writing

公众号写稿|长文写作|文章润色|改写续写 — 公众号长文 AI 写作,从话题或提纲生成完整初稿,支持改写、续写、润色、开头结尾优化,可调 DeepSeek / GPT / Claude 或由 Agent 代写。面向自媒体作者、公众号运营、品牌文案。触发词(**单独触发仅限对已有稿子的修改**):…

读凭据联网严重 49 · 高危 0aiworkskills/wechat-article-skills

它会碰到什么

扫了多少6 个文本文件,68 KB
它会碰到什么读凭据联网
命中总数54 处
命中统计严重 49 · 高 0 · 中 4 · 低 1
逐条看命中(30 条严重或高危)
  • 严重 references/branches.md:44cred-paths
    `.aws-article/products/{产品名}/` 是用户业务的原始资料库——业务介绍 `.md` **直接挂在产品根**,`images/` 存业务配图。
  • 严重 references/branches.md:46cred-paths
    **触发口径**:本篇涉及用户自身业务(对外介绍 / 教程 / 案例 / 自家安利)→ **必须**先 `ls .aws-article/products/`,相关产品根下的 `*.md` **必读**,已有同主题文档**优先增量改写**而非另起炉灶。与自身业务无关(行业资讯 / 通用教程)→ 不读,不强求。
  • 严重 references/branches.md:50cred-paths
    1. 写稿前先 `ls .aws-article/products/`,涉及某产品就必读它根下的 `*.md`。
  • 严重 references/branches.md:56cred-paths
    1. 同样先 `ls .aws-article/products/` 判断有无相关文档。
  • 严重 references/branches.md:57cred-paths
    2. **有** → 执行时传 `--reference <路径>`(可重复,**最多 5 个**;路径须形如 `.aws-article/products/<产品名>/<文件名>.md`,**直接挂在产品根**,**不接受** `images/` 下的图片说明 `.md`)。脚本将全文注入系统提示的「参考资料库」,并
  • 严重 references/branches.md:63cred-paths
    本次写作产生的内容若**语义属于业务介绍**(侧重产品/服务自介而非文章主体),按 [assets skill](../../aws-wechat-article-assets/SKILL.md) 引导用户存回 `.aws-article/products/{产品名}/`,下次涉及业务的文章会自动用上。
  • 严重 references/branches.md:75cred-paths
    1. 读取每个候选预设文件(如 `.aws-article/presets/structures/<名>.md`),了解适用场景;
  • 严重 references/branches.md:84cred-paths
    **文章结构**:用户当次指定 → 本篇 `default_structure` → `.aws-article/presets/structures/` → 内置 [structure-template.md](structure-template.md)。
  • 严重 references/branches.md:92cred-paths
    在调用 `write.py` 或进入写作之前确认 `.aws-article/config.yaml` 的 `publish_method`:
  • 严重 references/structure-template.md:117cred-paths
    **常见自定义内容**(用户在 `.aws-article/presets/closing-blocks/` 创建):
  • 严重 references/structure-template.md:135cred-paths
    名称对应 **`.aws-article/config.yaml`** 的 **`embeds`**:名片与 `profile` 的 `nickname`(或 `name`)一致;文字链/卡片与 `miniprograms` / `miniprogram_cards` 的 `title` 一致。**仅 `{embed:
  • 严重 references/usage.md:17cred-paths
    # 业务资料库(最多 5 个路径;须形如 .aws-article/products/<产品名>/<文件名>.md,直接挂在产品根)
  • 严重 references/usage.md:19cred-paths
    --reference .aws-article/products/公众号AI运营助手/项目介绍.md
  • 严重 references/usage.md:26cred-paths
    在 **`.aws-article/config.yaml`** 填写 `writing_model`(`base_url`、`model`;`provider`、`temperature`、`max_tokens` 可选),在仓库根 **`aws.env`** 仅填密钥 **`WRITING_MODEL_API_KE
  • 严重 references/usage.md:31cred-paths
    # .aws-article/config.yaml 片段
  • 严重 references/usage.md:58cred-paths
    合并顺序:**`.aws-article/config.yaml`(顶层)** → 本篇 **`article.yaml`**(本篇覆盖同名字段)。须至少合并出非空约束(通常已有全局 `config.yaml`)。字段说明见 `skills/aws-wechat-article-main/references/arti
  • 严重 references/usage.md:63cred-paths
    - 路径必须形如 **`.aws-article/products/<产品名>/<文件名>.md`**(直接挂在产品根;脚本会校验)。**不接受** `images/` 子目录下的图片说明 `.md`,也**不接受**老路径 `assets/stock/references/`。
  • 严重 references/usage.md:77cred-paths
    --reference .aws-article/products/公众号AI运营助手/项目介绍.md
  • 严重 references/usage.md:94cred-paths
    脚本将 **合并后的约束** + **`.aws-article/writing-spec.md`**(如有)+ 结构模板注入 system prompt;若传入 **`--reference`**,再将 **`.aws-article/products/<产品名>/`** 根下对应 **`.md` 全文** 拼入「参
  • 严重 references/usage.md:94cred-paths
    脚本将 **合并后的约束** + **`.aws-article/writing-spec.md`**(如有)+ 结构模板注入 system prompt;若传入 **`--reference`**,再将 **`.aws-article/products/<产品名>/`** 根下对应 **`.md` 全文** 拼入「参
  • 严重 scripts/write.py:9cred-paths
    **`.aws-article/config.yaml`**,**`WRITING_MODEL_API_KEY`** 写在仓库根 **`aws.env`**。
  • 严重 scripts/write.py:12cred-paths
    文风、预设名、`closing_block` 等:合并 **`.aws-article/config.yaml`(顶层,不含 writing_model/image_model)** 与本篇 **`article.yaml`**(本篇覆盖同名字段)。
  • 严重 scripts/write.py:13cred-paths
    结构/文末预设 **`.md`** 仍从 **`.aws-article/presets/`**(及用户目录)解析。
  • 严重 scripts/write.py:21cred-paths
    python write.py draft <topic_card.md> --reference .aws-article/products/公众号AI运营助手/项目介绍.md
  • 严重 scripts/write.py:22cred-paths
    (可重复 --reference,最多 5 个;须形如 .aws-article/products/<产品名>/<文件名>.md,
  • 严重 scripts/write.py:45cred-paths
    # 参考资料库:业务介绍 .md(直接挂在 .aws-article/products/<产品名>/ 根下)
  • 严重 scripts/write.py:48cred-paths
    PRODUCTS_BASE_REL = Path(".aws-article") / "products"
  • 严重 scripts/write.py:129cred-paths
    p = Path(".aws-article/config.yaml")
  • 严重 scripts/write.py:135cred-paths
    _err(f"无法读取 .aws-article/config.yaml:{e}")
  • 严重 scripts/write.py:137cred-paths
    _err(f".aws-article/config.yaml 解析失败:{e}")

这一栏是扫描器报的事实,不是结论。命中多不等于有毒(安全工具、规则库、示例脚本本来就会包含危险写法),命中少也不等于干净。它和你手上的凭据、文件、网络有什么关系,需要你自己看。

技能内容

长文写作

公众号长文 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 端点

  • 凭证读取:仓库根 aws.envWRITING_MODEL_API_KEY
  • 凭证外发:该 key 以 Authorization: Bearer <key>发送到 config.yaml.writing_model.base_url 配置的外部端点(DeepSeek / OpenAI / Anthropic 等 Chat Completions 兼容 API)。请使用专用 key 并配置可信端点或内部代理
  • 内容外发:Prompt 内含本篇 article.yaml / topic-card.md / 合并配置 / --reference 指定的参考文档全文 → 整体 POST 给上述端点
  • 文件读(仓库内).aws-article/config.yaml、本篇 article.yamltopic-card.md.aws-article/products/{产品名}/*.md
  • 文件读(仓库外):仓库内 .aws-article/ 缺失时从 ~/.aws-article/writing-spec.mdpresets/只读预设,不读凭证
  • 文件写:仅本篇目录下 draft.md
  • shell:仅 {python} {baseDir}/scripts/write.py

write.py prompt 子命令只输出 prompt JSON 不调用 LLM,由 Agent 代写 —— 不想把内容发给第三方时走这条。

路由

从零发文、一条龙、完整流程 → [aws-wechat-article-main](../aws-wechat-article-main/SKILL.md)。本 skill 单独触发仅限已有稿子的修改(改写 / 润色 / 续写)。

配置检查 ⛔

任何操作前先按 [首次引导 · 检测顺序](../aws-wechat-article-main/references/first-time-setup.md) 执行,通过后才继续(或用户明确书面确认「本次不检查」)。

写作模型writing_modelproviderbase_urlmodel)在 .aws-article/config.yamlWRITING_MODEL_API_KEY 在仓库根 aws.env。键名对照 [env.example.yaml](../aws-wechat-article-main/references/env.example.yaml)。

环境检查未通过时,只按首次引导处理配置选项,不要在同一条回复里混入写稿、草稿路径或多草稿选择。须遵守 main 的智能体行为约束:未通过校验且未获用户明确「本次例外」时,不得默认改由当前 Agent 代写并假装流程完整。

工作流

写稿进度:
- [ ] 第0步:⛔ 首次引导 · 检测顺序
- [ ] 第1步:⛔ 全局账号三键非空
- [ ] 第2步:⛔ 续旧稿还是新稿(不了解时须先问)
- [ ] 第3步:读取本篇约束与写作规范
- [ ] 第4步:发布方式(publish_method)
- [ ] 第5步:确定输入与写作方式
- [ ] 第6步:写作
- [ ] 第7步:跑 check 自检
- [ ] 第8步:⛔ 展示并等待用户确认

第1步:全局账号三键 ⛔

打开 .aws-article/config.yaml,检查 article_categorytarget_readerdefault_author 是否 trim 后均非空。任一项缺失:逐项询问用户,取得当轮明确答复后写回该文件。与 [main「2) 全局账号约束」](../aws-wechat-article-main/SKILL.md) 一致。

须在续旧/新开询问之前完成。禁止article.yaml、其它草稿或仓库文件静默推断并写盘;禁止只在对话里确认却不落盘。

第2步:续旧稿还是新稿 ⛔

不清楚用户要续写 drafts/ 下某篇还是新开一篇时:须先询问(可列出候选目录),选定后再往下。用户已明确路径或意图(直接给出 drafts/…、或说「新开一篇」)时不再盘问。禁止未确认就调用写作脚本,也禁止自动选中某一 drafts/… 跑脚本。

目录命名:新开一篇必须为 YYYYMMDD-标题slug(如 drafts/20260406-wechat-article-skills/)。禁止省略日期前缀

第3步:读取本篇约束

write.py 先读全局 .aws-article/config.yaml,再读本篇 article.yaml,把两边的键叠成一张表生成写作提示——同一键两处都有时以本篇 article.yaml 为准。字段分工见 [articlescreening-schema.md](../aws-wechat-article-main/references/articlescreening-schema.md)。

  • config.yaml:文风、结构预设、禁用词、字数、embeds 等「写什么、怎么写」的顶层字段进入这张表。writing_model / image_model 两段只给脚本连 API 用,整段放进写作说明。
  • article.yaml:本篇标题、作者、摘要、publish_completed 等;重名键覆盖 config。publish_completed 新建时须为 false,由 [publish skill](../aws-wechat-article-publish/SKILL.md) 在发布结束后改为 true

| 字段 | 用途 |

|------|------|

| target_reader | 读者画像 → 深度、用词、案例 |

| tone | 调性 → 语气与句式 |

| writing_style | 结构表达方式(口语/书面/故事/方法论等) |

⛔ 关键字段不得空跑:调用 write.py(或让 Agent 代写)前,确认合并后的 article_categorytarget_reader 非空,且 default_author 或本篇 author 非空。不满足则暂停写稿并实际写入文件——不要只用对话表格收集「读者」却不落盘。

另加载 .aws-article/writing-spec.md(如有)。default_structure / default_closing_block 在本篇 article.yaml 中须为单元素列表 [名][];含多个候选、或需要了解预设加载优先级时,见 [branches.md「四、结构 / 文末预设的多候选处理」](references/branches.md)。

业务资料库:本篇涉及用户自身业务(对外介绍 / 教程 / 案例 / 自家安利)时,必须ls .aws-article/products/ 并读相关产品根下的 *.md,已有同主题文档优先增量改写。两种写作方式各自怎么用(Agent 直写标路径 vs write.py --reference)、写后如何回写,见 [branches.md「三、业务资料库的两条用法」](references/branches.md)。与自身业务无关的主题不读、不强求。

第4步:发布意图

确认 .aws-article/config.yamlpublish_methoddraft(默认)/ published / none 之一。已是合法值时静默通过,不重复盘问。三者含义与询问口径见 [branches.md「五、发布意图」](references/branches.md)。

第5步:确定输入与写作方式

输入topic-card.md / 用户提供的提纲或素材 / 用户口述主题,且已按第 3 步完成业务资料库判断。

写作方式(优先级)

  1. 优先:调用第三方模型 write.py draft|rewrite|continue(用法见 [usage.md](references/usage.md))
  2. 自动降级:模型未配置(退出码 2)→ write.py prompt <mode> <input> 取提示词 JSON,Agent 按相同提示词写,无须「本次例外」
  3. 故障降级:调用失败(退出码 1)→ 见 [branches.md「一、退出码处理」](references/branches.md)

必须告知用户当前用的是哪种

  • ℹ️ 使用 write.py 调用第三方模型({model})
  • ℹ️ 写作模型未配置,本次由当前对话模型直接写稿(使用相同写作约束)
  • ℹ️ 第三方 API 不可用,本次由当前对话模型代写(使用相同写作约束) + 原因

第6步:写作

写作必须遵循第 3 步读到的 target_readertonewriting_style:深度与用词贴合读者,语气贴合调性,结构贴合文章风格。

image_source: user(用户供图)时不输出 placeholder,改用真实路径——细则见 [branches.md「二、用户供图分支」](references/branches.md)。

Markdown 语法(硬性)

链路是「markdown 语法 → 按语法输出 → 渲染器排版」。写错的标记不会报错——渲染照常完成,读者会在正文里直接看见 __加粗__###### 六级[^1] 这类符号

| 要表达的 | 写法 | 说明 |

|---|---|---|

| 小标题 | ## 二级 ### 三级 | 井号后必须有空格。不写 # 一级——文章标题由公众号后台单独填 |

| 加粗 | 加粗 | 正文最主要的强调手段,规则见下 |

| 斜体 | 斜体 | 中文里慎用,斜体的中文字形不好看 |

| 链接 | 文字 | 必须有可点的锚文本 |

| 配图 | ![类型名:画面内容](路径 "图注") | 图注写在引号里;不写引号就没有图注 |

| 无序列表 | - 一项 | 减号后必须有空格 |

| 有序列表 | 1. 一项 | 只在真有先后时用;并列的几项用 - |

| 待办清单 | - [ ] - [x] | 少用——只有真正的检查项才用 |

| 引用 | > 引文 | 每行都要有 > |

| 表格 | \| a \| b \| + \|---\|---\| | 分隔行不能省 |

| 代码 | 行内 ` x `;成块用三反引号围栏 | 不要用四空格缩进 |

| 分隔 | --- 独占一行 | 上下各留一个空行 |

禁止:输出 HTML 标签(<br> <div>);::: 之类自定义块语法;四空格缩进代码块;Setext 式标题(==== / ----);裸 URL 当正文。

产出配额(不是可选项)

语法规则模型都照做,但没有配额就一处都不产出。真稿实测:金句卡 0/10 篇,正文段落内的加粗 0/5 篇——加粗全在列表标签里,读者在手机上一屏扫过去没有任何落点。以下与 write.py 系统提示中的配额区逐条对应,改一处须同改两处。

  • 摘要 —— 第一个 ## 之前写一段 > 引用,80–128 字,且与 article.yaml 的摘要字段不是同一句话(实测 7 篇逐字相同,读者同一段读两遍)。
  • 加粗 = 划重点 —— 读者没时间读完两千字,加粗要让他只看这些就知道你说了什么。

验收标准:把全文的加粗按顺序抽出来连读,应该是一篇能独立看懂的缩写版。 读起来像词云(「透明度 / 瓶颈 / 采用」)或像把段落重念一遍,都是挑错了。

据此倒推:每 100 字左右就该有一个落点(手机上约 4–5 行),连续 200 字不许一个都没有——那是读者划过整整一屏还找不到重点。每个 ## 小节至少一处,结尾段也要有;一段里最多两处;每处都要能独立看懂——数字连着它的意思(省 88% Token),判断连着它的对象(打断不等于撤销),术语连着它的定性(按问题找证据)。关键数字尽量覆盖到。不要加粗整句的概括,不要每段都加在首句同一位置。

> 密度按字数算,不按段数。 段是会伸缩的单位:paragraph_preference 写「短段为主」的账号一段 35 字,写「自然段为主」的一段 80 字。同一条「每 2–3 段一处」落到读者眼里差两倍多——实测两篇都报 [OK],一篇每 40 字一处、另一篇每 194 字一处。读者感受到的是划过多少屏才碰到下一个落点

  • 三项以上的并列 —— 写成 - 标签:说明 列表,不要压进一个长段落。即使段落偏好要求「完整自然段」,那管的是叙述段,枚举仍然用列表。
  • 金句恰好一处 —— 最值得截图转发的那一句写成 > 金句。 —— 出处,排版会排成金句卡。写两处以上卡片就退化成装饰条;不写出处就是普通引用。
  • --- —— 需要一个明显转场时用,独占一行、上下各留空行。排版会换成本模版的分隔装饰。
  • 段距 —— 段与段之间空一行。空两行或用两个空格换行都不需要,段距由版式控制。

配图占位

image_source 不为 user 时,按 image_density 生成占位,格式 ![类型名:画面内容](placeholder),每个占位独占一行封面占位放在标题之前。类型名与细则见 [structure-template.md](references/structure-template.md)「配图标记」。

密度词是本套件自造的,不能只把词丢给模型让它猜(实测五篇真稿,标记数每篇都少于 ## 小节数):

| image_density | 就是说 |

|---|---|

| 每节一图 | 每个 ## 小节各配一张,不多不少 |

| 按需配图 | 只在文字讲不清的地方配(流程、对比、数据),其余不配 |

| 少图 | 全篇只配 1–2 张最关键的 |

| 多图 | 每 2–3 个自然段配一张 |

这是硬配额不是参考值,写完自己数一遍。同一张表在 write.py_DENSITY_RULES 与 [image-method.md](../aws-wechat-article-images/references/image-method.md) 里各有一份,措辞须一致。未配置时默认每节一图

第7步:跑 check 自检 ⛔

draft.md 写完后跑一遍脚本,不合格先补再往下走。这些实测最容易漏,而且漏了不报错、只是版式悄悄少一块:

{python} {baseDir}/scripts/write.py check drafts/YYYYMMDD-slug/draft.md

它按上面的产出配额逐条量,并把全文的加粗抽出来串成一行打印——验收标准就是这一串读起来像不像一份提要,串不起来说明挑错了,不是数量不够。退出码非 0 表示有硬性项没达标。脚本只量数得出来的部分,加粗挑得对不对仍要自己读一遍那一串

脚本管不到的两项,手工核对:

  • 配图占位数image_density 是否一致,格式是否合法;
  • 禁用词、段落长度、开头吸睛度、小标题密度的粗扫

⛔ 这一步替代 [review skill](../aws-wechat-article-review/SKILL.md):合规、敏感词、文末 embed、引用标注剥离都归 review,本步禁止越界。

续写时的中间产物门禁见 [branches.md「七」](references/branches.md)。

第8步:展示并等待用户确认 ⛔

向用户展示 draft.md,确认后移交 [review skill](../aws-wechat-article-review/SKILL.md) 做内容审

⛔ 产物边界:本 skill 产出只到 draft.md。禁止在 writing 阶段:

  • 自行写入 article.md(那是 review 第 5 步的 BLOCKING 产物,须含文末 {embed:…} 且已剥离引用标注)
  • 自行剥离 (资料路径:…) 引用标注(由 review 调 write.py strip-citations 完成)
  • 跳过 review 直接进入 [formatting](../aws-wechat-article-formatting/SKILL.md)

分支与异常

退出码四分类、用户供图、业务资料库细则、预设多候选、发布意图口径、确认轮次优化、续写门禁 → [references/branches.md](references/branches.md)。

过程文件

| 读取 | 产出 |

|------|------|

| topic-card.md.aws-article/config.yaml、本篇 article.yaml | draft.md(含配图标记);可能更新 publish_method;新建/补全 article.yaml 时保持 publish_completed: false |

想直接用这个技能?

本站把开放许可(MIT / Apache 等)的技能按仓库打包整理到网盘,点一下转存到你自己的网盘,不用一个个从 GitHub 拉。许可未声明的技能只给原始仓库链接,不打包。