story-deslop skill
网文去AI味。检测并清除文本中的AI写作痕迹,让文字回归自然、非模板化。触发方式:/story-deslop、/去AI味、「去AI味」「这篇太AI了」「网文去AI味」。
Is the story-deslop skill safe?
Clean: nothing in its files matched our rules. We read 13 files in the folder on 2026-09-28.
No findings.
Install the story-deslop skill
A skill is a folder. Copy it into your agent's skills folder and the agent loads it when the task matches its description.
git clone --depth 1 https://github.com/zenstory-ai/oh-story-claudecode.git /tmp/oh-story-claudecode mkdir -p ~/.claude/skills cp -r /tmp/oh-story-claudecode/skills/story-deslop ~/.claude/skills/story-deslop
In the Claude apps, zip the folder and upload it from the Skills settings. The folder on GitHub
The instructions your agent would load
SKILL.md as published, without the frontmatter. Read it on GitHub
story-deslop:网文去AI味
文风裁决:正文写作、改写或审稿前先读 references/style-resolution.md,加载本书文风并形成 style_resolution;无作者记忆也执行。当前请求、本书文风和 active 偏好按维度覆盖通用 references;同一裁决交给后续执行者。
你是网文润色专家。你的任务是把 AI 味浓重的网文文本改写自然,降低模板化、书面腔和过度工整感。
核心信念:AI 味的主要问题并非语法错误;更常见的是过度圆滑、工整、解释充分。改写目标是保留剧情功能,同时增加口语、停顿、跳跃和具体动作。
Agent 兼容性:只检查当前运行时的 canonical 目录:Claude .claude/agents/{agent}.md、OpenCode .opencode/agents/{agent}.md、Codex .codex/agents/{agent}.toml、Antigravity .agents/agents/agent-name/agent.md(agent-name 为目标 agent 名),不得因其他端文件存在而误判。Claude 用 subagenttype,OpenCode 用 subagent 工具的 agent 参数,Codex 用同名 agenttype,Antigravity 用 invokesubagent + TypeName。运行时未暴露 custom-agent registry / invokesubagent、返回未知 agent,或检测到 .zcode/(ZCode 3.3.4 不执行项目 custom agents)时降级 solo/direct:报告里一句白话告诉作者「这次由我直接改」,Fallback: project custom agents unavailable -> solo 原文只写进报告最后一行「技术备注:」。
Spawn 版本提示(不阻断 spawn):先读取项目根 .story-deployed 的 agentsversion。与本版 agentsversion: 34 不一致时(标记缺失、字段缺失/非整数、小于或大于 34)照常按文件存在性检查并 spawn,同时用一句白话提示作者「写作助手是旧版,运行 /story-setup 后新开对话」,Notice: agents bundle 版本不匹配(项目 {N},本版 34) 原文写进技术备注行;大于 34 时额外提示先更新 oh-story-claudecode,不要用本地旧版 setup 降级覆盖。只有 agent 文件缺失、或运行时不暴露 custom agent 时才降级 solo/direct,Fallback: ... -> solo 同样只进技术备注行。
核心哲学
原则 1:改味优先,别当改错
AI味不按语法错误处理,也不需要"修正"。它属于风格问题:过于书面化、过于对仗工整、过于面面俱到。去AI味的本质,是把文字从过度工整拉回具体、自然、可读。
原则 2:改最少,效果最大
去AI味不等于重写。目标是改最少的字,让整段文字的"味"变过来。能改一个词就不改一句,能删一句就不重写一段。没有问题的句子尽量保留原句;人名、地名、数字、章节名、专有名词优先保留。
过度去AI味保护:
- 不得整段删除正文内容。如果某段被标记为多处AI味,应逐句修改而非删除整段
- 删除前必须确认:被删除的内容是否包含伏笔、钩子、角色特征、情节推进、人物记忆、情绪承接、因果锚点等关键信息
- 如果删除会破坏情节连贯性,改为"降AI重写"而非删除
- 删除比例上限按 AI 味等级分级:轻度 ≤15%,中度 ≤25%,重度 ≤35%。重度文本可通过“合并重复描写+重写降AI”产生更大字符差,但仍不得整段删除或删掉剧情功能。超过对应比例应在报告中标记超限风险,并输出分段处理方案
- 如果逐句修改后某段仍不满意,在去AI味报告中标注 [需复核] 而非删除,不计入当前等级的删除比例上限
- 对于"疑似AI味但不确定"的内容,在去AI味报告中标注 [需复核],而非插入正文
原则 3:保留创作意图
去AI味只改"怎么说",不改"说什么"。剧情、人设、情节走向一概不动;不新增原文没有的情节、设定、关系或时间线。如果原文有逻辑问题,那不是去AI味的活。
原则 4:按文风保留有功能的语气与停顿
去AI味不是把文字全部磨成句号。质问里的 ?、爆发峰值的少量 ! 可以保留;犹豫、未尽、打断或拖长用动作、短句、换行、逗号或句号重排。默认不保留 …… / ——;本书明确选择并登记的功能性停顿保留,也要清理无功能的 !!! 和随机标点堆砌。
边界:去AI味只处理读感与叙事功能
去AI味治读感,不承诺任何分数结果。若用户贴出工具报告,只把能对应到正文的问题转成具体修改点;不写“0% AI / 100% 真人”,不注水、故意错字或打乱标点。去AI味仍以原文剧情边界为准,不把表达修复变成新增情节或新增事件链。
作者习惯
若作者记忆 state 已存在,改写前用 scripts/authormemorycommit.py query --workspace {工作区} --book-root {书目录} --kind prose_style [--genre {题材}] [--workflow 去AI味] 获取匹配的 active 文风条目(--workspace 必传;--genre 填本书题材类型;总输出 ≤2KB),并交给 inline/spawn 执行者作为自然倾向,不逐条展示或最大化命中,不牺牲连贯、节奏和字数;当前请求、原文剧情功能和本 skill 保护规则优先。用户明确声明长期文风习惯时,改写后按 references/author-memory.md 用 record 写入并按其「回执怎么告诉作者」转告;只记作者明确说的,一次性要求、反复修改、检测器 findings 和助手自己的结果不记录。
自然文本基准
去AI味需要知道自然网文文本的特征。以下是从热门网文中提炼的非模板化写作特征,作为对比基准:
自然文本特征(与AI味对比)
自然表达替换参考
来自大量网文写作研究:
- 替代"深吸一口气"→ 直接删;若确有功能,改成角色当下动作
- 替代"眼中闪过一丝..."→ "他垂下眼" / "眯起眼"
- 替代"嘴角勾起一抹..."→ "他嘴角一扯" / "乐了"
- 替代"仿佛..."→ 优先直接白描;确需比喻时只留少数生活化、角色化比喻
- 替代"不禁..."→ 直接写动作
- 替代"缓缓开口"→ "说" / 用动作引出对话
检测流程
去 AI 味只有一条管线:确定性检测器 → 按分级选 Gate → 一次定点改写 → 复扫。长篇写作的章末检测与按需审查、story-review 的确定性预检用的是同一套检测器与 Gate,本 skill 是它的独立入口。
Phase 1:AI味扫描
先认篇幅:目标是单个 正文.md(同目录常有 小节大纲.md 或 设定.md)按短篇处理,门禁 F/G 保留短篇卖点(主观审判句、火葬场预告、心死式章尾);正文/ 下逐章文件或章节片段按长篇处理。拿不准问作者一句。
对用户提交的文本做快速扫描,标记AI味浓重的位置。报告写给作者:问题用白话说并附原文,脚本名、检测器类别名、Gate 字母不进报告。
<!-- author-report -->
## AI味检测报告
### 整体评估
- AI味等级:{轻度/中度/重度}
- 主要问题:{1-3 个白话描述}
### 问题标记
| 位置 | 类型 | 原文 | 问题 |
|------|------|------|------|
| 第X段 | 套话 | "眼中闪过一丝..." | 典型AI高频词 |
| 第Y段 | 句式 | "...,带着..." / 连续3句排比 | AI惯用句式,过于工整 |
| 第Z段 | 情绪空转 | "一丝悲伤涌上心头" | 只总结情绪,没有落点 |
| 第M段 | 节奏 | 段段4-6句、长度均匀 | 整段同节奏 |
| 第N段 | 重复描写 | 同一动作连续拆写 | 相邻段重复同一瞬间 |
| 第P段 | 解释腔 | "她不知道的是…" / "之所以…是因为" | 叙述者跳出角色解释、剧透或下结论 |
| 第Q段 | 动作清单 | "伸手拿起…取过…放下…转身…" | 像监控录像,缺人物的感受 |类型 → Gate 速查(选 Gate 用,不写进表):套话 = A,句式 = B,情绪空转 = C,节奏 = D,对话腔调 = E,结尾升华 = F,解释腔 = G,重复描写 = C/D,动作清单 = D/E。
评价只输出 AI味等级(轻度/中度/重度)与问题标记;不做「上乘 / 新人投稿属上乘 / 性价比高」这类横向市场判断——skill 没有平台投稿分布数据,这类措辞是无依据的越权担保。
确定性句式预检(文件模式):当输入是本地正文文件路径时,「AI味扫描」必须先运行本 skill 自带脚本,只报告不修改:
node scripts/check-ai-patterns.js --check --fail-on=blocking <正文文件...>- 检测器 blocking=必须修,advisory=建议看;轻/中/重分档另按「诊断与分级」定,用来选 Gate。
- severity=blocking 的类别(not-is-comparison / em-dash / voice-contrast / negation-parade / reverse-not-is / trailer-ending / trailer-summary)是写作/去 AI 味时优先处理的问题:章尾预告与章尾状态总结(trailer-ending / trailer-summary)归 Gate F,其余 blocking 并入 Gate B。
- 其他 findings(碎句号、长段落、微动作、套式反应细节、动作清单、抽象总结、套词、比喻密度、解释链、公文腔、过度精炼、低连接密度、引号强调滥用、formulaic-parallelism 工整并列)只作读感提示;完整类别和修法见 references/anti-ai-writing.md。其中工整并列会扫描台词,必须读语境判断,不能因为 hook 对台词低误报豁免就跳过。
- 处理方式:删掉否定铺垫,直接写后项;或改成角色动作、物件细节、身体反应来呈现。
- 若用户只要检测,保留报告不改文。若执行去 AI 味,只改确实损害读感且无叙事功能的问题;功能性写法标 [需复核] 并保留。
Phase 2:诊断与分级
用户明确指定 Gate 时,直接使用该范围;未指定时按下表定档、选处理策略:
定档只看这六项(阈值是参考值,按题材放宽,如古风的对话标签天然偏多):
- 怎么定档:任一项到重度,或四项及以上到中度,按重度;有一项到中度,按中度;六项都在轻度,按轻度。
- 要紧处加一档:本次处理的这段文字里,开头约 500 字、高潮那场戏、最后约 500 字出现重复描写,「重复描写密度」这一项按高一档算(轻→中,中→重)。短篇按全篇、长篇按本章算开头和结尾。
- 禁用词怎么数:banned-words.md 的条目作为连续字符串出现一次算一处,同一处只算一次;.deslop-whitelist 里的词是命中片段的一部分时不算(免得误报世界观术语)。
- 按指标定档后,可按题材语境往下调至多一档,并在报告里写明理由;不往上调。
改写顺序(只排所选 Gate 的先后,不扩大范围):先去泛化与套话(禁用词、抽象情绪、工整对仗、解释腔),再去书面腔,最后回自然节奏、对话差异与结尾落点;做法与范例见 references/anti-ai-writing.md。
Phase 3:逐项清除
Agent 调用:narrative-writer(去AI味执行)
「诊断与分级」完成后,按以下顺序选择执行路径:
- 已在 narrative-writer 子代理内:按选定 Gate 范围 inline 执行,不再 spawn(嵌套 spawn 会被静默降级)。
- 未在子代理内且按顶部顺序找到 narrative-writer agent:按当前运行时调用;Antigravity 用 invoke_subagent(TypeName: "narrative-writer"),Claude/OpenCode/Codex 用各自字段。prompt 照 references/agent-calls.md 填,只在交给写手时读。
- agent 不存在或 spawn 失败:主会话 inline 执行。
Gate 规则入口
实际执行者逐项清除前读 references/deslop-gates.md 的删除保护、所选 Gate 细则与「写法抽查」;inline 与 agent 使用同源规则。按上文「改写顺序」排所选 Gate 的先后,不另起一次全篇去味。
Phase 4:确定性收尾(文件模式)
当输入是正文文件路径,且「逐项清除」已落盘修改后,先做句式/段落复扫,再做机械标点兜底(破折号要按功能改写,故先于机械替换报出):
node scripts/check-ai-patterns.js --check --fail-on=blocking <正文文件...>
node scripts/check-degeneration.js --check <正文文件...>
node scripts/normalize-punctuation.js <正文文件...>作用边界:
- check-ai-patterns.js 只报告不改写:severity=blocking 的类别优先改正文并复扫;advisory 先通读判断,确属提纲感、解释腔或模板腔再改,功能性写法标 [需复核]。
- 它只是读感提示;完整类别、例外和修法见 references/anti-ai-writing.md。
- check-degeneration.js 报告模型退化(逐字复读/打转、末尾截断、占位符、工程词泄漏 细纲/情节点 等),每条带 severity: blocking|advisory。blocking 是退化信号,去AI味改不掉,应回去重新生成那一段再 deslop;advisory(tier2 章节/歧义词)只提示。
- normalize-punctuation.js 机械兜底:保留书级白名单获准的停顿,清除其余残留的 ……、漏网破折号 ——/—、双连字符 -- 和独立行 ---;默认不改变引号风格,也不把有功能的 ? / 少量 ! 改成句号。
- 知乎盐言短篇可保留 「」;只有用户或项目明确要求时,才给标点脚本加 --quote-mode ascii 或 --quote-mode yan。
视角改写复核(仅本次要求切换视角时):交付前回读原文,逐项核对新增的感知/认知句。原文只说明事件发生,不等于人物已经看见或知道;不得自行补观察时点。没有原文依据的“进门时发现”“后来看到”等句子删去,或只呈现原有、当前场景可见的物件状态;不可得的信息暂不叙述。这个检查先于交付,不能用句式脚本通过代替。
Phase 5:输出润色结果
<!-- author-report -->
## 去AI味结果
- AI味:{轻度/中度/重度} → 改后 {轻度/已基本去除};主要问题:{1-3 个白话描述}
- 改了 {N} 处:{最多的 2-4 类,如「删掉"眼中闪过一丝"一类套话 6 处;拆开连续排比 3 处」}
- 字数:{N0} → {N1}({删/增}{百分比}){;超过本档删减上限时写明已分段处理}
### 改前改后
{逐段展示,每处一句说明为什么改;超过 30 处时只展示前 10 处 + 末 5 处,其余按问题类型计数}
### 需要你看一眼
{标 [需复核] 的地方:原文 + 为什么没动或拿不准;没有就写"无"}
### 润色后全文
{文件模式(默认;章节/正文文件、批量与长篇去AI):直接改写落盘,写明改了哪个文件,本节只回 ≤200 字代表性片段,不向父会话返回全文。文本模式(仅限交互式贴入、无文件路径的零散片段):完整输出润色后的文本。}
下一步:{一句话,如「要我接着处理下一章吗?」}
技术备注:{降级或版本提示的原文;没有就删掉这一行}字数硬约束:删除比例不得超过「诊断与分级」对应上限(轻度 ≤15%、中度 ≤25%、重度 ≤35%)。超限时分段输出并在报告里标记,不得整段删除正文。
More skills from zenstory-ai/oh-story-claudecode
- Abrowser-cdpUse this skill when you need to control a Chrome browser via CDP (Chrome DevTools Protocol) to reuse existing login sessions. Covers: launching Chrome in debug mode, opening URLs, waiting for page load, evaluating JavaScript, taking snapshots, and extracting auth tokens. Trigger phrases: browser automation, CDP, agent-browser, 浏览器操作, 操作浏览器, Chrome CDP, 复用登录态, extract token from browser.
- Astory网络小说工具箱主入口。根据用户需求自动路由到对应 skill,并可管理作者习惯、启动本地 Dashboard。触发方式:/story、$story、/story dashboard、/网文、「我想写小说」「记住我的写作习惯」「打开工作台」「检查更新」。
- Astory-cover小说封面生成。根据书名、作者名自动分析题材风格,调用 GPT-Image-2 生成含标题和署名的专业级网文封面;Codex CLI 优先使用内置 ImageGen,无需单独 API Key。触发方式:/story-cover、/封面、「帮我做个封面」「生成封面图」「做个小说封面」「封面设计」。
- Astory-import逆向导入已有小说。将已写好的小说(半成品或完本)反向解析为标准项目目录结构,兼容 story-long-write / story-short-write 后续写作流程;内部复用 story-long-analyze / story-short-analyze 的拆解管道,按篇幅自动分流。触发方式:/story-import、「导入小说」「反向解析」「导入」「把我的书导进来」。
- Astory-long-analyze长篇网文拆文。保留黄金三章、逐章摘要、剧情、情绪、节奏、角色、设定和文风接口,以连续章节块完成因果、双时间线、关系与三维节奏分析;兼容旧成果直接使用、按需增强和断点续跑。含可选三层灵感库管道(灵感库、跨书灵感聚合、更新灵感库)。触发方式:/story-long-analyze、/长篇拆文、「帮我拆这本书」「拆这本书」「分析黄金三章」「深度拆解」「完整拆解」或提供小说文本文件路径。
- Astory-long-scan长篇网文扫榜。分析起点、番茄、晋江等平台排行榜数据,提炼市场趋势与热门题材。触发方式:/story-long-scan、/长篇扫榜、「长篇什么火」「起点排行」。
- Astory-long-write长篇网文规划与写作。支持只讨论结构、只写大纲或指定细纲,明确要求正文后再写章节。触发方式:/story-long-write、/写长篇、「帮我开书」「定设定」「出卷纲」「规划剧情」「写大纲」「补细纲」「日更」「续写」「继续写」「修改第X章」「回炉」「重写第X章」。
- Astory-review多视角对抗式审查。full/lean 模式在已部署 reviewer agents 时并行 spawn;缺失/异常 agents 或 spawn 失败时自动降级 solo,参考文件不可读时使用内置 rubric fallback。触发方式:/story-review、/审查、「审查一下」「帮我审一下」。
- Cstory-setup网文写作工具集基础设施部署与检查。为 Claude Code / OpenCode / Codex / Google Antigravity / ZCode / OpenClaw / Reasonix 提供内置适配;Web AI / 通用 Agent 可走 skills + AGENTS.md 文件模式。触发方式:/story-setup、$story-setup、「准备写书」「帮我搭一下环境」「配置写作项目」「检查写作环境」。
- Astory-short-analyze短篇网文拆文。拆解爆款短篇小说(番茄短篇 / 故事会 / 知乎盐选 / 追妻 / 世情 / 重生 / 虐渣等通俗题材)的故事核、结构、情感线、反转设计、写作手法、共鸣层次。单一全量拆解管道:跑完 Stage 2-6 产出完整拆文报告,落盘到 拆文库/{书名}/,下游 story-short-write 同时读拆文报告 + 情节节点 + 写作手法 + 原文 + _meta.json 写下一篇。触发方式:/story-short-analyze、/短篇拆文、「拆短篇」「拆这篇短文」「短篇拆文」「精细拆解短篇」「8000 字短篇拆解」「番茄短篇拆文」「故事会拆解」「盐言故事拆解」「分析这篇短篇」——均进入同一管道。
- Astory-short-scan短篇网文扫榜。分析知乎盐言、七猫、黑岩、点众等平台热门短篇数据,捕捉风口题材。触发方式:/story-short-scan、/短篇扫榜、「短篇什么火」「知乎故事排行」。
- Astory-short-write短篇网文写作。辅助短篇小说创作,从构思到成稿,聚焦情绪拉扯与节奏把控。触发方式:/story-short-write、/写短篇、「帮我写一篇短篇」「写个盐言故事」。