ECC article-writing 技能详解:用一份 SKILL.md 约束 Agent 写出没有 AI 味的长文
本文基于 ECC 仓库中 .cursor/skills/article-writing/SKILL.md 展开,完整拆解这个"文章写作技能"的激活条件、核心规则、声音捕捉工作流、禁用模式与质量门禁,并结合 skills/article-writing/SKILL.md、skills/brand-voice/SKILL.md 等仓库源码说明同一技能在不同 Agent Harness 间的分发与演进差异。读完后你能理解 ECC 如何用一份纯 Markdown 技能文件为 Claude Code、Cursor 等编码 Agent 装配可复用的长文写作能力,以及如何为自有项目编写类似的结构化写作技能。
技能定位:写给 Agent 的"编辑手册"
ECC 的定位是 Agent harness 性能优化系统,其中 Skills 是核心资产之一。按照 docs/SKILL-DEVELOPMENT-GUIDE.md 的定义,Skill 是基于上下文自动激活的被动知识模块(context-based, automatic),与需要显式委派的 Agent、用户触发的 Command、事件触发的 Hook 相区分:
| 组件 | 用途 | 激活方式 |
|---|---|---|
| Skill | 知识库 | 上下文匹配(自动) |
| Agent | 任务执行者 | 显式委派 |
| Command | 用户动作 | 用户调用(/command) |
| Hook | 自动化 | 事件触发 |
article-writing 就是一个典型的"写作领域知识"技能:它不含可执行代码,而是把一整套长文写作的编辑规范、工作流和质量门禁沉淀为 Agent 可在会话中直接消费的指令集。技能文件采用 YAML frontmatter + Markdown 正文的标准结构,frontmatter 字段在 docs/SKILL-DEVELOPMENT-GUIDE.md 中有完整说明(name 与 description 必填,origin、tags、version 可选)。
.cursor/skills/ 下这份文件的 frontmatter 如下(引自 SKILL.md):
---
name: article-writing
description: Write articles, guides, blog posts, tutorials, newsletter issues, and other long-form content in a distinctive voice derived from supplied examples or brand guidance. Use when the user wants polished written content longer than a paragraph, especially when voice consistency, structure, and credibility matter.
origin: ECC
---
注意两个细节:
description字段同时承担了"技能是什么"和"何时该激活"两个职责——它明确写出 "Use when the user wants polished written content longer than a paragraph",这正是技能自动激活的匹配依据;origin: ECC是平铺写法,而主目录 skills/article-writing/SKILL.md 使用嵌套的metadata: { origin: ECC }。两份文件内容并不完全相同,这一点后文会专门展开。
技能开篇用一句话定调:"Write long-form content that sounds like a real person or brand, not generic AI output."(写听起来像真人或真实品牌的内容,而不是泛泛的 AI 输出)。全文所有规则都服务于这个目标。
何时激活:四类触发场景
技能中 "When to Activate" 一节列出了 Agent 应加载此技能的四个场景:
- 起草博客文章、随笔、发布帖、指南、教程或 newsletter 期刊;
- 把笔记、转录稿或调研素材整理成润色后的文章;
- 从既有示例中匹配某位创始人、运营者或品牌的写作声音;
- 收紧已有长文的结构、节奏与论据密度。
第四点值得注意:该技能不仅服务于"从零写作",也覆盖对既有长稿的结构化修订——这使它更像一份可反复套用的编辑流程,而非一次性的生成提示词。
核心规则:五条硬约束
"Core Rules" 一节给出了五条写作铁律,是全文最短但约束力最强的部分:
- 先给具体的东西:以例子、输出结果、轶事、数字、截图描述或代码块开头;
- 解释放在例子之后,而不是之前;
- 优先使用短而直接的句子,而非填充式的长句;
- 有来源的具体数字优先:可用且可溯源时使用精确数字;
- 绝不虚构传记事实、公司指标或客户证据。
这五条规则的本质是把"可信度"前置:第 1、2 条保证信息传递效率(证据先行),第 3 条保证可读性,第 4、5 条划定事实边界。对 Agent 写作而言,第 5 条尤其关键——它直接禁止了 LLM 最常见的失败模式:编造履历、杜撰数据、虚构客户证言。
声音捕捉工作流:如何复刻一种写作声音
这是 .cursor 版本中最具操作性的章节("Voice Capture Workflow")。当用户要求某种特定声音时,工作流分三步:
第一步:收集语料。收集以下材料中的一种或多种:
- 已发布的文章
- newsletter
- X / LinkedIn 帖子
- 文档或内部备忘录
- 一份简短的风格指南
第二步:提取风格特征。从语料中显式抽取五个维度:
- 句长与节奏(sentence length and rhythm)
- 声音基调:正式、口语化还是锋利
- 偏好的修辞手法:括号、列表、碎片句或设问
- 对幽默、观点、反直觉表述的容忍度
- 格式习惯:标题、项目符号、代码块、引用块的用法
第三步:确定默认值。如果没有提供任何声音参照,默认采用"直接的运营者风格"(direct, operator-style voice):具体、务实、少炒作。
从源码结构看,这套"提取五维度"的做法与 skills/brand-voice/SKILL.md 中 "What to Extract" 一节的思路高度同构(后者提取的是节奏、压缩度、大小写规范、括号使用、设问频率、断言锋利度等更细的维度,并额外要求记录"作者从不做什么")。也就是说,.cursor 版本把声音捕捉逻辑内联在技能内部,而主目录版本把它外置给了 brand-voice 技能——这是同一能力在不同 Harness 中的两种装配方式。
禁用模式:一份必须删除重写的黑名单
"Banned Patterns" 一节给出了五类必须删除并重写的语言模式:
- 泛化的开场白,如 "In today's rapidly evolving landscape"(在当今快速变化的格局下);
- 填充式连接词,如 "Moreover"、"Furthermore";
- 炒作短语,如 "game-changer"、"cutting-edge"、"revolutionary";
- 没有证据支撑的模糊断言;
- 未由提供上下文支撑的传记或资历声明。
这份黑名单的价值在于它把"反模式"写成了可逐条核对的检查项,Agent 在交付前可以逐项扫描正文。对比主目录 skills/article-writing/SKILL.md 的 "Hard Bans" 清单,可以看到同一约束的演进:主版本删除了 "Moreover/Furthermore" 一类连接词条目,转而新增 "fake vulnerability arcs"(虚假示弱弧线)、"here's why this matters 作为孤立桥句"、"为刷互动而加的结尾设问"、"拖住论点的一般性 AI 开场白"等更具体的条目——黑名单从"句式层面"下沉到了"叙事结构层面"。
五步写作流程
"Writing Process" 一节规定了从选题到成稿的标准流程:
- 明确受众与目的;
- 建立骨架大纲,每个小节只承担一个目的;
- 每个小节以证据、例子或场景开头;
- 只在"下一句话值得占据这个位置"时才展开;
- 删除一切听起来模板化或自吹自擂的内容。
第 2 条(一节一目的)与第 4 条(句子准入制)是控制长文冗余的核心机制,第 5 条则对应前文 Core Rules 中"解释在后"的落地检查。
结构指引:三类长文各有一套骨架
"Structure Guidance" 按文体分了三套结构规范:
技术指南
- 开篇先说读者能带走什么(open with what the reader gets);
- 每个主要章节使用代码或终端示例;
- 以具体的 takeaways 收尾,而不是软性的总结。
随笔 / 观点文
- 以张力、矛盾或锐利观察开头;
- 每节保持单一条论证线;
- 用配得上该观点的例子来支撑观点。
Newsletter
- 第一屏(首屏)保持有力;
- 洞见与更新混合呈现,而非日记式填充;
- 使用清晰的章节标签和便于略读的结构。
三套骨架的共同点是都规定了"开头必须是什么"和"结尾不能是什么",把文体差异压缩成了可执行的开头/结尾约束,而不是抽象的写作建议。
质量门禁:交付前的五项检查
"Quality Gate" 一节要求交付前完成五项自检:
- 对照提供的来源核验事实性声明;
- 删除填充语与企业腔;
- 确认声音与提供的示例匹配;
- 确保每个章节都贡献了新信息;
- 检查排版是否符合目标发布平台。
这条门禁与 Core Rules 第 5 条(不虚构)首尾呼应:写作过程中禁止虚构,交付前再核验一次事实来源,形成双重保险。
源码级观察:同一技能的双版本分发与技能协作网络
.cursor/skills/ 目录是 ECC 面向 Cursor Harness 的技能分发位。通过逐行对比,可以确认两份 SKILL.md 是有意分叉而非简单拷贝,主要差异有四处:
- 声音处理架构不同。
.cursor版本内置完整的 "Voice Capture Workflow" 章节(如上文详述);主版本改为 "Voice Handling",明确要求"若用户要求特定声音,先运行brand-voice并复用其VOICE PROFILE,不要在此重复第二遍风格分析"。也就是说,主版本把声音建模收敛为单一事实源(single source of truth),避免两个技能各自维护一套风格分析逻辑; - frontmatter 结构不同。
.cursor版本用平铺的origin: ECC,主版本用嵌套的metadata: { origin: ECC }; - 表述强度不同。
.cursor版本的默认声音是 "concrete, practical, and low on hype",主版本收紧为 "concrete, unsentimental, useful";Core Rules 第 3 条也从"偏好短句"变为"除非源声音刻意舒展,否则保持句子紧凑",即主版本对源声音的还原度要求更高; - 禁用清单不同。如前所述,主版本删除了连接词条目、新增了叙事结构层面的反模式。
从分发机制看,skills/article-writing 被收录在 manifests/install-modules.json 中(约第 506 行),说明它属于模块化安装体系中的可安装组件,用户可按 profile 选择性安装。在仓库内部,该技能与若干内容类技能构成协作关系:
- skills/brand-voice/SKILL.md 是"声音画像"的规范层,其 "Downstream Use" 一节明确列出 article writing 为下游消费方;
- skills/content-engine/SKILL.md(多平台内容引擎)声明
brand-voice是规范声音层,并要求在多次输出、对风格敏感的场景先运行它; - skills/skill-scout/SKILL.md 的技能清单表中将
article-writing定位为"起草文章与指南",并提示它"不包含发布说明(release notes)场景"——这种技能边界说明帮助用户在多个写作类技能之间做选择。
从这套引用关系可以推断:ECC 的写作能力被拆成了"声音画像(brand-voice)→ 长文写作(article-writing)→ 平台分发(content-engine)"的分层结构,article-writing 处于中间层,向上承接声音画像,向下为多平台复用提供成稿。
可落地的要点总结
- 技能文件的可执行性来自"可核对":
article-writing的价值不在于写作理论,而在于每条规则都能被 Agent 逐条扫描执行——五条 Core Rules、五项 Banned Patterns、五项 Quality Gate 都是检查项式的约束; - 声音捕捉是可迁移的方法:收集语料 → 提取句长节奏 / 语气 / 修辞 / 容忍度 / 格式习惯 → 无参照时回退默认声音,这套流程可直接移植到任何需要"模仿特定写作风格"的提示词工程中;
- 同一技能在不同 Harness 中可以有意的分叉:
.cursor/skills/内联声音工作流、主目录版本委托brand-voice,说明技能装配应按目标 Agent 的能力面裁剪,而不必强求单一副本; - 编写自有技能时可对照的标准:参照 docs/SKILL-DEVELOPMENT-GUIDE.md 的 frontmatter 规范与 "When to Activate / 核心规则 / 反模式 / 相关技能" 的章节骨架,即可产出结构等价的领域写作技能。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0624
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00