holaOS stop-slop 技能实战:基于 phrases.md 的 AI 写作去痕编辑指南
holaOS stop-slop 技能实战:基于 phrases.md 的 AI 写作去痕编辑指南
holaOS 在运行时内嵌了 stop-slop 写作技能,用于在草稿、编辑与审稿阶段消除可预测的 AI 写作痕迹。本文以技能参考文档 references/phrases.md 为骨架,完整讲解应删除的九大类短语、配套的句式结构与节奏规则、前后对比改写示例,并结合 workspace-skills.ts 源码说明该技能在 holaOS 中如何被解析、校验与注入到 Agent 上下文中。读完本文,你将掌握一套可复用的"去 AI 味"编辑清单,以及 holaOS 嵌入式技能的实际运行机制。
stop-slop 技能与 phrases.md 的定位
stop-slop 是 holaOS 运行时 embedded-skills 目录下的内嵌技能之一,其入口文件 SKILL.md 声明了技能名称与触发条件:
name: stop-slop
description: Remove AI writing patterns from prose. Use when drafting, editing, or reviewing text to eliminate predictable AI tells.
metadata:
trigger: Writing prose, editing drafts, reviewing content for AI patterns
技能的核心规则共 8 条:砍掉填充短语、打破公式化结构、使用主动语态、写具体不写空泛、把读者带进现场、变化节奏、信任读者、砍掉金句。其中第 1 条规则"砍掉填充短语(throat-clearing openers、emphasis crutches、所有副词)"直接指向 references/phrases.md——这是整个技能最细颗粒度的操作清单,按"删除什么、为什么删、怎么替换"三层结构组织,是本文展开的核心。
phrases.md 的完整价值在于:它不只是给出禁用词列表,还给出了每个类别的删改原则。例如对 throat-clearing openers 的判据是"任何 'here's what/this/that' 结构都是铺垫,砍掉它直接说观点";对 Vague Declaratives 的判据是"如果一句话只声明重要/深刻/结构性,却不指明具体事物,就砍掉它或替换为具体事物"。
九大类应删除表达全解析
1. Throat-Clearing Openers(清嗓式开场)
这些"宣布式"短语在真正的观点之前堆积噪音,应当直接删掉并陈述内容本身:
- "Here's the thing:"
- "Here's what [X]" / "Here's this [X]" / "Here's that [X]" / "Here's why [X]"
- "The uncomfortable truth is"
- "It turns out"
- "The real [X] is"
- "Let me be clear"
- "The truth is,"
- "I'll say it again:"
- "I'm going to be honest"
- "Can we talk about"
- "Here's what I find interesting"
- "Here's the problem though"
判据:任何 "here's what/this/that" 结构都是"清嗓子",直接砍掉并陈述观点。例如 "Here's the thing: the build failed" 应直接写成 "The build failed"。
2. Emphasis Crutches(强调拐杖)
这些短语不增加任何意义,直接删除:
- "Full stop." / "Period."
- "Let that sink in."
- "This matters because"
- "Make no mistake"
- "Here's why that matters"
强调应该来自内容本身,而不是这些修辞拐杖。
3. Business Jargon(商业行话)
用平实语言替换,phrases.md 给出了完整的对照表:
| Avoid(避免) | Use instead(改用) |
|---|---|
| Navigate (challenges) | Handle, address |
| Unpack (analysis) | Explain, examine |
| Lean into | Accept, embrace |
| Landscape (context) | Situation, field |
| Game-changer | Significant, important |
| Double down | Commit, increase |
| Deep dive | Analysis, examination |
| Take a step back | Reconsider |
| Moving forward | Next, from now |
| Circle back | Return to, revisit |
| On the same page | Aligned, agreed |
原则是"用普通语言说话":行话的代价是稀释信息密度,替换词保持含义的同时恢复直接表达。
4. Adverbs(副词)
phrases.md 对副词的态度最为严格:杀掉所有副词。没有 -ly 词,没有软化词(softeners)、强化词(intensifiers)、含糊词(hedges)。点名列出的违规词包括:
- "really"、"just"、"literally"、"genuinely"、"honestly"、"simply"、"actually"、"deeply"、"truly"、"fundamentally"、"inherently"、"inevitably"、"interestingly"、"importantly"、"crucially"
同时还要砍掉这些填充短语:
- "At its core"
- "In today's [X]"
- "It's worth noting"
- "At the end of the day"
- "When it comes to"
- "In a world where"
- "The reality is"
原理:副词大多是空强调。一个动词如果足够准确,就不需要 "really" 来撑腰;一个事实如果足够具体,就不需要 "literally" 来发誓。配套的 structures.md 在 Word Patterns 一节再次点名了 "really"、"just"、"literally"、"genuinely"、"honestly"、"simply"、"actually" 等 -ly 词与空强调词。
5. Meta-Commentary(元评论)
删除自我指涉的旁白。文章应该向前推进,而不是不断宣布自己的结构:
- "Hint:"
- "Plot twist:" / "Spoiler:"
- "You already know this, but"
- "But that's another post"
- "X is a feature, not a bug"
- "Dressed up as"
- "The rest of this essay explains..."
- "Let me walk you through..."
- "In this section, we'll..."
- "As we'll see..."
- "I want to explore..."
这些短语的本质是"作者跳出来对读者说话",破坏沉浸感。
6. Performative Emphasis(表演式强调)
虚假的亲昵或制造出来的真诚:
- "creeps in"
- "I promise"
- "They exist, I promise"
7. Telling Instead of Showing(告知而非展示)
宣布困难或重要性,却不展示证据:
- "This is genuinely hard"
- "This is what leadership actually looks like"
- "This is what X actually looks like"
- "actually matters"
8. Vague Declaratives(空泛断言)
声明重要性却不指明具体事物,全部砍掉:
- "The reasons are structural"
- "The implications are significant"
- "This is the deepest problem"
- "The stakes are high"
- "The consequences are real"
判据:如果一句话说某事物重要/深刻/结构性,却没有展示具体事物,就砍掉它,或者用具体事物替换它。这与 SKILL.md 第 4 条规则"写具体"完全一致:不许用 "every"、"always"、"never" 之类的懒人极端词做模糊功。
配套句式与节奏规则(structures.md 要点)
phrases.md 负责"词"层面的清理,structures.md 负责"句"与"篇"层面的纠偏,两者配套使用:
- Binary Contrasts(二元对比):如 "Not because X. But because Y."、"The answer isn't X. It's Y." 等,制造虚假戏剧感。改法:直接陈述 Y,删掉否定铺垫。
- Negative Listing(否定式列举):"Not a X... Not a Y... A Z." 这种"修辞脱衣舞",直接陈述 Z。
- Dramatic Fragmentation(戏剧性碎片句):"[Noun]. That's it. That's the [thing]." 是制造出来的深刻感,改用完整句子。
- Rhetorical Setups(修辞设问):"What if [reframe]?"、"Think about it:" 等,直接说出观点,让读者自己下结论。
- False Agency(虚假主体):让无生命物做人的动作("a complaint becomes a fix"、"the decision emerges"、"the data tells us")。改法:点出人,"The team fixed it that week" 胜过 "the complaint becomes a fix";若找不到具体的人,用 "you" 把读者放进座位。
- Narrator-from-a-Distance(远距离叙述者):"Nobody designed this."、"People tend to..." 是悬空观察,改用 "You don't sit down one day and decide to..." 把读者带进现场。
- Passive Voice(被动语态):"X was created"、"Mistakes were made" 隐藏了动作发出者,找到动作发出者并放到句首。
- Sentence Starters(句首词):避免以 What/When/Where/Which/Who/Why/How 开头、避免段落以 "So" 开头、避免 "Look," 开头。"What makes this hard is..." 应改为 "The constraint is..." 或直接点出具体约束。
- Rhythm Patterns(节奏模式):三连列表用两项或一项;每个段落都用短句收尾要改;禁用 em dash(用逗号或句号替代);不要堆叠短促的碎片句。
- Word Patterns(词汇模式):懒人极端词(every、always、never、everyone、everybody、nobody)制造虚假权威,用具体数字与事实替代。
前后对比改写实战(examples.md 五组示例)
references/examples.md 提供了 5 组可直接对照的改写案例,是 phrases.md 各项规则的综合演练:
示例 1:清嗓开场 + 二元对比
- 改前:"Here's the thing: building products is hard. Not because the technology is complex. Because people are complex. Let that sink in."
- 改后:"Building products is hard. Technology is manageable. People aren't."
- 改动:删除开场短语、二元对比结构和强调拐杖,全部换成直接陈述。
示例 2:填充 + 多余安抚
- 改前:"It turns out that most teams struggle with alignment. The uncomfortable truth is that nobody wants to admit they're confused. And that's okay."
- 改后:"Teams struggle with alignment. Nobody admits confusion."
- 改动:砍掉含糊词 "most"、清嗓短语,删除"准许式"结尾。
示例 3:商业行话堆叠
- 改前:"In today's fast-paced landscape, we need to lean into discomfort and navigate uncertainty with clarity. This matters because your competition isn't waiting."
- 改后:"Move faster. Your competition is."
- 改动:彻底消除行话,核心信息压缩到六个词。
示例 4:戏剧性碎片句
- 改前:"Speed. Quality. Cost. You can only pick two. That's it. That's the tradeoff."
- 改后:"Speed, quality, cost; pick two."
- 改动:单句表达,去除表演式强调。
示例 5:修辞设问
- 改前:"What if I told you that the best teams don't optimize for productivity? Here's what I mean: they optimize for learning. Think about it."
- 改后:"The best teams optimize for learning, not productivity."
- 改动:直接断言,无修辞脚手架。
交付前的快速检查与评分机制
SKILL.md 提供了交付散文前的快速检查清单,与 phrases.md 逐条呼应:
- 有任何副词?杀掉。
- 有被动语态?找到动作发出者,让它做主语。
- 无生命物在做人话动词("the decision emerges")?点出那个人。
- 句子以 Wh- 词开头?重构。
- 有 "here's what/this/that" 清嗓?直接切入要点。
- 有 "not X, it's Y" 对比?直接陈述 Y。
- 连续三句长度相同?打断一句。
- 段落以一句式收尾?改变收尾方式。
- 有 em dash?删掉。
- 有空泛断言("The implications are significant")?指明具体含义。
- 有远距离叙述者("Nobody designed this")?把读者放进场景。
- 有元连接语("The rest of this essay...")?删除,让文章自己流动。
评分机制按 5 个维度各打 1-10 分:Directness(陈述还是宣布)、Rhythm(有变化还是节拍器)、Trust(是否尊重读者智力)、Authenticity(听起来像人吗)、Density(有没有可删的)。总分低于 35/50 需要修改。
holaOS 中嵌入式技能如何被加载与注入
stop-slop 不是孤立文档,它在 holaOS 运行时有一套真实的加载链路。核心实现在 runtime/api-server/src/workspace-skills.ts:
- 目录解析:
embeddedSkillsRoot()优先读取环境变量HOLABOSS_EMBEDDED_SKILLS_DIR覆盖技能根目录;否则基于HOLABOSS_RUNTIME_ROOT依次探测harnesses/src/embedded-skills与runtime/harnesses/src/embedded-skills两个候选路径。 - 格式校验:
listSkillsInRoot()要求每个技能子目录必须存在SKILL.md,且通过hasValidSkillFormat()校验——frontmatter 中的name必须与目录名一致(经normalizeSkillId()规范化:去空白、拒绝/、\、空字节与./..),且必须有非空description。stop-slop的 SKILL.md 正是以此格式声明。 - 权限声明:frontmatter 可声明
holaboss_granted_tools、holaboss_granted_commands等授权字段(或嵌套在holaboss:下的granted_tools/granted_commands),用于限定技能可用工具。 - 引用块注入:
quotedSkillBlock()将技能正文包裹为<skill name="..." location="...">引用块,并注明"References are relative to <source_dir>",使参考文档的相对链接在技能被引用时保持有效。invokeWorkspaceSkill()通过resolveWorkspaceSkillByLookupToken()按skill_id或skill_name(大小写不敏感)匹配,找不到时抛出包含可用技能列表的错误。 - 调用方式:指令以
/stop-slop开头的行引用技能(见parseQuotedSkillInstruction()),prepareInstructionWithQuotedWorkspaceSkills()会把对应技能块展开进正文;/stop-slop也可带参数,参数会追加到技能块之后。
测试层面,workspace-skills.test.ts 验证了嵌入式技能在 HOLABOSS_RUNTIME_ROOT 指向 bundle 根目录时的解析、workspace 技能对同 id 嵌入式技能的覆盖顺序(嵌入式技能默认权威、workspace 技能可覆盖)等行为;ts-runner.test.ts 则验证了 ts-runner CLI 在 workspace 技能复用同一 id 时保持嵌入式技能权威、以及 App Builder 专项嵌入式技能对 collapsed subagents 不加载等边界行为。此外 prune_packaged_tree.mjs 在打包裁剪时保留 embedded-skills/ 目录,确保发布产物中技能依然可用。
实战建议:把 phrases.md 变成你自己的编辑流程
- 草稿阶段:写完后先全文扫描九大类短语——重点盯 throat-clearing openers 与所有
-ly副词,这两类在 AI 生成文本中出现频率最高。 - 结构阶段:对照 structures.md 检查二元对比、否定式列举、碎片句、远距离叙述者与被动语态,逐个把"无生命主体"换成"具体的人"。
- 交付阶段:跑一遍 SKILL.md 的 12 项快速检查清单,再用 5 维度评分,低于 35/50 就返工。
- 团队落地:参考 holaOS 的做法,将
stop-slop技能目录(SKILL.md + references/)放入你的 Agent 技能目录,配好HOLABOSS_EMBEDDED_SKILLS_DIR环境变量,即可让团队所有 Agent 在写作时自动携带这套去 AI 味规则。
最终检验标准只有一条,正如 phrases.md 反复强调的:能删就删,能具体就具体,让内容自己站住,而不是让修辞替它站台。