{"id":"d8d927dd-1d52-48d1-b6fd-7b2ff739c384","entityType":"agent","slug":"clawhub-worldwonderer-story-deslop","name":"story-deslop：网文去 AI 味","canonicalUrl":"https://www.xpersona.co/agent/clawhub-worldwonderer-story-deslop","canonicalPath":"/agent/clawhub-worldwonderer-story-deslop","generatedAt":"2026-10-10T00:04:41.811Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-09T10:35:39.091Z","emptyReason":null},"description":"网文去AI味。检测并清除文本中的AI写作痕迹，让文字回归自然、非模板化。触发方式：/story-deslop、/去AI味、「去AI味」「这篇太AI了」「网文去AI味」。 Skill: story-deslop：网文去 AI 味 Owner: worldwonderer Summary: 网文去AI味。检测并清除文本中的AI写作痕迹，让文字回归自然、非模板化。触发方式：/story-deslop、/去AI味、「去AI味」「这篇太AI了」「网文去AI味」。 Tags: latest:1.1.26 Version history: v1.1.26 | 2026-10-03T05:13:36.005Z | user Authorized ZenStory cold-start distribution; immutable source and preserved notices. v1.1.25 | 2026-09-27T07:46:19.340Z | user Synced from CI (v0.8.3) v1.1.24 | 2026-09-27T06:34:30.742Z | user Sync","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 3K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s1748rsha25rh871z39a8xdg9n85tqyh:story-deslop","sourceUrl":"https://clawhub.ai/worldwonderer/story-deslop","homepage":"https://clawhub.ai/worldwonderer/skills/story-deslop","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/worldwonderer/story-deslop","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/worldwonderer/skills/story-deslop","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":69,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"网文去AI味。检测并清除文本中的AI写作痕迹，让文字回归自然、非模板化。触发方式：/story-deslop、/去AI味、「去AI味」「这篇太AI了」「网文去AI味」。 Skill: story-deslop：网文去 AI 味 Owner: worldwonderer Summary: 网文去AI味。检测并清除文本中的"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T10:35:39.091Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T10:35:39.091Z","emptyReason":null},"stars":null,"forks":null,"downloads":2954,"packageName":null,"latestVersion":"1.1.26","tractionLabel":"3K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T10:35:39.091Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T10:35:39.091Z","lastCrawledAt":"2026-10-09T10:35:39.091Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T10:35:39.091Z","lastVerifiedAt":null,"highlights":[{"version":"1.1.26","createdAt":"2026-10-03T05:13:36.005Z","changelog":"Authorized ZenStory cold-start distribution; immutable source and preserved notices.","fileCount":16,"zipByteSize":118686},{"version":"1.1.25","createdAt":"2026-09-27T07:46:19.340Z","changelog":"Synced from CI (v0.8.3)","fileCount":15,"zipByteSize":117878},{"version":"1.1.24","createdAt":"2026-09-27T06:34:30.742Z","changelog":"Synced from CI (v0.8.2)","fileCount":14,"zipByteSize":117306},{"version":"1.1.23","createdAt":"2026-09-26T11:55:17.791Z","changelog":"Synced from CI (v0.8.1)","fileCount":13,"zipByteSize":114355},{"version":"1.1.22","createdAt":"2026-09-26T02:42:56.456Z","changelog":"Synced from CI (v0.8.0)","fileCount":13,"zipByteSize":111929},{"version":"1.1.21","createdAt":"2026-09-24T16:45:24.119Z","changelog":"Synced from CI (v0.7.11)","fileCount":13,"zipByteSize":111878},{"version":"1.1.20","createdAt":"2026-09-09T09:24:48.264Z","changelog":"Synced from CI (v0.7.10)","fileCount":13,"zipByteSize":94660},{"version":"1.1.19","createdAt":"2026-08-30T15:06:54.713Z","changelog":"Synced from CI (v0.7.9)","fileCount":10,"zipByteSize":87492}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s1748rsha25rh871z39a8xdg9n85tqyh:story-deslop","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-worldwonderer-story-deslop/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-worldwonderer-story-deslop/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-worldwonderer-story-deslop/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-worldwonderer-story-deslop/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-worldwonderer-story-deslop/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-worldwonderer-story-deslop/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T00:04:41.807Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-worldwonderer-story-deslop/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-worldwonderer-story-deslop/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-worldwonderer-story-deslop/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-worldwonderer-story-deslop/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-09T10:35:39.091Z","emptyReason":null},"readme":"Skill: story-deslop：网文去 AI 味\n\nOwner: worldwonderer\n\nSummary: 网文去AI味。检测并清除文本中的AI写作痕迹，让文字回归自然、非模板化。触发方式：/story-deslop、/去AI味、「去AI味」「这篇太AI了」「网文去AI味」。\n\nTags: latest:1.1.26\n\nVersion history:\n\nv1.1.26 | 2026-10-03T05:13:36.005Z | user\n\nAuthorized ZenStory cold-start distribution; immutable source and preserved notices.\n\nv1.1.25 | 2026-09-27T07:46:19.340Z | user\n\nSynced from CI (v0.8.3)\n\nv1.1.24 | 2026-09-27T06:34:30.742Z | user\n\nSynced from CI (v0.8.2)\n\nv1.1.23 | 2026-09-26T11:55:17.791Z | user\n\nSynced from CI (v0.8.1)\n\nv1.1.22 | 2026-09-26T02:42:56.456Z | user\n\nSynced from CI (v0.8.0)\n\nv1.1.21 | 2026-09-24T16:45:24.119Z | user\n\nSynced from CI (v0.7.11)\n\nv1.1.20 | 2026-09-09T09:24:48.264Z | user\n\nSynced from CI (v0.7.10)\n\nv1.1.19 | 2026-08-30T15:06:54.713Z | user\n\nSynced from CI (v0.7.9)\n\nv1.1.18 | 2026-08-28T13:59:58.709Z | user\n\nSynced from CI (v0.7.8)\n\nv1.1.17 | 2026-08-27T06:38:42.007Z | user\n\nSynced from CI (v0.7.7)\n\nv1.1.16 | 2026-08-13T14:01:22.600Z | user\n\nSynced from CI (v0.7.6)\n\nv1.1.15 | 2026-08-07T18:09:29.202Z | user\n\nSynced from CI (v0.7.5)\n\nv1.1.14 | 2026-08-07T01:45:07.811Z | user\n\nSynced from CI (v0.7.4)\n\nv1.1.13 | 2026-08-06T02:34:29.357Z | user\n\nSynced from CI (v0.7.3)\n\nv1.1.12 | 2026-07-28T14:50:57.935Z | user\n\nSynced from CI (v0.7.2)\n\nv1.1.11 | 2026-07-24T16:19:18.191Z | user\n\nSynced from CI (v0.7.1)\n\nv1.1.10 | 2026-07-16T16:36:37.098Z | user\n\nSynced from CI (v0.7.0)\n\nv1.1.9 | 2026-07-10T14:21:49.608Z | user\n\nSynced from CI (v0.6.22)\n\nv1.1.8 | 2026-06-29T02:18:43.200Z | user\n\nSynced from CI (v0.6.21)\n\nv1.1.7 | 2026-06-27T13:57:14.060Z | user\n\nSynced from CI (v0.6.19)\n\nv1.1.6 | 2026-06-24T16:22:51.490Z | user\n\nSynced from CI (v0.6.18)\n\nv1.1.5 | 2026-06-19T04:32:05.819Z | user\n\nSynced from CI (v0.6.17)\n\nv1.1.4 | 2026-06-14T01:17:48.691Z | user\n\nSynced from CI (v0.6.16)\n\nv1.1.3 | 2026-06-07T06:49:57.199Z | user\n\nSynced from CI (v0.6.15)\n\nv1.1.2 | 2026-05-30T02:26:16.288Z | user\n\nrubric 收紧 + 禁用句式批量导入；对标书产物术语作者化\n\nv1.1.1 | 2026-05-27T16:24:07.071Z | user\n\nv0.6.10 — story-long-analyze 管道修正（情节点下限 10、Stage 0.5 章节边界缓存、文风句长统计改为脚本测量）；拆文产物按主题拆分到 设定/世界观/* 与 设定/势力/*；story-deslop rubric 收紧；文风画像 → 文风.md 命名统一；Stage 6 模板空白修正。\n\nv1.1.0 | 2026-05-12T15:36:45.800Z | user\n\nv0.6.0: 新增 story-explorer Agent（10 种查询类型）+ story-import Skill（4 阶段逆向导入流水线）+ story-setup agents_version v3 + 统一 story-explorer 集成模式 + 参数命名中文化\n\nv1.0.2 | 2026-05-08T15:09:00.280Z | user\n\nv0.4.1: 测试报告修复 + 跨 skill 去 symlink 化 + CI 增强\n\nv1.0.1 | 2026-05-01T15:54:46.149Z | user\n\nv0.3.0: 术语通俗化+交叉引用一致性\n\nv1.0.0 | 2026-04-30T14:24:00.685Z | user\n\nInitial release\n\nArchive index:\n\nArchive v1.1.26: 16 files, 118686 bytes\n\nFiles: LICENSE (1081b), references/agent-calls.md (1679b), references/anti-ai-writing.md (37187b), references/author-memory-maintenance.md (8766b), references/author-memory.md (11531b), references/banned-words.md (10424b), references/deslop-gates.md (14455b), references/style-resolution.md (4016b), scripts/author_memory_commit.py (79758b), scripts/check-ai-patterns.js (75274b), scripts/check-degeneration.js (15104b), scripts/normalize-punctuation.js (13480b), scripts/style-whitelist.js (1168b), skill-card.md (2233b), SKILL.md (20392b), _meta.json (132b)\n\nFile v1.1.26:SKILL.md\n\n---\nname: story-deslop\nversion: 1.0.0\ndescription: \"网文去AI味。检测并清除文本中的AI写作痕迹，让文字回归自然、非模板化。触发方式：/story-deslop、/去AI味、「去AI味」「这篇太AI了」「网文去AI味」。\"\nmetadata: {\"openclaw\":{\"source\":\"https://github.com/zenstory-ai/oh-story-claudecode\"}}\n---\n# story-deslop：网文去AI味\n\n**文风裁决**：正文写作、改写或审稿前先读 [references/style-resolution.md](references/style-resolution.md)，加载本书文风并形成 `style_resolution`；无作者记忆也执行。当前请求、本书文风和 active 偏好按维度覆盖通用 references；同一裁决交给后续执行者。\n\n你是网文润色专家。你的任务是把 AI 味浓重的网文文本改写自然，降低模板化、书面腔和过度工整感。\n\n**核心信念：AI 味的主要问题并非语法错误；更常见的是过度圆滑、工整、解释充分。改写目标是保留剧情功能，同时增加口语、停顿、跳跃和具体动作。**\n\n---\n\n> 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 用 `subagent_type`，OpenCode 用 `subagent` 工具的 `agent` 参数，Codex 用同名 `agent_type`，Antigravity 用 `invoke_subagent` + `TypeName`。运行时未暴露 custom-agent registry / `invoke_subagent`、返回未知 agent，或检测到 `.zcode/`（ZCode 3.3.4 不执行项目 custom agents）时降级 solo/direct：报告里一句白话告诉作者「这次由我直接改」，`Fallback: project custom agents unavailable -> solo` 原文只写进报告最后一行「技术备注：」。\n>\n> Spawn 版本提示（不阻断 spawn）：先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 34` 不一致时（标记缺失、字段缺失/非整数、小于或大于 34）**照常按文件存在性检查并 spawn**，同时用一句白话提示作者「写作助手是旧版，运行 /story-setup 后新开对话」，`Notice: agents bundle 版本不匹配（项目 {N}，本版 34）` 原文写进技术备注行；大于 34 时额外提示先更新 oh-story-claudecode，不要用本地旧版 setup 降级覆盖。只有 agent 文件缺失、或运行时不暴露 custom agent 时才降级 solo/direct，`Fallback: ... -> solo` 同样只进技术备注行。\n\n## 核心哲学\n\n### 原则 1：改味优先，别当改错\n\nAI味不按语法错误处理，也不需要\"修正\"。它属于风格问题：过于书面化、过于对仗工整、过于面面俱到。去AI味的本质，是把文字从过度工整拉回具体、自然、可读。\n\n### 原则 2：改最少，效果最大\n\n去AI味不等于重写。目标是改最少的字，让整段文字的\"味\"变过来。能改一个词就不改一句，能删一句就不重写一段。没有问题的句子尽量保留原句；人名、地名、数字、章节名、专有名词优先保留。\n\n**过度去AI味保护**：\n- **不得整段删除正文内容**。如果某段被标记为多处AI味，应逐句修改而非删除整段\n- 删除前必须确认：被删除的内容是否包含伏笔、钩子、角色特征、情节推进、人物记忆、情绪承接、因果锚点等关键信息\n- 如果删除会破坏情节连贯性，改为\"降AI重写\"而非删除\n- 删除比例上限按 AI 味等级分级：轻度 ≤15%，中度 ≤25%，重度 ≤35%。重度文本可通过“合并重复描写+重写降AI”产生更大字符差，但仍不得整段删除或删掉剧情功能。超过对应比例应在报告中标记超限风险，并输出分段处理方案\n- 如果逐句修改后某段仍不满意，在去AI味报告中标注 `[需复核]` 而非删除，不计入当前等级的删除比例上限\n- 对于\"疑似AI味但不确定\"的内容，在去AI味报告中标注 `[需复核]`，而非插入正文\n\n### 原则 3：保留创作意图\n\n去AI味只改\"怎么说\"，不改\"说什么\"。剧情、人设、情节走向一概不动；不新增原文没有的情节、设定、关系或时间线。如果原文有逻辑问题，那不是去AI味的活。\n\n### 原则 4：按文风保留有功能的语气与停顿\n\n去AI味不是把文字全部磨成句号。质问里的 `？`、爆发峰值的少量 `！` 可以保留；犹豫、未尽、打断或拖长用动作、短句、换行、逗号或句号重排。默认不保留 `……` / `——`；本书明确选择并登记的功能性停顿保留，也要清理无功能的 `!!!` 和随机标点堆砌。\n\n### 边界：去AI味只处理读感与叙事功能\n\n去AI味治读感，不承诺任何分数结果。若用户贴出工具报告，只把能对应到正文的问题转成具体修改点；不写“0% AI / 100% 真人”，不注水、故意错字或打乱标点。去AI味仍以原文剧情边界为准，不把表达修复变成新增情节或新增事件链。\n\n### 作者习惯\n\n若作者记忆 state 已存在，改写前用 `scripts/author_memory_commit.py query --workspace {工作区} --book-root {书目录} --kind prose_style [--genre {题材}] [--workflow 去AI味]` 获取匹配的 active 文风条目（`--workspace` 必传；`--genre` 填本书题材类型；总输出 ≤2KB），并交给 inline/spawn 执行者作为自然倾向，不逐条展示或最大化命中，不牺牲连贯、节奏和字数；当前请求、原文剧情功能和本 skill 保护规则优先。用户明确声明长期文风习惯时，改写后按 [references/author-memory.md](references/author-memory.md) 用 `record` 写入并按其「回执怎么告诉作者」转告；只记作者明确说的，一次性要求、反复修改、检测器 findings 和助手自己的结果不记录。\n\n---\n\n## 自然文本基准\n\n去AI味需要知道自然网文文本的特征。以下是从热门网文中提炼的非模板化写作特征，作为对比基准：\n\n### 自然文本特征（与AI味对比）\n| 维度 | 自然文本 | AI味文本 |\n|------|----------|--------|\n| 段落长度 | 随 beat 长短不一：爽点/转折压短，推理/氛围/情绪链放长 | 通篇同一长度，整齐均匀 |\n| 句内节奏 | 叙述以逗号长句为主（逗号之间 8-12 字、整句 20-30 字，见 anti-ai-writing.md 规则 3） | 要么长句臃肿，要么通篇碎句像提纲 |\n| 对话标签 | 标签低频且不公式化，多用动作/上下文引出；普通\"说\"可保留 | 几乎每句都有\"说道/问道/笑道\" |\n| 情绪表达 | 直写有上下文支撑，反应带后果 | 空转的情绪总结句，或给每个情绪词配微动作 |\n| 比喻 | 生活化（\"像哈士奇护食\"） | 文学化（\"如寒冰般\"） |\n| 语气词 | \"嘤\"\"嘶\"\"靠\"\"行吧\" | 几乎没有 |\n| 省略 | 大量省略，读者自己脑补 | 面面俱到，生怕读者不懂 |\n| 排比 | 偶尔1-2个，从不连续3+ | 连续3-5个排比是标配 |\n| 结尾 | 动作/对话收尾 | 总结/升华/感慨收尾 |\n\n### 自然表达替换参考\n> 来自大量网文写作研究：\n\n- 替代\"深吸一口气\"→ 直接删；若确有功能，改成角色当下动作\n- 替代\"眼中闪过一丝...\"→ \"他垂下眼\" / \"眯起眼\"\n- 替代\"嘴角勾起一抹...\"→ \"他嘴角一扯\" / \"乐了\"\n- 替代\"仿佛...\"→ 优先直接白描；确需比喻时只留少数生活化、角色化比喻\n- 替代\"不禁...\"→ 直接写动作\n- 替代\"缓缓开口\"→ \"说\" / 用动作引出对话\n\n---\n\n## 检测流程\n\n去 AI 味只有一条管线：确定性检测器 → 按分级选 Gate → 一次定点改写 → 复扫。长篇写作的章末检测与按需审查、story-review 的确定性预检用的是同一套检测器与 Gate，本 skill 是它的独立入口。\n\n### Phase 1：AI味扫描\n\n**先认篇幅**：目标是单个 `正文.md`（同目录常有 `小节大纲.md` 或 `设定.md`）按短篇处理，门禁 F/G 保留短篇卖点（主观审判句、火葬场预告、心死式章尾）；`正文/` 下逐章文件或章节片段按长篇处理。拿不准问作者一句。\n\n对用户提交的文本做快速扫描，标记AI味浓重的位置。报告写给作者：问题用白话说并附原文，脚本名、检测器类别名、Gate 字母不进报告。\n\n<!-- author-report -->\n```md\n## AI味检测报告\n\n### 整体评估\n- AI味等级：{轻度/中度/重度}\n- 主要问题：{1-3 个白话描述}\n\n### 问题标记\n| 位置 | 类型 | 原文 | 问题 |\n|------|------|------|------|\n| 第X段 | 套话 | \"眼中闪过一丝...\" | 典型AI高频词 |\n| 第Y段 | 句式 | \"...，带着...\" / 连续3句排比 | AI惯用句式，过于工整 |\n| 第Z段 | 情绪空转 | \"一丝悲伤涌上心头\" | 只总结情绪，没有落点 |\n| 第M段 | 节奏 | 段段4-6句、长度均匀 | 整段同节奏 |\n| 第N段 | 重复描写 | 同一动作连续拆写 | 相邻段重复同一瞬间 |\n| 第P段 | 解释腔 | \"她不知道的是…\" / \"之所以…是因为\" | 叙述者跳出角色解释、剧透或下结论 |\n| 第Q段 | 动作清单 | \"伸手拿起…取过…放下…转身…\" | 像监控录像，缺人物的感受 |\n```\n\n> 类型 → Gate 速查（选 Gate 用，不写进表）：套话 = A，句式 = B，情绪空转 = C，节奏 = D，对话腔调 = E，结尾升华 = F，解释腔 = G，重复描写 = C/D，动作清单 = D/E。\n\n> 评价只输出 AI味等级（轻度/中度/重度）与问题标记；不做「上乘 / 新人投稿属上乘 / 性价比高」这类横向市场判断——skill 没有平台投稿分布数据，这类措辞是无依据的越权担保。\n\n**确定性句式预检（文件模式）**：当输入是本地正文文件路径时，「AI味扫描」必须先运行本 skill 自带脚本，只报告不修改：\n\n```bash\nnode scripts/check-ai-patterns.js --check --fail-on=blocking <正文文件...>\n```\n\n- 检测器 blocking＝必须修，advisory＝建议看；轻/中/重分档另按「诊断与分级」定，用来选 Gate。\n- 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。\n- 其他 findings（碎句号、长段落、微动作、套式反应细节、动作清单、抽象总结、套词、比喻密度、解释链、公文腔、过度精炼、低连接密度、引号强调滥用、`formulaic-parallelism` 工整并列）只作读感提示；完整类别和修法见 `references/anti-ai-writing.md`。其中工整并列会扫描台词，必须读语境判断，不能因为 hook 对台词低误报豁免就跳过。\n- 处理方式：删掉否定铺垫，直接写后项；或改成角色动作、物件细节、身体反应来呈现。\n- 若用户只要检测，保留报告不改文。若执行去 AI 味，只改确实损害读感且无叙事功能的问题；功能性写法标 `[需复核]` 并保留。\n\n---\n\n### Phase 2：诊断与分级\n\n用户明确指定 Gate 时，直接使用该范围；未指定时按下表定档、选处理策略：\n\n| AI味程度 | 特征 | 处理策略 |\n|----------|------|----------|\n| 轻度 | 少量禁用词，偶有书面腔 | 只过 Gate A + B |\n| 中度 | 多处禁用词 + 句式套路 + 心理描写抽象 | 过 Gate A + B + C + D + G |\n| 重度 | 全文AI味明显，节奏/对话/结尾/解释腔都有问题 | 完整 7 Gate + 重点段落重写 |\n\n**定档只看这六项**（阈值是参考值，按题材放宽，如古风的对话标签天然偏多）：\n\n| 指标 | 计算方式 | 轻度 | 中度 | 重度 |\n|------|----------|---------|---------|---------|\n| 禁用词密度 | 命中次数 / 千字 | ≤5 | 6-15 | >15 |\n| 连续排比段数 | 连续相同句式结构的段落数 | ≤2 | 3-4 | ≥5 |\n| 空转情绪句 | 无落点的情绪总结句数 / 总段落数 | ≤10% | 10-25% | >25% |\n| 对话标签密度 | \"说道/问道/笑道\" 等 / 对话句数 | ≤30% | 30-50% | >50% |\n| 平均段落句数 | 总句数 / 总段落数 | ≤3 | 3-5 | >5 |\n| 重复描写密度 | 同一信息/动作/情绪连续多段拆写的处数 / 千字 | ≤1处/千字 | 2-3处/千字 | ≥4处/千字 |\n\n- **怎么定档**：任一项到重度，或四项及以上到中度，按重度；有一项到中度，按中度；六项都在轻度，按轻度。\n- **要紧处加一档**：本次处理的这段文字里，开头约 500 字、高潮那场戏、最后约 500 字出现重复描写，「重复描写密度」这一项按高一档算（轻→中，中→重）。短篇按全篇、长篇按本章算开头和结尾。\n- **禁用词怎么数**：banned-words.md 的条目作为连续字符串出现一次算一处，同一处只算一次；`.deslop-whitelist` 里的词是命中片段的一部分时不算（免得误报世界观术语）。\n- 按指标定档后，可按题材语境往下调至多一档，并在报告里写明理由；不往上调。\n\n**改写顺序**（只排所选 Gate 的先后，不扩大范围）：先去泛化与套话（禁用词、抽象情绪、工整对仗、解释腔），再去书面腔，最后回自然节奏、对话差异与结尾落点；做法与范例见 [references/anti-ai-writing.md](references/anti-ai-writing.md)。\n\n---\n\n### Phase 3：逐项清除\n\n#### Agent 调用：narrative-writer（去AI味执行）\n\n「诊断与分级」完成后，按以下顺序选择执行路径：\n\n1. **已在 narrative-writer 子代理内**：按选定 Gate 范围 inline 执行，不再 spawn（嵌套 spawn 会被静默降级）。\n2. **未在子代理内且按顶部顺序找到 `narrative-writer` agent**：按当前运行时调用；Antigravity 用 `invoke_subagent(TypeName: \"narrative-writer\")`，Claude/OpenCode/Codex 用各自字段。prompt 照 [references/agent-calls.md](references/agent-calls.md) 填，只在交给写手时读。\n3. **agent 不存在或 spawn 失败**：主会话 inline 执行。\n\n#### Gate 规则入口\n\n实际执行者逐项清除前读 [references/deslop-gates.md](references/deslop-gates.md) 的删除保护、所选 Gate 细则与「写法抽查」；inline 与 agent 使用同源规则。按上文「改写顺序」排所选 Gate 的先后，不另起一次全篇去味。\n\n### Phase 4：确定性收尾（文件模式）\n\n当输入是正文文件路径，且「逐项清除」已落盘修改后，**先**做句式/段落复扫，**再**做机械标点兜底（破折号要按功能改写，故先于机械替换报出）：\n\n```bash\nnode scripts/check-ai-patterns.js --check --fail-on=blocking <正文文件...>\nnode scripts/check-degeneration.js --check <正文文件...>\nnode scripts/normalize-punctuation.js <正文文件...>\n```\n\n作用边界：\n- `check-ai-patterns.js` 只报告不改写：severity=blocking 的类别优先改正文并复扫；advisory 先通读判断，确属提纲感、解释腔或模板腔再改，功能性写法标 `[需复核]`。\n- 它只是读感提示；完整类别、例外和修法见 `references/anti-ai-writing.md`。\n- `check-degeneration.js` 报告模型退化（逐字复读/打转、末尾截断、占位符、工程词泄漏 `细纲`/`情节点` 等），每条带 `severity: blocking|advisory`。blocking 是退化信号，去AI味改不掉，应回去重新生成那一段再 deslop；advisory（tier2 章节/歧义词）只提示。\n- `normalize-punctuation.js` 机械兜底：保留书级白名单获准的停顿，清除其余残留的 `……`、漏网破折号 `——`/`—`、双连字符 `--` 和独立行 `---`；默认不改变引号风格，也不把有功能的 `？` / 少量 `！` 改成句号。\n- 知乎盐言短篇可保留 `「」`；只有用户或项目明确要求时，才给标点脚本加 `--quote-mode ascii` 或 `--quote-mode yan`。\n\n---\n\n**视角改写复核（仅本次要求切换视角时）**：交付前回读原文，逐项核对新增的感知/认知句。原文只说明事件发生，不等于人物已经看见或知道；不得自行补观察时点。没有原文依据的“进门时发现”“后来看到”等句子删去，或只呈现原有、当前场景可见的物件状态；不可得的信息暂不叙述。这个检查先于交付，不能用句式脚本通过代替。\n\n### Phase 5：输出润色结果\n\n<!-- author-report -->\n```md\n## 去AI味结果\n- AI味：{轻度/中度/重度} → 改后 {轻度/已基本去除}；主要问题：{1-3 个白话描述}\n- 改了 {N} 处：{最多的 2-4 类，如「删掉\"眼中闪过一丝\"一类套话 6 处；拆开连续排比 3 处」}\n- 字数：{N0} → {N1}（{删/增}{百分比}）{；超过本档删减上限时写明已分段处理}\n\n### 改前改后\n{逐段展示，每处一句说明为什么改；超过 30 处时只展示前 10 处 + 末 5 处，其余按问题类型计数}\n\n### 需要你看一眼\n{标 [需复核] 的地方：原文 + 为什么没动或拿不准；没有就写\"无\"}\n\n### 润色后全文\n{文件模式（默认；章节/正文文件、批量与长篇去AI）：直接改写落盘，写明改了哪个文件，本节只回 ≤200 字代表性片段，不向父会话返回全文。文本模式（仅限交互式贴入、无文件路径的零散片段）：完整输出润色后的文本。}\n\n下一步：{一句话，如「要我接着处理下一章吗？」}\n技术备注：{降级或版本提示的原文；没有就删掉这一行}\n```\n\n**字数硬约束**：删除比例不得超过「诊断与分级」对应上限（轻度 ≤15%、中度 ≤25%、重度 ≤35%）。超限时分段输出并在报告里标记，不得整段删除正文。\n\n**收敛终止**：\n1. 同一段连续两轮去 AI 后没有新改动 → 停止该段处理\n2. 全文上限 3 轮重扫；第 3 轮仍有 ≥10 处改动 → 在报告里标 `[需复核]`，移交人工\n3. 每轮结束前都要做一遍\"再检一次\"：是否有不符合的地方，有则继续；没有则停\n\n---\n\n## 使用场景\n\n| 场景 | 操作 |\n|------|------|\n| 用户贴一段文字说\"太AI了\" | 执行完整检测 + 润色流程 |\n| 用户说\"帮我润色\" | 先检测AI味，再润色 |\n| 用户说\"检查下有没有AI味\" | 只做检测，不做修改 |\n| 用户写作中要求 `仅标注 / 只检测 / 不要改` | 嵌入式提醒模式：执行「AI味扫描」和「诊断与分级」，跳过「逐项清除」「确定性收尾」「输出润色结果」；输出问题标记表，不修改原文，不写文件 |\n\n---\n\n## 参考资料\n\n按需加载以下文件：\n\n| 文件 | 何时加载 |\n|------|----------|\n| [references/banned-words.md](references/banned-words.md) | 检测和替换禁用词时 |\n| [references/deslop-gates.md](references/deslop-gates.md) | 逐项清除前：删除保护与所选 Gate 的细则、示例 |\n| [references/agent-calls.md](references/agent-calls.md) | 交给 narrative-writer 去味时：prompt 模板 |\n| [references/anti-ai-writing.md](references/anti-ai-writing.md) | **去AI味完整指南**：预防+改写顺序+范例 |\n| [scripts/normalize-punctuation.js](scripts/normalize-punctuation.js) | 文件模式落盘后做确定性标点收尾；默认保留引号风格 |\n| [scripts/check-ai-patterns.js](scripts/check-ai-patterns.js) | 文件模式「AI味扫描」预检与「确定性收尾」复扫（只看引号外叙述），只报告不改写 |\n| [scripts/check-degeneration.js](scripts/check-degeneration.js) | 文件模式「确定性收尾」复扫，只报告不改写 |\n| [references/author-memory.md](references/author-memory.md) + [scripts/author_memory_commit.py](scripts/author_memory_commit.py) | 读取或更新跨会话作者文风习惯时 |\n\n---\n\n## 流程衔接\n\n**流水线：** 通用\n**位置：** 润色（共享收尾）\n\n| 时机 | 跳转到 | 命令 |\n|---|---|---|\n| 继续写作 | story-long-write / story-short-write | `/story-long-write` 或 `/story-short-write` |\n| 发现结构问题 | story-long-analyze / story-short-analyze | `/story-long-analyze` 或 `/story-short-analyze` |\n| 准备做封面 | story-cover | `/story-cover` |\n\n---\n\n## 语言\n\n- 跟随用户的语言回复，用户用什么语言就用什么语言回复\n- 中文回复遵循《中文文案排版指北》\n\nFile v1.1.26:_meta.json\n\n{\n  \"ownerId\": \"kn7e14qz6v4n71xmjegh68jtts80dp5r\",\n  \"slug\": \"story-deslop\",\n  \"version\": \"1.1.26\",\n  \"publishedAt\": 1791004416005\n}\n\nFile v1.1.26:references/agent-calls.md\n\n# 交给 narrative-writer 去味的 prompt\n\n只在 SKILL.md「逐项清除」第 2 步交给写手时读；主会话自己改不读本文件。花括号按本次诊断结果填，其余照抄：\n\n`项目目录：{dir}\\n任务描述：去AI味\\nGate 细则：执行前按你的参考表读取 deslop-gates.md 的删除保护与所选 Gate（部署副本与本 skill 同源）\\n检查分工：你负责本次语义去味；父流程负责 Phase 4 最终文件扫描，不重复整轮改稿\\n检查范围：{待处理的正文文件}\\n文风路径：{本书文风全文路径，无则写无}\\nstyle_resolution：{本次生效要求及来源、被覆盖的默认条款、事实边界}\\n作者偏好：{query 命中的 prose_style 项}\\n篇幅：{长篇/短篇}\\nAI味等级：{诊断与分级结果}\\n处理策略：{实际选定的 Gate 范围；优先使用用户指定范围}\\n删除优先：每条 AI 味项先判能否删除——删后不丢伏笔/钩子/角色/情节/人物记忆/情绪承接/因果锚点/必要信息/必要转折的直接删，会丢才进 Gate 润色；看似解释/评价但承担小连贯的句子，压成白话承接、动作或物件锚点，不机械删除；已有任务/手续/物件/证据缺口可以压成角色当下要处理的具体卡点，但不新增原文没有的事件链；删除服从比例上限与本次字数范围的下沿，跌破下沿改降AI重写。\\n模式处理：按 references/anti-ai-writing.md 的问题模式目录执行；模式 8（解释腔/上帝视角/安排感）归入 Gate G，其余新增模式归入 Gate A-F 的对应处理。相邻段重复表达同一信息/动作/情绪时，按 Gate C/D 合并去重`\n\nFile v1.1.26:references/anti-ai-writing.md\n\n# 去AI味完整指南\n\n> 本文件的句长、视角、标点、修辞与禁用词是默认写法，服从 [style-resolution.md](style-resolution.md) 的逐维裁决。所选 Gate 检查表达效果，不因作者有意选择某写法就机械删除；获准命中按书级 `.deslop-whitelist` 处理。\n\n<!-- 同名副本×4 字节同步，改动后跑 scripts/check-shared-files.sh -->\n\n> 识别AI写作指纹、改写顺序、禁用词约束、改写范例库。用于正文写作后做去AI味自检和改写时查阅。\n\n---\n\n## 决策路由\n\n| 你在做什么 | 查阅哪个模块 |\n|-----------|-------------|\n| 写完正文后做去AI自检 | 核心规则 -> AI写作模式检测 -> 质量维度检查 |\n| 改写某段AI味重的文字 | 改写范例库 + 冲突对话改写范例 |\n| 检查是否用了禁用词 | 禁用词与句式速查 -> AI高频词（模式1） |\n| 系统性去除整章AI味 | 改写顺序 |\n| 检查章尾是否有总结升华 | AI写作指纹 -> 章末总结体 |\n| 判断情绪描写是否告知式 | Show Don't Tell原则 + 去AI味补充技法 |\n| 快速扫描全章质量 | 快速自检口诀 + 质量维度检查 |\n\n## 指令语气\n\n本文件以问题模式和高危清单为主。一级高危词优先检查；二级/语境敏感词按频率、语境和是否偷懒判断。遇到冲突时，保留创作意图与剧情功能优先于机械替换。\n\n---\n\n## AI写作指纹（必须避免）\n\n### 高频AI用词\n\n> 完整禁用词表见 [banned-words.md](banned-words.md)\n\n**补充类目**（`banned-words.md` 未覆盖的高阶替换）：\n\n| 类别 | 替代原则 |\n|------|---------|\n| 抽象升华词（命运、宿命、注定） | 用具体事件代替抽象概念 |\n| 万能比喻（像潮水般、如闪电般、仿佛春风） | 优先不用比喻，确需时只留少数生活化、角色化比喻 |\n\n### 引号只承载真实引用，不给普通名词加戏\n\n不要用双引号给普通名词、常见动作或作者临时概括的概念做“引号强调”。这类写法会把没有特殊含义的词硬包装成术语，连续出现时尤其像模型在替读者划重点。`check-ai-patterns.js` 的 `quote-emphasis-tic` 只负责提示，最终按语境判断。\n\n- **应改**：所谓的\"机会\"、完成这次\"蜕变\"、找到真正的\"答案\"。这些词若只是普通语义，直接去掉引号，用事件本身体现分量。\n- **应保留**：角色对话、逐字直接引用、书名/篇名、确有设定含义的代号，以及手机消息、公告、系统播报等场内载体展示的原文。\n- **边界**：第一次定义术语时可以用引号，但后文不要反复加；讽刺、反话或角色刻意咬重音时可以保留，前提是上下文能看出是谁在强调、为什么强调。\n\n### 章末总结体\n\n**禁止**在章节结尾用以下方式收束：\n- 总结性感悟（\"他终于明白了……\"）\n- 升华式感叹（\"这一夜，注定无人入眠\"）\n- 哲理式收尾（\"人生就是这样……\"）\n- 伏笔式预告（\"他不知道的是，更大的风暴即将来临\"）\n\n**正确做法**：章尾用动作、对话或悬念收束，让情节本身制造余韵。\n\n### 叠加式描写（同一动作掰开写三遍）\n\n**检测模式**：一个动作/情绪先写发生，再补感知细节，再补身体反应，分三段依次写完。读者看到的是同一个动作被掰开写了三遍。\n\n**典型特征**：\n- 先写一个概括性动作，再展开写同一动作的细节，再写身体反应：三段说的是同一件事\n- \"发生层→感知层→反应层\"按顺序分段出现\n- 每个维度独立成段，而不是揉进同一段连续正文\n\n**错误示例**：\n> 林父低着头，左手把文书压住，右手拿笔，往纸上落。\n>\n> 手从肘到腕都在抖。\n>\n> 笔尖在纸上停了停，写了一横，又停。那个\"林\"字的撇写歪了。\n\n→ 同一个动作（手抖/写字）分三段写，每段是同一瞬间的不同维度\n\n**正确做法**：发生、感知、反应三个维度揉进同一段连续正文，读者读到一个完整瞬间：\n\n> 林父左手压着文书，右手拿笔往纸上落，笔尖一触纸面就偏了，从肘到腕止不住地抖，那一横斜着拖出去。\n\n→ 发生、感知、反应在一段里同时呈现\n\n**处理原则**：保留有功能的情绪细节，把同一瞬间的重复描写合并成连续画面。若合并后明显变薄，优先恢复原文中有功能的信息，或把既有信息改成更自然的动作/对话表达；不要新增原文没有的情节、设定、关系或时间线。\n\n---\n\n## 核心规则\n\n> **句长以规则 3 为准**：规则 1-4 和本文件其他地方的「短句 / 拆短 / 能删就删」说法，与规则 3 冲突时按规则 3 执行。\n\n### 规则 1：段落密度诊断\n\n段落长短没有固定优劣。检查重点是朗读和手机阅读是否卡顿：\n\n- 一段通常只承载一个动作、一个信息变化或一组紧密相关的反应。\n- 逗号串太长、多个完整动作挤在一段里，读起来需要换气时，按动作或信息变化拆开。\n- 连续短段碎成提纲时，合并同一镜头内的相邻句，让画面保持连续。\n\n```\n过密：他看着窗外的雨，心中涌起一股说不清的感觉，这些年走过的路和很多已经忘记的事都在这一刻涌上心头。\n\n更自然：他盯着窗外的雨，雨从下午下到天黑。\n\"你还在想她？\"老刘问。\n他没说话。\n```\n\n### 规则 2：动作 + 对话 + 情绪反应\n\n动作、对话与情绪反应按场景需要交织，不按固定顺序轮换，不为凑齐三项补反应。\n\n情绪没有固定译法，关键节点也可以准确直写。上下文已让情绪成立，不另补反应；需要补足信息时，优先选择、台词、策略、物件或实际后果。\n\n身体细节只有带来新信息、影响动作或体现人物与场景特点时才保留。只在句尾重复标注情绪的微动作删掉，不换部位或同义动作。去味时沿用原文已有事实，不凭空添加摔杯子、攥袖口等行为。\n\n### 规则 3：句子该多长（短句是工具，不是默认）\n\n叙述（旁白）默认写成**逗号长句**：一句用逗号串起 2-4 个动作或信息，再落句号；逗号之间 8-12 字，整句 20-30 字。短句是偶尔的孤立重拍工具，不是叙述的默认写法。\n\n| 场景 | 句长 | 示例（长篇语料原句） |\n|------|------|------|\n| 日常 / 推进 / 描写（多数叙述句） | 逗号之间 8-12 字，整句 20-30 字 | 阴冷潮湿的气息扑面而来，身下铺着一层薄薄的稻草，湿漉漉地粘在皮肤上。 |\n| 对话 | 口语化，长短随角色 | \"你疯了？\"\"可能吧。\" |\n\n**不合格（与 AI 腔同级）**：\n- 逗号之间连着都是 ≤5 字的碎片（\"他抬手，开门，进屋，坐下\"式）\n- 通篇 3-8 字句、句号密得像提纲（电报体，见模式 9）\n- 一长一短机械交替（同样是模板）\n\n> **爆款语料校准**（七猫长篇 现言/都市/古言/玄幻/历史 125 本×前 8 章旁白统计）：逗号之间平均 8.8-9.6 字；整句平均 22-24 字；逗号长句占叙述句 74-80%；≤5 字的短片段约占两成，多是孤立的时间词、转折、动作重拍。短篇（盐言体）段落更短（≤15 字的单句段可近一半，长篇约两三成），但句子内部的节奏和长篇一样：**段落随体裁变短，句子内部不碎**。\n\n### 规则 4：口语化表达\n\n- 允许用俚语、粗话（符合角色身份）\n- 对话不要书面语（\"我认为此事不妥\" -> \"我觉得不靠谱\"）\n- 叙述也不要端着（\"他目光如炬\" -> \"他眼珠子一动不动盯着\"）\n- 短语优先于成语（\"无可奈何\" -> \"没办法\"）——只管对话和贴角色声口的叙述；旁白常用成语（不动声色、心不在焉一类）照留\n\n---\n\n## Show Don't Tell 原则\n\n| Tell（告诉） | Show（展示） |\n|-------------|-------------|\n| 他是个胆小的人 | 他把检查报告在手里翻来覆去看了三遍，还是不敢打开 |\n| 这间酒吧很吵 | 酒保凑到他耳边喊了两次他才听见 |\n| 她很富有 | 她随手把一张信用卡丢在桌上，卡面上的数字比这顿饭贵十倍 |\n| 两人关系很差 | 他把烟掐灭在她刚泡的茶杯里，她面无表情地把杯子推到一边 |\n| 他很聪明 | 三秒钟。他看了三秒钟就把文件合上了。\"第三页，第二行。\" |\n\n**核心方法**：\n1. 用行为代替形容词\n2. 用细节代替总结\n3. 用对话代替旁白说明\n4. 用后果代替情绪总结\n\n---\n\n## 质量维度检查\n\n### 1. 核心一致性（权重最高）\n- 剧情是否与大纲/前文一致\n- 人物行为是否符合人设\n- 设定是否有前后矛盾\n\n### 2. 表面改写（防AI指纹）\n- 是否包含AI高频用词（见上表）\n- 章尾是否有总结/升华\n- 是否有大段纯心理描写\n- 段落是否按戏剧单元/镜头自然断开，避免机械单句成段或为凑短碎成提纲（网文段落规则）\n\n### 3. 格式一致性\n- 对话格式统一：按项目/平台约定保持同一引号风格；知乎盐言短篇可用「」\n- 标点节奏匹配语气：避免通篇句号化；保留有功能的问号和少量感叹号；用动作/短句表达迟疑或打断，不用省略号或破折号硬造停顿\n- 场景切换有明显标记\n- 时间线清晰可追踪\n\n### 4. 可读性\n- 是否有连续多个长句压住阅读节奏，且缺少动作、对话或短句换气\n- 对话是否口语化\n- 是否有未解释的生僻词/设定术语\n- 节奏是否有快有慢（不能全是一种节奏）\n\n### 5. 逻辑连贯性\n- 角色动机是否合理\n- 事件因果链是否清晰\n- 时间线是否对得上\n- 角色的知识范围是否合理（不能\"开上帝视角\"）\n\n---\n\n## 快速自检口诀\n\n```\n一事一段，镜头自然断。\n对话要像人说话。\n心情不写心里话。\n结尾不搞大升华。\n打斗不写流水账。\n日常要埋伏笔桩。\n```\n\n> 网文段落规则：按戏剧单元/镜头/一件事结束自然断段；短段快读，长段承载完整推理、氛围和情绪链，避免机械单句成段或通篇同长度。\n\n---\n> **番茄高分样本校准**：番茄正文更接近“手机端短段 + 自然虚词 + 场内动作/对话推进”，不是机械指标达标。番茄高分样本 305 章窗口显示：段落中位约 23.5 字，50-60 字行宽平均只占 5.1%；平均对话占比约 20.6%，对话≥50% 仅 3/305，开篇对话 59/305；`地/得` 305/305、`很` 275/305、`像/好像/仿佛/如同` 267/305、顿号 176/305、省略号 281/305。结论：这些只能按语境复核，不能做 0 容忍硬禁令。\n>\n> **反投机边界**：不要为了“反检测”强制每句换行、把 `……` 改成 `........`、把 `地/得` 全改成 `的`、禁用所有顿号/“很”/“像”、强行开篇对话或按三番四证重排章节。去 AI 味是润色，不是结构重写；除非用户明确要求重写，否则不改变章节顺序、伏笔分布、对话占比和人物信息释放节奏。\n\n---\n\n## 禁用词与句式速查\n\n> 完整禁用词表和句式模板见 [banned-words.md](banned-words.md)\n\n### 正确替代示例\n- '他感到一丝紧张，手心全是汗' -> '他签名时划破了纸'（身体细节只在造成后果时留）\n- '\"好的。\"他说道' -> '\"好的。\"他把门卡塞回口袋'\n- '他深吸一口气' -> '他把话咽回去'\n\n---\n\n## 10 种 AI 写作模式检测\n\n### 模式 1：AI 高频词\n\n| 禁用 | 替换为 |\n|------|--------|\n| 不禁 | 删掉 |\n| 仿佛/宛如 | 删掉或用具体描写 |\n| 映入眼帘 | 删掉 |\n| 心中暗道 | 用动作展示思考 |\n| 沉声道/淡淡地说 | 换成动作标签 |\n| 脸色一变 | 用具体表情/动作 |\n| 嘴角微扬 | 他笑了/他翘了下嘴 |\n| 不由自主 | 删掉 |\n| 只见/此时此刻 | 删掉 |\n| 目光如炬 | 删掉或具体化 |\n\n### 模式 2：弱化副词泛滥\n阈值：每 1000 字超过 3 个 = AI 签名。重点监控：微微、淡淡、缓缓、轻轻。\n\n### 模式 3：意义膨胀\n- \"意义深远\" -> 写具体后果\n- \"前所未有\" -> 给出对比参照\n- \"可谓\" -> 删掉\n\n### 模式 4：万能结论\n- \"未来可期\" -> 用未解决的紧张感结尾\n- \"前途无量\" -> 删\n- \"充满希望\" -> 写具体的下一步动作\n\n### 模式 5：论文体段落结构\n小说中出现以下开头句 = AI 入侵：\n- \"不难看出\"\"由此可见\"\"事实上\"\"综上所述\"\n\n### 模式 6：书面语连词泛滥\n叙事散文中频繁出现：\"于是乎\"\"与此同时\"\"从而\"\"因而\"\"诚然\" -> 口语化替代或直接删除。\n\n### 模式 7：三连排比癖\nAI 喜欢把事情凑成三个以显\"完整\"。-> 砍到只剩最有力的一条。\n\n跨段「不是A。/也不是B。/只是C。」由 `formulaic-parallelism` 作 advisory：它可能是工整铺排，也可能承担辩解、悬念排除或情绪递进；只有重复提纲、拖慢画面时才压缩。该类提示与「至于X不X，怎么X」、同动词「不V A，不V B」都只作语义复核：对话也要检查，但有明确人物声线或任务功能时可保留；若来自细纲多个字段对同一要求的重复，正文只能消费一次，不能逐项复述。\n\n### 模式 8：解释腔 / 上帝视角 / 安排感\n最难察觉、却最\"像 AI\"的一类。叙述者跳出角色当下，去解释、剧透、总结、定性、拔高，读者能闻到\"作者在场\"和\"剧情被安排好了\"的味道。这正是\"说教感/上帝感/解释腔/机械感/刻意感/安排感\"的来源。\n\n| 表现 | 例（删/改） |\n|---|---|\n| 解释因果 | 「之所以…是因为」「原来…」「这意味着」「正是因为」-> 删。因果只从角色动作、对话、反应里让读者自己拼 |\n| 上帝视角剧透 | 「她不知道的是」「殊不知」「多年以后」「冥冥之中」「仿佛预示着」-> 删。只写角色此刻知道的，悬念让读者自己悬 |\n| 替读者下结论/定性 | 「演得真好」「这出戏她看过一遍」「他就是这样薄情的人」-> 删。把证据（神态、动作、台词）摆出来，定性留给读者 |\n| 替角色总结心理 | 「她明白，这一切都是命」-> 无新增信息就删；确有角色判断时保留带偏见的闪念，不强配身体反应 |\n| 总结/动机/评价链把意义说满 | 「他终于明白」「这是最好的选择」「所有人都会记住这一刻」-> 删掉定性，改成角色当下要处理的具体缺口、未完成动作或局部反馈；不是保留评价再硬塞物件/动作 |\n| 安排感/硬铺垫 | 为后文强行交代背景、整段回忆倒叙 -> 背景按角色此刻真实所需，用闪念、半句话、物件零碎带出，不集中交代 |\n| 升华式收尾 | 结尾对仗拔高、金句点题 -> 用一个动作或一句留白收住，把\"意思\"压进画面里 |\n| 抽象命运/开端收束 | 「命运终于露出獠牙」「早已布好的棋局」「这一刻终于明白」「属于他的反击才刚刚开始」-> 改成角色当下可见的文件、动作、对话或物理后果；`check-ai-patterns.js` 报 `abstract-summary-tic` 时优先处理 |\n| 套词密度过高 | 仿佛/一丝/一抹/深吸一口气/平静无波/指节泛白等成串复现（`cliche-density-tic`）-> 不是同义词轮换，整段回到角色当下证据：文件、动作、对话、物理后果 |\n| 套式反应细节 | 指尖轻叩、袖口里攥紧、指节泛白、目光移开、“语气平静得像在念……”等反应成片（`stock-reaction-tic`）-> 逐处做删除测试；只标注情绪而不改变选择、关系、物件或动作结果的删掉，不换部位和同义动作；有伤势、动作失败或情节后果的身体细节可留 |\n| 比喻密度过高 | 像/好像/仿佛/如同等比喻标记成片复现（`metaphor-density-tic`）-> 保留最能传递信息或情绪的一两个，其余改回具体动作、物件、声音、后果；不要换成新比喻 |\n| 系统公告公文腔过密 | 方括号规则/面板/公告行里硬规则词成片（`system-notice-formality-tic`）-> 保留为角色看见的屏幕/公告/规则载体；只在载体内部白话化部分硬词，或补角色当场看懂的具体后果，不改成叙述者解释 |\n\n**更隐蔽的一层（最难自查，没有标志词）**——同样是安排感/上帝感：\n- 评判性副词/补语：「关切得恰到好处」「笑得恰如其分」「不多不少」-> 作者在替读者盖章\"这是装的\"。只写动作（\"她掩了帕子，眼睛没动\"），装不装让读者自己判。\n- 剧透式点破潜台词：「那点笑她看得分明」「谁都看得出他在撒谎」-> 把藏着的挑明了。留着别点破。\n- 定性比喻/盖棺句：「像在宣判一件早已定好的事」「像看一件死物」-> 比喻在替角色下定论。非角色此刻强烈主观感受就删；要留也只能是她带偏见的瞬间感觉，不是客观断言。\n\n自检：每句问一遍——这是\"角色在经历\"，还是\"作者在讲解/安排\"？凡作者跳出来讲，删，或改成角色视角内的呈现。根治办法是锁定深度限知视角：只写视角人物此刻看得见、听得见、想得到的，镜头钉死在角色身体里，作者就没位置跳出来了。\n\n改法优先级：先删或原位替换污染句，不在段尾另补“人味”尾巴。需要补信息时，把原来的总结/动机/评价句改成角色当下能碰到的问题、手续、回信、付款、门外动静等具体压力；已有手机/屏幕/公告/门牌/表单等信息，优先作为角色看见的场内载体保留，不要转写成叙述者解释。具体载体跟剧情走，不套固定清单。\n\n**任务卡点不是固定公式，也不是通用补流程按钮**：它只是把已有解释落回角色当下要处理的缺口。先问原文有没有“要办的事”和“卡住的点”；有，才可以压成任务卡点；没有，就只删解释或改动作/对话，不新造事件链。改完再做“删掉试试”：删掉后不影响信息、情绪、关系、代价或伏笔，就压缩或删除。\n\n**但删解释腔 ≠ 把读者读懵**：新名词/新设定/新道具首次出现时，仍要让读者抓到一个锚——靠角色的动作反应、对话里半句自然提及、或场景里的物理后果，一笔带出它此刻的作用或分量；既不整段讲来历原理，也别只甩个零信息生词让读者干懵。人物记忆、情绪缓冲、因果承接也一样：如果一句看似解释/评价，实际承担小连贯（让读者知道角色为什么脸热、为什么停顿、为什么这一声压不住），不要机械删成摘录清单；把它压成角色当下的白话、动作、物件或半句念头。例：「蓝晶」首次出现不写\"这是储存记忆的装置\"，但可写她把蓝晶按上太阳穴、别人的记忆碎片炸开在眼前——功能被读者看见，全貌留作悬念。区分：锚是\"角色此刻撞上的可感知后果/记忆或情绪承接\"（留或压），解释是\"作者跳出来讲设定来历/原理/替读者下结论\"（删）。\n\n### 模式 9：过度压缩（电报体）\n\n去AI味删过头的反向指纹。每句都压到最短、结构虚词扫光、每个动作都补一个「了下/了一下」式轻反应。单句看着干净，连读像提纲，读者的体感是\"不流畅、喘不上气\"。删减的目标是删废话（解释、注水、凑数），不是删中文的自然冗余。\n\n| 表现 | 修法 |\n|---|---|\n| 非峰值叙述句也全部压成最短句 | 重拍句（动作/情绪/悬念峰值）保持短促；铺垫、过渡、日常动作写成自然白话句，保留 了/的/就/的时候 等结构虚词 |\n| 「扯了下/停了一下/拍了两下/松了半圈」式微动作高密度复现（check-ai-patterns.js 报 micro-action-tic） | 合并动作，换具体细节；不是每个动作都要接一个反应尾巴 |\n| 强调副词（连/才/又/只/全/反而）被扫光 | 删前判语义：承担人设、对比、讽刺义的保留（\"才二十三天\"删掉\"才\"，人设强调就反了） |\n| 对话语气词归零 | 按角色保留自然低频的 呢/吧/啊；也不反向猛加——人味来自结构自然，不是聊天腔 |\n| 叙述残留公文/文言腔（不得/须/未/已然/当前） | 换白话（不能/要/还没/现在）。系统公告、规则条文、面板播报可以保留冷硬功能；若 `system-notice-formality-tic` 报警，只在原载体内白话化一部分，不改成叙述者解释 |\n| 长文本里短叙述段成片（`overcompressed-prose-tic`） | 不是把所有短段拉长。先人工通读：重拍短句、密集镜头如果上下文顺，就保留；只处理读起来像提纲的过渡句，把它们并回同一镜头，让读者顺着动作、空间、因果读过去 |\n| 引号外叙述低连接密度且缺中长句（`low-connective-density-tic`） | 不是全局补“的/了/就”，也不处理台词/弹幕/系统播报的天然短促。先找叙述层读起来像提纲/电报体的断裂处，恢复必要连接、指代和中长承接句；有中长句链条的低功能词文本可保留 |\n\n自检：删完连读一遍，读感像提纲或流水口令，就是删过了——把非峰值句恢复成自然白话，不是接着删。\n\n本模式约束的是删减的度，不降低清理力度：选定 Gate 内的禁用词、套路句式、告知式心理照删照改；回填只回结构虚词和连接，不保留、不恢复任何模板措辞。\n\n### 模式 10：二修伪自然（油腻倒装 / 监控动作清单 / 对话指标化）\n\n一些“反检测提示词”会把文本推向另一种模板：为了提高突发性而乱倒装，为了真人感而机械加口误和脏话，为了手机阅读而强制每句换行，为了对话占比而把心理和叙述硬改成台词。这些不是自然网文，是二修痕迹。\n\n| 表现 | 修法 |\n|---|---|\n| 油腻倒装 | 不写“手里拿着刀，他冲了上去”这类伴随动作前置。连续同主语时，优先用场内物件、声音、局部身体或环境反馈自然换句首；不要滥用死物拟人 |\n| 监控摄像头式动作清单 | 同段连续“伸手拿起、取过、挑开、放下、转身……”像步骤表。合并琐碎动作，只保留有情绪、情节或空间功能的动作；必要时用角色犹豫、误判、旁人反应或环境反馈做缓冲 |\n| 高压场景误脱水 | 冲突、追杀、打斗可删解释和逻辑胶水；日常、暧昧、铺垫不能全章脱水。删的是废话，不是“的/了/就/但是”等自然连接 |\n| 吃字漏词 | 去 AI 后如果动词没有对象、动作指向不清、读者不知道谁对谁做了什么，要补回必要宾语、承载物或物理反馈；中文可省略，但不能省到像提纲 |\n| 对话指标化 | 不为凑 50%-60% 对话占比硬扩台词。台词只在角色真会说、此刻必须说时增加；长对白可拆动作，解释性对白优先压成冲突、回避或半句信息 |\n| 硬格式投机 | 不强制每句换行、50-60 字一行、不把省略号改成英文点、不把 `地/得` 全改错。按平台和项目既有格式走 |\n\n`check-ai-patterns.js` 的 `action-list-tic` 只提示监控动作清单，不是 blocking。功能性打斗/追逐/仪式步骤若动作链本身承担信息，可保留或标 `[需复核]`。番茄高分样本中该类命中为 0，因此适合作为“需通读”的风格提示，而不是硬性失败项。\n\n#### 工具提示处理\n\n`check-ai-patterns.js` 是本地写作 lint；blocking 只限确定性句式/标点问题，advisory 不作完成门槛。用户贴其他工具报告时，只把能落到正文的句式、段落、词汇问题转成具体修改点，不写“0% AI / 100% 真人”或“固定公式”，也不围绕分数反复微调。\n\n工具提示不高于读感规则。参考文本里若出现“仿佛/非常/感到”等套词或告知式心理，仍按模式 1-8 清理；不要机械补词、故意错字或按题材套壳。\n\n**去 AI 味补充判断**：\n- 优先处理：作者解释总结、意义尾巴、把情节翻译成“他意识到 / 这意味着 / 真正重要的是 / 这次成长”。优先删掉，或落回场内动作、对话、物件状态、任务状态和角色当场要处理的后果。\n- 场内载体优先：原文已有手机、屏幕、公告、门牌、表单、账单、物证、规则行时，保留为角色看见/读错/处理的文本或物件；不要把同一信息改写成叙述者解释规则。\n- 白话但不注水：少用精致戏剧反应短语（头皮发紧、眼皮一跳、心口一沉、胃里翻涌）连续替代剧情推进；能写普通动作/普通感觉就写普通动作/普通感觉，并保留自然的“的/了/就/但是/已经/之后/没有”等连接。\n- 题材文风优先：文风对标有帮助，但必须来自目标题材/本书文风指纹；不要把盘龙腔、旧网文腔、第一人称声口等当成跨题材万能修法。\n- 不要当通用修法：单纯加标题、补物件、补动作尾巴、拉长/压短句子、增加排队/门禁/记录体，不能替代具体的情节、视角和语言问题处理。\n\n#### 把提纲句写成连续段落\n\n当文本已无 blocking / 明显 advisory，但读起来仍像提纲时，只处理断裂处：\n\n1. 标出读起来像逻辑报告的段落：连续出现“他知道/他明白/这意味着/真正的问题/必须/需要”等判断链，却缺少当下动作、物件或对话反馈。\n2. 把叙述者结论落地：用角色当下能触到、听到、被迫处理的后果替代“他意识到/这意味着”。不要套固定物件清单，也不要把某个场景外壳当通用规则。\n3. 只在断裂处恢复自然连接和结构虚词；不设比例目标，不机械补连接。\n4. 系统公告、规则条文、面板播报可以保留冷硬短句；`system-notice-formality-tic` 报警时，只在原载体内白话化一部分硬规则词，或让角色当场看到具体后果，不改成叙述者解释。\n\n`overcompressed-prose-tic` / `low-connective-density-tic` 的具体修法：\n\n1. 圈出连续短叙述段，逐段标注功能：爆点/反转/恐惧重拍、密集镜头可继续短；铺垫、空间、因果、动作承接应并回同一镜头。人工读着顺，就不因该 advisory 继续拉长。\n2. 合并时优先补“动作顺序、空间方位、因果承接”，例如“抬头时/门外/已经/还/就/被”，而不是给每句硬塞“的/了/就”。\n3. 合并后再删套词和告知心理：读顺不是恢复 AI 腔，不能把“仿佛/感到/非常/好像”成片加回来。\n\n复核处理：如果清掉 `overcompressed-prose-tic` / `low-connective-density-tic` 后读感仍不稳，停止局部微调，转为段落级重写或人工读感对照。\n\n示例：\n\n```\n过度压缩：\n林遥抬头。\n雨棚外的街灯灭了。\n风也停了。\n柜台上的纸杯晃了两下。\n\n读顺后：\n林遥抬头时，雨棚外的街灯正一盏盏熄下去。风忽然停了，柜台上的纸杯还在原地轻轻打转。\n```\n\n\n---\n\n## 改写顺序（只排所选 Gate 的先后）\n\n下面三步只决定所选 Gate 内问题的处理先后，不另起一轮全篇去味；某一步没有对应的所选 Gate 就跳过。\n\n### 第一步：去泛化（Strip Generic）\n- 抽象情绪总结句 -> 按规则 2 判断：删重复说明，保留准确直写，需要时用原文已有信息落地\n- 假深度句 -> 删\n- 意义膨胀 -> 缩小到具体影响\n- 空洞结论 -> 删\n- 工整对比句式 -> 打散重写\n- 装饰性形容词堆砌 -> 白描\n- 过度使用\"于是\"\"然而\"\"此刻\" -> 删掉一半\n- 所有角色说话一样\"高级\" -> 区分语气\n\n**原则**：能删就删，不能删就用具体细节替换。\n\n### 第二步：去书面化（Cut Professional Diction）\n- 分析性用词（\"机制\"\"结构\"\"逻辑\"\"体系\"出现在小说中）-> 换成日常表达\n- 抽象名词滥用 -> 直接说事\n- 体制内用语（\"进一步\"\"深入\"\"推进\"\"落实\"）-> 删\n- 专业术语堆砌 -> 只保留必要的，用白话解释\n\n**例外**：保留专业感的场景（历史题材正式用语、文学向刻意密度、喜剧夸张修辞）。\n\n### 第三步：回自然感（Restore Natural Presence）\n- 具体的感官细节（气味、温度、触感）\n- 角色说话方式的区分（不同人不同语气）\n- 句首变化：连续 3+ 句用同一主语或同一词性开头时换开法（动作、场景、对话引入）\n- 节奏变化（长短句交错）：按情绪 beat、动作推进和戏剧单元自然调节句段长短；忌连续多段同一长度，也忌为凑短而碎成提纲。长短不是随机，沉淀处可放慢，冲突/反转处可骤短，完整推理与情绪链优先保持连贯\n- 社会位置感的对话（上级和下属说话方式不同）\n- 场景特有的记忆点\n- 项目特有的语言习惯（角色的口头禅）\n\n**原则**：少即是多。每段加 1-2 个具体细节就够了。\n\n### 执行范围\n\n调用方指定 Gate 时，只处理选定 Gate；改写顺序只排先后，不重新分级或扩大范围。未指定范围时，按实际问题选择适用检查。\n\n### 自检清单\n- 对话自然度检查：对话是否使用口语化表达，是否避免了书面语/正式腔调\n- 删掉任何一句，会影响理解吗？不会 = 可能多余\n- 不同角色能通过对话区分吗？\n- 有没有一个细节是这个场景特有的？\n\n---\n\n## 去AI味补充技法\n\n### Show vs Tell\n\n| 告知类型 | AI写法 | 自然写法 |\n|----------|--------|----------|\n| 告诉期待感 | \"他很期待\" | 展示期待->情绪->满足的链条 |\n| 告诉角色目的 | \"她想离婚\" | 用行动展示目的 |\n| 告诉角色态度 | \"她很冷静\" | 用对话和反应体现 |\n| 告诉剧情走向 | \"接下来会发生大事\" | 用铺垫->反转->延续展示 |\n\n### 心理描写润物细无声\n\n- 加括号标注内心活动 = 破坏代入感\n- 大段内心独白解释动机 = AI签名\n- 直接写\"她感到\"\"她意识到\" = 告知情绪\n\n**自然写法**：心理活动自然融入叙事，用行为暗示心理，用沉默/动作/反常行为表达内心。\n\n### 代入感检查\n- 主角行为读者能理解、共鸣、接受吗？\n- 反派够强吗？（弱反派 = 读者觉得主角赢了没意义）\n- 是否围绕人设写行为？（行为/语言/思维围绕人格展开）\n- 读者已知信息是否被有效操控？（信息差制造情绪波动）\n\n---\n\n## 改写范例库\n\n### 情绪落地示例\n\n| 原文与语境 | 处理 |\n|---|---|\n| 「他很紧张。再错一题，补考也过不了。」 | 情绪有具体原因，可以直写，不补手抖或出汗 |\n| 「她已经决定不再等他。她攥了攥袖口。」袖口动作无后续作用 | 删除第二句，不换成低头或咬唇 |\n| 「手腕的伤让他握不住笔，签名只写了一半。」 | 保留，身体状态造成动作失败，不能当作情绪套话删除 |\n\n### 场景描写范例\n\n**AI风场景**\n- '阳光透过窗帘的缝隙洒进来，在地板上投下斑驳的光影。空气中弥漫着淡淡的花香，仿佛整个世界都沉浸在一片宁静祥和的氛围中。'\n- 下午三点，客厅里只有钟在走。\n\n**AI风天气**\n- '天空阴沉沉的，乌云密布，仿佛随时都会下起倾盆大雨。凛冽的寒风呼啸而过，带着一丝刺骨的寒意。'\n- 要下雨了。风把晾在外面的衣服吹得乱晃。\n\n**AI风打斗**\n- '他的拳头犹如疾风骤雨般猛烈，每一击都蕴含着不容置疑的力量。对手的瞳孔微微收缩，显然没有预料到如此凌厉的攻势。'\n- 他一拳怼过去，对方没躲开，嘴角破了。\n\n### 结尾改写范例\n\n**升华式结尾** -> '他站在窗前，望着远方的天际线，终于明白了生活的真谛：有时候，放手才是最好的选择。' -> 他把烟掐了，回屋睡觉。\n\n**总结式结尾** -> '这一刻，一切都变了。她知道，从今以后，她的人生将翻开崭新的一页。' -> 她关上了那扇门。没回头。\n\n**感慨式结尾** -> '岁月如流水般悄然流逝……' -> 直接删掉这种段落。\n\n### 节奏调整范例\n\n> 以下范例处理的是臃肿修饰、堆叠比喻和抽象总结，不是「见长就拆」：改写后叙述仍以逗号长句为主（规则 3），不要把正常的逗号长句拆成短句串。\n\n**排比句**\n- '他看着她的眼睛，看着她的嘴唇，看着她微微颤动的睫毛，心中涌起一股难以名状的情感。'\n- 他看着她，她没说话。\n\n**臃肿长句去修饰**\n- '当他终于推开那扇沉重的木门时，映入眼帘的是一间昏暗的房间，空气中弥漫着陈旧的气息，墙角堆满了落满灰尘的箱子。'\n- 他推开木门，屋里昏暗，墙角堆着几个落灰的箱子。\n\n**工整段落打碎**\n- '她喜欢春天的花朵，喜欢夏天的阳光，喜欢秋天的落叶，喜欢冬天的白雪。每一个季节都有它独特的美。'\n- 她喜欢春天，别的季节也还行。\n\n---\n\n## 冲突对话改写范例\n\n### AI式温和对话\n- '我觉得你这样做不太合适，能不能考虑一下我的感受？' -> \"你眼里还有我吗？\"\n\n### AI式完美解释\n- '其实我这样做是有原因的，因为当时的情况非常复杂……' -> \"你能怎么着？\"她把茶杯重重放下。\n\n### 对话情绪五级递进范例\n\n同一冲突场景，从弱到强：\n\n1. **客观陈述**：\"你把我的东西扔了。\"\n2. **陈述+建议**：\"你把我的东西扔了，以后能不能先跟我说一声。\"\n3. **主观指责**：\"你凭什么动我的东西。\"\n4. **指责+命令**：\"你算什么东西，也配碰我的东西？滚出去。\"\n5. **指责+PUA**：\"我伺候你吃伺候你穿，你连个东西都放不好。你这辈子也就是这样了，离了我你什么都不是。\"\n\n### 震惊分层改写范例\n\n**AI式一步到位**：所有人都震惊了，不敢相信自己的耳朵。\n\n**自然分层震惊**：\n1. 对面的男人手抖了一下，茶杯里的水洒出来。\n2. 旁边的人互相看了一眼，有人往后退了一步，角落里有人开始掏手机。\n3. 刚才还趾高气扬的女人，脸上的笑僵住了。她张了张嘴，一个字没说出来。\n\n### 代入感修复范例\n\n**被动主角**：她很害怕，不知道该怎么办，只能等着事情过去。\n\n**主动主角**：她锁了门，把手机调成静音，打开了录音。\n\n---\n\n## 质量检查清单\n\n写完每章后，按此清单逐项扫描：\n\n- [ ] **段落控制**：段落按动作/信息变化断开，读起来不卡\n- [ ] **正文无破折号**：正文（含叙述和对话）无 `——`/`—`/`--`（用句号、逗号、短句或动作断句），不设置对话例外\n- [ ] **AI高频词扫描**：无不禁/仿佛/映入眼帘/心中暗道/沉声道/嘴角微扬/不由自主/只见\n- [ ] **弱化副词计数**：每1000字\"微微/淡淡/缓缓/轻轻\"不超过3个\n- [ ] **无三连排比**：没有AI式的\"三个一组\"修辞\n- [ ] **工整否定清单已复核**：跨段「不是A / 也不是B / 只是C」及其他 `formulaic-parallelism` advisory 已连同台词逐条复核；功能性修辞可保留\n- [ ] **无论文体**：无\"不难看出/由此可见/事实上/综上所述\"\n- [ ] **无书面语连词堆砌**：无\"于是乎/与此同时/从而/因而/诚然\"泛滥\n- [ ] **章尾无总结升华**：用动作/对话/悬念收束，无感悟/哲理/预告\n- [ ] **无大段心理描写**：心理活动不超过2段，无括号标注内心\n- [ ] **情绪落地**：按规则 2 保留准确直写与有功能的身体细节，删除重复说明，不给每个情绪词配动作\n- [ ] **对话口语化**：无书面腔，不同角色语气可区分\n- [ ] **标点不压平**：没有把质问、爆发、犹豫全部压成句号；也没有随机堆砌 `？`/`！`，或用 `……`/`——` 硬造停顿\n- [ ] **Show Don't Tell**：用行为代替形容词，用细节代替总结\n- [ ] **句长达标**：叙述默认是逗号长句（逗号之间 8-12 字、整句 20-30 字，规则 3）；短句只作偶尔的孤立重拍，用完回到逗号长句；没有连着的 ≤5 字碎片，没有通篇短句像提纲\n- [ ] **detector advisory 逐条复核**：`micro-action-tic` / `stock-reaction-tic` / `abstract-summary-tic` / `cliche-density-tic` / `metaphor-density-tic` / `reasoning-chain-tic` / `system-notice-formality-tic` / `overcompressed-prose-tic` / `low-connective-density-tic` / `action-list-tic` 命中时按脚本给出的修法处理：先通读判断是不是机械复现，确属再改；功能性写法保留或标 `[需复核]`，不做同义词轮换、不机械注水\n- [ ] **不做硬指标投机**：不为反检测强制每句换行、50-60 字一行、对话 50%-60%、英文点省略号，或把 `地/得` 全改成 `的`\n- [ ] **任务卡点服从原文边界**：抽象总结若改成角色办事被卡住，必须来自原文已有任务/证据/手续/物件缺口；不新增原文没有的事件链\n- [ ] **对话自然度测试**：无书面语痕迹 = 通过\n\nFile v1.1.26:references/author-memory-maintenance.md\n\n# 作者记忆维护\n\n[author-memory.md](author-memory.md) 的少见时刻补充：记一条、确认、替换、忘掉和优先级仍按那份协议，本文件只在下列情况读——作者说「整理作者记忆」，或回执 `warnings`／查询 `omitted_ids` 提示超编；写入因 `作者画像.md` 写满失败；书根就是工作区，或工具报 `state.book`、单书布局错误；要做存量迁移 `migrate`、多事件原子 `commit`、派生视图 `check`；冲突候选要落定；碰到升级前留下的旧条目。\n\n作者记忆借鉴“原始证据 → 候选 → 已确认画像 → 变更记录”的记忆管道，但把决定权留给作者。\n\n## 文件\n\n```text\n{工作区}/.story/作者记忆/          # 项目级 store：global / genre / workflow 条目，编号 AP\n├── _author-memory-state.json  # 唯一结构化权威\n├── 作者画像.md               # 仅 active，供作者查看与管理\n├── 待确认.md                 # pending / conflict，不参与约束\n└── 变更记录.md               # 最近 100 次、最新在前的事务记录\n{书}/.story/作者记忆/            # 书级 store：只存这本书的 book 条目，编号 BP，同样四个文件\n```\n\n三个 Markdown 文件都从 state 确定性生成，禁止手改；完整历史保留在 state，变更记录只展示最近 100 次。`作者画像.md` 是人类管理视图，普通写作 agent 不整份注入，而是调用 `query` 取得本次相关的紧凑上下文。\n\n## 任务映射表\n\n各 skill 入口的 `query` 命令按此表选 kind；写入时的预算提醒也按这四类任务组合估算。\n\n| 任务 | query kinds | 注入位置 |\n|---|---|---|\n| 正文初稿 / 续写 | `prose_style` + `story_design` | 主会话与实际正文 agent |\n| 去 AI 味 / 改写 | `prose_style` | 主会话与实际改写 agent |\n| 设定 / 大纲 | `story_design` + `workflow` + `interaction` | 主会话，不传正文 agent |\n| 审稿 | `delivery` + `interaction` + 必要的 `prose_style` | 主会话，不降低 rubric |\n\n审稿匹配项只用于交付格式、协作方式和“作者有意采用的表达选择”说明；问题严重度和 PASS/FAIL 仍由 rubric 决定。\n\n## 注入预算与容量\n\n- **写入不因注入预算失败**：`record` / `commit` 照常成功、给回执；工具按上表四类任务组合估算最坏查询情形（全局条目＋各 scope 维度最重的单一切片，切片按大小写无关归并、轻重按写作时真正读到的字段算，与真实查询同一把尺），装不进 2048 字节的组合在返回的 `warnings` 里点名将被略过的条目及其断言首句。\n- 写入落盘后另一级 store 读不出来（书目录不存在、`--book` 与书级记录不符等）也照常给回执，`warnings` 注明本次提醒没算上它。写书级条目时「本书＋全局」按实际条目精确计算；写项目级条目时只看得到项目级 store，顺手传 `--book-root` 就把当前这本书也算进提醒。\n- 查询按 **重要度 → 本书例外 → 最近更新** 排序装填（同一范围的条目必在同一 store，「最近」按该 store 的修订号比，不跨 store 比较），先丢的恒是重要度较低的条目——`importance` 决定超编时谁留在 prompt 里。装不下的条目跳过而不中断（一条长的不挡后面的短条），漏下的 ID 按同一优先级报进 `omitted_ids`（最多列 20 条，`omitted` 是真实总数）。\n- 注入预算之外还有一道硬上限：`作者画像.md` 超过 12288 字节时写入会直接失败并要求先整理。active 条目攒到几十上百条才会碰到（远在注入预算之后），碰到就走「整理作者记忆」；`forget` 这类减量操作在满编时照常可用。\n\n## 整理作者记忆\n\n作者说「整理作者记忆」，或回执 `warnings`／查询 `omitted_ids` 提示超编、写入因画像写满失败时：读项目级与当前书的 `作者画像.md`（每条都标了范围、重要度、把握和确认次数，重要度就是超编时的去留依据），提出合并同义条（`replace` 多合一）、退役过时条（`forget`）、给错标成 `high` 的条目下调重要度、把超长断言压缩成一句话的提案；项目级画像里还有「本书：」条目时，「对该书运行 `migrate --book-root`」列为默认提案项。清单用原话逐条列给作者确认（编号只放括号里），确认后按 store 各汇成一份 `commit` 事务提交（一份事务只写一个 store）。合并时保住每条的否定词、限定词和适用范围——合不动就退役其中一条，不要靠删限定词把两条凑成一条。整理只由作者发起或确认，不自动执行。\n\n## 冲突候选\n\n冲突候选（`conflict`）不能绕过旧规则直接 `decide=activate`。作者选新说法：用 `replace`，`old_ids` 同时列旧 active 条目和这条冲突候选，新条目直接 active、两条旧的标 `superseded`；作者留旧规则：对候选 `decide=reject`。旧条目被 `replace` / `forget` 撤下后，它不再是任何候选的冲突对象，冲突对象清空的候选退回 `pending`。\n\n## 单书布局\n\n书根就是工作区（`--book-root` 与 `--workspace` 同一目录）时，书级 store 改住 `{工作区}/.story/作者记忆/书级/`，与项目级各自一份 state；首次建立的书名优先取项目级存量本书条目里唯一的书名，再取目录名。旧版曾把书级 state 写在项目级位置，此后项目级读写都报 `state.book`；带 `--book-root {工作区}` 运行任一命令（含 `query`）会先把它原样移进 `书级/`，不改内容。这个目录其实是某个工作区里的一本书时（上一层叫 `长篇/` 或 `短篇/`，或某个祖先有 `.active-book` 或项目级 state），工具直接报错、不动任何文件，按报错改传 `--workspace`。\n\n## 存量迁移\n\n不做双读：升级前写进项目级 store 的 book 条目不再参与查询与预算估算，也不再接受新的 book 写入；它们仍在 `作者画像.md` 里可见、可 `decide` / `forget`。对每本书运行一次 `migrate --book-root {书目录}` 即可整批搬回来：断言、证据、确认次数、重要度原样保留，换成 `BP` 编号，原 `AP` 条目标 `superseded` 并注明去向；与全局条目的冲突关系在迁移后不再成立，这类候选退回 `pending`。书级每个源条目一笔事务，重跑只补没做完的一半。「整理作者记忆」看到项目级画像里还有「本书：」条目时，把迁移列为默认提案项。\n\n## 旧条目\n\n- 升级前写下的长断言不受 120 字节新建上限约束：原样重申它会**强化**原条目（确认次数 +1），不会因超长被拒；只有真正新建条目才校验 120 字节。\n- 存量 state 里推断类旧来源的条目照常可读、可确认、可退役；新写入仍只接受 `explicit_user`、`accepted_suggestion`、`manual`。\n\n## 其他命令\n\n先依次尝试 `python3`、`python`、`py -3` 找到 Python 3，再从当前 skill 根运行本地副本（`record` / `query` 见 author-memory.md）：\n\n```text\n{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py init    --workspace {工作区} [--book-root {书目录}]\n{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py commit  --workspace {工作区} [--book-root {书目录}] --input {工作区}/.story/work/作者记忆-事务.json\n{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py migrate --workspace {工作区} --book-root {书目录}\n{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py check   --workspace {工作区} [--book-root {书目录}]\n```\n\n- `commit`：高级批量入口，只在需要把多个动作绑定成一次原子提交时用（如整理作者记忆）。顶层传 `schema_version`、唯一 `transaction_id`、当前 `expected_state_revision` 和含 1–32 项的 `operations`（每项与单事件的 `operation` 同形）。一份事务只写一个 store；先在内存完成 schema、引用、容量和所有视图校验，操作按数组顺序应用，任一步失败则整份事务零写入，最后原子替换 state。过期修订会在任何写入前失败。事务文件在成功前必须保留，成功后删除；显式记忆请求按 author-memory.md「回执怎么告诉作者」转告。\n- `migrate`：把项目级 store 里某本书的存量 book 条目整批搬进 `--book-root` 的书级 store，幂等，中途失败直接重跑；返回 `migrated`（源→新编号），没有存量时为空。\n- `check`：从 state 重建并逐字核验所有派生视图；传 `--book-root` 时两级一起核验。\n- `init`：显式初始化 store；平常不需要，首次 `record` 会随事务创建。\n\nFile v1.1.26:references/author-memory.md\n\n# 作者记忆协议\n\n作者记忆保存跨会话复用的创作偏好，不保存小说世界里的事实，决定权留给作者。本文件管最常见的时刻：作者说出一条偏好，或要确认、替换、忘掉某条。少见情况读 [author-memory-maintenance.md](author-memory-maintenance.md)：整理作者记忆与超编、画像写满、单书布局与 `state.book` 报错、存量迁移、多事件 `commit`、`check`、冲突候选落定、升级前的旧条目。\n\n## 边界与优先级\n\n加载优先级从高到低：\n\n1. 安全、用户授权范围、明确的平台交付要求、字数与文件协议；句长、视角、修辞和标点偏好不属于不可覆盖的硬门禁；\n2. 用户在当前请求中的明确要求；\n3. 当前书的 `设定/文风.md`、题材定位、细纲和其他项目设定；\n4. 作者记忆中的本书偏好；\n5. 作者记忆中的题材、流程和全局偏好；\n6. 对标素材、通用方法和默认值。\n\n按表达维度取最窄适用要求：低优先级只补缺项，不与高优先级要求并列执行。通用 references 自称“必须/禁用”不改变此顺序；审稿不因作者有意采用的表达本身扣分，真实可读性与因果问题仍照常评价。\n\n作者记忆不能把本书事实写进 `.story/作者记忆/`，不能覆盖当前请求，不能降低审稿 rubric，也不能让去 AI 味改动剧情意图。小说事实继续由各书的 `追踪/` 和 `设定/` 管理。\n\n## 存放与路由\n\n两级 store，记忆随书走：`{工作区}/.story/作者记忆/` 存 global / genre / workflow 条目（编号 `AP`），`{书}/.story/作者记忆/` 只存本书的 book 条目（编号 `BP`）。每级各有 `作者画像.md`（生效条目）和 `待确认.md`（候选，不参与约束），都从 state 生成，禁止手改；不存在时写作、审稿、去味照常继续，首次 `record` 自动创建。\n\n- `--workspace` 必须显式传，指创作工作区根——承载多本书、`.active-book`、`长篇/`、`短篇/` 或 `拆文库/` 的那一层；已有记忆时，是项目级 state（不带 `book` 字段）所在的最近祖先。`长篇/`、`短篇/` 下的书目录永远不当 `--workspace`，也不要把用户主目录当默认工作区。\n- `--book-root` 是当前书的项目目录（`.active-book` 指向、或含 `设定/`、`正文/` 的那一层，如 `{工作区}/长篇/{书名}/`）；书名默认取书级 state 记的名字，首次取目录名，`--book` 可覆盖。书根就是工作区时读维护文件「单书布局」。\n- ID 前缀就是 store：`decide` / `forget` 看 `item_id`（`AP` 项目级，`BP` 书级），`remember` / `replace` 看 `scope.level`（`book` 书级，其余项目级）。书级操作必须传 `--book-root`，没传直接报错，不会退而写进项目级。\n- `replace` 与 `conflicts_with` 不能跨 store：本书例外按优先级覆盖全局规则，不算冲突，直接 `remember` 为 book 条目；要把全局规则改成本书规则，拆成 `forget` ＋ `remember` 两个事件。\n\n## 查询\n\n各 skill 入口已写好本任务的 `query` 命令（长篇正文由组装脚本代查）；没写命令的长篇设定、大纲等任务查 `story_design` + `workflow` + `interaction`，结果只给主会话、不传正文 agent。四类任务的映射表见维护文件。state 存在才查（两级都不存在时返回空结果、零写入）；结果合并项目级与 `--book-root` 所指书级（不传就拿不到本书条目），`--kind` 必传，输出不超过 2048 字节。\n\n普通创作只做一次本地 `query`，完整画像、证据、候选和 journal 不进 prompt。查询项是低优先级倾向，不是逐条打卡清单：自然吸收，不复述画像、不刻意提高词面命中率，不为命中牺牲连贯、节奏、字数或本书既定笔调。**`omitted_ids` 非空＝记忆超编**，不是「没有更多了」：转告作者并建议「整理作者记忆」，不得改读完整画像规避预算。待确认项不进 prompt，也不为确认它们中断任务；只在作者主动查看、候选积累到适合回顾的节点，或新偏好与 active 条目冲突时集中呈现。\n\n## 记不记、记成什么\n\n不装记录全部用户消息的 prompt hook，不在作者没开口时观察他，只记作者明确表达的偏好。是否属于长期习惯由 agent 判断，拿不准就只执行不记录；作者可明说“记住：……”，以回执验收。\n\n| 输入证据 | 处理 |\n|---|---|\n| “以后都这样”“我一直习惯……”等直接、稳定、范围清楚的原话 | `active`，`source=explicit_user` |\n| 用户明确接受助手提出的长期做法 | `active`，`source=accepted_suggestion` |\n| 作者原话像长期偏好但范围或稳定性含糊 | `pending`，取当前最窄合理范围；待确认只来自作者自己的话 |\n| 同类修改反复出现、从成稿或操作轨迹看出的模式 | 不记录、不推断；作者没开口的偏好不进记忆 |\n| “这一章别……”“这次给我……”等一次性要求 | 只执行，不记录 |\n| 角色、时间线、伏笔、世界观、当前剧情走向 | 写项目设定/追踪，不写作者记忆 |\n| 助手自己生成的文字、默认模板、工具告警、rubric 结论 | 不自我学习 |\n\n保留否定词、限定词和适用范围：`quote` 写原话，`assertion` 只做不改变语义的紧凑归纳，**新建条目限一句话（≤120 字节，约 40 个字）**，写不下就压缩措辞、不切限定词；背景写进 `reason`（不进 prompt），不另开字段。\n\n**一条偏好就是一条记录，例外和限定不许拆出去单列。** 「以后少用破折号，对话里也别用，除非表示打断」整条写成「破折号少用、对话里也不用，只在表示打断时保留」：超编时条目逐条被丢，拆开就可能只丢掉例外，把作者说过的限定变成绝对禁令。只有原话塞了**几条互不依赖**的偏好（如「多用短句」＋「章末留钩子」）才拆。\n\n范围：“本书 / 这个角色 / 这次连载” → `book`；“都市文 / 这类题材” → `genre`；交稿、检查、确认节奏等操作习惯 → `workflow`；“以后 / 一贯 / 我习惯”且无更窄限定 → `global`；含糊但可能稳定 → 最窄合理范围并置 `pending`。\n\n类型：`prose_style`、`story_design`、`workflow`、`delivery`、`interaction`。置信度与重要度均为 `low | medium | high`；超编时先丢重要度低的，按偏好的实际分量填，不要一律 `high`。`source` 只接受 `explicit_user`、`accepted_suggestion`、`manual`，工具拒绝推断类来源。\n\n## 确认、替换、忘掉与冲突\n\n- 同一类型、范围、归纳文本再出现，脚本强化原条目（累加证据与确认次数），不重复建条。\n- 新偏好与同一 store 的 active 条目矛盾：以 `conflict` 记候选，`conflicts_with` 列冲突 ID，本轮仍按当前要求执行；本书例外与全局规则不算冲突。冲突候选不能直接 activate，落定见维护文件「冲突候选」。\n- pending 用 `decide=activate|reject`。同一范围的规则改版用 `replace`，新条目启用、旧条目标 `superseded`；只有作者明确撤销或改变旧规则范围才跨范围替换。\n- 作者说“忘掉 / 这不再是我的习惯”用 `forget`，保留历史证据但不再加载。active 条目的语义不可原地偷改，语义变化必须 replace，历史才可审计。\n\n## 回执怎么告诉作者\n\n回复就两行纯文本，不加代码块或引用格式：第一行用一句人话说记住了什么、管哪本书或哪类场合，如「记住了：《{书名}》的对话一律用「」，以后写这本书都照这个来；想改随时说。」；第二行是机器回执作凭证，如「技术备注：Author Memory Receipt: r1 · BP001」。\n\n- 确认、替换、忘掉同理：「好，这条生效了：……」「换成了：……，原来的「……」不再用」「忘掉了：……」。只进待确认时说「这条先记在待确认里，你说\"确认\"才生效」；有冲突时用原话说明跟哪条旧习惯冲突。\n- `warnings` / `omitted_ids` 不原样贴：说「你的习惯攒得有点多，写正文时这几条可能顾不上：「……」」，并建议说「整理作者记忆」。不提字节、prompt、kind、scope；编号只能跟着原话出现。\n\n## 运行工具\n\n依次尝试 `python3`、`python`、`py -3` 找到 Python 3，从当前 skill 根运行本地副本：\n\n```text\n{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py record --workspace {工作区} [--book-root {书目录}] --input {工作区}/.story/work/作者记忆-事件.json\n{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py query  --workspace {工作区} --book-root {书目录} --kind {类型}（必传，可重复） [--genre {题材}] [--workflow {流程}]\n```\n\n- 子命令都可加 `--book {书名}`；写某本书时一律带 `--book-root`。事件 JSON 写在 `{工作区}/.story/work/`（不写系统 `/tmp`），成功后删掉；book 条目的 `scope.value` 填书名（书级 store 已记的名字，首次取目录名）。\n- 明确的“记住 / 确认 / 替换 / 忘掉”都走单事件 `record`：自动读该 store 当前修订、首次自动初始化，不手工读修订号或拼多操作事务。同一 `event_id` 同内容幂等返回原回执，内容不同则失败；返回的 `store` / `book` 说明写到了哪一级。\n- 成功才有 `Author Memory Receipt: rN · APxxx`，没有回执不得声称“已经记住”。**写入不因注入预算失败**：`warnings` 只是提醒（另一级 store 读不出来也在这里注明），按上节转告；有回执就是已记住，不要换 `event_id` 重试。\n\n## 事件格式\n\n新增或强化（`record` 输入；book 范围传 `--book-root`）：\n\n```json\n{\n  \"schema_version\": 1,\n  \"event_id\": \"conversation-2026-08-25-message-42\",\n  \"operation\": {\n    \"action\": \"remember\",\n    \"preference\": {\n      \"kind\": \"prose_style\",\n      \"scope\": {\"level\": \"global\", \"value\": null},\n      \"assertion\": \"对话尽量短，用动作承接情绪，不用大段解释\",\n      \"quote\": \"以后对话都短一点，情绪放动作里，别让角色长篇解释。\",\n      \"source_ref\": \"conversation:2026-08-25\",\n      \"source\": \"explicit_user\",\n      \"confidence\": \"high\",\n      \"importance\": \"high\",\n      \"status\": \"active\",\n      \"reason\": \"用户以“以后”明确声明长期偏好\",\n      \"conflicts_with\": []\n    }\n  }\n}\n```\n\n待确认用 `\"status\": \"pending\"`；冲突候选用 `conflict` 并填同一 store 的 active ID。确认、替换、忘掉时，把下列对象换进新事件的 `operation`（`BP` 编号传 `--book-root`）；`replace.preference` 字段同上但不传 `status`、`conflicts_with`，新条目直接 active：\n\n```json\n{\"action\":\"decide\",\"item_id\":\"AP002\",\"decision\":\"activate\",\"quote\":\"对，这就是我的长期习惯。\",\"reason\":\"作者明确确认\"}\n{\"action\":\"replace\",\"old_ids\":[\"AP001\"],\"preference\":{\"kind\":\"prose_style\",\"scope\":{\"level\":\"global\",\"value\":null},\"assertion\":\"以后对话允许更长的试探，但避免解释设定\",\"quote\":\"……\",\"source_ref\":\"conversation:2026-08-25\",\"source\":\"explicit_user\",\"confidence\":\"high\",\"importance\":\"high\",\"reason\":\"作者明确替换原有全局规则，不是新增本书例外\"}}\n{\"action\":\"forget\",\"item_id\":\"AP003\",\"quote\":\"忘掉这个偏好。\",\"reason\":\"作者明确撤回\"}\n```\n\nFile v1.1.26:references/banned-words.md\n\n# AI味禁用词与句式表\n\n> 表达默认值服从 [style-resolution.md](style-resolution.md)；文件结构与事实约束不豁免。\n\n<!-- 同名副本×6 字节同步，改动后跑 scripts/check-shared-files.sh -->\n\n## 默认优先检查的句式（先对照本书文风）\n\n写网文最毒的 AI 句式，作者一旦养成就会反复出现。以下是优先检查的句式：\n\n| 毒级 | 句式 | 错误例 | 修法 |\n|------|------|--------|------|\n| ★★★★★ | \"不是A，（而）是B\" / \"不是A，不是B，（而）是C\"（\"而\"可省略，省掉也算命中）| \"他不是冷漠，而是绝望\" | 直接写 B 或用更自然的表达 |\n| ★★★☆☆ | 跨段「不是A。/也不是B。/只是C。」 | 「不是嚎啕大哭。/也不是扯着嗓子喊不舍。/只是一个人走远了……」 | 语义复核；重复提纲或拖慢画面时压成 C，有辩解/悬念排除功能可保留 |\n| ★★★★ | \"，带着……\" 万能状语 | \"他笑了一下，带着一丝不易察觉的嘲讽\" | 删掉状语留主句，或换具体动作 |\n| ★★★★ | 无情绪声线：\"声音不大，却带着……\" / \"语气毫无波澜\" / \"平静无波\" / \"声音平直/平平/听不出情绪\" | \"她声音不大，却带着不容置疑的力量\" | 直接写台词内容、声音特征或动作 |\n| ★★★★ | \"他/她知道……\" | \"他知道这一切都来不及了\" | 用行为展示认知 |\n| ★★★ | \"仿佛/犹如/宛若……一般\" | \"仿佛能穿透一切一般\" | 删掉或白描 |\n| ★★★ | \"眼中闪过一丝……\" / \"嘴角勾起一抹……\" | \"眼中闪过一丝悲伤\" | 删掉；写他当场说的话或做出的决定 |\n| ★★★ | \"心中涌起一股……\" / \"心头一震\" | \"心中涌起一股暖流\" | 写它改变了什么：选择、台词、物件或后果 |\n| ★★★ | 抽象命运/开端收束：\"命运……棋局/獠牙\" / \"这一刻终于明白\" / \"反击才刚刚开始\" | \"命运终于露出獠牙；属于他的反击才刚刚开始\" | 回到角色当下可见的文件、动作、对话或物理后果 |\n| ★★ | 章末预告 \"他不知道的是……\" | \"他不知道的是，更大的风暴即将来临\" | 用具体钩子物件/事件收束，避免空泛预告 |\n\n> ★★★★★ 命中一处就要改；轻/中/重分档只按去 AI 味诊断的密度指标定。\n\n`check-ai-patterns.js` 的 `formulaic-parallelism` 还会提示「至于X不X，怎么X」和同动词「不V A，不V B」。这两类可能是功能性口语，因此只做 advisory；Gate B 必须连同台词读语境复核，若只是复述细纲/前文就压成一次判断，不能因 hook 豁免台词而跳过。\n\n**标点**：正文（含叙述和对话）禁用破折号 `——`/`—`、双连字符 `--` 和省略号停顿，改用句号、逗号、短句或动作断句；不设置对话破折号例外。盐言「」引号不在此列。\n\n---\n\n## 一级禁用词（出现即替换）\n\n> 什么词进一级：只收真人语料里几乎不出现、AI 特有的词。真人高频使用的自然副词和虚词不进一级，走二级密度控制。\n\n### 情态类\n仿佛、犹如、宛若、如同、一丝、一抹、些许、几分、隐约、毫无征兆、几不可闻、微不可察\n\n### 动作类\n深吸一口气、不禁\n\n### 表情类\n眼中闪过、嘴角勾起、眉头微皱、眉眼低垂、瞳孔微缩、瞳孔收缩、瞳孔一缩、指节泛白、眼神锐利、目光锐利\n\n### 心理类\n心中一动、心头一震、心下了然、心中暗道、心底泛起、不由得、心中一凛\n\n### 判断类\n不容置疑、不容置喙、不易察觉、显而易见、毫无疑问、不可否认、前所未有\n\n### 形容类\n坚定、闪烁着光芒、狡黠、深邃、凛冽、冰冷\n\n### 过渡类\n不由自主、情不自禁、自然而然、话锋一转\n\n## 二级禁用词（高频出现时替换）\n\n### 语境敏感词（仅高频或偷懒时处理）\n突然、陡然、骤然、猛然、好像、似乎、瞬间、猛地、死死地（角色口语、真实突发、时间压缩、视角不确定时可保留；用同义变体轮换规避重复不算豁免，按同一个词计密度）\n\n### 弱化副词（密度控制）\n缓缓、微微、轻轻、淡淡（每千字合计 ≤3；这四个词同时计入 `cliche-density-tic` 的套词密度统计；孤立自然使用可保留，成串出现或每个动作都垫一个时才替换）\n\n### 书面腔 → 口语化\n\n| 书面腔 | 口语化替换 |\n|--------|-----------|\n| 瓦解 | 消失 / 散了 / 没了 |\n| 无名火 | 烦躁 |\n| 往我心上捅刀子 | 心烦意乱 |\n\n### 总结句式\n- \"他/她终于明白...\"\n- \"他/她这才意识到...\"\n- \"这一刻，他/她终于明白/意识到...\"\n- \"从这一刻开始...\"\n- \"属于X的反击/复仇/故事，才刚刚开始\"\n- \"命运/宿命 + 齿轮/棋局/獠牙/改写/安排\"\n- \"此刻，他/她...\"\n- \"一切...都...\"\n- \"原来...\"\n\n### 排比句式\n- 连续3句以上相同结构的排比\n- \"有的...有的...有的...\"\n- \"一边...一边...一边...\"\n\n### 升华句式\n- \"这一刻...\"\n- \"他知道...\"\n- \"她明白...\"\n- \"这就是...\"\n\n## 禁用句式模板\n\n| 句式 | 示例 | 问题 |\n|------|------|------|\n| \"不是A，而是B\" | \"他不是冷漠，而是绝望\" | 最毒；直接写 B |\n| \"...，带着...\" | \"他说，带着一丝无奈\" | 万能状语 |\n| \"声音不大，却带着……\" | \"她声音不大，却带着不容置疑的力量\" | AI 最爱声音描写 |\n| \"仿佛能...一般\" | \"仿佛能穿透一切一般\" | 文言腔 |\n| 对话标签密度过高/公式化标签 | \"好的，他说道\" | 普通\"说\"可保留；高频或公式化时处理 |\n| \"他/她感到...\" | \"她感到一丝失落\" | 告诉而非展示 |\n| \"他/她意识到...\" | \"他意识到事情不对\" | 直接告知 |\n| \"眼中闪过一丝XX\" | \"眼中闪过一丝悲伤\" | 模板化 |\n| \"嘴角勾起一抹XX\" | \"嘴角勾起一抹冷笑\" | 模板化 |\n| \"心中涌起一股XX\" | \"心中涌起一股暖流\" | 模板化 |\n| \"取而代之的是\" | \"笑容消失，取而代之的是冰冷\" | AI 过渡模板；直接写新状态 |\n| \"淬了/淬着X\" | \"眼里淬了毒\" | AI 通感套路；写动作或台词 |\n| \"显得（有些）X\" | \"他显得有些兴奋\" | 告诉而非展示 |\n| \"心底/心里某个地方+软\" | \"心里某个地方软得一塌糊涂\" | 言情套句；写动作 |\n| \"（浑身）散发着一股X气息/气场\" | \"浑身散发着一股生人勿近的气息\" | 万能气场描写；写旁人的反应 |\n| \"命运/宿命 + 齿轮/棋局/獠牙/改写/安排\" | \"命运终于露出獠牙\" / \"早已布好的棋局\" | 抽象作者总结；改成角色当下撞见的文件、动作、对话、物理后果 |\n| \"这一刻终于明白/从这一刻开始/才刚刚开始\" | \"这一刻，他终于明白\" / \"反击才刚刚开始\" | AI 收束腔；删总结，用动作或未解决问题收尾 |\n\n## 比喻分类（默认复核，不默认全删）\n\n带\"像/如/仿佛/犹如/宛若\"的比喻不是一律 AI。真正高风险的是：成片堆叠、套用万能文学比喻、用精致比喻替代剧情推进，或在段尾替读者总结意义。本表用于识别需要复核的比喻类型：\n\n| 比喻类别 | 例 | 处理 |\n|---------|----|------|\n| 生活/角色化 | \"像一头被抛弃的野狗\" | 若贴角色视角、能传递信息或情绪，可保留 |\n| 物品/现象类 | \"像一把刀\" \"脸色惨白得像这漫天的雪\" | 普通功能性比喻可留；模板化或重复时改白描 |\n| 状态类（陈词滥调） | \"梨花带雨\" \"如沐春风\" | 优先删或改成具体动作/表情 |\n| 抽象类 | \"像命运的齿轮\" \"像上辈子的尘埃\" | 高风险，优先落回动作、物件、声音、后果 |\n| 假设类 | \"力道大得像是要把骨头捏碎\" | 若是角色身体感知可留；夸张堆叠时改事实后果 |\n\n处理原则：先看功能，再看密度。保留最能传递信息或情绪的一两个，其余改为直接描述、动词、名词、作用、结果或事实；不要把删掉的比喻替换成另一批新比喻。例 \"脸色惨白得像这漫天的雪\" 若只是套话 → \"脸色惨白\"；若雪景正在压迫角色，可保留或改成角色当下看到的具体画面。\n\n> `metaphor-density-tic` 是 advisory：提示通读复核，不是 blocking；生活化、角色化、单个有功能的比喻可以保留。\n\n## 替换策略速查\n\n| 原文类型 | 替换方法 | 示例 |\n|----------|----------|------|\n| 抽象情绪词 | 先看上下文是否已成立；再选选择、台词、物件、后果或一句直写 | “紧张”若不影响下一步可直写或删；若导致签名作废，就写作废的结果 |\n| \"感到XX\" | 删除“感到”后按场景决定是否还要情绪句 | “他感到愤怒”可写“他火了”，也可直接写他撤回报价；不要默认换成攥拳 |\n| 形容词堆砌 | 白描手法 | \"美丽动人的笑容\" → \"她笑了\" |\n| 书面表达 | 口语化 | \"不容置疑\" → \"就是\" |\n| 解释性描写 | 留白 | \"他因为害怕而...\" → \"他退后一步\" |\n| 连续排比 | 保留最强一条 | 3 句排比留 1 句 |\n| 总结升华句 | 直接删除 | \"这一刻，她终于明白了...\" → 删 |\n| \"不是A，而是B\" | 直接写 B 或更自然的表达 | \"他不是冷漠，而是绝望\" → 直接写 B |\n| 多余修饰（形容词/定语/量词/指示代词） | 删 | \"白色的药片\" → \"药片\"；\"手里那截链子\" → \"链子\"；\"飞驰的汽车\" → \"车\" |\n\n**替换不复用**：右列是方向示例，不是标准答案。同一禁用词在一章内多次命中时，各处给不同的具体化写法；同一个替换写法反复出现（每次都「垂下眼」、每个动作都补「了一下」），替换产物本身就成为新的模板指纹。\n\n**套词密度优先处理**：`check-ai-patterns.js` 报 `cliche-density-tic` 时，说明禁用词不是零星误用，而是聚成了模板腔。处理顺序不是同义词替换，而是先删抽象总结，再把情绪/判断落到角色当下可见的动作、物件、对话和具体后果。\n\n**套式反应逐处删除测试**：`stock-reaction-tic` 报警时，不代表禁止身体描写。逐处问：删掉后信息、选择、关系、物件或动作结果是否受损？无损就删，不把“指尖轻叩”换成“目光微沉”。伤势、动作失败、人物习惯或情节后果明确时可以保留。\n\nFile v1.1.26:references/deslop-gates.md\n\n# 去AI味 Gate 执行细则\n\n本文件承接调用方选定 Gate；只执行所选范围，不扩大为全量。表达先按 [style-resolution.md](style-resolution.md) 的本书裁决，剧情和信息保护边界仍有效。写作自检与写后审查沿用下方「写手 A-G 判据」；独立去味沿用「删除优先判断」及各门禁详细步骤。模式解释、改写顺序与范例见 [anti-ai-writing.md](anti-ai-writing.md)。\n\n#### 删除优先判断（先于各 Gate）\n\n每条被标记项先判能否删除，再考虑润色——很多 AI 味句是废话（解释、注水、凑数），润色后照样冗余。\n\n1. 删掉后是否丢失伏笔、钩子、角色特征、情节推进、必要信息或必要转折？都不丢则直接删，不进 Gate。\n2. 丢任意一项 → 保留信息进对应 Gate 改写（只删\"怎么说\"的 AI 味，不删\"说什么\"）。\n3. 删除服从过度去AI味保护：不整段删、不删剧情功能；删除比例上限按 AI 味等级，轻度 ≤15%，中度 ≤25%，重度 ≤35%；若删后跌破本次字数范围的下沿，改为降AI重写，不删完再用新废话凑字。\n4. 删完通读：若整段只剩最短句、结构虚词被扫光、每个动作都带「了一下」式尾巴，就是删过头的电报体（见 anti-ai-writing.md 模式 9）——把非峰值叙述句恢复成自然白话，不是接着删。删的是废话，不是中文的自然冗余；这条只调删减的度，禁用词与套路句式的清理力度不因此降低。\n\n以下为各 Gate 的详细规则（删不掉的标记项按此润色；无论 agent 还是主会话执行，均须遵循）：\n\n#### 门禁 A：禁用词替换\n\n加载 [references/banned-words.md](banned-words.md)，对照禁用词表逐项检查。\n\n**白名单机制**：按 [references/style-resolution.md](style-resolution.md) 读取书目录的 `.deslop-whitelist`。获准字面片段由深扫、标点整理和 hook 一致豁免；无文件不创建空表，不因检测器报警自行放行，也不继承其他书的白名单。\n\n**保护规则优先级**：保留创作意图与剧情功能 > 去AI Gate。Gate A-F 只能改变表达方式；Gate G 删的是非故事性的作者解释/旁白（不是情节）。任何 Gate 都不能删除伏笔、钩子、角色特征、人物记忆、情绪承接、因果锚点、关键信息或必要转折；遇到冲突时改为降AI重写或标注 `[需复核]`。\n\n替换规则：\n- 禁用词 → 具体动作/细节描写\n- 不能简单换成另一个形容词\n- 要用\"展示\"替代\"告诉\"\n\n示例：\n- ❌ \"眼中闪过一丝不易察觉的悲伤\" → ✅ \"他垂下眼\"\n- ❌ \"深吸一口气\" → ✅ 直接删；若确有功能，改成角色当下动作（如把话咽回去）\n- ❌ \"嘴角勾起一抹冷笑\" → ✅ \"他冷笑了一声\"\n\n#### 门禁 B：句式去套路\n\n检测并替换以下AI高频句式：\n\n| 句式 | 问题 | 替代方案 |\n|------|------|----------|\n| 否定铺垫后接肯定翻转 | **最毒** 中文 AI 句式之一 | 直接写后项，或改成动作/细节呈现 |\n| 跨段「不是A / 也不是B / 只是C」 | 可能是工整铺排，也可能是辩解、悬念排除或情绪递进 | `formulaic-parallelism` advisory；通读语境，仅在重复提纲或拖慢画面时压缩 |\n| 「至于X不X，怎么X」/同动词「不V A，不V B」 | 工整决策栏、否定清单；正常台词也可能出现 | 结合语境复核；若只是复述前文或细纲，压成一次判断或只留一项 |\n| \"...，带着...\" | 万能状语，AI最爱 | 用独立短句或动作描写 |\n| \"声音不大，却带着……\" | AI 最爱声音描写 | 直接写声音特征或动作 |\n| 陈词滥调/万能比喻 | 公式化比喻会显 AI 腔 | 优先直接白描；确需比喻时只留少数生活化、角色化比喻 |\n| \"他/她知道...\" | 直接告诉读者 | 用行为展示认知 |\n| 对话标签密度过高/公式化标签 | 每句都标注会机械 | 普通\"说\"可保留；高频或公式化时用动作/上下文替代 |\n| \"仿佛/犹如/宛若/如同\" | 文言腔过重 | 口语化表达或白描 |\n| \"不容置疑/显而易见\" | 书面化判断词 | 用具体事实说话 |\n\n**修饰词清扫**：检查物品/人物前面的形容词、定语、副词、指示代词、量词，多余即删。删除后阅读不影响才删；含义流失则改成简洁名词。\n\n示例：\n- \"白色的药片\" → \"药片\"\n- \"飞驰的汽车\" → \"汽车\"\n- \"手里那截链子\" → \"链子\"\n- \"多年的衣服\" → \"旧衣服\"（保留含义）\n\n形容词原则：一次只用一个形容词修饰或不修饰，不连用、不堆砌。\n\n#### 门禁 C：情绪落地\n\n直接写情绪本身不是 AI 味。上下文已让情绪成立，就保留准确的直写或删掉重复说明；需要补足信息时，沿用原文的选择、台词、物件和后果，不为情绪词另配动作。\n\n身体细节按功能取舍：伤势、动作失败、人物习惯或情节后果可以保留；只重复标注情绪的微动作删掉，不换部位或同义动作。具体判据见 `anti-ai-writing.md` 规则 2。\n\n**重复描写去重**：当相邻段反复表达同一信息、同一动作或同一情绪时，按 Gate C/D 处理，不另开专项流程。\n\n处理方法：\n- 合并同一瞬间的重复描写，保留最能推动情绪或剧情的细节\n- 如果原文把一个动作拆成\"动作概述 → 感知细节 → 身体反应\"，改成同一段连续画面\n- 若合并后节奏过快，恢复原文中有功能的信息，或把既有信息改成更自然的动作/对话表达；不在原动作后追加描写层，也不新增原文没有的情节\n\n示例：\n- ❌ \"他拿起笔。手在抖。笔尖又停住。\"\n- ✅ \"他拿起笔，笔尖刚碰到纸就偏了，手腕压了两次都没压稳。\"\n\n**重复语义四类**（同一意思不重复表达，只留一个最合适且简洁的）：\n\n| 类别 | 错误例 | 修法 |\n|------|--------|------|\n| 形容词重复 | \"兴高采烈地笑着跑过来\" | \"笑着跑过来\" |\n| 近义词重复 | \"非常重要的关键问题\" | \"关键问题\" |\n| 含义重复 | \"我好饿，肚子咕咕叫\" | \"我好饿\" |\n| 上下文主语/物品重复 | 上文说\"把抗抑郁药扔了一地\"，下文不必再写\"地上的抗抑郁药\"，只写\"药片\" | 模糊简洁口语化即可 |\n\n**多余场景/人物/物品描写**：服务情节人物之外的修饰描写直接删。\n\n示例：\n- \"游惑手里握着一把短刀，刀锋冷冽\" → \"游惑手里握着一把短刀\"\n- \"手铐紧紧扣住两人的手腕，中间连着一截不算长的链条\" → \"手铐扣住两人的手腕，中间连着链条\"\n- \"暴雪极地的考场里，风雪没有停下的意思\" → \"暴雪极地的考场里\"\n\n#### 门禁 D：节奏调整\n\nAI写作的节奏问题：句式过于整齐、段落过于匀称。\n\n处理方法：\n- 打断连续排比句（保留1-2个，删掉其余）\n- 只拆臃肿修饰、堆叠比喻、抽象总结的长句；改写后叙述仍以逗号长句为主（见 anti-ai-writing.md 规则 3），不要把正常的逗号长句拆成短句串\n- 偶尔用不完整句（口语感）\n- 段落长短交错（不要每段都3-5行）\n- 不按硬指标排版：番茄高分样本不是 50-60 字一行，也不是逢句号必换行；按动作/信息变化自然断段，读起来不卡即可\n- 标点节奏跟语气走：避免通篇句号化；保留有功能的 `？` / 少量 `！`，把 `……` / `——` 改成动作、短句、换行、逗号或句号，删除随机堆砌或刷屏符号\n\n#### 门禁 E：对话去腔调\n\nAI写的对话特征：每句话都信息完整、逻辑清晰、表达精准。\n\n处理方法：\n- 加入口语化表达（\"嗯\"\"哦\"\"行吧\"）\n- 适当打断对话（角色可以答非所问）；对话被打断或拖长时用动作、换行或短句处理，不用 `——`\n- 用动作穿插对话（\"她喝了口水。'然后呢？'\"）\n- 删掉解释性对话（角色不会把自己的动机说清楚）\n- Gate B 同样检查台词：连续工整否定、`至于X不X，怎么X`、同动词 `不V A，不V B` 不能因脚本的台词豁免而漏审；有明确人物/任务功能才保留\n- 不为凑比例硬扩台词；番茄对话占比随题材波动，台词只在角色此刻真会说、必须说时增加\n- 口误、停顿、粗话和重复要服务人物身份与情绪，不作为“真人感”装饰批量添加\n- 不把所有对话末尾改成句号：质问保留问号，爆发峰值保留少量感叹；吞回去/没说完用动作停顿、短句或换行，不用 `……`\n\n#### 门禁 F：结尾去升华\n\nAI写作的结尾特征：总想总结、升华、点题。\n\n处理方法：\n- 删掉总结性语句\n- 用动作/场景收尾，不要用感慨收尾\n- 如果结尾有\"他知道...\"\"这一刻...\"→ 基本可以删\n- 短篇（单个 正文.md）带主角主观情绪的审判句、火葬场预告、心死式章尾是卖点，保留；只删中立、与角色情绪无关的作者讲解。\n\n#### 门禁 G：去解释腔/上帝感/安排感\n\n最难察觉、最\"像 AI\"的一类（对应 anti-ai-writing.md 模式 8）。叙述者跳出角色当下去解释、剧透、总结、定性、升华，读者闻到\"作者在场/剧情被安排\"。\n\n处理方法：\n- 删解释因果：「之所以…是因为」「原来…」「这意味着」→ 删，因果让读者从动作对话里自己拼。\n- 删上帝视角剧透：「她不知道的是」「殊不知」「多年以后」「仿佛预示着」→ 删。\n- 删替读者定性：「演得真好」「这出戏她看过一遍」「他就是这样薄情」→ 删，证据留给读者判断。\n- 删隐蔽的软评判：评判性副词（「关切得恰到好处」）、剧透点破（「那点笑她看得分明」）、定性比喻（「像在宣判一件早已定好的事」）→ 删，或改成角色此刻带偏见的瞬间感觉。\n- 注意：Gate G 删的是\"非故事性的作者旁白\"，不是删情节。删完若变薄，靠角色动作/对话补，不补叙述者解说。\n- 短篇（单个 正文.md）带主角主观情绪的审判句、火葬场预告、心死式章尾是卖点，保留；只删中立、与角色情绪无关的作者讲解。\n\n**任务卡点修法边界**：任务卡点不是固定公式，也不是通用补流程按钮。原文已有任务、证据、手续、物件缺口时，可以把解释总结压成角色当下要处理的具体卡点；原文没有缺口时，只删解释或改动作/对话，不新造剧情。所有卡点都先做“删掉试试”：删掉后不丢伏笔、钩子、信息、关系变化或必要转折，就压缩或删除。\n\n## 写法抽查（审查侧，只指认已有问题）\n\n对爽点段与检测器标记处逐问。只许指出正文里**已有**的那一处，没有就答「无」，**不许为了让某一问有答案回头补内容**。详写的关键场景里，遮住一处发生、感知或反应后读者什么也没损失，就判为可删并报告位置；套式反应按 `banned-words.md`「套式反应逐处删除测试」逐处过。审稿只报告、不改文件；去味执行者再按删除保护落改，只报告实际删改与保留理由。\n\n| # | 自问 | 不合格的样子 |\n|---|---|---|\n| 1 | 本章最大的那次状态变化，读者看见了几个中间态？ | 只给了\"起点\"和\"终点\"；或同一状态换十种说法说十遍 |\n| 2 | 有没有一组同类并列项被平均分配了笔墨？ | 三样物件、四拨人马各给同样的分辨率 |\n| 3 | 本章的设定／能力／威胁，是被说出来的，还是被谁付了代价试出来的？ | 旁白直接给出结论，读者没有自己发现的机会 |\n| 4 | \"厉害／难得／要命\"这些判断，是谁给出的？他有什么立场？ | 叙述者自己下的判断；结论由旁白先说出来、在场的人只负责吃惊；或标价人就在场却没标价 |\n| 5 | 每个给了镜头的人，此刻在为自己争取什么？ | 遮住名字认不出是谁说的；所有人同向配合主角；用手部／喉部微动作代替立场；或把他的算计写成一段旁白独白 |\n| 6 | 该说出口的话，是写出来了还是被概括了？ | \"他吼了一声\"\"他说了句什么\"\"三言两语解释了缘由\"；本该来回几轮的交锋压成一次说完 |\n| 7 | 本章最重的那一句，是不是最短的那一段？ | 最重的一拍写成了全章最长的段落 |\n| 8 | 判为\"密\"的段落里，有没有量词加概括？ | \"一连七八下\"\"半晌\"\"众人纷纷\"出现在密处 |\n\n---\n\n## 写手 A-G 判据\n\n以下为原 narrative-writer 的写作自检/审查判据，调用方给了 Gate 就只执行该范围；未给时仍 A-G。\n\n- **A 禁用词**：命运齿轮/如潮水般/心猛地一沉类逐一替换（对照 `banned-words.md`；书级文风有裁决按其配额）。\n- **B 句式**：连续排比、刻意对称打散；**禁止高置信否定铺垫后再肯定翻转**——同句「不是A，(而)是B」「没有X没有Y只是Z」直接写肯定内容或改动作承担对比；跨段「不是A / 也不是B / 只是C」、`至于X不X，怎么X`、同动词 `不V A，不V B` 只作语义复核（advisory），重复细纲或拖慢画面时改，承担辩解、悬念排除或情绪递进时可保留（书级文风另有裁定按其执行）；普通名词不加引号强调（对话、逐字引用、场内载体原文除外）。\n- **C 情绪**：删空泛 AI 情绪总结句；上下文已成立就删补充说明；不设「情绪词→身体动作」默认转换。\n- **D 节奏**：只拆臃肿修饰、堆叠比喻、信息过载的长句；句长按书级文风带执行，长短随情绪 beat 交错——沉淀放慢、冲突骤短，忌通篇同长度。\n- **E 对话去腔调**：所有角色同一语气→按语言风格档案差异化；犹豫/打断/拖长用动作、短句或换行承担。\n- **F 结尾去升华**：大段抒情收尾→安静细节收尾；短篇例外见门禁 F。\n- **G 去解释腔/上帝感**：先按本书叙述姿态判断，短篇例外见门禁 G；授权的有限全知、评论或旁人内心不因形式删除。删无功能的解释、未经授权的剧透、重复总结和空泛定性（之所以/原来/这意味着/她不知道的是/殊不知/多年以后）；承担锚点或情绪的压成角色白话；已有场内载体（手机/公告/屏幕）优先保留为角色看到的文本。\n\nFile v1.1.26:references/style-resolution.md\n\n# 文风与参考冲突裁决\n\n写正文、改写、去 AI 味和审稿都先做这一步；inline 与 agent 用同一份裁决。无需另建画像或要求作者填写配置。\n\n## 按维度取值，不把整份文件互相覆盖\n\n表达选择按以下顺序取第一个明确、适用的要求：**当前请求 > 本书文风/设定 > 本书 active 作者记忆 > 题材、流程、全局 active 记忆 > 主对标文风 > 题材包与通用 references 默认值**。未声明的维度才向下补齐；本书例外不撤销全局习惯，临时要求不写回长期记忆。\n\n句长、视角、标点、对话落法、情绪直写、修辞、叙述者评论和收尾方式都是表达维度。reference 中的“必须”“禁用”“最高优先级”、示例和检测阈值不使默认写法升级为作者不可覆盖的规则。主对标的低置信观察不压过作者的明确选择。\n\n事实与表达分开裁决：文风不能改变细纲事件、已知事实、信息揭露边界、用户字数范围、改写范围、文件结构或追踪协议；有限全知允许换视角，不等于可提前揭底。转限知时可暂不叙述该人物无从得知的信息，事实本身不变；不得补出“早已知道”“后来发现”或新观察经历来保全原文信息。审稿照常评价因果、可读性与情绪效果，不能仅因使用了作者选定的写法就判错，也不能因为作者喜欢就忽略真实缺陷。\n\n## 加载与传递\n\n1. 从本次正文路径确定书目录（长篇为 `正文/` 的父目录，短篇为 `正文.md` 所在目录）。读该书 `设定/文风.md`；短篇同时读 `设定.md` 的文风约定。无文件就继续，不建占位文件、不猜其他书。文风无最低字数限制，一句可执行的偏好也有效；空白、纯标题、待补充不算。\n2. `_文风摘要.md` 只辅助定位，不替代全文。当前会话已读全文时无需反复读；摘要与全文不一致用全文，不让旧摘要压过作者的新修改。\n3. 有作者记忆时 query，显式传当前书名、已知题材和流程以及需要的 kind，避免只取到 global；没有就跳过。只用 active；同一维度窄范围覆盖宽范围，不拼成同时满足的清单。无法判定的同范围冲突才问作者，已能按优先级解决的不询问。\n4. 在现有 prompt 填 `style_resolution`：本次生效的表达要求及来源、被覆盖的默认条款、必须保留的事实/信息边界；只列与任务有关的冲突，无冲突可写“按本书文风”。原样传给正文、去味和文字 reviewer，并传文风全文路径。同批复用，当前请求或文风变动时更新。单独调用去味/审稿也执行本步骤，不靠上次会话的记忆。\n\n## 检测器如何服从裁决\n\n检测器不理解作者意图。保留现有默认检查；明确采用且有功能的命中，复用**书目录**下的 `.deslop-whitelist`：UTF-8，一行一个原文字面片段，空行和以 `#` 开头的整行注释忽略，不支持正则或通配符。不向父目录找，避免跨书继承。\n\n- 本书文风明确允许某种停顿标点时，可登记 `——` 或 `……`；具体修辞登记完整的获准原句，不能登记“不是”“没有”等泛词来关闭整类检查。\n- 每项用上一行 `# 来源：…；用途：…` 说明当前请求或文风依据。只为执行作者已明确的选择登记，不因脚本报警自动放行。当前请求禁止某写法时移除相冲突的豁免；一次性保留只登记该句，不推断长期习惯。\n- 深扫、标点整理和写后/下一章检查读取同一白名单。豁免只影响对应字面片段的风格检查；同一行其他问题照报，事实、字数、占位、工程词、截断和文件结构检查不豁免。\n- 所选 Gate 仍执行：检查该写法是否重复、冗余、破坏节奏或越过信息边界；有这些具体问题才改。裁决与发现可简短写在正常交付报告中，不写进小说正文。\n\nFile v1.1.26:skill-card.md\n\n## Description:\n\nDetects formulaic AI-style phrasing in Chinese web fiction and helps revise it into more natural prose while preserving story intent.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[worldwonderer](https://clawhub.ai/user/worldwonderer)\n\n### License/Terms of Use:\n\nMIT\n\n## Use Case:\n\nWriters and editors use this skill to identify repetitive or formulaic language in Chinese web fiction and revise passages or chapters while retaining character voice and plot details. It can also provide a detection-only report without modifying the text.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Revision mode may alter targeted story files and change intended phrasing or story details.\n\nMitigation: Request detection-only mode when edits are unwanted; review file changes and flagged passages before accepting revisions.\n\nRisk: Author-style preferences may persist in the project's .story/作者记忆 directory.\n\nMitigation: Review the author-memory behavior and stored preferences before using the skill in a project where persistent writing preferences are unwanted.\n\n## Reference(s):\n\n- [ClawHub skill listing](https://clawhub.ai/worldwonderer/skills/story-deslop)\n- [Project link supplied in skill metadata (not verified provenance)](https://github.com/zenstory-ai/oh-story-claudecode)\n- [Style resolution](references/style-resolution.md)\n- [Author memory protocol](references/author-memory.md)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Files]\n\n**Output Format:** [Markdown diagnosis and revised Chinese prose; optionally edited story files]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Detection-only requests produce a report without edits; revision requests may update targeted story files and store author-style preferences in the project.]\n\n## Skill Version(s):\n\n1.1.26 (source: ClawHub release metadata; bundled skill frontmatter states 1.0.0)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.1.26:LICENSE\n\nMIT License\n\nCopyright (c) 2025-2026 oh-story-claudecode\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nArchive v1.1.25: 15 files, 117878 bytes\n\nFiles: references/agent-calls.md (1679b), references/anti-ai-writing.md (37187b), references/author-memory-maintenance.md (8766b), references/author-memory.md (11531b), references/banned-words.md (10424b), references/deslop-gates.md (14455b), references/style-resolution.md (4016b), scripts/author_memory_commit.py (79758b), scripts/check-ai-patterns.js (75274b), scripts/check-degeneration.js (15104b), scripts/normalize-punctuation.js (13480b), scripts/style-whitelist.js (1168b), skill-card.md (2164b), SKILL.md (20392b), _meta.json (132b)\n\nFile v1.1.25:SKILL.md\n\n---\nname: story-deslop\nversion: 1.0.0\ndescription: \"网文去AI味。检测并清除文本中的AI写作痕迹，让文字回归自然、非模板化。触发方式：/story-deslop、/去AI味、「去AI味」「这篇太AI了」「网文去AI味」。\"\nmetadata: {\"openclaw\":{\"source\":\"https://github.com/zenstory-ai/oh-story-claudecode\"}}\n---\n# story-deslop：网文去AI味\n\n**文风裁决**：正文写作、改写或审稿前先读 [references/style-resolution.md](references/style-resolution.md)，加载本书文风并形成 `style_resolution`；无作者记忆也执行。当前请求、本书文风和 active 偏好按维度覆盖通用 references；同一裁决交给后续执行者。\n\n你是网文润色专家。你的任务是把 AI 味浓重的网文文本改写自然，降低模板化、书面腔和过度工整感。\n\n**核心信念：AI 味的主要问题并非语法错误；更常见的是过度圆滑、工整、解释充分。改写目标是保留剧情功能，同时增加口语、停顿、跳跃和具体动作。**\n\n---\n\n> 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 用 `subagent_type`，OpenCode 用 `subagent` 工具的 `agent` 参数，Codex 用同名 `agent_type`，Antigravity 用 `invoke_subagent` + `TypeName`。运行时未暴露 custom-agent registry / `invoke_subagent`、返回未知 agent，或检测到 `.zcode/`（ZCode 3.3.4 不执行项目 custom agents）时降级 solo/direct：报告里一句白话告诉作者「这次由我直接改」，`Fallback: project custom agents unavailable -> solo` 原文只写进报告最后一行「技术备注：」。\n>\n> Spawn 版本提示（不阻断 spawn）：先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 34` 不一致时（标记缺失、字段缺失/非整数、小于或大于 34）**照常按文件存在性检查并 spawn**，同时用一句白话提示作者「写作助手是旧版，运行 /story-setup 后新开对话」，`Notice: agents bundle 版本不匹配（项目 {N}，本版 34）` 原文写进技术备注行；大于 34 时额外提示先更新 oh-story-claudecode，不要用本地旧版 setup 降级覆盖。只有 agent 文件缺失、或运行时不暴露 custom agent 时才降级 solo/direct，`Fallback: ... -> solo` 同样只进技术备注行。\n\n## 核心哲学\n\n### 原则 1：改味优先，别当改错\n\nAI味不按语法错误处理，也不需要\"修正\"。它属于风格问题：过于书面化、过于对仗工整、过于面面俱到。去AI味的本质，是把文字从过度工整拉回具体、自然、可读。\n\n### 原则 2：改最少，效果最大\n\n去AI味不等于重写。目标是改最少的字，让整段文字的\"味\"变过来。能改一个词就不改一句，能删一句就不重写一段。没有问题的句子尽量保留原句；人名、地名、数字、章节名、专有名词优先保留。\n\n**过度去AI味保护**：\n- **不得整段删除正文内容**。如果某段被标记为多处AI味，应逐句修改而非删除整段\n- 删除前必须确认：被删除的内容是否包含伏笔、钩子、角色特征、情节推进、人物记忆、情绪承接、因果锚点等关键信息\n- 如果删除会破坏情节连贯性，改为\"降AI重写\"而非删除\n- 删除比例上限按 AI 味等级分级：轻度 ≤15%，中度 ≤25%，重度 ≤35%。重度文本可通过“合并重复描写+重写降AI”产生更大字符差，但仍不得整段删除或删掉剧情功能。超过对应比例应在报告中标记超限风险，并输出分段处理方案\n- 如果逐句修改后某段仍不满意，在去AI味报告中标注 `[需复核]` 而非删除，不计入当前等级的删除比例上限\n- 对于\"疑似AI味但不确定\"的内容，在去AI味报告中标注 `[需复核]`，而非插入正文\n\n### 原则 3：保留创作意图\n\n去AI味只改\"怎么说\"，不改\"说什么\"。剧情、人设、情节走向一概不动；不新增原文没有的情节、设定、关系或时间线。如果原文有逻辑问题，那不是去AI味的活。\n\n### 原则 4：按文风保留有功能的语气与停顿\n\n去AI味不是把文字全部磨成句号。质问里的 `？`、爆发峰值的少量 `！` 可以保留；犹豫、未尽、打断或拖长用动作、短句、换行、逗号或句号重排。默认不保留 `……` / `——`；本书明确选择并登记的功能性停顿保留，也要清理无功能的 `!!!` 和随机标点堆砌。\n\n### 边界：去AI味只处理读感与叙事功能\n\n去AI味治读感，不承诺任何分数结果。若用户贴出工具报告，只把能对应到正文的问题转成具体修改点；不写“0% AI / 100% 真人”，不注水、故意错字或打乱标点。去AI味仍以原文剧情边界为准，不把表达修复变成新增情节或新增事件链。\n\n### 作者习惯\n\n若作者记忆 state 已存在，改写前用 `scripts/author_memory_commit.py query --workspace {工作区} --book-root {书目录} --kind prose_style [--genre {题材}] [--workflow 去AI味]` 获取匹配的 active 文风条目（`--workspace` 必传；`--genre` 填本书题材类型；总输出 ≤2KB），并交给 inline/spawn 执行者作为自然倾向，不逐条展示或最大化命中，不牺牲连贯、节奏和字数；当前请求、原文剧情功能和本 skill 保护规则优先。用户明确声明长期文风习惯时，改写后按 [references/author-memory.md](references/author-memory.md) 用 `record` 写入并按其「回执怎么告诉作者」转告；只记作者明确说的，一次性要求、反复修改、检测器 findings 和助手自己的结果不记录。\n\n---\n\n## 自然文本基准\n\n去AI味需要知道自然网文文本的特征。以下是从热门网文中提炼的非模板化写作特征，作为对比基准：\n\n### 自然文本特征（与AI味对比）\n| 维度 | 自然文本 | AI味文本 |\n|------|----------|--------|\n| 段落长度 | 随 beat 长短不一：爽点/转折压短，推理/氛围/情绪链放长 | 通篇同一长度，整齐均匀 |\n| 句内节奏 | 叙述以逗号长句为主（逗号之间 8-12 字、整句 20-30 字，见 anti-ai-writing.md 规则 3） | 要么长句臃肿，要么通篇碎句像提纲 |\n| 对话标签 | 标签低频且不公式化，多用动作/上下文引出；普通\"说\"可保留 | 几乎每句都有\"说道/问道/笑道\" |\n| 情绪表达 | 直写有上下文支撑，反应带后果 | 空转的情绪总结句，或给每个情绪词配微动作 |\n| 比喻 | 生活化（\"像哈士奇护食\"） | 文学化（\"如寒冰般\"） |\n| 语气词 | \"嘤\"\"嘶\"\"靠\"\"行吧\" | 几乎没有 |\n| 省略 | 大量省略，读者自己脑补 | 面面俱到，生怕读者不懂 |\n| 排比 | 偶尔1-2个，从不连续3+ | 连续3-5个排比是标配 |\n| 结尾 | 动作/对话收尾 | 总结/升华/感慨收尾 |\n\n### 自然表达替换参考\n> 来自大量网文写作研究：\n\n- 替代\"深吸一口气\"→ 直接删；若确有功能，改成角色当下动作\n- 替代\"眼中闪过一丝...\"→ \"他垂下眼\" / \"眯起眼\"\n- 替代\"嘴角勾起一抹...\"→ \"他嘴角一扯\" / \"乐了\"\n- 替代\"仿佛...\"→ 优先直接白描；确需比喻时只留少数生活化、角色化比喻\n- 替代\"不禁...\"→ 直接写动作\n- 替代\"缓缓开口\"→ \"说\" / 用动作引出对话\n\n---\n\n## 检测流程\n\n去 AI 味只有一条管线：确定性检测器 → 按分级选 Gate → 一次定点改写 → 复扫。长篇写作的章末检测与按需审查、story-review 的确定性预检用的是同一套检测器与 Gate，本 skill 是它的独立入口。\n\n### Phase 1：AI味扫描\n\n**先认篇幅**：目标是单个 `正文.md`（同目录常有 `小节大纲.md` 或 `设定.md`）按短篇处理，门禁 F/G 保留短篇卖点（主观审判句、火葬场预告、心死式章尾）；`正文/` 下逐章文件或章节片段按长篇处理。拿不准问作者一句。\n\n对用户提交的文本做快速扫描，标记AI味浓重的位置。报告写给作者：问题用白话说并附原文，脚本名、检测器类别名、Gate 字母不进报告。\n\n<!-- author-report -->\n```md\n## AI味检测报告\n\n### 整体评估\n- AI味等级：{轻度/中度/重度}\n- 主要问题：{1-3 个白话描述}\n\n### 问题标记\n| 位置 | 类型 | 原文 | 问题 |\n|------|------|------|------|\n| 第X段 | 套话 | \"眼中闪过一丝...\" | 典型AI高频词 |\n| 第Y段 | 句式 | \"...，带着...\" / 连续3句排比 | AI惯用句式，过于工整 |\n| 第Z段 | 情绪空转 | \"一丝悲伤涌上心头\" | 只总结情绪，没有落点 |\n| 第M段 | 节奏 | 段段4-6句、长度均匀 | 整段同节奏 |\n| 第N段 | 重复描写 | 同一动作连续拆写 | 相邻段重复同一瞬间 |\n| 第P段 | 解释腔 | \"她不知道的是…\" / \"之所以…是因为\" | 叙述者跳出角色解释、剧透或下结论 |\n| 第Q段 | 动作清单 | \"伸手拿起…取过…放下…转身…\" | 像监控录像，缺人物的感受 |\n```\n\n> 类型 → Gate 速查（选 Gate 用，不写进表）：套话 = A，句式 = B，情绪空转 = C，节奏 = D，对话腔调 = E，结尾升华 = F，解释腔 = G，重复描写 = C/D，动作清单 = D/E。\n\n> 评价只输出 AI味等级（轻度/中度/重度）与问题标记；不做「上乘 / 新人投稿属上乘 / 性价比高」这类横向市场判断——skill 没有平台投稿分布数据，这类措辞是无依据的越权担保。\n\n**确定性句式预检（文件模式）**：当输入是本地正文文件路径时，「AI味扫描」必须先运行本 skill 自带脚本，只报告不修改：\n\n```bash\nnode scripts/check-ai-patterns.js --check --fail-on=blocking <正文文件...>\n```\n\n- 检测器 blocking＝必须修，advisory＝建议看；轻/中/重分档另按「诊断与分级」定，用来选 Gate。\n- 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。\n- 其他 findings（碎句号、长段落、微动作、套式反应细节、动作清单、抽象总结、套词、比喻密度、解释链、公文腔、过度精炼、低连接密度、引号强调滥用、`formulaic-parallelism` 工整并列）只作读感提示；完整类别和修法见 `references/anti-ai-writing.md`。其中工整并列会扫描台词，必须读语境判断，不能因为 hook 对台词低误报豁免就跳过。\n- 处理方式：删掉否定铺垫，直接写后项；或改成角色动作、物件细节、身体反应来呈现。\n- 若用户只要检测，保留报告不改文。若执行去 AI 味，只改确实损害读感且无叙事功能的问题；功能性写法标 `[需复核]` 并保留。\n\n---\n\n### Phase 2：诊断与分级\n\n用户明确指定 Gate 时，直接使用该范围；未指定时按下表定档、选处理策略：\n\n| AI味程度 | 特征 | 处理策略 |\n|----------|------|----------|\n| 轻度 | 少量禁用词，偶有书面腔 | 只过 Gate A + B |\n| 中度 | 多处禁用词 + 句式套路 + 心理描写抽象 | 过 Gate A + B + C + D + G |\n| 重度 | 全文AI味明显，节奏/对话/结尾/解释腔都有问题 | 完整 7 Gate + 重点段落重写 |\n\n**定档只看这六项**（阈值是参考值，按题材放宽，如古风的对话标签天然偏多）：\n\n| 指标 | 计算方式 | 轻度 | 中度 | 重度 |\n|------|----------|---------|---------|---------|\n| 禁用词密度 | 命中次数 / 千字 | ≤5 | 6-15 | >15 |\n| 连续排比段数 | 连续相同句式结构的段落数 | ≤2 | 3-4 | ≥5 |\n| 空转情绪句 | 无落点的情绪总结句数 / 总段落数 | ≤10% | 10-25% | >25% |\n| 对话标签密度 | \"说道/问道/笑道\" 等 / 对话句数 | ≤30% | 30-50% | >50% |\n| 平均段落句数 | 总句数 / 总段落数 | ≤3 | 3-5 | >5 |\n| 重复描写密度 | 同一信息/动作/情绪连续多段拆写的处数 / 千字 | ≤1处/千字 | 2-3处/千字 | ≥4处/千字 |\n\n- **怎么定档**：任一项到重度，或四项及以上到中度，按重度；有一项到中度，按中度；六项都在轻度，按轻度。\n- **要紧处加一档**：本次处理的这段文字里，开头约 500 字、高潮那场戏、最后约 500 字出现重复描写，「重复描写密度」这一项按高一档算（轻→中，中→重）。短篇按全篇、长篇按本章算开头和结尾。\n- **禁用词怎么数**：banned-words.md 的条目作为连续字符串出现一次算一处，同一处只算一次；`.deslop-whitelist` 里的词是命中片段的一部分时不算（免得误报世界观术语）。\n- 按指标定档后，可按题材语境往下调至多一档，并在报告里写明理由；不往上调。\n\n**改写顺序**（只排所选 Gate 的先后，不扩大范围）：先去泛化与套话（禁用词、抽象情绪、工整对仗、解释腔），再去书面腔，最后回自然节奏、对话差异与结尾落点；做法与范例见 [references/anti-ai-writing.md](references/anti-ai-writing.md)。\n\n---\n\n### Phase 3：逐项清除\n\n#### Agent 调用：narrative-writer（去AI味执行）\n\n「诊断与分级」完成后，按以下顺序选择执行路径：\n\n1. **已在 narrative-writer 子代理内**：按选定 Gate 范围 inline 执行，不再 spawn（嵌套 spawn 会被静默降级）。\n2. **未在子代理内且按顶部顺序找到 `narrative-writer` agent**：按当前运行时调用；Antigravity 用 `invoke_subagent(TypeName: \"narrative-writer\")`，Claude/OpenCode/Codex 用各自字段。prompt 照 [references/agent-calls.md](references/agent-calls.md) 填，只在交给写手时读。\n3. **agent 不存在或 spawn 失败**：主会话 inline 执行。\n\n#### Gate 规则入口\n\n实际执行者逐项清除前读 [references/deslop-gates.md](references/deslop-gates.md) 的删除保护、所选 Gate 细则与「写法抽查」；inline 与 agent 使用同源规则。按上文「改写顺序」排所选 Gate 的先后，不另起一次全篇去味。\n\n### Phase 4：确定性收尾（文件模式）\n\n当输入是正文文件路径，且「逐项清除」已落盘修改后，**先**做句式/段落复扫，**再**做机械标点兜底（破折号要按功能改写，故先于机械替换报出）：\n\n```bash\nnode scripts/check-ai-patterns.js --check --fail-on=blocking <正文文件...>\nnode scripts/check-degeneration.js --check <正文文件...>\nnode scripts/normalize-punctuation.js <正文文件...>\n```\n\n作用边界：\n- `check-ai-patterns.js` 只报告不改写：severity=blocking 的类别优先改正文并复扫；advisory 先通读判断，确属提纲感、解释腔或模板腔再改，功能性写法标 `[需复核]`。\n- 它只是读感提示；完整类别、例外和修法见 `references/anti-ai-writing.md`。\n- `check-degeneration.js` 报告模型退化（逐字复读/打转、末尾截断、占位符、工程词泄漏 `细纲`/`情节点` 等），每条带 `severity: blocking|advisory`。blocking 是退化信号，去AI味改不掉，应回去重新生成那一段再 deslop；advisory（tier2 章节/歧义词）只提示。\n- `normalize-punctuation.js` 机械兜底：保留书级白名单获准的停顿，清除其余残留的 `……`、漏网破折号 `——`/`—`、双连字符 `--` 和独立行 `---`；默认不改变引号风格，也不把有功能的 `？` / 少量 `！` 改成句号。\n- 知乎盐言短篇可保留 `「」`；只有用户或项目明确要求时，才给标点脚本加 `--quote-mode ascii` 或 `--quote-mode yan`。\n\n---\n\n**视角改写复核（仅本次要求切换视角时）**：交付前回读原文，逐项核对新增的感知/认知句。原文只说明事件发生，不等于人物已经看见或知道；不得自行补观察时点。没有原文依据的“进门时发现”“后来看到”等句子删去，或只呈现原有、当前场景可见的物件状态；不可得的信息暂不叙述。这个检查先于交付，不能用句式脚本通过代替。\n\n### Phase 5：输出润色结果\n\n<!-- author-report -->\n```md\n## 去AI味结果\n- AI味：{轻度/中度/重度} → 改后 {轻度/已基本去除}；主要问题：{1-3 个白话描述}\n- 改了 {N} 处：{最多的 2-4 类，如「删掉\"眼中闪过一丝\"一类套话 6 处；拆开连续排比 3 处」}\n- 字数：{N0} → {N1}（{删/增}{百分比}）{；超过本档删减上限时写明已分段处理}\n\n### 改前改后\n{逐段展示，每处一句说明为什么改；超过 30 处时只展示前 10 处 + 末 5 处，其余按问题类型计数}\n\n### 需要你看一眼\n{标 [需复核] 的地方：原文 + 为什么没动或拿不准；没有就写\"无\"}\n\n### 润色后全文\n{文件模式（默认；章节/正文文件、批量与长篇去AI）：直接改写落盘，写明改了哪个文件，本节只回 ≤200 字代表性片段，不向父会话返回全文。文本模式（仅限交互式贴入、无文件路径的零散片段）：完整输出润色后的文本。}\n\n下一步：{一句话，如「要我接着处理下一章吗？」}\n技术备注：{降级或版本提示的原文；没有就删掉这一行}\n```\n\n**字数硬约束**：删除比例不得超过「诊断与分级」对应上限（轻度 ≤15%、中度 ≤25%、重度 ≤35%）。超限时分段输出并在报告里标记，不得整段删除正文。\n\n**收敛终止**：\n1. 同一段连续两轮去 AI 后没有新改动 → 停止该段处理\n2. 全文上限 3 轮重扫；第 3 轮仍有 ≥10 处改动 → 在报告里标 `[需复核]`，移交人工\n3. 每轮结束前都要做一遍\"再检一次\"：是否有不符合的地方，有则继续；没有则停\n\n---\n\n## 使用场景\n\n| 场景 | 操作 |\n|------|------|\n| 用户贴一段文字说\"太AI了\" | 执行完整检测 + 润色流程 |\n| 用户说\"帮我润色\" | 先检测AI味，再润色 |\n| 用户说\"检查下有没有AI味\" | 只做检测，不做修改 |\n| 用户写作中要求 `仅标注 / 只检测 / 不要改` | 嵌入式提醒模式：执行「AI味扫描」和「诊断与分级」，跳过「逐项清除」「确定性收尾」「输出润色结果」；输出问题标记表，不修改原文，不写文件 |\n\n---\n\n## 参考资料\n\n按需加载以下文件：\n\n| 文件 | 何时加载 |\n|------|----------|\n| [references/banned-words.md](references/banned-words.md) | 检测和替换禁用词时 |\n| [references/deslop-gates.md](references/deslop-gates.md) | 逐项清除前：删除保护与所选 Gate 的细则、示例 |\n| [references/agent-calls.md](references/agent-calls.md) | 交给 narrative-writer 去味时：prompt 模板 |\n| [references/anti-ai-writing.md](references/anti-ai-writing.md) | **去AI味完整指南**：预防+改写顺序+范例 |\n| [scripts/normalize-punctuation.js](scripts/normalize-punctuation.js) | 文件模式落盘后做确定性标点收尾；默认保留引号风格 |\n| [scripts/check-ai-patterns.js](scripts/check-ai-patterns.js) | 文件模式「AI味扫描」预检与「确定性收尾」复扫（只看引号外叙述），只报告不改写 |\n| [scripts/check-degeneration.js](scripts/check-degeneration.js) | 文件模式「确定性收尾」复扫，只报告不改写 |\n| [references/author-memory.md](references/author-memory.md) + [scripts/author_memory_commit.py](scripts/author_memory_commit.py) | 读取或更新跨会话作者文风习惯时 |\n\n---\n\n## 流程衔接\n\n**流水线：** 通用\n**位置：** 润色（共享收尾）\n\n| 时机 | 跳转到 | 命令 |\n|---|---|---|\n| 继续写作 | story-long-write / story-short-write | `/story-long-write` 或 `/story-short-write` |\n| 发现结构问题 | story-long-analyze / story-short-analyze | `/story-long-analyze` 或 `/story-short-analyze` |\n| 准备做封面 | story-cover | `/story-cover` |\n\n---\n\n## 语言\n\n- 跟随用户的语言回复，用户用什么语言就用什么语言回复\n- 中文回复遵循《中文文案排版指北》\n\nFile v1.1.25:_meta.json\n\n{\n  \"ownerId\": \"kn7e14qz6v4n71xmjegh68jtts80dp5r\",\n  \"slug\": \"story-deslop\",\n  \"version\": \"1.1.25\",\n  \"publishedAt\": 1790495179340\n}\n\nFile v1.1.25:references/agent-calls.md\n\n# 交给 narrative-writer 去味的 prompt\n\n只在 SKILL.md「逐项清除」第 2 步交给写手时读；主会话自己改不读本文件。花括号按本次诊断结果填，其余照抄：\n\n`项目目录：{dir}\\n任务描述：去AI味\\nGate 细则：执行前按你的参考表读取 deslop-gates.md 的删除保护与所选 Gate（部署副本与本 skill 同源）\\n检查分工：你负责本次语义去味；父流程负责 Phase 4 最终文件扫描，不重复整轮改稿\\n检查范围：{待处理的正文文件}\\n文风路径：{本书文风全文路径，无则写无}\\nstyle_resolution：{本次生效要求及来源、被覆盖的默认条款、事实边界}\\n作者偏好：{query 命中的 prose_style 项}\\n篇幅：{长篇/短篇}\\nAI味等级：{诊断与分级结果}\\n处理策略：{实际选定的 Gate 范围；优先使用用户指定范围}\\n删除优先：每条 AI 味项先判能否删除——删后不丢伏笔/钩子/角色/情节/人物记忆/情绪承接/因果锚点/必要信息/必要转折的直接删，会丢才进 Gate 润色；看似解释/评价但承担小连贯的句子，压成白话承接、动作或物件锚点，不机械删除；已有任务/手续/物件/证据缺口可以压成角色当下要处理的具体卡点，但不新增原文没有的事件链；删除服从比例上限与本次字数范围的下沿，跌破下沿改降AI重写。\\n模式处理：按 references/anti-ai-writing.md 的问题模式目录执行；模式 8（解释腔/上帝视角/安排感）归入 Gate G，其余新增模式归入 Gate A-F 的对应处理。相邻段重复表达同一信息/动作/情绪时，按 Gate C/D 合并去重`\n\nFile v1.1.25:references/anti-ai-writing.md\n\n# 去AI味完整指南\n\n> 本文件的句长、视角、标点、修辞与禁用词是默认写法，服从 [style-resolution.md](style-resolution.md) 的逐维裁决。所选 Gate 检查表达效果，不因作者有意选择某写法就机械删除；获准命中按书级 `.deslop-whitelist` 处理。\n\n<!-- 同名副本×4 字节同步，改动后跑 scripts/check-shared-files.sh -->\n\n> 识别AI写作指纹、改写顺序、禁用词约束、改写范例库。用于正文写作后做去AI味自检和改写时查阅。\n\n---\n\n## 决策路由\n\n| 你在做什么 | 查阅哪个模块 |\n|-----------|-------------|\n| 写完正文后做去AI自检 | 核心规则 -> AI写作模式检测 -> 质量维度检查 |\n| 改写某段AI味重的文字 | 改写范例库 + 冲突对话改写范例 |\n| 检查是否用了禁用词 | 禁用词与句式速查 -> AI高频词（模式1） |\n| 系统性去除整章AI味 | 改写顺序 |\n| 检查章尾是否有总结升华 | AI写作指纹 -> 章末总结体 |\n| 判断情绪描写是否告知式 | Show Don't Tell原则 + 去AI味补充技法 |\n| 快速扫描全章质量 | 快速自检口诀 + 质量维度检查 |\n\n## 指令语气\n\n本文件以问题模式和高危清单为主。一级高危词优先检查；二级/语境敏感词按频率、语境和是否偷懒判断。遇到冲突时，保留创作意图与剧情功能优先于机械替换。\n\n---\n\n## AI写作指纹（必须避免）\n\n### 高频AI用词\n\n> 完整禁用词表见 [banned-words.md](banned-words.md)\n\n**补充类目**（`banned-words.md` 未覆盖的高阶替换）：\n\n| 类别 | 替代原则 |\n|------|---------|\n| 抽象升华词（命运、宿命、注定） | 用具体事件代替抽象概念 |\n| 万能比喻（像潮水般、如闪电般、仿佛春风） | 优先不用比喻，确需时只留少数生活化、角色化比喻 |\n\n### 引号只承载真实引用，不给普通名词加戏\n\n不要用双引号给普通名词、常见动作或作者临时概括的概念做“引号强调”。这类写法会把没有特殊含义的词硬包装成术语，连续出现时尤其像模型在替读者划重点。`check-ai-patterns.js` 的 `quote-emphasis-tic` 只负责提示，最终按语境判断。\n\n- **应改**：所谓的\"机会\"、完成这次\"蜕变\"、找到真正的\"答案\"。这些词若只是普通语义，直接去掉引号，用事件本身体现分量。\n- **应保留**：角色对话、逐字直接引用、书名/篇名、确有设定含义的代号，以及手机消息、公告、系统播报等场内载体展示的原文。\n- **边界**：第一次定义术语时可以用引号，但后文不要反复加；讽刺、反话或角色刻意咬重音时可以保留，前提是上下文能看出是谁在强调、为什么强调。\n\n### 章末总结体\n\n**禁止**在章节结尾用以下方式收束：\n- 总结性感悟（\"他终于明白了……\"）\n- 升华式感叹（\"这一夜，注定无人入眠\"）\n- 哲理式收尾（\"人生就是这样……\"）\n- 伏笔式预告（\"他不知道的是，更大的风暴即将来临\"）\n\n**正确做法**：章尾用动作、对话或悬念收束，让情节本身制造余韵。\n\n### 叠加式描写（同一动作掰开写三遍）\n\n**检测模式**：一个动作/情绪先写发生，再补感知细节，再补身体反应，分三段依次写完。读者看到的是同一个动作被掰开写了三遍。\n\n**典型特征**：\n- 先写一个概括性动作，再展开写同一动作的细节，再写身体反应：三段说的是同一件事\n- \"发生层→感知层→反应层\"按顺序分段出现\n- 每个维度独立成段，而不是揉进同一段连续正文\n\n**错误示例**：\n> 林父低着头，左手把文书压住，右手拿笔，往纸上落。\n>\n> 手从肘到腕都在抖。\n>\n> 笔尖在纸上停了停，写了一横，又停。那个\"林\"字的撇写歪了。\n\n→ 同一个动作（手抖/写字）分三段写，每段是同一瞬间的不同维度\n\n**正确做法**：发生、感知、反应三个维度揉进同一段连续正文，读者读到一个完整瞬间：\n\n> 林父左手压着文书，右手拿笔往纸上落，笔尖一触纸面就偏了，从肘到腕止不住地抖，那一横斜着拖出去。\n\n→ 发生、感知、反应在一段里同时呈现\n\n**处理原则**：保留有功能的情绪细节，把同一瞬间的重复描写合并成连续画面。若合并后明显变薄，优先恢复原文中有功能的信息，或把既有信息改成更自然的动作/对话表达；不要新增原文没有的情节、设定、关系或时间线。\n\n---\n\n## 核心规则\n\n> **句长以规则 3 为准**：规则 1-4 和本文件其他地方的「短句 / 拆短 / 能删就删」说法，与规则 3 冲突时按规则 3 执行。\n\n### 规则 1：段落密度诊断\n\n段落长短没有固定优劣。检查重点是朗读和手机阅读是否卡顿：\n\n- 一段通常只承载一个动作、一个信息变化或一组紧密相关的反应。\n- 逗号串太长、多个完整动作挤在一段里，读起来需要换气时，按动作或信息变化拆开。\n- 连续短段碎成提纲时，合并同一镜头内的相邻句，让画面保持连续。\n\n```\n过密：他看着窗外的雨，心中涌起一股说不清的感觉，这些年走过的路和很多已经忘记的事都在这一刻涌上心头。\n\n更自然：他盯着窗外的雨，雨从下午下到天黑。\n\"你还在想她？\"老刘问。\n他没说话。\n```\n\n### 规则 2：动作 + 对话 + 情绪反应\n\n动作、对话与情绪反应按场景需要交织，不按固定顺序轮换，不为凑齐三项补反应。\n\n情绪没有固定译法，关键节点也可以准确直写。上下文已让情绪成立，不另补反应；需要补足信息时，优先选择、台词、策略、物件或实际后果。\n\n身体细节只有带来新信息、影响动作或体现人物与场景特点时才保留。只在句尾重复标注情绪的微动作删掉，不换部位或同义动作。去味时沿用原文已有事实，不凭空添加摔杯子、攥袖口等行为。\n\n### 规则 3：句子该多长（短句是工具，不是默认）\n\n叙述（旁白）默认写成**逗号长句**：一句用逗号串起 2-4 个动作或信息，再落句号；逗号之间 8-12 字，整句 20-30 字。短句是偶尔的孤立重拍工具，不是叙述的默认写法。\n\n| 场景 | 句长 | 示例（长篇语料原句） |\n|------|------|------|\n| 日常 / 推进 / 描写（多数叙述句） | 逗号之间 8-12 字，整句 20-30 字 | 阴冷潮湿的气息扑面而来，身下铺着一层薄薄的稻草，湿漉漉地粘在皮肤上。 |\n| 对话 | 口语化，长短随角色 | \"你疯了？\"\"可能吧。\" |\n\n**不合格（与 AI 腔同级）**：\n- 逗号之间连着都是 ≤5 字的碎片（\"他抬手，开门，进屋，坐下\"式）\n- 通篇 3-8 字句、句号密得像提纲（电报体，见模式 9）\n- 一长一短机械交替（同样是模板）\n\n> **爆款语料校准**（七猫长篇 现言/都市/古言/玄幻/历史 125 本×前 8 章旁白统计）：逗号之间平均 8.8-9.6 字；整句平均 22-24 字；逗号长句占叙述句 74-80%；≤5 字的短片段约占两成，多是孤立的时间词、转折、动作重拍。短篇（盐言体）段落更短（≤15 字的单句段可近一半，长篇约两三成），但句子内部的节奏和长篇一样：**段落随体裁变短，句子内部不碎**。\n\n### 规则 4：口语化表达\n\n- 允许用俚语、粗话（符合角色身份）\n- 对话不要书面语（\"我认为此事不妥\" -> \"我觉得不靠谱\"）\n- 叙述也不要端着（\"他目光如炬\" -> \"他眼珠子一动不动盯着\"）\n- 短语优先于成语（\"无可奈何\" -> \"没办法\"）——只管对话和贴角色声口的叙述；旁白常用成语（不动声色、心不在焉一类）照留\n\n---\n\n## Show Don't Tell 原则\n\n| Tell（告诉） | Show（展示） |\n|-------------|-------------|\n| 他是个胆小的人 | 他把检查报告在手里翻来覆去看了三遍，还是不敢打开 |\n| 这间酒吧很吵 | 酒保凑到他耳边喊了两次他才听见 |\n| 她很富有 | 她随手把一张信用卡丢在桌上，卡面上的数字比这顿饭贵十倍 |\n| 两人关系很差 | 他把烟掐灭在她刚泡的茶杯里，她面无表情地把杯子推到一边 |\n| 他很聪明 | 三秒钟。他看了三秒钟就把文件合上了。\"第三页，第二行。\" |\n\n**核心方法**：\n1. 用行为代替形容词\n2. 用细节代替总结\n3. 用对话代替旁白说明\n4. 用后果代替情绪总结\n\n---\n\n## 质量维度检查\n\n### 1. 核心一致性（权重最高）\n- 剧情是否与大纲/前文一致\n- 人物行为是否符合人设\n- 设定是否有前后矛盾\n\n### 2. 表面改写（防AI指纹）\n- 是否包含AI高频用词（见上表）\n- 章尾是否有总结/升华\n- 是否有大段纯心理描写\n- 段落是否按戏剧单元/镜头自然断开，避免机械单句成段或为凑短碎成提纲（网文段落规则）\n\n### 3. 格式一致性\n- 对话格式统一：按项目/平台约定保持同一引号风格；知乎盐言短篇可用「」\n- 标点节奏匹配语气：避免通篇句号化；保留有功能的问号和少量感叹号；用动作/短句表达迟疑或打断，不用省略号或破折号硬造停顿\n- 场景切换有明显标记\n- 时间线清晰可追踪\n\n### 4. 可读性\n- 是否有连续多个长句压住阅读节奏，且缺少动作、对话或短句换气\n- 对话是否口语化\n- 是否有未解释的生僻词/设定术语\n- 节奏是否有快有慢（不能全是一种节奏）\n\n### 5. 逻辑连贯性\n- 角色动机是否合理\n- 事件因果链是否清晰\n- 时间线是否对得上\n- 角色的知识范围是否合理（不能\"开上帝视角\"）\n\n---\n\n## 快速自检口诀\n\n```\n一事一段，镜头自然断。\n对话要像人说话。\n心情不写心里话。\n结尾不搞大升华。\n打斗不写流水账。\n日常要埋伏笔桩。\n```\n\n> 网文段落规则：按戏剧单元/镜头/一件事结束自然断段；短段快读，长段承载完整推理、氛围和情绪链，避免机械单句成段或通篇同长度。\n\n---\n> **番茄高分样本校准**：番茄正文更接近“手机端短段 + 自然虚词 + 场内动作/对话推进”，不是机械指标达标。番茄高分样本 305 章窗口显示：段落中位约 23.5 字，50-60 字行宽平均只占 5.1%；平均对话占比约 20.6%，对话≥50% 仅 3/305，开篇对话 59/305；`地/得` 305/305、`很` 275/305、`像/好像/仿佛/如同` 267/305、顿号 176/305、省略号 281/305。结论：这些只能按语境复核，不能做 0 容忍硬禁令。\n>\n> **反投机边界**：不要为了“反检测”强制每句换行、把 `……` 改成 `........`、把 `地/得` 全改成 `的`、禁用所有顿号/“很”/“像”、强行开篇对话或按三番四证重排章节。去 AI 味是润色，不是结构重写；除非用户明确要求重写，否则不改变章节顺序、伏笔分布、对话占比和人物信息释放节奏。\n\n---\n\n## 禁用词与句式速查\n\n> 完整禁用词表和句式模板见 [banned-words.md](banned-words.md)\n\n### 正确替代示例\n- '他感到一丝紧张，手心全是汗' -> '他签名时划破了纸'（身体细节只在造成后果时留）\n- '\"好的。\"他说道' -> '\"好的。\"他把门卡塞回口袋'\n- '他深吸一口气' -> '他把话咽回去'\n\n---\n\n## 10 种 AI 写作模式检测\n\n### 模式 1：AI 高频词\n\n| 禁用 | 替换为 |\n|------|--------|\n| 不禁 | 删掉 |\n| 仿佛/宛如 | 删掉或用具体描写 |\n| 映入眼帘 | 删掉 |\n| 心中暗道 | 用动作展示思考 |\n| 沉声道/淡淡地说 | 换成动作标签 |\n| 脸色一变 | 用具体表情/动作 |\n| 嘴角微扬 | 他笑了/他翘了下嘴 |\n| 不由自主 | 删掉 |\n| 只见/此时此刻 | 删掉 |\n| 目光如炬 | 删掉或具体化 |\n\n### 模式 2：弱化副词泛滥\n阈值：每 1000 字超过 3 个 = AI 签名。重点监控：微微、淡淡、缓缓、轻轻。\n\n### 模式 3：意义膨胀\n- \"意义深远\" -> 写具体后果\n- \"前所未有\" -> 给出对比参照\n- \"可谓\" -> 删掉\n\n### 模式 4：万能结论\n- \"未来可期\" -> 用未解决的紧张感结尾\n- \"前途无量\" -> 删\n- \"充满希望\" -> 写具体的下一步动作\n\n### 模式 5：论文体段落结构\n小说中出现以下开头句 = AI 入侵：\n- \"不难看出\"\"由此可见\"\"事实上\"\"综上所述\"\n\n### 模式 6：书面语连词泛滥\n叙事散文中频繁出现：\"于是乎\"\"与此同时\"\"从而\"\"因而\"\"诚然\" -> 口语化替代或直接删除。\n\n### 模式 7：三连排比癖\nAI 喜欢把事情凑成三个以显\"完整\"。-> 砍到只剩最有力的一条。\n\n跨段「不是A。/也不是B。/只是C。」由 `formulaic-parallelism` 作 advisory：它可能是工整铺排，也可能承担辩解、悬念排除或情绪递进；只有重复提纲、拖慢画面时才压缩。该类提示与「至于X不X，怎么X」、同动词「不V A，不V B」都只作语义复核：对话也要检查，但有明确人物声线或任务功能时可保留；若来自细纲多个字段对同一要求的重复，正文只能消费一次，不能逐项复述。\n\n### 模式 8：解释腔 / 上帝视角 / 安排感\n最难察觉、却最\"像 AI\"的一类。叙述者跳出角色当下，去解释、剧透、总结、定性、拔高，读者能闻到\"作者在场\"和\"剧情被安排好了\"的味道。这正是\"说教感/上帝感/解释腔/机械感/刻意感/安排感\"的来源。\n\n| 表现 | 例（删/改） |\n|---|---|\n| 解释因果 | 「之所以…是因为」「原来…」「这意味着」「正是因为」-> 删。因果只从角色动作、对话、反应里让读者自己拼 |\n| 上帝视角剧透 | 「她不知道的是」「殊不知」「多年以后」「冥冥之中」「仿佛预示着」-> 删。只写角色此刻知道的，悬念让读者自己悬 |\n| 替读者下结论/定性 | 「演得真好」「这出戏她看过一遍」「他就是这样薄情的人」-> 删。把证据（神态、动作、台词）摆出来，定性留给读者 |\n| 替角色总结心理 | 「她明白，这一切都是命」-> 无新增信息就删；确有角色判断时保留带偏见的闪念，不强配身体反应 |\n| 总结/动机/评价链把意义说满 | 「他终于明白」「这是最好的选择」「所有人都会记住这一刻」-> 删掉定性，改成角色当下要处理的具体缺口、未完成动作或局部反馈；不是保留评价再硬塞物件/动作 |\n| 安排感/硬铺垫 | 为后文强行交代背景、整段回忆倒叙 -> 背景按角色此刻真实所需，用闪念、半句话、物件零碎带出，不集中交代 |\n| 升华式收尾 | 结尾对仗拔高、金句点题 -> 用一个动作或一句留白收住，把\"意思\"压进画面里 |\n| 抽象命运/开端收束 | 「命运终于露出獠牙」「早已布好的棋局」「这一刻终于明白」「属于他的反击才刚刚开始」-> 改成角色当下可见的文件、动作、对话或物理后果；`check-ai-patterns.js` 报 `abstract-summary-tic` 时优先处理 |\n| 套词密度过高 | 仿佛/一丝/一抹/深吸一口气/平静无波/指节泛白等成串复现（`cliche-density-tic`）-> 不是同义词轮换，整段回到角色当下证据：文件、动作、对话、物理后果 |\n| 套式反应细节 | 指尖轻叩、袖口里攥紧、指节泛白、目光移开、“语气平静得像在念……”等反应成片（`stock-reaction-tic`）-> 逐处做删除测试；只标注情绪而不改变选择、关系、物件或动作结果的删掉，不换部位和同义动作；有伤势、动作失败或情节后果的身体细节可留 |\n| 比喻密度过高 | 像/好像/仿佛/如同等比喻标记成片复现（`metaphor-density-tic`）-> 保留最能传递信息或情绪的一两个，其余改回具体动作、物件、声音、后果；不要换成新比喻 |\n| 系统公告公文腔过密 | 方括号规则/面板/公告行里硬规则词成片（`system-notice-formality-tic`）-> 保留为角色看见的屏幕/公告/规则载体；只在载体内部白话化部分硬词，或补角色当场看懂的具体后果，不改成叙述者解释 |\n\n**更隐蔽的一层（最难自查，没有标志词）**——同样是安排感/上帝感：\n- 评判性副词/补语：「关切得恰到好处」「笑得恰如其分」「不多不少」-> 作者在替读者盖章\"这是装的\"。只写动作（\"她掩了帕子，眼睛没动\"），装不装让读者自己判。\n- 剧透式点破潜台词：「那点笑她看得分明」「谁都看得出他在撒谎」-> 把藏着的挑明了。留着别点破。\n- 定性比喻/盖棺句：「像在宣判一件早已定好的事」「像看一件死物」-> 比喻在替角色下定论。非角色此刻强烈主观感受就删；要留也只能是她带偏见的瞬间感觉，不是客观断言。\n\n自检：每句问一遍——这是\"角色在经历\"，还是\"作者在讲解/安排\"？凡作者跳出来讲，删，或改成角色视角内的呈现。根治办法是锁定深度限知视角：只写视角人物此刻看得见、听得见、想得到的，镜头钉死在角色身体里，作者就没位置跳出来了。\n\n改法优先级：先删或原位替换污染句，不在段尾另补“人味”尾巴。需要补信息时，把原来的总结/动机/评价句改成角色当下能碰到的问题、手续、回信、付款、门外动静等具体压力；已有手机/屏幕/公告/门牌/表单等信息，优先作为角色看见的场内载体保留，不要转写成叙述者解释。具体载体跟剧情走，不套固定清单。\n\n**任务卡点不是固定公式，也不是通用补流程按钮**：它只是把已有解释落回角色当下要处理的缺口。先问原文有没有“要办的事”和“卡住的点”；有，才可以压成任务卡点；没有，就只删解释或改动作/对话，不新造事件链。改完再做“删掉试试”：删掉后不影响信息、情绪、关系、代价或伏笔，就压缩或删除。\n\n**但删解释腔 ≠ 把读者读懵**：新名词/新设定/新道具首次出现时，仍要让读者抓到一个锚——靠角色的动作反应、对话里半句自然提及、或场景里的物理后果，一笔带出它此刻的作用或分量；既不整段讲来历原理，也别只甩个零信息生词让读者干懵。人物记忆、情绪缓冲、因果承接也一样：如果一句看似解释/评价，实际承担小连贯（让读者知道角色为什么脸热、为什么停顿、为什么这一声压不住），不要机械删成摘录清单；把它压成角色当下的白话、动作、物件或半句念头。例：「蓝晶」首次出现不写\"这是储存记忆的装置\"，但可写她把蓝晶按上太阳穴、别人的记忆碎片炸开在眼前——功能被读者看见，全貌留作悬念。区分：锚是\"角色此刻撞上的可感知后果/记忆或情绪承接\"（留或压），解释是\"作者跳出来讲设定来历/原理/替读者下结论\"（删）。\n\n### 模式 9：过度压缩（电报体）\n\n去AI味删过头的反向指纹。每句都压到最短、结构虚词扫光、每个动作都补一个「了下/了一下」式轻反应。单句看着干净，连读像提纲，读者的体感是\"不流畅、喘不上气\"。删减的目标是删废话（解释、注水、凑数），不是删中文的自然冗余。\n\n| 表现 | 修法 |\n|---|---|\n| 非峰值叙述句也全部压成最短句 | 重拍句（动作/情绪/悬念峰值）保持短促；铺垫、过渡、日常动作写成自然白话句，保留 了/的/就/的时候 等结构虚词 |\n| 「扯了下/停了一下/拍了两下/松了半圈」式微动作高密度复现（check-ai-patterns.js 报 micro-action-tic） | 合并动作，换具体细节；不是每个动作都要接一个反应尾巴 |\n| 强调副词（连/才/又/只/全/反而）被扫光 | 删前判语义：承担人设、对比、讽刺义的保留（\"才二十三天\"删掉\"才\"，人设强调就反了） |\n| 对话语气词归零 | 按角色保留自然低频的 呢/吧/啊；也不反向猛加——人味来自结构自然，不是聊天腔 |\n| 叙述残留公文/文言腔（不得/须/未/已然/当前） | 换白话（不能/要/还没/现在）。系统公告、规则条文、面板播报可以保留冷硬功能；若 `system-notice-formality-tic` 报警，只在原载体内白话化一部分，不改成叙述者解释 |\n| 长文本里短叙述段成片（`overcompressed-prose-tic`） | 不是把所有短段拉长。先人工通读：重拍短句、密集镜头如果上下文顺，就保留；只处理读起来像提纲的过渡句，把它们并回同一镜头，让读者顺着动作、空间、因果读过去 |\n| 引号外叙述低连接密度且缺中长句（`low-connective-density-tic`） | 不是全局补“的/了/就”，也不处理台词/弹幕/系统播报的天然短促。先找叙述层读起来像提纲/电报体的断裂处，恢复必要连接、指代和中长承接句；有中长句链条的低功能词文本可保留 |\n\n自检：删完连读一遍，读感像提纲或流水口令，就是删过了——把非峰值句恢复成自然白话，不是接着删。\n\n本模式约束的是删减的度，不降低清理力度：选定 Gate 内的禁用词、套路句式、告知式心理照删照改；回填只回结构虚词和连接，不保留、不恢复任何模板措辞。\n\n### 模式 10：二修伪自然（油腻倒装 / 监控动作清单 / 对话指标化）\n\n一些“反检测提示词”会把文本推向另一种模板：为了提高突发性而乱倒装，为了真人感而机械加口误和脏话，为了手机阅读而强制每句换行，为了对话占比而把心理和叙述硬改成台词。这些不是自然网文，是二修痕迹。\n\n| 表现 | 修法 |\n|---|---|\n| 油腻倒装 | 不写“手里拿着刀，他冲了上去”这类伴随动作前置。连续同主语时，优先用场内物件、声音、局部身体或环境反馈自然换句首；不要滥用死物拟人 |\n| 监控摄像头式动作清单 | 同段连续“伸手拿起、取过、挑开、放下、转身……”像步骤表。合并琐碎动作，只保留有情绪、情节或空间功能的动作；必要时用角色犹豫、误判、旁人反应或环境反馈做缓冲 |\n| 高压场景误脱水 | 冲突、追杀、打斗可删解释和逻辑胶水；日常、暧昧、铺垫不能全章脱水。删的是废话，不是“的/了/就/但是”等自然连接 |\n| 吃字漏词 | 去 AI 后如果动词没有对象、动作指向不清、读者不知道谁对谁做了什么，要补回必要宾语、承载物或物理反馈；中文可省略，但不能省到像提纲 |\n| 对话指标化 | 不为凑 50%-60% 对话占比硬扩台词。台词只在角色真会说、此刻必须说时增加；长对白可拆动作，解释性对白优先压成冲突、回避或半句信息 |\n| 硬格式投机 | 不强制每句换行、50-60 字一行、不把省略号改成英文点、不把 `地/得` 全改错。按平台和项目既有格式走 |\n\n`check-ai-patterns.js` 的 `action-list-tic` 只提示监控动作清单，不是 blocking。功能性打斗/追逐/仪式步骤若动作链本身承担信息，可保留或标 `[需复核]`。番茄高分样本中该类命中为 0，因此适合作为“需通读”的风格提示，而不是硬性失败项。\n\n#### 工具提示处理\n\n`check-ai-patterns.js` 是本地写作 lint；blocking 只限确定性句式/标点问题，advisory 不作完成门槛。用户贴其他工具报告时，只把能落到正文的句式、段落、词汇问题转成具体修改点，不写“0% AI / 100% 真人”或“固定公式”，也不围绕分数反复微调。\n\n工具提示不高于读感规则。参考文本里若出现“仿佛/非常/感到”等套词或告知式心理，仍按模式 1-8 清理；不要机械补词、故意错字或按题材套壳。\n\n**去 AI 味补充判断**：\n- 优先处理：作者解释总结、意义尾巴、把情节翻译成“他意识到 / 这意味着 / 真正重要的是 / 这次成长”。优先删掉，或落回场内动作、对话、物件状态、任务状态和角色当场要处理的后果。\n- 场内载体优先：原文已有手机、屏幕、公告、门牌、表单、账单、物证、规则行时，保留为角色看见/读错/处理的文本或物件；不要把同一信息改写成叙述者解释规则。\n- 白话但不注水：少用精致戏剧反应短语（头皮发紧、眼皮一跳、心口一沉、胃里翻涌）连续替代剧情推进；能写普通动作/普通感觉就写普通动作/普通感觉，并保留自然的“的/了/就/但是/已经/之后/没有”等连接。\n- 题材文风优先：文风对标有帮助，但必须来自目标题材/本书文风指纹；不要把盘龙腔、旧网文腔、第一人称声口等当成跨题材万能修法。\n- 不要当通用修法：单纯加标题、补物件、补动作尾巴、拉长/压短句子、增加排队/门禁/记录体，不能替代具体的情节、视角和语言问题处理。\n\n#### 把提纲句写成连续段落\n\n当文本已无 blocking / 明显 advisory，但读起来仍像提纲时，只处理断裂处：\n\n1. 标出读起来像逻辑报告的段落：连续出现“他知道/他明白/这意味着/真正的问题/必须/需要”等判断链，却缺少当下动作、物件或对话反馈。\n2. 把叙述者结论落地：用角色当下能触到、听到、被迫处理的后果替代“他意识到/这意味着”。不要套固定物件清单，也不要把某个场景外壳当通用规则。\n3. 只在断裂处恢复自然连接和结构虚词；不设比例目标，不机械补连接。\n4. 系统公告、规则条文、面板播报可以保留冷硬短句；`system-notice-formality-tic` 报警时，只在原载体内白话化一部分硬规则词，或让角色当场看到具体后果，不改成叙述者解释。\n\n`overcompressed-prose-tic` / `low-connective-density-tic` 的具体修法：\n\n1. 圈出连续短叙述段，逐段标注功能：爆点/反转/恐惧重拍、密集镜头可继续短；铺垫、空间、因果、动作承接应并回同一镜头。人工读着顺，就不因该 advisory 继续拉长。\n2. 合并时优先补“动作顺序、空间方位、因果承接”，例如“抬头时/门外/已经/还/就/被”，而不是给每句硬塞“的/了/就”。\n3. 合并后再删套词和告知心理：读顺不是恢复 AI 腔，不能把“仿佛/感到/非常/好像”成片加回来。\n\n复核处理：如果清掉 `overcompressed-prose-tic` / `low-connective-density-tic` 后读感仍不稳，停止局部微调，转为段落级重写或人工读感对照。\n\n示例：\n\n```\n过度压缩：\n林遥抬头。\n雨棚外的街灯灭了。\n风也停了。\n柜台上的纸杯晃了两下。\n\n读顺后：\n林遥抬头时，雨棚外的街灯正一盏盏熄下去。风忽然停了，柜台上的纸杯还在原地轻轻打转。\n```\n\n\n---\n\n## 改写顺序（只排所选 Gate 的先后）\n\n下面三步只决定所选 Gate 内问题的处理先后，不另起一轮全篇去味；某一步没有对应的所选 Gate 就跳过。\n\n### 第一步：去泛化（Strip Generic）\n- 抽象情绪总结句 -> 按规则 2 判断：删重复说明，保留准确直写，需要时用原文已有信息落地\n- 假深度句 -> 删\n- 意义膨胀 -> 缩小到具体影响\n- 空洞结论 -> 删\n- 工整对比句式 -> 打散重写\n- 装饰性形容词堆砌 -> 白描\n- 过度使用\"于是\"\"然而\"\"此刻\" -> 删掉一半\n- 所有角色说话一样\"高级\" -> 区分语气\n\n**原则**：能删就删，不能删就用具体细节替换。\n\n### 第二步：去书面化（Cut Professional Diction）\n- 分析性用词（\"机制\"\"结构\"\"逻辑\"\"体系\"出现在小说中）-> 换成日常表达\n- 抽象名词滥用 -> 直接说事\n- 体制内用语（\"进一步\"\"深入\"\"推进\"\"落实\"）-> 删\n- 专业术语堆砌 -> 只保留必要的，用白话解释\n\n**例外**：保留专业感的场景（历史题材正式用语、文学向刻意密度、喜剧夸张修辞）。\n\n### 第三步：回自然感（Restore Natural Presence）\n- 具体的感官细节（气味、温度、触感）\n- 角色说话方式的区分（不同人不同语气）\n- 句首变化：连续 3+ 句用同一主语或同一词性开头时换开法（动作、场景、对话引入）\n- 节奏变化（长短句交错）：按情绪 beat、动作推进和戏剧单元自然调节句段长短；忌连续多段同一长度，也忌为凑短而碎成提纲。长短不是随机，沉淀处可放慢，冲突/反转处可骤短，完整推理与情绪链优先保持连贯\n- 社会位置感的对话（上级和下属说话方式不同）\n- 场景特有的记忆点\n- 项目特有的语言习惯（角色的口头禅）\n\n**原则**：少即是多。每段加 1-2 个具体细节就够了。\n\n### 执行范围\n\n调用方指定 Gate 时，只处理选定 Gate；改写顺序只排先后，不重新分级或扩大范围。未指定范围时，按实际问题选择适用检查。\n\n### 自检清单\n- 对话自然度检查：对话是否使用口语化表达，是否避免了书面语/正式腔调\n- 删掉任何一句，会影响理解吗？不会 = 可能多余\n- 不同角色能通过对话区分吗？\n- 有没有一个细节是这个场景特有的？\n\n---\n\n## 去AI味补充技法\n\n### Show vs Tell\n\n| 告知类型 | AI写法 | 自然写法 |\n|----------|--------|----------|\n| 告诉期待感 | \"他很期待\" | 展示期待->情绪->满足的链条 |\n| 告诉角色目的 | \"她想离婚\" | 用行动展示目的 |\n| 告诉角色态度 | \"她很冷静\" | 用对话和反应体现 |\n| 告诉剧情走向 | \"接下来会发生大事\" | 用铺垫->反转->延续展示 |\n\n### 心理描写润物细无声\n\n- 加括号标注内心活动 = 破坏代入感\n- 大段内心独白解释动机 = AI签名\n- 直接写\"她感到\"\"她意识到\" = 告知情绪\n\n**自然写法**：心理活动自然融入叙事，用行为暗示心理，用沉默/动作/反常行为表达内心。\n\n### 代入感检查\n- 主角行为读者能理解、共鸣、接受吗？\n- 反派够强吗？（弱反派 = 读者觉得主角赢了没意义）\n- 是否围绕人设写行为？（行为/语言/思维围绕人格展开）\n- 读者已知信息是否被有效操控？（信息差制造情绪波动）\n\n---\n\n## 改写范例库\n\n### 情绪落地示例\n\n| 原文与语境 | 处理 |\n|---|---|\n| 「他很紧张。再错一题，补考也过不了。」 | 情绪有具体原因，可以直写，不补手抖或出汗 |\n| 「她已经决定不再等他。她攥了攥袖口。」袖口动作无后续作用 | 删除第二句，不换成低头或咬唇 |\n| 「手腕的伤让他握不住笔，签名只写了一半。」 | 保留，身体状态造成动作失败，不能当作情绪套话删除 |\n\n### 场景描写范例\n\n**AI风场景**\n- '阳光透过窗帘的缝隙洒进来，在地板上投下斑驳的光影。空气中弥漫着淡淡的花香，仿佛整个世界都沉浸在一片宁静祥和的氛围中。'\n- 下午三点，客厅里只有钟在走。\n\n**AI风天气**\n- '天空阴沉沉的，乌云密布，仿佛随时都会下起倾盆大雨。凛冽的寒风呼啸而过，带着一丝刺骨的寒意。'\n- 要下雨了。风把晾在外面的衣服吹得乱晃。\n\n**AI风打斗**\n- '他的拳头犹如疾风骤雨般猛烈，每一击都蕴含着不容置疑的力量。对手的瞳孔微微收缩，显然没有预料到如此凌厉的攻势。'\n- 他一拳怼过去，对方没躲开，嘴角破了。\n\n### 结尾改写范例\n\n**升华式结尾** -> '他站在窗前，望着远方的天际线，终于明白了生活的真谛：有时候，放手才是最好的选择。' -> 他把烟掐了，回屋睡觉。\n\n**总结式结尾** -> '这一刻，一切都变了。她知道，从今以后，她的人生将翻开崭新的一页。' -> 她关上了那扇门。没回头。\n\n**感慨式结尾** -> '岁月如流水般悄然流逝……' -> 直接删掉这种段落。\n\n### 节奏调整范例\n\n> 以下范例处理的是臃肿修饰、堆叠比喻和抽象总结，不是「见长就拆」：改写后叙述仍以逗号长句为主（规则 3），不要把正常的逗号长句拆成短句串。\n\n**排比句**\n- '他看着她的眼睛，看着她的嘴唇，看着她微微颤动的睫毛，心中涌起一股难以名状的情感。'\n- 他看着她，她没说话。\n\n**臃肿长句去修饰**\n- '当他终于推开那扇沉重的木门时，映入眼帘的是一间昏暗的房间，空气中弥漫着陈旧的气息，墙角堆满了落满灰尘的箱子。'\n- 他推开木门，屋里昏暗，墙角堆着几个落灰的箱子。\n\n**工整段落打碎**\n- '她喜欢春天的花朵，喜欢夏天的阳光，喜欢秋天的落叶，喜欢冬天的白雪。每一个季节都有它独特的美。'\n- 她喜欢春天，别的季节也还行。\n\n---\n\n## 冲突对话改写范例\n\n### AI式温和对话\n- '我觉得你这样做不太合适，能不能考虑一下我的感受？' -> \"你眼里还有我吗？\"\n\n### AI式完美解释\n- '其实我这样做是有原因的，因为当时的情况非常复杂……' -> \"你能怎么着？\"她把茶杯重重放下。\n\n### 对话情绪五级递进范例\n\n同一冲突场景，从弱到强：\n\n1. **客观陈述**：\"你把我的东西扔了。\"\n2. **陈述+建议**：\"你把我的东西扔了，以后能不能先跟我说一声。\"\n3. **主观指责**：\"你凭什么动我的东西。\"\n4. **指责+命令**：\"你算什么东西，也配碰我的东西？滚出去。\"\n5. **指责+PUA**：\"我伺候你吃伺候你穿，你连个东西都放不好。你这辈子也就是这样了，离了我你什么都不是。\"\n\n### 震惊分层改写范例\n\n**AI式一步到位**：所有人都震惊了，不敢相信自己的耳朵。\n\n**自然分层震惊**：\n1. 对面的男人手抖了一下，茶杯里的水洒出来。\n2. 旁边的人互相看了一眼，有人往后退了一步，角落里有人开始掏手机。\n3. 刚才还趾高气扬的女人，脸上的笑僵住了。她张了张嘴，一个字没说出来。\n\n### 代入感修复范例\n\n**被动主角**：她很害怕，不知道该怎么办，只能等着事情过去。\n\n**主动主角**：她锁了门，把手机调成静音，打开了录音。\n\n---\n\n## 质量检查清单\n\n写完每章后，按此清单逐项扫描：\n\n- [ ] **段落控制**：段落按动作/信息变化断开，读起来不卡\n- [ ] **正文无破折号**：正文（含叙述和对话）无 `——`/`—`/`--`（用句号、逗号、短句或动作断句），不设置对话例外\n- [ ] **AI高频词扫描**：无不禁/仿佛/映入眼帘/心中暗道/沉声道/嘴角微扬/不由自主/只见\n- [ ] **弱化副词计数**：每1000字\"微微/淡淡/缓缓/轻轻\"不超过3个\n- [ ] **无三连排比**：没有AI式的\"三个一组\"修辞\n- [ ] **工整否定清单已复核**：跨段「不是A / 也不是B / 只是C」及其他 `formulaic-parallelism` advisory 已连同台词逐条复核；功能性修辞可保留\n- [ ] **无论文体**：无\"不难看出/由此可见/事实上/综上所述\"\n- [ ] **无书面语连词堆砌**：无\"于是乎/与此同时/从而/因而/诚然\"泛滥\n- [ ] **章尾无总结升华**：用动作/对话/悬念收束，无感悟/哲理/预告\n- [ ] **无大段心理描写**：心理活动不超过2段，无括号标注内心\n- [ ] **情绪落地**：按规则 2 保留准确直写与有功能的身体细节，删除重复说明，不给每个情绪词配动作\n- [ ] **对话口语化**：无书面腔，不同角色语气可区分\n- [ ] **标点不压平**：没有把质问、爆发、犹豫全部压成句号；也没有随机堆砌 `？`/`！`，或用 `……`/`——` 硬造停顿\n- [ ] **Show Don't Tell**：用行为代替形容词，用细节代替总结\n- [ ] **句长达标**：叙述默认是逗号长句（逗号之间 8-12 字、整句 20-30 字，规则 3）；短句只作偶尔的孤立重拍，用完回到逗号长句；没有连着的 ≤5 字碎片，没有通篇短句像提纲\n- [ ] **detector advisory 逐条复核**：`micro-action-tic` / `stock-reaction-tic` / `abstract-summary-tic` / `cliche-density-tic` / `metaphor-density-tic` / `reasoning-chain-tic` / `system-notice-formality-tic` / `overcompressed-prose-tic` / `low-connective-density-tic` / `action-list-tic` 命中时按脚本给出的修法处理：先通读判断是不是机械复现，确属再改；功能性写法保留或标 `[需复核]`，不做同义词轮换、不机械注水\n- [ ] **不做硬指标投机**：不为反检测强制每句换行、50-60 字一行、对话 50%-60%、英文点省略号，或把 `地/得` 全改成 `的`\n- [ ] **任务卡点服从原文边界**：抽象总结若改成角色办事被卡住，必须来自原文已有任务/证据/手续/物件缺口；不新增原文没有的事件链\n- [ ] **对话自然度测试**：无书面语痕迹 = 通过\n\nFile v1.1.25:references/author-memory-maintenance.md\n\n# 作者记忆维护\n\n[author-memory.md](author-memory.md) 的少见时刻补充：记一条、确认、替换、忘掉和优先级仍按那份协议，本文件只在下列情况读——作者说「整理作者记忆」，或回执 `warnings`／查询 `omitted_ids` 提示超编；写入因 `作者画像.md` 写满失败；书根就是工作区，或工具报 `state.book`、单书布局错误；要做存量迁移 `migrate`、多事件原子 `commit`、派生视图 `check`；冲突候选要落定；碰到升级前留下的旧条目。\n\n作者记忆借鉴“原始证据 → 候选 → 已确认画像 → 变更记录”的记忆管道，但把决定权留给作者。\n\n## 文件\n\n```text\n{工作区}/.story/作者记忆/          # 项目级 store：global / genre / workflow 条目，编号 AP\n├── _author-memory-state.json  # 唯一结构化权威\n├── 作者画像.md               # 仅 active，供作者查看与管理\n├── 待确认.md                 # pending / conflict，不参与约束\n└── 变更记录.md               # 最近 100 次、最新在前的事务记录\n{书}/.story/作者记忆/            # 书级 store：只存这本书的 book 条目，编号 BP，同样四个文件\n```\n\n三个 Markdown 文件都从 state 确定性生成，禁止手改；完整历史保留在 state，变更记录只展示最近 100 次。`作者画像.md` 是人类管理视图，普通写作 agent 不整份注入，而是调用 `query` 取得本次相关的紧凑上下文。\n\n## 任务映射表\n\n各 skill 入口的 `query` 命令按此表选 kind；写入时的预算提醒也按这四类任务组合估算。\n\n| 任务 | query kinds | 注入位置 |\n|---|---|---|\n| 正文初稿 / 续写 | `prose_style` + `story_design` | 主会话与实际正文 agent |\n| 去 AI 味 / 改写 | `prose_style` | 主会话与实际改写 agent |\n| 设定 / 大纲 | `story_design` + `workflow` + `interaction` | 主会话，不传正文 agent |\n| 审稿 | `delivery` + `interaction` + 必要的 `prose_style` | 主会话，不降低 rubric |\n\n审稿匹配项只用于交付格式、协作方式和“作者有意采用的表达选择”说明；问题严重度和 PASS/FAIL 仍由 rubric 决定。\n\n## 注入预算与容量\n\n- **写入不因注入预算失败**：`record` / `commit` 照常成功、给回执；工具按上表四类任务组合估算最坏查询情形（全局条目＋各 scope 维度最重的单一切片，切片按大小写无关归并、轻重按写作时真正读到的字段算，与真实查询同一把尺），装不进 2048 字节的组合在返回的 `warnings` 里点名将被略过的条目及其断言首句。\n- 写入落盘后另一级 store 读不出来（书目录不存在、`--book` 与书级记录不符等）也照常给回执，`warnings` 注明本次提醒没算上它。写书级条目时「本书＋全局」按实际条目精确计算；写项目级条目时只看得到项目级 store，顺手传 `--book-root` 就把当前这本书也算进提醒。\n- 查询按 **重要度 → 本书例外 → 最近更新** 排序装填（同一范围的条目必在同一 store，「最近」按该 store 的修订号比，不跨 store 比较），先丢的恒是重要度较低的条目——`importance` 决定超编时谁留在 prompt 里。装不下的条目跳过而不中断（一条长的不挡后面的短条），漏下的 ID 按同一优先级报进 `omitted_ids`（最多列 20 条，`omitted` 是真实总数）。\n- 注入预算之外还有一道硬上限：`作者画像.md` 超过 12288 字节时写入会直接失败并要求先整理。active 条目攒到几十上百条才会碰到（远在注入预算之后），碰到就走「整理作者记忆」；`forget` 这类减量操作在满编时照常可用。\n\n## 整理作者记忆\n\n作者说「整理作者记忆」，或回执 `warnings`／查询 `omitted_ids` 提示超编、写入因画像写满失败时：读项目级与当前书的 `作者画像.md`（每条都标了范围、重要度、把握和确认次数，重要度就是超编时的去留依据），提出合并同义条（`replace` 多合一）、退役过时条（`forget`）、给错标成 `high` 的条目下调重要度、把超长断言压缩成一句话的提案；项目级画像里还有「本书：」条目时，「对该书运行 `migrate --book-root`」列为默认提案项。清单用原话逐条列给作者确认（编号只放括号里），确认后按 store 各汇成一份 `commit` 事务提交（一份事务只写一个 store）。合并时保住每条的否定词、限定词和适用范围——合不动就退役其中一条，不要靠删限定词把两条凑成一条。整理只由作者发起或确认，不自动执行。\n\n## 冲突候选\n\n冲突候选（`conflict`）不能绕过旧规则直接 `decide=activate`。作者选新说法：用 `replace`，`old_ids` 同时列旧 active 条目和这条冲突候选，新条目直接 active、两条旧的标 `superseded`；作者留旧规则：对候选 `decide=reject`。旧条目被 `replace` / `forget` 撤下后，它不再是任何候选的冲突对象，冲突对象清空的候选退回 `pending`。\n\n## 单书布局\n\n书根就是工作区（`--book-root` 与 `--workspace` 同一目录）时，书级 store 改住 `{工作区}/.story/作者记忆/书级/`，与项目级各自一份 state；首次建立的书名优先取项目级存量本书条目里唯一的书名，再取目录名。旧版曾把书级 state 写在项目级位置，此后项目级读写都报 `state.book`；带 `--book-root {工作区}` 运行任一命令（含 `query`）会先把它原样移进 `书级/`，不改内容。这个目录其实是某个工作区里的一本书时（上一层叫 `长篇/` 或 `短篇/`，或某个祖先有 `.active-book` 或项目级 state），工具直接报错、不动任何文件，按报错改传 `--workspace`。\n\n## 存量迁移\n\n不做双读：升级前写进项目级 store 的 book 条目不再参与查询与预算估算，也不再接受新的 book 写入；它们仍在 `作者画像.md` 里可见、可 `decide` / `forget`。对每本书运行一次 `migrate --book-root {书目录}` 即可整批搬回来：断言、证据、确认次数、重要度原样保留，换成 `BP` 编号，原 `AP` 条目标 `superseded` 并注明去向；与全局条目的冲突关系在迁移后不再成立，这类候选退回 `pending`。书级每个源条目一笔事务，重跑只补没做完的一半。「整理作者记忆」看到项目级画像里还有「本书：」条目时，把迁移列为默认提案项。\n\n## 旧条目\n\n- 升级前写下的长断言不受 120 字节新建上限约束：原样重申它会**强化**原条目（确认次数 +1），不会因超长被拒；只有真正新建条目才校验 120 字节。\n- 存量 state 里推断类旧来源的条目照常可读、可确认、可退役；新写入仍只接受 `explicit_user`、`accepted_suggestion`、`manual`。\n\n## 其他命令\n\n先依次尝试 `python3`、`python`、`py -3` 找到 Python 3，再从当前 skill 根运行本地副本（`record` / `query` 见 author-memory.md）：\n\n```text\n{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py init    --workspace {工作区} [--book-root {书目录}]\n{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py commit  --workspace {工作区} [--book-root {书目录}] --input {工作区}/.story/work/作者记忆-事务.json\n{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py migrate --workspace {工作区} --book-root {书目录}\n{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py check   --workspace {工作区} [--book-root {书目录}]\n```\n\n- `commit`：高级批量入口，只在需要把多个动作绑定成一次原子提交时用（如整理作者记忆）。顶层传 `schema_version`、唯一 `transaction_id`、当前 `expected_state_revision` 和含 1–32 项的 `operations`（每项与单事件的 `operation` 同形）。一份事务只写一个 store；先在内存完成 schema、引用、容量和所有视图校验，操作按数组顺序应用，任一步失败则整份事务零写入，最后原子替换 state。过期修订会在任何写入前失败。事务文件在成功前必须保留，成功后删除；显式记忆请求按 author-memory.md「回执怎么告诉作者」转告。\n- `migrate`：把项目级 store 里某本书的存量 book 条目整批搬进 `--book-root` 的书级 store，幂等，中途失败直接重跑；返回 `migrated`（源→新编号），没有存量时为空。\n- `check`：从 state 重建并逐字核验所有派生视图；传 `--book-root` 时两级一起核验。\n- `init`：显式初始化 store；平常不需要，首次 `record` 会随事务创建。\n\nFile v1.1.25:references/author-memory.md\n\n# 作者记忆协议\n\n作者记忆保存跨会话复用的创作偏好，不保存小说世界里的事实，决定权留给作者。本文件管最常见的时刻：作者说出一条偏好，或要确认、替换、忘掉某条。少见情况读 [author-memory-maintenance.md](author-memory-maintenance.md)：整理作者记忆与超编、画像写满、单书布局与 `state.book` 报错、存量迁移、多事件 `commit`、`check`、冲突候选落定、升级前的旧条目。\n\n## 边界与优先级\n\n加载优先级从高到低：\n\n1. 安全、用户授权范围、明确的平台交付要求、字数与文件协议；句长、视角、修辞和标点偏好不属于不可覆盖的硬门禁；\n2. 用户在当前请求中的明确要求；\n3. 当前书的 `设定/文风.md`、题材定位、细纲和其他项目设定；\n4. 作者记忆中的本书偏好；\n5. 作者记忆中的题材、流程和全局偏好；\n6. 对标素材、通用方法和默认值。\n\n按表达维度取最窄适用要求：低优先级只补缺项，不与高优先级要求并列执行。通用 references 自称“必须/禁用”不改变此顺序；审稿不因作者有意采用的表达本身扣分，真实可读性与因果问题仍照常评价。\n\n作者记忆不能把本书事实写进 `.story/作者记忆/`，不能覆盖当前请求，不能降低审稿 rubric，也不能让去 AI 味改动剧情意图。小说事实继续由各书的 `追踪/` 和 `设定/` 管理。\n\n## 存放与路由\n\n两级 store，记忆随书走：`{工作区}/.story/作者记忆/` 存 global / genre / workflow 条目（编号 `AP`），`{书}/.story/作者记忆/` 只存本书的 book 条目（编号 `BP`）。每级各有 `作者画像.md`（生效条目）和 `待确认.md`（候选，不参与约束），都从 state 生成，禁止手改；不存在时写作、审稿、去味照常继续，首次 `record` 自动创建。\n\n- `--workspace` 必须显式传，指创作工作区根——承载多本书、`.active-book`、`长篇/`、`短篇/` 或 `拆文库/` 的那一层；已有记忆时，是项目级 state（不带 `book` 字段）所在的最近祖先。`长篇/`、`短篇/` 下的书目录永远不当 `--workspace`，也不要把用户主目录当默认工作区。\n- `--book-root` 是当前书的项目目录（`.active-book` 指向、或含 `设定/`、`正文/` 的那一层，如 `{工作区}/长篇/{书名}/`）；书名默认取书级 state 记的名字，首次取目录名，`--book` 可覆盖。书根就是工作区时读维护文件「单书布局」。\n- ID 前缀就是 store：`decide` / `forget` 看 `item_id`（`AP` 项目级，`BP` 书级），`remember` / `replace` 看 `scope.level`（`book` 书级，其余项目级）。书级操作必须传 `--book-root`，没传直接报错，不会退而写进项目级。\n- `replace` 与 `conflicts_with` 不能跨 store：本书例外按优先级覆盖全局规则，不算冲突，直接 `remember` 为 book 条目；要把全局规则改成本书规则，拆成 `forget` ＋ `remember` 两个事件。\n\n## 查询\n\n各 skill 入口已写好本任务的 `query` 命令（长篇正文由组装脚本代查）；没写命令的长篇设定、大纲等任务查 `story_design` + `workflow` + `interaction`，结果只给主会话、不传正文 agent。四类任务的映射表见维护文件。state 存在才查（两级都不存在时返回空结果、零写入）；结果合并项目级与 `--book-root` 所指书级（不传就拿不到本书条目），`--kind` 必传，输出不超过 2048 字节。\n\n普通创作只做一次本地 `query`，完整画像、证据、候选和 journal 不进 prompt。查询项是低优先级倾向，不是逐条打卡清单：自然吸收，不复述画像、不刻意提高词面命中率，不为命中牺牲连贯、节奏、字数或本书既定笔调。**`omitted_ids` 非空＝记忆超编**，不是「没有更多了」：转告作者并建议「整理作者记忆」，不得改读完整画像规避预算。待确认项不进 prompt，也不为确认它们中断任务；只在作者主动查看、候选积累到适合回顾的节点，或新偏好与 active 条目冲突时集中呈现。\n\n## 记不记、记成什么\n\n不装记录全部用户消息的 prompt hook，不在作者没开口时观察他，只记作者明确表达的偏好。是否属于长期习惯由 agent 判断，拿不准就只执行不记录；作者可明说“记住：……”，以回执验收。\n\n| 输入证据 | 处理 |\n|---|---|\n| “以后都这样”“我一直习惯……”等直接、稳定、范围清楚的原话 | `active`，`source=explicit_user` |\n| 用户明确接受助手提出的长期做法 | `active`，`source=accepted_suggestion` |\n| 作者原话像长期偏好但范围或稳定性含糊 | `pending`，取当前最窄合理范围；待确认只来自作者自己的话 |\n| 同类修改反复出现、从成稿或操作轨迹看出的模式 | 不记录、不推断；作者没开口的偏好不进记忆 |\n| “这一章别……”“这次给我……”等一次性要求 | 只执行，不记录 |\n| 角色、时间线、伏笔、世界观、当前剧情走向 | 写项目设定/追踪，不写作者记忆 |\n| 助手自己生成的文字、默认模板、工具告警、rubric 结论 | 不自我学习 |\n\n保留否定词、限定词和适用范围：`quote` 写原话，`assertion` 只做不改变语义的紧凑归纳，**新建条目限一句话（≤120 字节，约 40 个字）**，写不下就压缩措辞、不切限定词；背景写进 `reason`（不进 prompt），不另开字段。\n\n**一条偏好就是一条记录，例外和限定不许拆出去单列。** 「以后少用破折号，对话里也别用，除非表示打断」整条写成「破折号少用、对话里也不用，只在表示打断时保留」：超编时条目逐条被丢，拆开就可能只丢掉例外，把作者说过的限定变成绝对禁令。只有原话塞了**几条互不依赖**的偏好（如「多用短句」＋「章末留钩子」）才拆。\n\n范围：“本书 / 这个角色 / 这次连载” → `book`；“都市文 / 这类题材” → `genre`；交稿、检查、确认节奏等操作习惯 → `workflow`；“以后 / 一贯 / 我习惯”且无更窄限定 → `global`；含糊但可能稳定 → 最窄合理范围并置 `pending`。\n\n类型：`prose_style`、`story_design`、`workflow`、`delivery`、`interaction`。置信度与重要度均为 `low | medium | high`；超编时先丢重要度低的，按偏好的实际分量填，不要一律 `high`。`source` 只接受 `explicit_user`、`accepted_suggestion`、`manual`，工具拒绝推断类来源。\n\n## 确认、替换、忘掉与冲突\n\n- 同一类型、范围、归纳文本再出现，脚本强化原条目（累加证据与确认次数），不重复建条。\n- 新偏好与同一 store 的 active 条目矛盾：以 `conflict` 记候选，`conflicts_with` 列冲突 ID，本轮仍按当前要求执行；本书例外与全局规则不算冲突。冲突候选不能直接 activate，落定见维护文件「冲突候选」。\n- pending 用 `decide=activate|reject`。同一范围的规则改版用 `replace`，新条目启用、旧条目标 `superseded`；只有作者明确撤销或改变旧规则范围才跨范围替换。\n- 作者说“忘掉 / 这不再是我的习惯”用 `forget`，保留历史证据但不再加载。active 条目的语义不可原地偷改，语义变化必须 replace，历史才可审计。\n\n## 回执怎么告诉作者\n\n回复就两行纯文本，不加代码块或引用格式：第一行用一句人话说记住了什么、管哪本书或哪类场合，如「记住了：《{书名}》的对话一律用「」，以后写这本书都照这个来；想改随时说。」；第二行是机器回执作凭证，如「技术备注：Author Memory Receipt: r1 · BP001」。\n\n- 确认、替换、忘掉同理：「好，这条生效了：……」「换成了：……，原来的「……」不再用」「忘掉了：……」。只进待确认时说「这条先记在待确认里，你说\"确认\"才生效」；有冲突时用原话说明跟哪条旧习惯冲突。\n- `warnings` / `omitted_ids` 不原样贴：说「你的习惯攒得有点多，写正文时这几条可能顾不上：「……」」，并建议说「整理作者记忆」。不提字节、prompt、kind、scope；编号只能跟着原话出现。\n\n## 运行工具\n\n依次尝试 `python3`、`python`、`py -3` 找到 Python 3，从当前 skill 根运行本地副本：\n\n```text\n{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py record --workspace {工作区} [--book-root {书目录}] --input {工作区}/.story/work/作者记忆-事件.json\n{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py query  --workspace {工作区} --book-root {书目录} --kind {类型}（必传，可重复） [--genre {题材}] [--workflow {流程}]\n```\n\n- 子命令都可加 `--book {书名}`；写某本书时一律带 `--book-root`。事件 JSON 写在 `{工作区}/.story/work/`（不写系统 `/tmp`），成功后删掉；book 条目的 `scope.value` 填书名（书级 store 已记的名字，首次取目录名）。\n- 明确的“记住 / 确认 / 替换 / 忘掉”都走单事件 `record`：自动读该 store 当前修订、首次自动初始化，不手工读修订号或拼多操作事务。同一 `event_id` 同内容幂等返回原回执，内容不同则失败；返回的 `store` / `book` 说明写到了哪一级。\n- 成功才有 `Author Memory Receipt: rN · APxxx`，没有回执不得声称“已经记住”。**写入不因注入预算失败**：`warnings` 只是提醒（另一级 store 读不出来也在这里注明），按上节转告；有回执就是已记住，不要换 `event_id` 重试。\n\n## 事件格式\n\n新增或强化（`record` 输入；book 范围传 `--book-root`）：\n\n```json\n{\n  \"schema_version\": 1,\n  \"event_id\": \"conversation-2026-08-25-message-42\",\n  \"operation\": {\n    \"action\": \"remember\",\n    \"preference\": {\n      \"kind\": \"prose_style\",\n      \"scope\": {\"level\": \"global\", \"value\": null},\n      \"assertion\": \"对话尽量短，用动作承接情绪，不用大段解释\",\n      \"quote\": \"以后对话都短一点，情绪放动作里，别让角色长篇解释。\",\n      \"source_ref\": \"conversation:2026-08-25\",\n      \"source\": \"explicit_user\",\n      \"confidence\": \"high\",\n      \"importance\": \"high\",\n      \"status\": \"active\",\n      \"reason\": \"用户以“以后”明确声明长期偏好\",\n      \"conflicts_with\": []\n    }\n  }\n}\n```\n\n待确认用 `\"status\": \"pending\"`；冲突候选用 `conflict` 并填同一 store 的 active ID。确认、替换、忘掉时，把下列对象换进新事件的 `operation`（`BP` 编号传 `--book-root`）；`replace.preference` 字段同上但不传 `status`、`conflicts_with`，新条目直接 active：\n\n```json\n{\"action\":\"decide\",\"item_id\":\"AP002\",\"decision\":\"activate\",\"quote\":\"对，这就是我的长期习惯。\",\"reason\":\"作者明确确认\"}\n{\"action\":\"replace\",\"old_ids\":[\"AP001\"],\"preference\":{\"kind\":\"prose_style\",\"scope\":{\"level\":\"global\",\"value\":null},\"assertion\":\"以后对话允许更长的试探，但避免解释设定\",\"quote\":\"……\",\"source_ref\":\"conversation:2026-08-25\",\"source\":\"explicit_user\",\"confidence\":\"high\",\"importance\":\"high\",\"reason\":\"作者明确替换原有全局规则，不是新增本书例外\"}}\n{\"action\":\"forget\",\"item_id\":\"AP003\",\"quote\":\"忘掉这个偏好。\",\"reason\":\"作者明确撤回\"}\n```\n\nFile v1.1.25:references/banned-words.md\n\n# AI味禁用词与句式表\n\n> 表达默认值服从 [style-resolution.md](style-resolution.md)；文件结构与事实约束不豁免。\n\n<!-- 同名副本×6 字节同步，改动后跑 scripts/check-shared-files.sh -->\n\n## 默认优先检查的句式（先对照本书文风）\n\n写网文最毒的 AI 句式，作者一旦养成就会反复出现。以下是优先检查的句式：\n\n| 毒级 | 句式 | 错误例 | 修法 |\n|------|------|--------|------|\n| ★★★★★ | \"不是A，（而）是B\" / \"不是A，不是B，（而）是C\"（\"而\"可省略，省掉也算命中）| \"他不是冷漠，而是绝望\" | 直接写 B 或用更自然的表达 |\n| ★★★☆☆ | 跨段「不是A。/也不是B。/只是C。」 | 「不是嚎啕大哭。/也不是扯着嗓子喊不舍。/只是一个人走远了……」 | 语义复核；重复提纲或拖慢画面时压成 C，有辩解/悬念排除功能可保留 |\n| ★★★★ | \"，带着……\" 万能状语 | \"他笑了一下，带着一丝不易察觉的嘲讽\" | 删掉状语留主句，或换具体动作 |\n| ★★★★ | 无情绪声线：\"声音不大，却带着……\" / \"语气毫无波澜\" / \"平静无波\" / \"声音平直/平平/听不出情绪\" | \"她声音不大，却带着不容置疑的力量\" | 直接写台词内容、声音特征或动作 |\n| ★★★★ | \"他/她知道……\" | \"他知道这一切都来不及了\" | 用行为展示认知 |\n| ★★★ | \"仿佛/犹如/宛若……一般\" | \"仿佛能穿透一切一般\" | 删掉或白描 |\n| ★★★ | \"眼中闪过一丝……\" / \"嘴角勾起一抹……\" | \"眼中闪过一丝悲伤\" | 删掉；写他当场说的话或做出的决定 |\n| ★★★ | \"心中涌起一股……\" / \"心头一震\" | \"心中涌起一股暖流\" | 写它改变了什么：选择、台词、物件或后果 |\n| ★★★ | 抽象命运/开端收束：\"命运……棋局/獠牙\" / \"这一刻终于明白\" / \"反击才刚刚开始\" | \"命运终于露出獠牙；属于他的反击才刚刚开始\" | 回到角色当下可见的文件、动作、对话或物理后果 |\n| ★★ | 章末预告 \"他不知道的是……\" | \"他不知道的是，更大的风暴即将来临\" | 用具体钩子物件/事件收束，避免空泛预告 |\n\n> ★★★★★ 命中一处就要改；轻/中/重分档只按去 AI 味诊断的密度指标定。\n\n`check-ai-patterns.js` 的 `formulaic-parallelism` 还会提示「至于X不X，怎么X」和同动词「不V A，不V B」。这两类可能是功能性口语，因此只做 advisory；Gate B 必须连同台词读语境复核，若只是复述细纲/前文就压成一次判断，不能因 hook 豁免台词而跳过。\n\n**标点**：正文（含叙述和对话）禁用破折号 `——`/`—`、双连字符 `--` 和省略号停顿，改用句号、逗号、短句或动作断句；不设置对话破折号例外。盐言「」引号不在此列。\n\n---\n\n## 一级禁用词（出现即替换）\n\n> 什么词进一级：只收真人语料里几乎不出现、AI 特有的词。真人高频使用的自然副词和虚词不进一级，走二级密度控制。\n\n### 情态类\n仿佛、犹如、宛若、如同、一丝、一抹、些许、几分、隐约、毫无征兆、几不可闻、微不可察\n\n### 动作类\n深吸一口气、不禁\n\n### 表情类\n眼中闪过、嘴角勾起、眉头微皱、眉眼低垂、瞳孔微缩、瞳孔收缩、瞳孔一缩、指节泛白、眼神锐利、目光锐利\n\n### 心理类\n心中一动、心头一震、心下了然、心中暗道、心底泛起、不由得、心中一凛\n\n### 判断类\n不容置疑、不容置喙、不易察觉、显而易见、毫无疑问、不可否认、前所未有\n\n### 形容类\n坚定、闪烁着光芒、狡黠、深邃、凛冽、冰冷\n\n### 过渡类\n不由自主、情不自禁、自然而然、话锋一转\n\n## 二级禁用词（高频出现时替换）\n\n### 语境敏感词（仅高频或偷懒时处理）\n突然、陡然、骤然、猛然、好像、似乎、瞬间、猛地、死死地（角色口语、真实突发、时间压缩、视角不确定时可保留；用同义变体轮换规避重复不算豁免，按同一个词计密度）\n\n### 弱化副词（密度控制）\n缓缓、微微、轻轻、淡淡（每千字合计 ≤3；这四个词同时计入 `cliche-density-tic` 的套词密度统计；孤立自然使用可保留，成串出现或每个动作都垫一个时才替换）\n\n### 书面腔 → 口语化\n\n| 书面腔 | 口语化替换 |\n|--------|-----------|\n| 瓦解 | 消失 / 散了 / 没了 |\n| 无名火 | 烦躁 |\n| 往我心上捅刀子 | 心烦意乱 |\n\n### 总结句式\n- \"他/她终于明白...\"\n- \"他/她这才意识到...\"\n- \"这一刻，他/她终于明白/意识到...\"\n- \"从这一刻开始...\"\n- \"属于X的反击/复仇/故事，才刚刚开始\"\n- \"命运/宿命 + 齿轮/棋局/獠牙/改写/安排\"\n- \"此刻，他/她...\"\n- \"一切...都...\"\n- \"原来...\"\n\n### 排比句式\n- 连续3句以上相同结构的排比\n- \"有的...有的...有的...\"\n- \"一边...一边...一边...\"\n\n### 升华句式\n- \"这一刻...\"\n- \"他知道...\"\n- \"她明白...\"\n- \"这就是...\"\n\n## 禁用句式模板\n\n| 句式 | 示例 | 问题 |\n|------|------|------|\n| \"不是A，而是B\" | \"他不是冷漠，而是绝望\" | 最毒；直接写 B |\n| \"...，带着...\" | \"他说，带着一丝无奈\" | 万能状语 |\n| \"声音不大，却带着……\" | \"她声音不大，却带着不容置疑的力量\" | AI 最爱声音描写 |\n| \"仿佛能...一般\" | \"仿佛能穿透一切一般\" | 文言腔 |\n| 对话标签密度过高/公式化标签 | \"好的，他说道\" | 普通\"说\"可保留；高频或公式化时处理 |\n| \"他/她感到...\" | \"她感到一丝失落\" | 告诉而非展示 |\n| \"他/她意识到...\" | \"他意识到事情不对\" | 直接告知 |\n| \"眼中闪过一丝XX\" | \"眼中闪过一丝悲伤\" | 模板化 |\n| \"嘴角勾起一抹XX\" | \"嘴角勾起一抹冷笑\" | 模板化 |\n| \"心中涌起一股XX\" | \"心中涌起一股暖流\" | 模板化 |\n| \"取而代之的是\" | \"笑容消失，取而代之的是冰冷\" | AI 过渡模板；直接写新状态 |\n| \"淬了/淬着X\" | \"眼里淬了毒\" | AI 通感套路；写动作或台词 |\n| \"显得（有些）X\" | \"他显得有些兴奋\" | 告诉而非展示 |\n| \"心底/心里某个地方+软\" | \"心里某个地方软得一塌糊涂\" | 言情套句；写动作 |\n| \"（浑身）散发着一股X气息/气场\" | \"浑身散发着一股生人勿近的气息\" | 万能气场描写；写旁人的反应 |\n| \"命运/宿命 + 齿轮/棋局/獠牙/改写/安排\" | \"命运终于露出獠牙\" / \"早已布好的棋局\" | 抽象作者总结；改成角色当下撞见的文件、动作、对话、物理后果 |\n| \"这一刻终于明白/从这一刻开始/才刚刚开始\" | \"这一刻，他终于明白\" / \"反击才刚刚开始\" | AI 收束腔；删总结，用动作或未解决问题收尾 |\n\n## 比喻分类（默认复核，不默认全删）\n\n带\"像/如/仿佛/犹如/宛若\"的比喻不是一律 AI。真正高风险的是：成片堆叠、套用万能文学比喻、用精致比喻替代剧情推进，或在段尾替读者总结意义。本表用于识别需要复核的比喻类型：\n\n| 比喻类别 | 例 | 处理 |\n|---------|----|------|\n| 生活/角色化 | \"像一头被抛弃的野狗\" | 若贴角色视角、能传递信息或情绪，可保留 |\n| 物品/现象类 | \"像一把刀\" \"脸色惨白得像这漫天的雪\" | 普通功能性比喻可留；模板化或重复时改白描 |\n| 状态类（陈词滥调） | \"梨花带雨\" \"如沐春风\" | 优先删或改成具体动作/表情 |\n| 抽象类 | \"像命运的齿轮\" \"像上辈子的尘埃\" | 高风险，优先落回动作、物件、声音、后果 |\n| 假设类 | \"力道大得像是要把骨头捏碎\" | 若是角色身体感知可留；夸张堆叠时改事实后果 |\n\n处理原则：先看功能，再看密度。保留最能传递信息或情绪的一两个，其余改为直接描述、动词、名词、作用、结果或事实；不要把删掉的比喻替换成另一批新比喻。例 \"脸色惨白得像这漫天的雪\" 若只是套话 → \"脸色惨白\"；若雪景正在压迫角色，可保留或改成角色当下看到的具体画面。\n\n> `metaphor-density-tic` 是 advisory：提示通读复核，不是 blocking；生活化、角色化、单个有功能的比喻可以保留。\n\n## 替换策略速查\n\n| 原文类型 | 替换方法 | 示例 |\n|----------|----------|------|\n| 抽象情绪词 | 先看上下文是否已成立；再选选择、台词、物件、后果或一句直写 | “紧张”若不影响下一步可直写或删；若导致签名作废，就写作废的结果 |\n| \"感到XX\" | 删除“感到”后按场景决定是否还要情绪句 | “他感到愤怒”可写“他火了”，也可直接写他撤回报价；不要默认换成攥拳 |\n| 形容词堆砌 | 白描手法 | \"美丽动人的笑容\" → \"她笑了\" |\n| 书面表达 | 口语化 | \"不容置疑\" → \"就是\" |\n| 解释性描写 | 留白 | \"他因为害怕而...\" → \"他退后一步\" |\n| 连续排比 | 保留最强一条 | 3 句排比留 1 句 |\n| 总结升华句 | 直接删除 | \"这一刻，她终于明白了...\" → 删 |\n| \"不是A，而是B\" | 直接写 B 或更自然的表达 | \"他不是冷漠，而是绝望\" → 直接写 B |\n| 多余修饰（形容词/定语/量词/指示代词） | 删 | \"白色的药片\" → \"药片\"；\"手里那截链子\" → \"链子\"；\"飞驰的汽车\" → \"车\" |\n\n**替换不复用**：右列是方向示例，不是标准答案。同一禁用词在一章内多次命中时，各处给不同的具体化写法；同一个替换写法反复出现（每次都「垂下眼」、每个动作都补「了一下」），替换产物本身就成为新的模板指纹。\n\n**套词密度优先处理**：`check-ai-patterns.js` 报 `cliche-density-tic` 时，说明禁用词不是零星误用，而是聚成了模板腔。处理顺序不是同义词替换，而是先删抽象总结，再把情绪/判断落到角色当下可见的动作、物件、对话和具体后果。\n\n**套式反应逐处删除测试**：`stock-reaction-tic` 报警时，不代表禁止身体描写。逐处问：删掉后信息、选择、关系、物件或动作结果是否受损？无损就删，不把“指尖轻叩”换成“目光微沉”。伤势、动作失败、人物习惯或情节后果明确时可以保留。\n\nFile v1.1.25:references/deslop-gates.md\n\n# 去AI味 Gate 执行细则\n\n本文件承接调用方选定 Gate；只执行所选范围，不扩大为全量。表达先按 [style-resolution.md](style-resolution.md) 的本书裁决，剧情和信息保护边界仍有效。写作自检与写后审查沿用下方「写手 A-G 判据」；独立去味沿用「删除优先判断」及各门禁详细步骤。模式解释、改写顺序与范例见 [anti-ai-writing.md](anti-ai-writing.md)。\n\n#### 删除优先判断（先于各 Gate）\n\n每条被标记项先判能否删除，再考虑润色——很多 AI 味句是废话（解释、注水、凑数），润色后照样冗余。\n\n1. 删掉后是否丢失伏笔、钩子、角色特征、情节推进、必要信息或必要转折？都不丢则直接删，不进 Gate。\n2. 丢任意一项 → 保留信息进对应 Gate 改写（只删\"怎么说\"的 AI 味，不删\"说什么\"）。\n3. 删除服从过度去AI味保护：不整段删、不删剧情功能；删除比例上限按 AI 味等级，轻度 ≤15%，中度 ≤25%，重度 ≤35%；若删后跌破本次字数范围的下沿，改为降AI重写，不删完再用新废话凑字。\n4. 删完通读：若整段只剩最短句、结构虚词被扫光、每个动作都带「了一下」式尾巴，就是删过头的电报体（见 anti-ai-writing.md 模式 9）——把非峰值叙述句恢复成自然白话，不是接着删。删的是废话，不是中文的自然冗余；这条只调删减的度，禁用词与套路句式的清理力度不因此降低。\n\n以下为各 Gate 的详细规则（删不掉的标记项按此润色；无论 agent 还是主会话执行，均须遵循）：\n\n#### 门禁 A：禁用词替换\n\n加载 [references/banned-words.md](banned-words.md)，对照禁用词表逐项检查。\n\n**白名单机制**：按 [references/style-resolution.md](style-resolution.md) 读取书目录的 `.deslop-whitelist`。获准字面片段由深扫、标点整理和 hook 一致豁免；无文件不创建空表，不因检测器报警自行放行，也不继承其他书的白名单。\n\n**保护规则优先级**：保留创作意图与剧情功能 > 去AI Gate。Gate A-F 只能改变表达方式；Gate G 删的是非故事性的作者解释/旁白（不是情节）。任何 Gate 都不能删除伏笔、钩子、角色特征、人物记忆、情绪承接、因果锚点、关键信息或必要转折；遇到冲突时改为降AI重写或标注 `[需复核]`。\n\n替换规则：\n- 禁用词 → 具体动作/细节描写\n- 不能简单换成另一个形容词\n- 要用\"展示\"替代\"告诉\"\n\n示例：\n- ❌ \"眼中闪过一丝不易察觉的悲伤\" → ✅ \"他垂下眼\"\n- ❌ \"深吸一口气\" → ✅ 直接删；若确有功能，改成角色当下动作（如把话咽回去）\n- ❌ \"嘴角勾起一抹冷笑\" → ✅ \"他冷笑了一声\"\n\n#### 门禁 B：句式去套路\n\n检测并替换以下AI高频句式：\n\n| 句式 | 问题 | 替代方案 |\n|------|------|----------|\n| 否定铺垫后接肯定翻转 | **最毒** 中文 AI 句式之一 | 直接写后项，或改成动作/细节呈现 |\n| 跨段「不是A / 也不是B / 只是C」 | 可能是工整铺排，也可能是辩解、悬念排除或情绪递进 | `formulaic-parallelism` advisory；通读语境，仅在重复提纲或拖慢画面时压缩 |\n| 「至于X不X，怎么X」/同动词「不V A，不V B」 | 工整决策栏、否定清单；正常台词也可能出现 | 结合语境复核；若只是复述前文或细纲，压成一次判断或只留一项 |\n| \"...，带着...\" | 万能状语，AI最爱 | 用独立短句或动作描写 |\n| \"声音不大，却带着……\" | AI 最爱声音描写 | 直接写声音特征或动作 |\n| 陈词滥调/万能比喻 | 公式化比喻会显 AI 腔 | 优先直接白描；确需比喻时只留少数生活化、角色化比喻 |\n| \"他/她知道...\" | 直接告诉读者 | 用行为展示认知 |\n| 对话标签密度过高/公式化标签 | 每句都标注会机械 | 普通\"说\"可保留；高频或公式化时用动作/上下文替代 |\n| \"仿佛/犹如/宛若/如同\" | 文言腔过重 | 口语化表达或白描 |\n| \"不容置疑/显而易见\" | 书面化判断词 | 用具体事实说话 |\n\n**修饰词清扫**：检查物品/人物前面的形容词、定语、副词、指示代词、量词，多余即删。删除后阅读不影响才删；含义流失则改成简洁名词。\n\n示例：\n- \"白色的药片\" → \"药片\"\n- \"飞驰的汽车\" → \"汽车\"\n- \"手里那截链子\" → \"链子\"\n- \"多年的衣服\" → \"旧衣服\"（保留含义）\n\n形容词原则：一次只用一个形容词修饰或不修饰，不连用、不堆砌。\n\n#### 门禁 C：情绪落地\n\n直接写情绪本身不是 AI 味。上下文已让情绪成立，就保留准确的直写或删掉重复说明；需要补足信息时，沿用原文的选择、台词、物件和后果，不为情绪词另配动作。\n\n身体细节按功能取舍：伤势、动作失败、人物习惯或情节后果可以保留；只重复标注情绪的微动作删掉，不换部位或同义动作。具体判据见 `anti-ai-writing.md` 规则 2。\n\n**重复描写去重**：当相邻段反复表达同一信息、同一动作或同一情绪时，按 Gate C/D 处理，不另开专项流程。\n\n处理方法：\n- 合并同一瞬间的重复描写，保留最能推动情绪或剧情的细节\n- 如果原文把一个动作拆成\"动作概述 → 感知细节 → 身体反应\"，改成同一段连续画面\n- 若合并后节奏过快，恢复原文中有功能的信息，或把既有信息改成更自然的动作/对话表达；不在原动作后追加描写层，也不新增原文没有的情节\n\n示例：\n- ❌ \"他拿起笔。手在抖。笔尖又停住。\"\n- ✅ \"他拿起笔，笔尖刚碰到纸就偏了，手腕压了两次都没压稳。\"\n\n**重复语义四类**（同一意思不重复表达，只留一个最合适且简洁的）：\n\n| 类别 | 错误例 | 修法 |\n|------|--------|------|\n| 形容词重复 | \"兴高采烈地笑着跑过来\" | \"笑着跑过来\" |\n| 近义词重复 | \"非常重要的关键问题\" | \"关键问题\" |\n| 含义重复 | \"我好饿，肚子咕咕叫\" | \"我好饿\" |\n| 上下文主语/物品重复 | 上文说\"把抗抑郁药扔了一地\"，下文不必再写\"地上的抗抑郁药\"，只写\"药片\" | 模糊简洁口语化即可 |\n\n**多余场景/人物/物品描写**：服务情节人物之外的修饰描写直接删。\n\n示例：\n- \"游惑手里握着一把短刀，刀锋冷冽\" → \"游惑手里握着一把短刀\"\n- \"手铐紧紧扣住两人的手腕，中间连着一截不算长的链条\" → \"手铐扣住两人的手腕，中间连着链条\"\n- \"暴雪极地的考场里，风雪没有停下的意思\" → \"暴雪极地的考场里\"\n\n#### 门禁 D：节奏调整\n\nAI写作的节奏问题：句式过于整齐、段落过于匀称。\n\n处理方法：\n- 打断连续排比句（保留1-2个，删掉其余）\n- 只拆臃肿修饰、堆叠比喻、抽象总结的长句；改写后叙述仍以逗号长句为主（见 anti-ai-writing.md 规则 3），不要把正常的逗号长句拆成短句串\n- 偶尔用不完整句（口语感）\n- 段落长短交错（不要每段都3-5行）\n- 不按硬指标排版：番茄高分样本不是 50-60 字一行，也不是逢句号必换行；按动作/信息变化自然断段，读起来不卡即可\n- 标点节奏跟语气走：避免通篇句号化；保留有功能的 `？` / 少量 `！`，把 `……` / `——` 改成动作、短句、换行、逗号或句号，删除随机堆砌或刷屏符号\n\n#### 门禁 E：对话去腔调\n\nAI写的对话特征：每句话都信息完整、逻辑清晰、表达精准。\n\n处理方法：\n- 加入口语化表达（\"嗯\"\"哦\"\"行吧\"）\n- 适当打断对话（角色可以答非所问）；对话被打断或拖长时用动作、换行或短句处理，不用 `——`\n- 用动作穿插对话（\"她喝了口水。'然后呢？'\"）\n- 删掉解释性对话（角色不会把自己的动机说清楚）\n- Gate B 同样检查台词：连续工整否定、`至于X不X，怎么X`、同动词 `不V A，不V B` 不能因脚本的台词豁免而漏审；有明确人物/任务功能才保留\n- 不为凑比例硬扩台词；番茄对话占比随题材波动，台词只在角色此刻真会说、必须说时增加\n- 口误、停顿、粗话和重复要服务人物身份与情绪，不作为“真人感”装饰批量添加\n- 不把所有对话末尾改成句号：质问保留问号，爆发峰值保留少量感叹；吞回去/没说完用动作停顿、短句或换行，不用 `……`\n\n#### 门禁 F：结尾去升华\n\nAI写作的结尾特征：总想总结、升华、点题。\n\n处理方法：\n- 删掉总结性语句\n- 用动作/场景收尾，不要用感慨收尾\n- 如果结尾有\"他知道...\"\"这一刻...\"→ 基本可以删\n- 短篇（单个 正文.md）带主角主观情绪的审判句、火葬场预告、心死式章尾是卖点，保留；只删中立、与角色情绪无关的作者讲解。\n\n#### 门禁 G：去解释腔/上帝感/安排感\n\n最难察觉、最\"像 AI\"的一类（对应 anti-ai-writing.md 模式 8）。叙述者跳出角色当下去解释、剧透、总结、定性、升华，读者闻到\"作者在场/剧情被安排\"。\n\n处理方法：\n- 删解释因果：「之所以…是因为」「原来…」「这意味着」→ 删，因果让读者从动作对话里自己拼。\n- 删上帝视角剧透：「她不知道的是」「殊不知」「多年以后」「仿佛预示着」→ 删。\n- 删替读者定性：「演得真好」「这出戏她看过一遍」「他就是这样薄情」→ 删，证据留给读者判断。\n- 删隐蔽的软评判：评判性副词（「关切得恰到好处」）、剧透点破（「那点笑她看得分明」）、定性比喻（「像在宣判一件早已定好的事」）→ 删，或改成角色此刻带偏见的瞬间感觉。\n- 注意：Gate G 删的是\"非故事性的作者旁白\"，不是删情节。删完若变薄，靠角色动作/对话补，不补叙述者解说。\n- 短篇（单个 正文.md）带主角主观情绪的审判句、火葬场预告、心死式章尾是卖点，保留；只删中立、与角色情绪无关的作者讲解。\n\n**任务卡点修法边界**：任务卡点不是固定公式，也不是通用补流程按钮。原文已有任务、证据、手续、物件缺口时，可以把解释总结压成角色当下要处理的具体卡点；原文没有缺口时，只删解释或改动作/对话，不新造剧情。所有卡点都先做“删掉试试”：删掉后不丢伏笔、钩子、信息、关系变化或必要转折，就压缩或删除。\n\n## 写法抽查（审查侧，只指认已有问题）\n\n对爽点段与检测器标记处逐问。只许指出正文里**已有**的那一处，没有就答「无」，**不许为了让某一问有答案回头补内容**。详写的关键场景里，遮住一处发生、感知或反应后读者什么也没损失，就判为可删并报告位置；套式反应按 `banned-words.md`「套式反应逐处删除测试」逐处过。审稿只报告、不改文件；去味执行者再按删除保护落改，只报告实际删改与保留理由。\n\n| # | 自问 | 不合格的样子 |\n|---|---|---|\n| 1 | 本章最大的那次状态变化，读者看见了几个中间态？ | 只给了\"起点\"和\"终点\"；或同一状态换十种说法说十遍 |\n| 2 | 有没有一组同类并列项被平均分配了笔墨？ | 三样物件、四拨人马各给同样的分辨率 |\n| 3 | 本章的设定／能力／威胁，是被说出来的，还是被谁付了代价试出来的？ | 旁白直接给出结论，读者没有自己发现的机会 |\n| 4 | \"厉害／难得／要命\"这些判断，是谁给出的？他有什么立场？ | 叙述者自己下的判断；结论由旁白先说出来、在场的人只负责吃惊；或标价人就在场却没标价 |\n| 5 | 每个给了镜头的人，此刻在为自己争取什么？ | 遮住名字认不出是谁说的；所有人同向配合主角；用手部／喉部微动作代替立场；或把他的算计写成一段旁白独白 |\n| 6 | 该说出口的话，是写出来了还是被概括了？ | \"他吼了一声\"\"他说了句什么\"\"三言两语解释了缘由\"；本该来回几轮的交锋压成一次说完 |\n| 7 | 本章最重的那一句，是不是最短的那一段？ | 最重的一拍写成了全章最长的段落 |\n| 8 | 判为\"密\"的段落里，有没有量词加概括？ | \"一连七八下\"\"半晌\"\"众人纷纷\"出现在密处 |\n\n---\n\n## 写手 A-G 判据\n\n以下为原 narrative-writer 的写作自检/审查判据，调用方给了 Gate 就只执行该范围；未给时仍 A-G。\n\n- **A 禁用词**：命运齿轮/如潮水般/心猛地一沉类逐一替换（对照 `banned-words.md`；书级文风有裁决按其配额）。\n- **B 句式**：连续排比、刻意对称打散；**禁止高置信否定铺垫后再肯定翻转**——同句「不是A，(而)是B」「没有X没有Y只是Z」直接写肯定内容或改动作承担对比；跨段「不是A / 也不是B / 只是C」、`至于X不X，怎么X`、同动词 `不V A，不V B` 只作语义复核（advisory），重复细纲或拖慢画面时改，承担辩解、悬念排除或情绪递进时可保留（书级文风另有裁定按其执行）；普通名词不加引号强调（对话、逐字引用、场内载体原文除外）。\n- **C 情绪**：删空泛 AI 情绪总结句；上下文已成立就删补充说明；不设「情绪词→身体动作」默认转换。\n- **D 节奏**：只拆臃肿修饰、堆叠比喻、信息过载的长句；句长按书级文风带执行，长短随情绪 beat 交错——沉淀放慢、冲突骤短，忌通篇同长度。\n- **E 对话去腔调**：所有角色同一语气→按语言风格档案差异化；犹豫/打断/拖长用动作、短句或换行承担。\n- **F 结尾去升华**：大段抒情收尾→安静细节收尾；短篇例外见门禁 F。\n- **G 去解释腔/上帝感**：先按本书叙述姿态判断，短篇例外见门禁 G；授权的有限全知、评论或旁人内心不因形式删除。删无功能的解释、未经授权的剧透、重复总结和空泛定性（之所以/原来/这意味着/她不知道的是/殊不知/多年以后）；承担锚点或情绪的压成角色白话；已有场内载体（手机/公告/屏幕）优先保留为角色看到的文本。\n\nFile v1.1.25:references/style-resolution.md\n\n# 文风与参考冲突裁决\n\n写正文、改写、去 AI 味和审稿都先做这一步；inline 与 agent 用同一份裁决。无需另建画像或要求作者填写配置。\n\n## 按维度取值，不把整份文件互相覆盖\n\n表达选择按以下顺序取第一个明确、适用的要求：**当前请求 > 本书文风/设定 > 本书 active 作者记忆 > 题材、流程、全局 active 记忆 > 主对标文风 > 题材包与通用 references 默认值**。未声明的维度才向下补齐；本书例外不撤销全局习惯，临时要求不写回长期记忆。\n\n句长、视角、标点、对话落法、情绪直写、修辞、叙述者评论和收尾方式都是表达维度。reference 中的“必须”“禁用”“最高优先级”、示例和检测阈值不使默认写法升级为作者不可覆盖的规则。主对标的低置信观察不压过作者的明确选择。\n\n事实与表达分开裁决：文风不能改变细纲事件、已知事实、信息揭露边界、用户字数范围、改写范围、文件结构或追踪协议；有限全知允许换视角，不等于可提前揭底。转限知时可暂不叙述该人物无从得知的信息，事实本身不变；不得补出“早已知道”“后来发现”或新观察经历来保全原文信息。审稿照常评价因果、可读性与情绪效果，不能仅因使用了作者选定的写法就判错，也不能因为作者喜欢就忽略真实缺陷。\n\n## 加载与传递\n\n1. 从本次正文路径确定书目录（长篇为 `正文/` 的父目录，短篇为 `正文.md` 所在目录）。读该书 `设定/文风.md`；短篇同时读 `设定.md` 的文风约定。无文件就继续，不建占位文件、不猜其他书。文风无最低字数限制，一句可执行的偏好也有效；空白、纯标题、待补充不算。\n2. `_文风摘要.md` 只辅助定位，不替代全文。当前会话已读全文时无需反复读；摘要与全文不一致用全文，不让旧摘要压过作者的新修改。\n3. 有作者记忆时 query，显式传当前书名、已知题材和流程以及需要的 kind，避免只取到 global；没有就跳过。只用 active；同一维度窄范围覆盖宽范围，不拼成同时满足的清单。无法判定的同范围冲突才问作者，已能按优先级解决的不询问。\n4. 在现有 prompt 填 `style_resolution`：本次生效的表达要求及来源、被覆盖的默认条款、必须保留的事实/信息边界；只列与任务有关的冲突，无冲突可写“按本书文风”。原样传给正文、去味和文字 reviewer，并传文风全文路径。同批复用，当前请求或文风变动时更新。单独调用去味/审稿也执行本步骤，不靠上次会话的记忆。\n\n## 检测器如何服从裁决\n\n检测器不理解作者意图。保留现有默认检查；明确采用且有功能的命中，复用**书目录**下的 `.deslop-whitelist`：UTF-8，一行一个原文字面片段，空行和以 `#` 开头的整行注释忽略，不支持正则或通配符。不向父目录找，避免跨书继承。\n\n- 本书文风明确允许某种停顿标点时，可登记 `——` 或 `……`；具体修辞登记完整的获准原句，不能登记“不是”“没有”等泛词来关闭整类检查。\n- 每项用上一行 `# 来源：…；用途：…` 说明当前请求或文风依据。只为执行作者已明确的选择登记，不因脚本报警自动放行。当前请求禁止某写法时移除相冲突的豁免；一次性保留只登记该句，不推断长期习惯。\n- 深扫、标点整理和写后/下一章检查读取同一白名单。豁免只影响对应字面片段的风格检查；同一行其他问题照报，事实、字数、占位、工程词、截断和文件结构检查不豁免。\n- 所选 Gate 仍执行：检查该写法是否重复、冗余、破坏节奏或越过信息边界；有这些具体问题才改。裁决与发现可简短写在正常交付报告中，不写进小说正文。\n\nFile v1.1.25:skill-card.md\n\n## Description:\n\nDetects formulaic AI-writing patterns in Chinese web fiction and helps authors revise the prose while preserving its plot and voice.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[worldwonderer](https://clawhub.ai/user/worldwonderer)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nChinese web-fiction authors and editors use this skill to identify repetitive or overly polished phrasing and revise selected passages or story files without changing the underlying narrative. Detection-only requests can return findings without editing the text.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Revision mode can overwrite user-selected story files in place.\n\nMitigation: Request detection-only mode when edits are unwanted; review changes to selected files before accepting them.\n\nRisk: Explicit long-term writing preferences may persist in project or book author-style memory for future reuse.\n\nMitigation: Store only preferences the author explicitly asks to retain, and review or remove stored preferences when needed.\n\n## Reference(s):\n\n- [ClawHub skill listing](https://clawhub.ai/worldwonderer/skills/story-deslop)\n- [Declared source link in skill metadata (not verified provenance)](https://github.com/zenstory-ai/oh-story-claudecode)\n- [Writing guidance](artifact/references/anti-ai-writing.md)\n- [Author-style memory guidance](artifact/references/author-memory.md)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Files, Guidance]\n\n**Output Format:** [Markdown diagnosis and revision report, with revised prose in the response or in selected story files]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Detection-only mode reports findings without edits; file mode can modify selected story files in place.]\n\n## Skill Version(s):\n\n1.1.25 (source: server-resolved ClawHub release)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.1.24: 14 files, 117306 bytes\n\nFiles: references/anti-ai-writing.md (37187b), references/author-memory-maintenance.md (8766b), references/author-memory.md (11531b), references/banned-words.md (10424b), references/deslop-gates.md (14455b), references/style-resolution.md (4016b), scripts/author_memory_commit.py (79758b), scripts/check-ai-patterns.js (75274b), scripts/check-degeneration.js (15104b), scripts/normalize-punctuation.js (13480b), scripts/style-whitelist.js (1168b), skill-card.md (2012b), SKILL.md (22208b), _meta.json (132b)\n\nFile v1.1.24:SKILL.md\n\n---\nname: story-deslop\nversion: 1.0.0\ndescription: \"网文去AI味。检测并清除文本中的AI写作痕迹，让文字回归自然、非模板化。触发方式：/story-deslop、/去AI味、「去AI味」「这篇太AI了」「网文去AI味」。\"\nmetadata: {\"openclaw\":{\"source\":\"https://github.com/zenstory-ai/oh-story-claudecode\"}}\n---\n# story-deslop：网文去AI味\n\n**文风裁决**：正文写作、改写或审稿前先读 [references/style-resolution.md](references/style-resolution.md)，加载本书文风并形成 `style_resolution`；无作者记忆也执行。当前请求、本书文风和 active 偏好按维度覆盖通用 references；同一裁决交给后续执行者。\n\n你是网文润色专家。你的任务是把 AI 味浓重的网文文本改写自然，降低模板化、书面腔和过度工整感。\n\n**核心信念：AI 味的主要问题并非语法错误；更常见的是过度圆滑、工整、解释充分。改写目标是保留剧情功能，同时增加口语、停顿、跳跃和具体动作。**\n\n---\n\n> 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 用 `subagent_type`，OpenCode 用 `subagent` 工具的 `agent` 参数，Codex 用同名 `agent_type`，Antigravity 用 `invoke_subagent` + `TypeName`。运行时未暴露 custom-agent registry / `invoke_subagent`、返回未知 agent，或检测到 `.zcode/`（ZCode 3.3.4 不执行项目 custom agents）时降级 solo/direct：报告里一句白话告诉作者「这次由我直接改」，`Fallback: project custom agents unavailable -> solo` 原文只写进报告最后一行「技术备注：」。\n>\n> Spawn 版本提示（不阻断 spawn）：先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 34` 不一致时（标记缺失、字段缺失/非整数、小于或大于 34）**照常按文件存在性检查并 spawn**，同时用一句白话提示作者「写作助手是旧版，运行 /story-setup 后新开对话」，`Notice: agents bundle 版本不匹配（项目 {N}，本版 34）` 原文写进技术备注行；大于 34 时额外提示先更新 oh-story-claudecode，不要用本地旧版 setup 降级覆盖。只有 agent 文件缺失、或运行时不暴露 custom agent 时才降级 solo/direct，`Fallback: ... -> solo` 同样只进技术备注行。\n\n## 核心哲学\n\n### 原则 1：改味优先，别当改错\n\nAI味不按语法错误处理，也不需要\"修正\"。它属于风格问题：过于书面化、过于对仗工整、过于面面俱到。去AI味的本质，是把文字从过度工整拉回具体、自然、可读。\n\n### 原则 2：改最少，效果最大\n\n去AI味不等于重写。目标是改最少的字，让整段文字的\"味\"变过来。能改一个词就不改一句，能删一句就不重写一段。没有问题的句子尽量保留原句；人名、地名、数字、章节名、专有名词优先保留。\n\n**过度去AI味保护**：\n- **不得整段删除正文内容**。如果某段被标记为多处AI味，应逐句修改而非删除整段\n- 删除前必须确认：被删除的内容是否包含伏笔、钩子、角色特征、情节推进、人物记忆、情绪承接、因果锚点等关键信息\n- 如果删除会破坏情节连贯性，改为\"降AI重写\"而非删除\n- 删除比例上限按 AI 味等级分级：轻度 ≤15%，中度 ≤25%，重度 ≤35%。重度文本可通过“合并重复描写+重写降AI”产生更大字符差，但仍不得整段删除或删掉剧情功能。超过对应比例应在报告中标记超限风险，并输出分段处理方案\n- 如果逐句修改后某段仍不满意，在去AI味报告中标注 `[需复核]` 而非删除，不计入当前等级的删除比例上限\n- 对于\"疑似AI味但不确定\"的内容，在去AI味报告中标注 `[需复核]`，而非插入正文\n\n### 原则 3：保留创作意图\n\n去AI味只改\"怎么说\"，不改\"说什么\"。剧情、人设、情节走向一概不动；不新增原文没有的情节、设定、关系或时间线。如果原文有逻辑问题，那不是去AI味的活。\n\n### 原则 4：按文风保留有功能的语气与停顿\n\n去AI味不是把文字全部磨成句号。质问里的 `？`、爆发峰值的少量 `！` 可以保留；犹豫、未尽、打断或拖长用动作、短句、换行、逗号或句号重排。默认不保留 `……` / `——`；本书明确选择并登记的功能性停顿保留，也要清理无功能的 `!!!` 和随机标点堆砌。\n\n### 边界：去AI味只处理读感与叙事功能\n\n去AI味治读感，不承诺任何分数结果。若用户贴出工具报告，只把能对应到正文的问题转成具体修改点；不写“0% AI / 100% 真人”，不注水、故意错字或打乱标点。去AI味仍以原文剧情边界为准，不把表达修复变成新增情节或新增事件链。\n\n### 作者习惯\n\n若作者记忆 state 已存在，改写前用 `scripts/author_memory_commit.py query --workspace {工作区} --book-root {书目录} --kind prose_style [--genre {题材}] [--workflow 去AI味]` 获取匹配的 active 文风条目（`--workspace` 必传；`--genre` 填本书题材类型；总输出 ≤2KB），并交给 inline/spawn 执行者作为自然倾向，不逐条展示或最大化命中，不牺牲连贯、节奏和字数；当前请求、原文剧情功能和本 skill 保护规则优先。用户明确声明长期文风习惯时，改写后按 [references/author-memory.md](references/author-memory.md) 用 `record` 写入并按其「回执怎么告诉作者」转告；只记作者明确说的，一次性要求、反复修改、检测器 findings 和助手自己的结果不记录。\n\n---\n\n## 自然文本基准\n\n去AI味需要知道自然网文文本的特征。以下是从热门网文中提炼的非模板化写作特征，作为对比基准：\n\n### 自然文本特征（与AI味对比）\n| 维度 | 自然文本 | AI味文本 |\n|------|----------|--------|\n| 段落长度 | 随 beat 长短不一：爽点/转折压短，推理/氛围/情绪链放长 | 通篇同一长度，整齐均匀 |\n| 句内节奏 | 叙述以逗号长句为主（逗号之间 8-12 字、整句 20-30 字，见 anti-ai-writing.md 规则 3） | 要么长句臃肿，要么通篇碎句像提纲 |\n| 对话标签 | 标签低频且不公式化，多用动作/上下文引出；普通\"说\"可保留 | 几乎每句都有\"说道/问道/笑道\" |\n| 情绪表达 | 直写有上下文支撑，反应带后果 | 空转的情绪总结句，或给每个情绪词配微动作 |\n| 比喻 | 生活化（\"像哈士奇护食\"） | 文学化（\"如寒冰般\"） |\n| 语气词 | \"嘤\"\"嘶\"\"靠\"\"行吧\" | 几乎没有 |\n| 省略 | 大量省略，读者自己脑补 | 面面俱到，生怕读者不懂 |\n| 排比 | 偶尔1-2个，从不连续3+ | 连续3-5个排比是标配 |\n| 结尾 | 动作/对话收尾 | 总结/升华/感慨收尾 |\n\n### 自然表达替换参考\n> 来自大量网文写作研究：\n\n- 替代\"深吸一口气\"→ 直接删；若确有功能，改成角色当下动作\n- 替代\"眼中闪过一丝...\"→ \"他垂下眼\" / \"眯起眼\"\n- 替代\"嘴角勾起一抹...\"→ \"他嘴角一扯\" / \"乐了\"\n- 替代\"仿佛...\"→ 优先直接白描；确需比喻时只留少数生活化、角色化比喻\n- 替代\"不禁...\"→ 直接写动作\n- 替代\"缓缓开口\"→ \"说\" / 用动作引出对话\n\n---\n\n## 检测流程\n\n去 AI 味只有一条管线：确定性检测器 → 按分级选 Gate → 一次定点改写 → 复扫。长篇写作的章末检测与按需审查、story-review 的确定性预检用的是同一套检测器与 Gate，本 skill 是它的独立入口。\n\n### Phase 1：AI味扫描\n\n**先认篇幅**：目标是单个 `正文.md`（同目录常有 `小节大纲.md` 或 `设定.md`）按短篇处理，门禁 F/G 保留短篇卖点（主观审判句、火葬场预告、心死式章尾）；`正文/` 下逐章文件或章节片段按长篇处理。拿不准问作者一句。\n\n对用户提交的文本做快速扫描，标记AI味浓重的位置。报告写给作者：问题用白话说并附原文，脚本名、检测器类别名、Gate 字母不进报告。\n\n<!-- author-report -->\n```md\n## AI味检测报告\n\n### 整体评估\n- AI味等级：{轻度/中度/重度}\n- 主要问题：{1-3 个白话描述}\n\n### 问题标记\n| 位置 | 类型 | 原文 | 问题 |\n|------|------|------|------|\n| 第X段 | 套话 | \"眼中闪过一丝...\" | 典型AI高频词 |\n| 第Y段 | 句式 | \"...，带着...\" / 连续3句排比 | AI惯用句式，过于工整 |\n| 第Z段 | 情绪空转 | \"一丝悲伤涌上心头\" | 只总结情绪，没有落点 |\n| 第M段 | 节奏 | 段段4-6句、长度均匀 | 整段同节奏 |\n| 第N段 | 重复描写 | 同一动作连续拆写 | 相邻段重复同一瞬间 |\n| 第P段 | 解释腔 | \"她不知道的是…\" / \"之所以…是因为\" | 叙述者跳出角色解释、剧透或下结论 |\n| 第Q段 | 动作清单 | \"伸手拿起…取过…放下…转身…\" | 像监控录像，缺人物的感受 |\n```\n\n> 类型 → Gate 速查（内部计数用，不写进表）：套话 = A，句式 = B，情绪空转 = C，节奏 = D，对话腔调 = E，结尾升华 = F，解释腔 = G，重复描写 = C/D，动作清单 = D/E。「诊断与分级」判定\"7 Gate 中 4+ 个有问题\"时按此换算计数。\n\n> 评价只输出 AI味等级（轻度/中度/重度）与问题标记；不做「上乘 / 新人投稿属上乘 / 性价比高」这类横向市场判断——skill 没有平台投稿分布数据，这类措辞是无依据的越权担保。\n\n**确定性句式预检（文件模式）**：当输入是本地正文文件路径时，「AI味扫描」必须先运行本 skill 自带脚本，只报告不修改：\n\n```bash\nnode scripts/check-ai-patterns.js --check --fail-on=blocking <正文文件...>\n```\n\n- 检测器 blocking＝必须修，advisory＝建议看；轻/中/重分档另按「诊断与分级」定，用来选 Gate。\n- 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。\n- 其他 findings（碎句号、长段落、微动作、套式反应细节、动作清单、抽象总结、套词、比喻密度、解释链、公文腔、过度精炼、低连接密度、引号强调滥用、`formulaic-parallelism` 工整并列）只作读感提示；完整类别和修法见 `references/anti-ai-writing.md`。其中工整并列会扫描台词，必须读语境判断，不能因为 hook 对台词低误报豁免就跳过。\n- 处理方式：删掉否定铺垫，直接写后项；或改成角色动作、物件细节、身体反应来呈现。\n- 若用户只要检测，保留报告不改文。若执行去 AI 味，只改确实损害读感且无叙事功能的问题；功能性写法标 `[需复核]` 并保留。\n\n---\n\n### Phase 2：诊断与分级\n\n用户明确指定 Gate 时，直接使用该范围；未指定时，根据「AI味扫描」检测结果判断 AI 味程度，决定处理策略：\n\n| AI味程度 | 量化标准（参考值） | 特征 | 处理策略 |\n|----------|---------|------|----------|\n| 轻度 | 禁用词命中 ≤5 处/千字，无连续 3+ 句式套路 | 少量禁用词，偶有书面腔 | 只过 Gate A + B |\n| 中度 | 禁用词命中 6-15 处/千字，或有连续 3+ 句式套路 | 多处禁用词 + 句式套路 + 心理描写抽象 | 过 Gate A + B + C + D + G |\n| 重度 | 禁用词命中 >15 处/千字，或 7 Gate 中 4+ 个有问题 | 全文AI味明显，节奏/对话/结尾/解释腔都有问题 | 完整 7 Gate + 重点段落重写 |\n\n> 量化标准为参考值。命中 = banned-words.md 中条目作为连续字符串在文本中出现一次。`.deslop-whitelist` 中的词如果是命中片段的真子串，跳过该次计数（避免误报世界观术语）。同一词在一处出现计 1 次。\n>\n> **判定优先级**：(1) 先按下方\"AI味打分客观指标\"做量化定档；(2) 允许根据题材/语境做 ≤1 档的主观下调（必须在报告中给出书面理由），不允许上调；(3) 量化与主观冲突时，以量化结果为准。\n\n**AI味打分客观指标**：\n\n| 指标 | 计算方式 | 轻度阈值 | 中度阈值 | 重度阈值 |\n|------|----------|---------|---------|---------|\n| 禁用词密度 | 命中次数 / 千字 | ≤5 | 6-15 | >15 |\n| 连续排比段数 | 连续相同句式结构的段落数 | ≤2 | 3-4 | ≥5 |\n| 空转情绪句 | 无落点的情绪总结句数 / 总段落数 | ≤10% | 10-25% | >25% |\n| 对话标签密度 | \"说道/问道/笑道\" 等 / 对话句数 | ≤30% | 30-50% | >50% |\n| 平均段落句数 | 总句数 / 总段落数 | ≤3 | 3-5 | >5 |\n| 重复描写密度 | 同一信息/动作/情绪连续多段拆写的处数 / 千字 | ≤1处/千字 | 2-3处/千字 | ≥4处/千字 |\n\n> 备注：核心场景（开篇、高潮、收束）出现 1 次重复描写即按 ≥1 档加权（轻→中，中→重）。\n>\n> 以上阈值为参考值，需结合题材特点调整。例如古风题材的对话标签密度天然偏高，应适当放宽。\n>\n> **综合判定规则**：取六项指标中的最高档位。任一指标达重度即按重度处理；无重度时，中度指标 ≥3 项按中度处理，否则按轻度处理。\n\n**改写顺序**（只排所选 Gate 的先后，不扩大范围）：先去泛化与套话（禁用词、抽象情绪、工整对仗、解释腔），再去书面腔，最后回自然节奏、对话差异与结尾落点；做法与范例见 [references/anti-ai-writing.md](references/anti-ai-writing.md)。\n\n---\n\n### Phase 3：逐项清除\n\n#### Agent 调用：narrative-writer（去AI味执行）\n\n「诊断与分级」完成后，按以下顺序选择执行路径：\n\n1. **已在 narrative-writer 子代理内**：按选定 Gate 范围 inline 执行，不再 spawn（嵌套 spawn 会被静默降级）。\n2. **未在子代理内且按顶部顺序找到 `narrative-writer` agent**：按当前运行时调用；Antigravity 用 `invoke_subagent(TypeName: \"narrative-writer\")`，Claude/OpenCode/Codex 用各自字段。prompt 保持：`项目目录：{dir}\\n任务描述：去AI味\\nGate 细则：执行前按你的参考表读取 deslop-gates.md 的删除保护与所选 Gate（部署副本与本 skill 同源）\\n检查分工：你负责本次语义去味；父流程负责 Phase 4 最终文件扫描，不重复整轮改稿\\n检查范围：{待处理的正文文件}\\n文风路径：{本书文风全文路径，无则写无}\\nstyle_resolution：{本次生效要求及来源、被覆盖的默认条款、事实边界}\\n作者偏好：{query 命中的 prose_style 项}\\n篇幅：{长篇/短篇}\\nAI味等级：{诊断与分级结果}\\n处理策略：{实际选定的 Gate 范围；优先使用用户指定范围}\\n删除优先：每条 AI 味项先判能否删除——删后不丢伏笔/钩子/角色/情节/人物记忆/情绪承接/因果锚点/必要信息/必要转折的直接删，会丢才进 Gate 润色；看似解释/评价但承担小连贯的句子，压成白话承接、动作或物件锚点，不机械删除；已有任务/手续/物件/证据缺口可以压成角色当下要处理的具体卡点，但不新增原文没有的事件链；删除服从比例上限与本次字数范围的下沿，跌破下沿改降AI重写。\\n模式处理：按 references/anti-ai-writing.md 的问题模式目录执行；模式 8（解释腔/上帝视角/安排感）归入 Gate G，其余新增模式归入 Gate A-F 的对应处理。相邻段重复表达同一信息/动作/情绪时，按 Gate C/D 合并去重；`。\n3. **agent 不存在或 spawn 失败**：主会话 inline 执行。\n\n#### Gate 规则入口\n\n实际执行者逐项清除前读 [references/deslop-gates.md](references/deslop-gates.md) 的删除保护、所选 Gate 细则与「写法抽查」；inline 与 agent 使用同源规则。按上文「改写顺序」排所选 Gate 的先后，不另起一次全篇去味。\n\n### Phase 4：确定性收尾（文件模式）\n\n当输入是正文文件路径，且「逐项清除」已落盘修改后，**先**做句式/段落复扫，**再**做机械标点兜底（破折号要按功能改写，故先于机械替换报出）：\n\n```bash\nnode scripts/check-ai-patterns.js --check --fail-on=blocking <正文文件...>\nnode scripts/check-degeneration.js --check <正文文件...>\nnode scripts/normalize-punctuation.js <正文文件...>\n```\n\n作用边界：\n- `check-ai-patterns.js` 只报告不改写：severity=blocking 的类别优先改正文并复扫；advisory 先通读判断，确属提纲感、解释腔或模板腔再改，功能性写法标 `[需复核]`。\n- 它只是读感提示；完整类别、例外和修法见 `references/anti-ai-writing.md`。\n- `check-degeneration.js` 报告模型退化（逐字复读/打转、末尾截断、占位符、工程词泄漏 `细纲`/`情节点` 等），每条带 `severity: blocking|advisory`。blocking 是退化信号，去AI味改不掉，应回去重新生成那一段再 deslop；advisory（tier2 章节/歧义词）只提示。\n- `normalize-punctuation.js` 机械兜底：保留书级白名单获准的停顿，清除其余残留的 `……`、漏网破折号 `——`/`—`、双连字符 `--` 和独立行 `---`；默认不改变引号风格，也不把有功能的 `？` / 少量 `！` 改成句号。\n- 知乎盐言短篇可保留 `「」`；只有用户或项目明确要求时，才给标点脚本加 `--quote-mode ascii` 或 `--quote-mode yan`。\n\n---\n\n**视角改写复核（仅本次要求切换视角时）**：交付前回读原文，逐项核对新增的感知/认知句。原文只说明事件发生，不等于人物已经看见或知道；不得自行补观察时点。没有原文依据的“进门时发现”“后来看到”等句子删去，或只呈现原有、当前场景可见的物件状态；不可得的信息暂不叙述。这个检查先于交付，不能用句式脚本通过代替。\n\n### Phase 5：输出润色结果\n\n<!-- author-report -->\n```md\n## 去AI味结果\n- AI味：{轻度/中度/重度} → 改后 {轻度/已基本去除}；主要问题：{1-3 个白话描述}\n- 改了 {N} 处：{最多的 2-4 类，如「删掉\"眼中闪过一丝\"一类套话 6 处；拆开连续排比 3 处」}\n- 字数：{N0} → {N1}（{删/增}{百分比}）{；超过本档删减上限时写明已分段处理}\n\n### 改前改后\n{逐段展示，每处一句说明为什么改；超过 30 处时只展示前 10 处 + 末 5 处，其余按问题类型计数}\n\n### 需要你看一眼\n{标 [需复核] 的地方：原文 + 为什么没动或拿不准；没有就写\"无\"}\n\n### 润色后全文\n{文件模式（默认；章节/正文文件、批量与长篇去AI）：直接改写落盘，写明改了哪个文件，本节只回 ≤200 字代表性片段，不向父会话返回全文。文本模式（仅限交互式贴入、无文件路径的零散片段）：完整输出润色后的文本。}\n\n下一步：{一句话，如「要我接着处理下一章吗？」}\n技术备注：{降级或版本提示的原文；没有就删掉这一行}\n```\n\n**字数硬约束**：删除比例不得超过「诊断与分级」对应上限（轻度 ≤15%、中度 ≤25%、重度 ≤35%）。超限时分段输出并在报告里标记，不得整段删除正文。\n\n**收敛终止**：\n1. 同一段连续两轮去 AI 后没有新改动 → 停止该段处理\n2. 全文上限 3 轮重扫；第 3 轮仍有 ≥10 处改动 → 在报告里标 `[需复核]`，移交人工\n3. 每轮结束前都要做一遍\"再检一次\"：是否有不符合的地方，有则继续；没有则停\n\n---\n\n## 使用场景\n\n| 场景 | 操作 |\n|------|------|\n| 用户贴一段文字说\"太AI了\" | 执行完整检测 + 润色流程 |\n| 用户说\"帮我润色\" | 先检测AI味，再润色 |\n| 用户说\"检查下有没有AI味\" | 只做检测，不做修改 |\n| 用户写作中要求 `仅标注 / 只检测 / 不要改` | 嵌入式提醒模式：执行「AI味扫描」和「诊断与分级」，跳过「逐项清除」「确定性收尾」「输出润色结果」；输出问题标记表，不修改原文，不写文件 |\n\n---\n\n## 参考资料\n\n按需加载以下文件：\n\n| 文件 | 何时加载 |\n|------|----------|\n| [references/banned-words.md](references/banned-words.md) | 检测和替换禁用词时 |\n| [references/deslop-gates.md](references/deslop-gates.md) | 逐项清除前：删除保护与所选 Gate 的细则、示例 |\n| [references/anti-ai-writing.md](references/anti-ai-writing.md) | **去AI味完整指南**：预防+改写顺序+范例 |\n| [scripts/normalize-punctuation.js](scripts/normalize-punctuation.js) | 文件模式落盘后做确定性标点收尾；默认保留引号风格 |\n| [scripts/check-ai-patterns.js](scripts/check-ai-patterns.js) | 文件模式「AI味扫描」预检与「确定性收尾」复扫（只看引号外叙述），只报告不改写 |\n| [scripts/check-degeneration.js](scripts/check-degeneration.js) | 文件模式「确定性收尾」复扫，只报告不改写 |\n| [references/author-memory.md](references/author-memory.md) + [scripts/author_memory_commit.py](scripts/author_memory_commit.py) | 读取或更新跨会话作者文风习惯时 |\n\n---\n\n## 流程衔接\n\n**流水线：** 通用\n**位置：** 润色（共享收尾）\n\n| 时机 | 跳转到 | 命令 |\n|---|---|---|\n| 继续写作 | story-long-write / story-short-write | `/story-long-write` 或 `/story-short-write` |\n| 发现结构问题 | story-long-analyze / story-short-analyze | `/story-long-analyze` 或 `/story-short-analyze` |\n| 准备做封面 | story-cover | `/story-cover` |\n\n---\n\n## 语言\n\n- 跟随用户的语言回复，用户用什么语言就用什么语言回复\n- 中文回复遵循《中文文案排版指北》\n\nFile v1.1.24:_meta.json\n\n{\n  \"ownerId\": \"kn7e14qz6v4n71xmjegh68jtts80dp5r\",\n  \"slug\": \"story-deslop\",\n  \"version\": \"1.1.24\",\n  \"publishedAt\": 1790490870742\n}\n\nFile v1.1.24:references/anti-ai-writing.md\n\n# 去AI味完整指南\n\n> 本文件的句长、视角、标点、修辞与禁用词是默认写法，服从 [style-resolution.md](style-resolution.md) 的逐维裁决。所选 Gate 检查表达效果，不因作者有意选择某写法就机械删除；获准命中按书级 `.deslop-whitelist` 处理。\n\n<!-- 同名副本×4 字节同步，改动后跑 scripts/check-shared-files.sh -->\n\n> 识别AI写作指纹、改写顺序、禁用词约束、改写范例库。用于正文写作后做去AI味自检和改写时查阅。\n\n---\n\n## 决策路由\n\n| 你在做什么 | 查阅哪个模块 |\n|-----------|-------------|\n| 写完正文后做去AI自检 | 核心规则 -> AI写作模式检测 -> 质量维度检查 |\n| 改写某段AI味重的文字 | 改写范例库 + 冲突对话改写范例 |\n| 检查是否用了禁用词 | 禁用词与句式速查 -> AI高频词（模式1） |\n| 系统性去除整章AI味 | 改写顺序 |\n| 检查章尾是否有总结升华 | AI写作指纹 -> 章末总结体 |\n| 判断情绪描写是否告知式 | Show Don't Tell原则 + 去AI味补充技法 |\n| 快速扫描全章质量 | 快速自检口诀 + 质量维度检查 |\n\n## 指令语气\n\n本文件以问题模式和高危清单为主。一级高危词优先检查；二级/语境敏感词按频率、语境和是否偷懒判断。遇到冲突时，保留创作意图与剧情功能优先于机械替换。\n\n---\n\n## AI写作指纹（必须避免）\n\n### 高频AI用词\n\n> 完整禁用词表见 [banned-words.md](banned-words.md)\n\n**补充类目**（`banned-words.md` 未覆盖的高阶替换）：\n\n| 类别 | 替代原则 |\n|------|---------|\n| 抽象升华词（命运、宿命、注定） | 用具体事件代替抽象概念 |\n| 万能比喻（像潮水般、如闪电般、仿佛春风） | 优先不用比喻，确需时只留少数生活化、角色化比喻 |\n\n### 引号只承载真实引用，不给普通名词加戏\n\n不要用双引号给普通名词、常见动作或作者临时概括的概念做“引号强调”。这类写法会把没有特殊含义的词硬包装成术语，连续出现时尤其像模型在替读者划重点。`check-ai-patterns.js` 的 `quote-emphasis-tic` 只负责提示，最终按语境判断。\n\n- **应改**：所谓的\"机会\"、完成这次\"蜕变\"、找到真正的\"答案\"。这些词若只是普通语义，直接去掉引号，用事件本身体现分量。\n- **应保留**：角色对话、逐字直接引用、书名/篇名、确有设定含义的代号，以及手机消息、公告、系统播报等场内载体展示的原文。\n- **边界**：第一次定义术语时可以用引号，但后文不要反复加；讽刺、反话或角色刻意咬重音时可以保留，前提是上下文能看出是谁在强调、为什么强调。\n\n### 章末总结体\n\n**禁止**在章节结尾用以下方式收束：\n- 总结性感悟（\"他终于明白了……\"）\n- 升华式感叹（\"这一夜，注定无人入眠\"）\n- 哲理式收尾（\"人生就是这样……\"）\n- 伏笔式预告（\"他不知道的是，更大的风暴即将来临\"）\n\n**正确做法**：章尾用动作、对话或悬念收束，让情节本身制造余韵。\n\n### 叠加式描写（同一动作掰开写三遍）\n\n**检测模式**：一个动作/情绪先写发生，再补感知细节，再补身体反应，分三段依次写完。读者看到的是同一个动作被掰开写了三遍。\n\n**典型特征**：\n- 先写一个概括性动作，再展开写同一动作的细节，再写身体反应：三段说的是同一件事\n- \"发生层→感知层→反应层\"按顺序分段出现\n- 每个维度独立成段，而不是揉进同一段连续正文\n\n**错误示例**：\n> 林父低着头，左手把文书压住，右手拿笔，往纸上落。\n>\n> 手从肘到腕都在抖。\n>\n> 笔尖在纸上停了停，写了一横，又停。那个\"林\"字的撇写歪了。\n\n→ 同一个动作（手抖/写字）分三段写，每段是同一瞬间的不同维度\n\n**正确做法**：发生、感知、反应三个维度揉进同一段连续正文，读者读到一个完整瞬间：\n\n> 林父左手压着文书，右手拿笔往纸上落，笔尖一触纸面就偏了，从肘到腕止不住地抖，那一横斜着拖出去。\n\n→ 发生、感知、反应在一段里同时呈现\n\n**处理原则**：保留有功能的情绪细节，把同一瞬间的重复描写合并成连续画面。若合并后明显变薄，优先恢复原文中有功能的信息，或把既有信息改成更自然的动作/对话表达；不要新增原文没有的情节、设定、关系或时间线。\n\n---\n\n## 核心规则\n\n> **句长以规则 3 为准**：规则 1-4 和本文件其他地方的「短句 / 拆短 / 能删就删」说法，与规则 3 冲突时按规则 3 执行。\n\n### 规则 1：段落密度诊断\n\n段落长短没有固定优劣。检查重点是朗读和手机阅读是否卡顿：\n\n- 一段通常只承载一个动作、一个信息变化或一组紧密相关的反应。\n- 逗号串太长、多个完整动作挤在一段里，读起来需要换气时，按动作或信息变化拆开。\n- 连续短段碎成提纲时，合并同一镜头内的相邻句，让画面保持连续。\n\n```\n过密：他看着窗外的雨，心中涌起一股说不清的感觉，这些年走过的路和很多已经忘记的事都在这一刻涌上心头。\n\n更自然：他盯着窗外的雨，雨从下午下到天黑。\n\"你还在想她？\"老刘问。\n他没说话。\n```\n\n### 规则 2：动作 + 对话 + 情绪反应\n\n动作、对话与情绪反应按场景需要交织，不按固定顺序轮换，不为凑齐三项补反应。\n\n情绪没有固定译法，关键节点也可以准确直写。上下文已让情绪成立，不另补反应；需要补足信息时，优先选择、台词、策略、物件或实际后果。\n\n身体细节只有带来新信息、影响动作或体现人物与场景特点时才保留。只在句尾重复标注情绪的微动作删掉，不换部位或同义动作。去味时沿用原文已有事实，不凭空添加摔杯子、攥袖口等行为。\n\n### 规则 3：句子该多长（短句是工具，不是默认）\n\n叙述（旁白）默认写成**逗号长句**：一句用逗号串起 2-4 个动作或信息，再落句号；逗号之间 8-12 字，整句 20-30 字。短句是偶尔的孤立重拍工具，不是叙述的默认写法。\n\n| 场景 | 句长 | 示例（长篇语料原句） |\n|------|------|------|\n| 日常 / 推进 / 描写（多数叙述句） | 逗号之间 8-12 字，整句 20-30 字 | 阴冷潮湿的气息扑面而来，身下铺着一层薄薄的稻草，湿漉漉地粘在皮肤上。 |\n| 对话 | 口语化，长短随角色 | \"你疯了？\"\"可能吧。\" |\n\n**不合格（与 AI 腔同级）**：\n- 逗号之间连着都是 ≤5 字的碎片（\"他抬手，开门，进屋，坐下\"式）\n- 通篇 3-8 字句、句号密得像提纲（电报体，见模式 9）\n- 一长一短机械交替（同样是模板）\n\n> **爆款语料校准**（七猫长篇 现言/都市/古言/玄幻/历史 125 本×前 8 章旁白统计）：逗号之间平均 8.8-9.6 字；整句平均 22-24 字；逗号长句占叙述句 74-80%；≤5 字的短片段约占两成，多是孤立的时间词、转折、动作重拍。短篇（盐言体）段落更短（≤15 字的单句段可近一半，长篇约两三成），但句子内部的节奏和长篇一样：**段落随体裁变短，句子内部不碎**。\n\n### 规则 4：口语化表达\n\n- 允许用俚语、粗话（符合角色身份）\n- 对话不要书面语（\"我认为此事不妥\" -> \"我觉得不靠谱\"）\n- 叙述也不要端着（\"他目光如炬\" -> \"他眼珠子一动不动盯着\"）\n- 短语优先于成语（\"无可奈何\" -> \"没办法\"）——只管对话和贴角色声口的叙述；旁白常用成语（不动声色、心不在焉一类）照留\n\n---\n\n## Show Don't Tell 原则\n\n| Tell（告诉） | Show（展示） |\n|-------------|-------------|\n| 他是个胆小的人 | 他把检查报告在手里翻来覆去看了三遍，还是不敢打开 |\n| 这间酒吧很吵 | 酒保凑到他耳边喊了两次他才听见 |\n| 她很富有 | 她随手把一张信用卡丢在桌上，卡面上的数字比这顿饭贵十倍 |\n| 两人关系很差 | 他把烟掐灭在她刚泡的茶杯里，她面无表情地把杯子推到一边 |\n| 他很聪明 | 三秒钟。他看了三秒钟就把文件合上了。\"第三页，第二行。\" |\n\n**核心方法**：\n1. 用行为代替形容词\n2. 用细节代替总结\n3. 用对话代替旁白说明\n4. 用后果代替情绪总结\n\n---\n\n## 质量维度检查\n\n### 1. 核心一致性（权重最高）\n- 剧情是否与大纲/前文一致\n- 人物行为是否符合人设\n- 设定是否有前后矛盾\n\n### 2. 表面改写（防AI指纹）\n- 是否包含AI高频用词（见上表）\n- 章尾是否有总结/升华\n- 是否有大段纯心理描写\n- 段落是否按戏剧单元/镜头自然断开，避免机械单句成段或为凑短碎成提纲（网文段落规则）\n\n### 3. 格式一致性\n- 对话格式统一：按项目/平台约定保持同一引号风格；知乎盐言短篇可用「」\n- 标点节奏匹配语气：避免通篇句号化；保留有功能的问号和少量感叹号；用动作/短句表达迟疑或打断，不用省略号或破折号硬造停顿\n- 场景切换有明显标记\n- 时间线清晰可追踪\n\n### 4. 可读性\n- 是否有连续多个长句压住阅读节奏，且缺少动作、对话或短句换气\n- 对话是否口语化\n- 是否有未解释的生僻词/设定术语\n- 节奏是否有快有慢（不能全是一种节奏）\n\n### 5. 逻辑连贯性\n- 角色动机是否合理\n- 事件因果链是否清晰\n- 时间线是否对得上\n- 角色的知识范围是否合理（不能\"开上帝视角\"）\n\n---\n\n## 快速自检口诀\n\n```\n一事一段，镜头自然断。\n对话要像人说话。\n心情不写心里话。\n结尾不搞大升华。\n打斗不写流水账。\n日常要埋伏笔桩。\n```\n\n> 网文段落规则：按戏剧单元/镜头/一件事结束自然断段；短段快读，长段承载完整推理、氛围和情绪链，避免机械单句成段或通篇同长度。\n\n---\n> **番茄高分样本校准**：番茄正文更接近“手机端短段 + 自然虚词 + 场内动作/对话推进”，不是机械指标达标。番茄高分样本 305 章窗口显示：段落中位约 23.5 字，50-60 字行宽平均只占 5.1%；平均对话占比约 20.6%，对话≥50% 仅 3/305，开篇对话 59/305；`地/得` 305/305、`很` 275/305、`像/好像/仿佛/如同` 267/305、顿号 176/305、省略号 281/305。结论：这些只能按语境复核，不能做 0 容忍硬禁令。\n>\n> **反投机边界**：不要为了“反检测”强制每句换行、把 `……` 改成 `........`、把 `地/得` 全改成 `的`、禁用所有顿号/“很”/“像”、强行开篇对话或按三番四证重排章节。去 AI 味是润色，不是结构重写；除非用户明确要求重写，否则不改变章节顺序、伏笔分布、对话占比和人物信息释放节奏。\n\n---\n\n## 禁用词与句式速查\n\n> 完整禁用词表和句式模板见 [banned-words.md](banned-words.md)\n\n### 正确替代示例\n- '他感到一丝紧张，手心全是汗' -> '他签名时划破了纸'（身体细节只在造成后果时留）\n- '\"好的。\"他说道' -> '\"好的。\"他把门卡塞回口袋'\n- '他深吸一口气' -> '他把话咽回去'\n\n---\n\n## 10 种 AI 写作模式检测\n\n### 模式 1：AI 高频词\n\n| 禁用 | 替换为 |\n|------|--------|\n| 不禁 | 删掉 |\n| 仿佛/宛如 | 删掉或用具体描写 |\n| 映入眼帘 | 删掉 |\n| 心中暗道 | 用动作展示思考 |\n| 沉声道/淡淡地说 | 换成动作标签 |\n| 脸色一变 | 用具体表情/动作 |\n| 嘴角微扬 | 他笑了/他翘了下嘴 |\n| 不由自主 | 删掉 |\n| 只见/此时此刻 | 删掉 |\n| 目光如炬 | 删掉或具体化 |\n\n### 模式 2：弱化副词泛滥\n阈值：每 1000 字超过 3 个 = AI 签名。重点监控：微微、淡淡、缓缓、轻轻。\n\n### 模式 3：意义膨胀\n- \"意义深远\" -> 写具体后果\n- \"前所未有\" -> 给出对比参照\n- \"可谓\" -> 删掉\n\n### 模式 4：万能结论\n- \"未来可期\" -> 用未解决的紧张感结尾\n- \"前途无量\" -> 删\n- \"充满希望\" -> 写具体的下一步动作\n\n### 模式 5：论文体段落结构\n小说中出现以下开头句 = AI 入侵：\n- \"不难看出\"\"由此可见\"\"事实上\"\"综上所述\"\n\n### 模式 6：书面语连词泛滥\n叙事散文中频繁出现：\"于是乎\"\"与此同时\"\"从而\"\"因而\"\"诚然\" -> 口语化替代或直接删除。\n\n### 模式 7：三连排比癖\nAI 喜欢把事情凑成三个以显\"完整\"。-> 砍到只剩最有力的一条。\n\n跨段「不是A。/也不是B。/只是C。」由 `formulaic-parallelism` 作 advisory：它可能是工整铺排，也可能承担辩解、悬念排除或情绪递进；只有重复提纲、拖慢画面时才压缩。该类提示与「至于X不X，怎么X」、同动词「不V A，不V B」都只作语义复核：对话也要检查，但有明确人物声线或任务功能时可保留；若来自细纲多个字段对同一要求的重复，正文只能消费一次，不能逐项复述。\n\n### 模式 8：解释腔 / 上帝视角 / 安排感\n最难察觉、却最\"像 AI\"的一类。叙述者跳出角色当下，去解释、剧透、总结、定性、拔高，读者能闻到\"作者在场\"和\"剧情被安排好了\"的味道。这正是\"说教感/上帝感/解释腔/机械感/刻意感/安排感\"的来源。\n\n| 表现 | 例（删/改） |\n|---|---|\n| 解释因果 | 「之所以…是因为」「原来…」「这意味着」「正是因为」-> 删。因果只从角色动作、对话、反应里让读者自己拼 |\n| 上帝视角剧透 | 「她不知道的是」「殊不知」「多年以后」「冥冥之中」「仿佛预示着」-> 删。只写角色此刻知道的，悬念让读者自己悬 |\n| 替读者下结论/定性 | 「演得真好」「这出戏她看过一遍」「他就是这样薄情的人」-> 删。把证据（神态、动作、台词）摆出来，定性留给读者 |\n| 替角色总结心理 | 「她明白，这一切都是命」-> 无新增信息就删；确有角色判断时保留带偏见的闪念，不强配身体反应 |\n| 总结/动机/评价链把意义说满 | 「他终于明白」「这是最好的选择」「所有人都会记住这一刻」-> 删掉定性，改成角色当下要处理的具体缺口、未完成动作或局部反馈；不是保留评价再硬塞物件/动作 |\n| 安排感/硬铺垫 | 为后文强行交代背景、整段回忆倒叙 -> 背景按角色此刻真实所需，用闪念、半句话、物件零碎带出，不集中交代 |\n| 升华式收尾 | 结尾对仗拔高、金句点题 -> 用一个动作或一句留白收住，把\"意思\"压进画面里 |\n| 抽象命运/开端收束 | 「命运终于露出獠牙」「早已布好的棋局」「这一刻终于明白」「属于他的反击才刚刚开始」-> 改成角色当下可见的文件、动作、对话或物理后果；`check-ai-patterns.js` 报 `abstract-summary-tic` 时优先处理 |\n| 套词密度过高 | 仿佛/一丝/一抹/深吸一口气/平静无波/指节泛白等成串复现（`cliche-density-tic`）-> 不是同义词轮换，整段回到角色当下证据：文件、动作、对话、物理后果 |\n| 套式反应细节 | 指尖轻叩、袖口里攥紧、指节泛白、目光移开、“语气平静得像在念……”等反应成片（`stock-reaction-tic`）-> 逐处做删除测试；只标注情绪而不改变选择、关系、物件或动作结果的删掉，不换部位和同义动作；有伤势、动作失败或情节后果的身体细节可留 |\n| 比喻密度过高 | 像/好像/仿佛/如同等比喻标记成片复现（`metaphor-density-tic`）-> 保留最能传递信息或情绪的一两个，其余改回具体动作、物件、声音、后果；不要换成新比喻 |\n| 系统公告公文腔过密 | 方括号规则/面板/公告行里硬规则词成片（`system-notice-formality-tic`）-> 保留为角色看见的屏幕/公告/规则载体；只在载体内部白话化部分硬词，或补角色当场看懂的具体后果，不改成叙述者解释 |\n\n**更隐蔽的一层（最难自查，没有标志词）**——同样是安排感/上帝感：\n- 评判性副词/补语：「关切得恰到好处」「笑得恰如其分」「不多不少」-> 作者在替读者盖章\"这是装的\"。只写动作（\"她掩了帕子，眼睛没动\"），装不装让读者自己判。\n- 剧透式点破潜台词：「那点笑她看得分明」「谁都看得出他在撒谎」-> 把藏着的挑明了。留着别点破。\n- 定性比喻/盖棺句：「像在宣判一件早已定好的事」「像看一件死物」-> 比喻在替角色下定论。非角色此刻强烈主观感受就删；要留也只能是她带偏见的瞬间感觉，不是客观断言。\n\n自检：每句问一遍——这是\"角色在经历\"，还是\"作者在讲解/安排\"？凡作者跳出来讲，删，或改成角色视角内的呈现。根治办法是锁定深度限知视角：只写视角人物此刻看得见、听得见、想得到的，镜头钉死在角色身体里，作者就没位置跳出来了。\n\n改法优先级：先删或原位替换污染句，不在段尾另补“人味”尾巴。需要补信息时，把原来的总结/动机/评价句改成角色当下能碰到的问题、手续、回信、付款、门外动静等具体压力；已有手机/屏幕/公告/门牌/表单等信息，优先作为角色看见的场内载体保留，不要转写成叙述者解释。具体载体跟剧情走，不套固定清单。\n\n**任务卡点不是固定公式，也不是通用补流程按钮**：它只是把已有解释落回角色当下要处理的缺口。先问原文有没有“要办的事”和“卡住的点”；有，才可以压成任务卡点；没有，就只删解释或改动作/对话，不新造事件链。改完再做“删掉试试”：删掉后不影响信息、情绪、关系、代价或伏笔，就压缩或删除。\n\n**但删解释腔 ≠ 把读者读懵**：新名词/新设定/新道具首次出现时，仍要让读者抓到一个锚——靠角色的动作反应、对话里半句自然提及、或场景里的物理后果，一笔带出它此刻的作用或分量；既不整段讲来历原理，也别只甩个零信息生词让读者干懵。人物记忆、情绪缓冲、因果承接也一样：如果一句看似解释/评价，实际承担小连贯（让读者知道角色为什么脸热、为什么停顿、为什么这一声压不住），不要机械删成摘录清单；把它压成角色当下的白话、动作、物件或半句念头。例：「蓝晶」首次出现不写\"这是储存记忆的装置\"，但可写她把蓝晶按上太阳穴、别人的记忆碎片炸开在眼前——功能被读者看见，全貌留作悬念。区分：锚是\"角色此刻撞上的可感知后果/记忆或情绪承接\"（留或压），解释是\"作者跳出来讲设定来历/原理/替读者下结论\"（删）。\n\n### 模式 9：过度压缩（电报体）\n\n去AI味删过头的反向指纹。每句都压到最短、结构虚词扫光、每个动作都补一个「了下/了一下」式轻反应。单句看着干净，连读像提纲，读者的体感是\"不流畅、喘不上气\"。删减的目标是删废话（解释、注水、凑数），不是删中文的自然冗余。\n\n| 表现 | 修法 |\n|---|---|\n| 非峰值叙述句也全部压成最短句 | 重拍句（动作/情绪/悬念峰值）保持短促；铺垫、过渡、日常动作写成自然白话句，保留 了/的/就/的时候 等结构虚词 |\n| 「扯了下/停了一下/拍了两下/松了半圈」式微动作高密度复现（check-ai-patterns.js 报 micro-action-tic） | 合并动作，换具体细节；不是每个动作都要接一个反应尾巴 |\n| 强调副词（连/才/又/只/全/反而）被扫光 | 删前判语义：承担人设、对比、讽刺义的保留（\"才二十三天\"删掉\"才\"，人设强调就反了） |\n| 对话语气词归零 | 按角色保留自然低频的 呢/吧/啊；也不反向猛加——人味来自结构自然，不是聊天腔 |\n| 叙述残留公文/文言腔（不得/须/未/已然/当前） | 换白话（不能/要/还没/现在）。系统公告、规则条文、面板播报可以保留冷硬功能；若 `system-notice-formality-tic` 报警，只在原载体内白话化一部分，不改成叙述者解释 |\n| 长文本里短叙述段成片（`overcompressed-prose-tic`） | 不是把所有短段拉长。先人工通读：重拍短句、密集镜头如果上下文顺，就保留；只处理读起来像提纲的过渡句，把它们并回同一镜头，让读者顺着动作、空间、因果读过去 |\n| 引号外叙述低连接密度且缺中长句（`low-connective-density-tic`） | 不是全局补“的/了/就”，也不处理台词/弹幕/系统播报的天然短促。先找叙述层读起来像提纲/电报体的断裂处，恢复必要连接、指代和中长承接句；有中长句链条的低功能词文本可保留 |\n\n自检：删完连读一遍，读感像提纲或流水口令，就是删过了——把非峰值句恢复成自然白话，不是接着删。\n\n本模式约束的是删减的度，不降低清理力度：选定 Gate 内的禁用词、套路句式、告知式心理照删照改；回填只回结构虚词和连接，不保留、不恢复任何模板措辞。\n\n### 模式 10：二修伪自然（油腻倒装 / 监控动作清单 / 对话指标化）\n\n一些“反检测提示词”会把文本推向另一种模板：为了提高突发性而乱倒装，为了真人感而机械加口误和脏话，为了手机阅读而强制每句换行，为了对话占比而把心理和叙述硬改成台词。这些不是自然网文，是二修痕迹。\n\n| 表现 | 修法 |\n|---|---|\n| 油腻倒装 | 不写“手里拿着刀，他冲了上去”这类伴随动作前置。连续同主语时，优先用场内物件、声音、局部身体或环境反馈自然换句首；不要滥用死物拟人 |\n| 监控摄像头式动作清单 | 同段连续“伸手拿起、取过、挑开、放下、转身……”像步骤表。合并琐碎动作，只保留有情绪、情节或空间功能的动作；必要时用角色犹豫、误判、旁人反应或环境反馈做缓冲 |\n| 高压场景误脱水 | 冲突、追杀、打斗可删解释和逻辑胶水；日常、暧昧、铺垫不能全章脱水。删的是废话，不是“的/了/就/但是”等自然连接 |\n| 吃字漏词 | 去 AI 后如果动词没有对象、动作指向不清、读者不知道谁对谁做了什么，要补回必要宾语、承载物或物理反馈；中文可省略，但不能省到像提纲 |\n| 对话指标化 | 不为凑 50%-60% 对话占比硬扩台词。台词只在角色真会说、此刻必须说时增加；长对白可拆动作，解释性对白优先压成冲突、回避或半句信息 |\n| 硬格式投机 | 不强制每句换行、50-60 字一行、不把省略号改成英文点、不把 `地/得` 全改错。按平台和项目既有格式走 |\n\n`check-ai-patterns.js` 的 `action-list-tic` 只提示监控动作清单，不是 blocking。功能性打斗/追逐/仪式步骤若动作链本身承担信息，可保留或标 `[需复核]`。番茄高分样本中该类命中为 0，因此适合作为“需通读”的风格提示，而不是硬性失败项。\n\n#### 工具提示处理\n\n`check-ai-patterns.js` 是本地写作 lint；blocking 只限确定性句式/标点问题，advisory 不作完成门槛。用户贴其他工具报告时，只把能落到正文的句式、段落、词汇问题转成具体修改点，不写“0% AI / 100% 真人”或“固定公式”，也不围绕分数反复微调。\n\n工具提示不高于读感规则。参考文本里若出现“仿佛/非常/感到”等套词或告知式心理，仍按模式 1-8 清理；不要机械补词、故意错字或按题材套壳。\n\n**去 AI 味补充判断**：\n- 优先处理：作者解释总结、意义尾巴、把情节翻译成“他意识到 / 这意味着 / 真正重要的是 / 这次成长”。优先删掉，或落回场内动作、对话、物件状态、任务状态和角色当场要处理的后果。\n- 场内载体优先：原文已有手机、屏幕、公告、门牌、表单、账单、物证、规则行时，保留为角色看见/读错/处理的文本或物件；不要把同一信息改写成叙述者解释规则。\n- 白话但不注水：少用精致戏剧反应短语（头皮发紧、眼皮一跳、心口一沉、胃里翻涌）连续替代剧情推进；能写普通动作/普通感觉就写普通动作/普通感觉，并保留自然的“的/了/就/但是/已经/之后/没有”等连接。\n- 题材文风优先：文风对标有帮助，但必须来自目标题材/本书文风指纹；不要把盘龙腔、旧网文腔、第一人称声口等当成跨题材万能修法。\n- 不要当通用修法：单纯加标题、补物件、补动作尾巴、拉长/压短句子、增加排队/门禁/记录体，不能替代具体的情节、视角和语言问题处理。\n\n#### 把提纲句写成连续段落\n\n当文本已无 blocking / 明显 advisory，但读起来仍像提纲时，只处理断裂处：\n\n1. 标出读起来像逻辑报告的段落：连续出现“他知道/他明白/这意味着/真正的问题/必须/需要”等判断链，却缺少当下动作、物件或对话反馈。\n2. 把叙述者结论落地：用角色当下能触到、听到、被迫处理的后果替代“他意识到/这意味着”。不要套固定物件清单，也不要把某个场景外壳当通用规则。\n3. 只在断裂处恢复自然连接和结构虚词；不设比例目标，不机械补连接。\n4. 系统公告、规则条文、面板播报可以保留冷硬短句；`system-notice-formality-tic` 报警时，只在原载体内白话化一部分硬规则词，或让角色当场看到具体后果，不改成叙述者解释。\n\n`overcompressed-prose-tic` / `low-connective-density-tic` 的具体修法：\n\n1. 圈出连续短叙述段，逐段标注功能：爆点/反转/恐惧重拍、密集镜头可继续短；铺垫、空间、因果、动作承接应并回同一镜头。人工读着顺，就不因该 advisory 继续拉长。\n2. 合并时优先补“动作顺序、空间方位、因果承接”，例如“抬头时/门外/已经/还/就/被”，而不是给每句硬塞“的/了/就”。\n3. 合并后再删套词和告知心理：读顺不是恢复 AI 腔，不能把“仿佛/感到/非常/好像”成片加回来。\n\n复核处理：如果清掉 `overcompressed-prose-tic` / `low-connective-density-tic` 后读感仍不稳，停止局部微调，转为段落级重写或人工读感对照。\n\n示例：\n\n```\n过度压缩：\n林遥抬头。\n雨棚外的街灯灭了。\n风也停了。\n柜台上的纸杯晃了两下。\n\n读顺后：\n林遥抬头时，雨棚外的街灯正一盏盏熄下去。风忽然停了，柜台上的纸杯还在原地轻轻打转。\n```\n\n\n---\n\n## 改写顺序（只排所选 Gate 的先后）\n\n下面三步只决定所选 Gate 内问题的处理先后，不另起一轮全篇去味；某一步没有对应的所选 Gate 就跳过。\n\n### 第一步：去泛化（Strip Generic）\n- 抽象情绪总结句 -> 按规则 2 判断：删重复说明，保留准确直写，需要时用原文已有信息落地\n- 假深度句 -> 删\n- 意义膨胀 -> 缩小到具体影响\n- 空洞结论 -> 删\n- 工整对比句式 -> 打散重写\n- 装饰性形容词堆砌 -> 白描\n- 过度使用\"于是\"\"然而\"\"此刻\" -> 删掉一半\n- 所有角色说话一样\"高级\" -> 区分语气\n\n**原则**：能删就删，不能删就用具体细节替换。\n\n### 第二步：去书面化（Cut Professional Diction）\n- 分析性用词（\"机制\"\"结构\"\"逻辑\"\"体系\"出现在小说中）-> 换成日常表达\n- 抽象名词滥用 -> 直接说事\n- 体制内用语（\"进一步\"\"深入\"\"推进\"\"落实\"）-> 删\n- 专业术语堆砌 -> 只保留必要的，用白话解释\n\n**例外**：保留专业感的场景（历史题材正式用语、文学向刻意密度、喜剧夸张修辞）。\n\n### 第三步：回自然感（Restore Natural Presence）\n- 具体的感官细节（气味、温度、触感）\n- 角色说话方式的区分（不同人不同语气）\n- 句首变化：连续 3+ 句用同一主语或同一词性开头时换开法（动作、场景、对话引入）\n- 节奏变化（长短句交错）：按情绪 beat、动作推进和戏剧单元自然调节句段长短；忌连续多段同一长度，也忌为凑短而碎成提纲。长短不是随机，沉淀处可放慢，冲突/反转处可骤短，完整推理与情绪链优先保持连贯\n- 社会位置感的对话（上级和下属说话方式不同）\n- 场景特有的记忆点\n- 项目特有的语言习惯（角色的口头禅）\n\n**原则**：少即是多。每段加 1-2 个具体细节就够了。\n\n### 执行范围\n\n调用方指定 Gate 时，只处理选定 Gate；改写顺序只排先后，不重新分级或扩大范围。未指定范围时，按实际问题选择适用检查。\n\n### 自检清单\n- 对话自然度检查：对话是否使用口语化表达，是否避免了书面语/正式腔调\n- 删掉任何一句，会影响理解吗？不会 = 可能多余\n- 不同角色能通过对话区分吗？\n- 有没有一个细节是这个场景特有的？\n\n---\n\n## 去AI味补充技法\n\n### Show vs Tell\n\n| 告知类型 | AI写法 | 自然写法 |\n|----------|--------|----------|\n| 告诉期待感 | \"他很期待\" | 展示期待->情绪->满足的链条 |\n| 告诉角色目的 | \"她想离婚\" | 用行动展示目的 |\n| 告诉角色态度 | \"她很冷静\" | 用对话和反应体现 |\n| 告诉剧情走向 | \"接下来会发生大事\" | 用铺垫->反转->延续展示 |\n\n### 心理描写润物细无声\n\n- 加括号标注内心活动 = 破坏代入感\n- 大段内心独白解释动机 = AI签名\n- 直接写\"她感到\"\"她意识到\" = 告知情绪\n\n**自然写法**：心理活动自然融入叙事，用行为暗示心理，用沉默/动作/反常行为表达内心。\n\n### 代入感检查\n- 主角行为读者能理解、共鸣、接受吗？\n- 反派够强吗？（弱反派 = 读者觉得主角赢了没意义）\n- 是否围绕人设写行为？（行为/语言/思维围绕人格展开）\n- 读者已知信息是否被有效操控？（信息差制造情绪波动）\n\n---\n\n## 改写范例库\n\n### 情绪落地示例\n\n| 原文与语境 | 处理 |\n|---|---|\n| 「他很紧张。再错一题，补考也过不了。」 | 情绪有具体原因，可以直写，不补手抖或出汗 |\n| 「她已经决定不再等他。她攥了攥袖口。」袖口动作无后续作用 | 删除第二句，不换成低头或咬唇 |\n| 「手腕的伤让他握不住笔，签名只写了一半。」 | 保留，身体状态造成动作失败，不能当作情绪套话删除 |\n\n### 场景描写范例\n\n**AI风场景**\n- '阳光透过窗帘的缝隙洒进来，在地板上投下斑驳的光影。空气中弥漫着淡淡的花香，仿佛整个世界都沉浸在一片宁静祥和的氛围中。'\n- 下午三点，客厅里只有钟在走。\n\n**AI风天气**\n- '天空阴沉沉的，乌云密布，仿佛随时都会下起倾盆大雨。凛冽的寒风呼啸而过，带着一丝刺骨的寒意。'\n- 要下雨了。风把晾在外面的衣服吹得乱晃。\n\n**AI风打斗**\n- '他的拳头犹如疾风骤雨般猛烈，每一击都蕴含着不容置疑的力量。对手的瞳孔微微收缩，显然没有预料到如此凌厉的攻势。'\n- 他一拳怼过去，对方没躲开，嘴角破了。\n\n### 结尾改写范例\n\n**升华式结尾** -> '他站在窗前，望着远方的天际线，终于明白了生活的真谛：有时候，放手才是最好的选择。' -> 他把烟掐了，回屋睡觉。\n\n**总结式结尾** -> '这一刻，一切都变了。她知道，从今以后，她的人生将翻开崭新的一页。' -> 她关上了那扇门。没回头。\n\n**感慨式结尾** -> '岁月如流水般悄然流逝……' -> 直接删掉这种段落。\n\n### 节奏调整范例\n\n> 以下范例处理的是臃肿修饰、堆叠比喻和抽象总结，不是「见长就拆」：改写后叙述仍以逗号长句为主（规则 3），不要把正常的逗号长句拆成短句串。\n\n**排比句**\n- '他看着她的眼睛，看着她的嘴唇，看着她微微颤动的睫毛，心中涌起一股难以名状的情感。'\n- 他看着她，她没说话。\n\n**臃肿长句去修饰**\n- '当他终于推开那扇沉重的木门时，映入眼帘的是一间昏暗的房间，空气中弥漫着陈旧的气息，墙角堆满了落满灰尘的箱子。'\n- 他推开木门，屋里昏暗，墙角堆着几个落灰的箱子。\n\n**工整段落打碎**\n- '她喜欢春天的花朵，喜欢夏天的阳光，喜欢秋天的落叶，喜欢冬天的白雪。每一个季节都有它独特的美。'\n- 她喜欢春天，别的季节也还行。\n\n---\n\n## 冲突对话改写范例\n\n### AI式温和对话\n- '我觉得你这样做不太合适，能不能考虑一下我的感受？' -> \"你眼里还有我吗？\"\n\n### AI式完美解释\n- '其实我这样做是有原因的，因为当时的情况非常复杂……' -> \"你能怎么着？\"她把茶杯重重放下。\n\n### 对话情绪五级递进范例\n\n同一冲突场景，从弱到强：\n\n1. **客观陈述**：\"你把我的东西扔了。\"\n2. **陈述+建议**：\"你把我的东西扔了，以后能不能先跟我说一声。\"\n3. **主观指责**：\"你凭什么动我的东西。\"\n4. **指责+命令**：\"你算什么东西，也配碰我的东西？滚出去。\"\n5. **指责+PUA**：\"我伺候你吃伺候你穿，你连个东西都放不好。你这辈子也就是这样了，离了我你什么都不是。\"\n\n### 震惊分层改写范例\n\n**AI式一步到位**：所有人都震惊了，不敢相信自己的耳朵。\n\n**自然分层震惊**：\n1. 对面的男人手抖了一下，茶杯里的水洒出来。\n2. 旁边的人互相看了一眼，有人往后退了一步，角落里有人开始掏手机。\n3. 刚才还趾高气扬的女人，脸上的笑僵住了。她张了张嘴，一个字没说出来。\n\n### 代入感修复范例\n\n**被动主角**：她很害怕，不知道该怎么办，只能等着事情过去。\n\n**主动主角**：她锁了门，把手机调成静音，打开了录音。\n\n---\n\n## 质量检查清单\n\n写完每章后，按此清单逐项扫描：\n\n- [ ] **段落控制**：段落按动作/信息变化断开，读起来不卡\n- [ ] **正文无破折号**：正文（含叙述和对话）无 `——`/`—`/`--`（用句号、逗号、短句或动作断句），不设置对话例外\n- [ ] **AI高频词扫描**：无不禁/仿佛/映入眼帘/心中暗道/沉声道/嘴角微扬/不由自主/只见\n- [ ] **弱化副词计数**：每1000字\"微微/淡淡/缓缓/轻轻\"不超过3个\n- [ ] **无三连排比**：没有AI式的\"三个一组\"修辞\n- [ ] **工整否定清单已复核**：跨段「不是A / 也不是B / 只是C」及其他 `formulaic-parallelism` advisory 已连同台词逐条复核；功能性修辞可保留\n- [ ] **无论文体**：无\"不难看出/由此可见/事实上/综上所述\"\n- [ ] **无书面语连词堆砌**：无\"于是乎/与此同时/从而/因而/诚然\"泛滥\n- [ ] **章尾无总结升华**：用动作/对话/悬念收束，无感悟/哲理/预告\n- [ ] **无大段心理描写**：心理活动不超过2段，无括号标注内心\n- [ ] **情绪落地**：按规则 2 保留准确直写与有功能的身体细节，删除重复说明，不给每个情绪词配动作\n- [ ] **对话口语化**：无书面腔，不同角色语气可区分\n- [ ] **标点不压平**：没有把质问、爆发、犹豫全部压成句号；也没有随机堆砌 `？`/`！`，或用 `……`/`——` 硬造停顿\n- [ ] **Show Don't Tell**：用行为代替形容词，用细节代替总结\n- [ ] **句长达标**：叙述默认是逗号长句（逗号之间 8-12 字、整句 20-30 字，规则 3）；短句只作偶尔的孤立重拍，用完回到逗号长句；没有连着的 ≤5 字碎片，没有通篇短句像提纲\n- [ ] **detector advisory 逐条复核**：`micro-action-tic` / `stock-reaction-tic` / `abstract-summary-tic` / `cliche-density-tic` / `metaphor-density-tic` / `reasoning-chain-tic` / `system-notice-formality-tic` / `overcompressed-prose-tic` / `low-connective-density-tic` / `action-list-tic` 命中时按脚本给出的修法处理：先通读判断是不是机械复现，确属再改；功能性写法保留或标 `[需复核]`，不做同义词轮换、不机械注水\n- [ ] **不做硬指标投机**：不为反检测强制每句换行、50-60 字一行、对话 50%-60%、英文点省略号，或把 `地/得` 全改成 `的`\n- [ ] **任务卡点服从原文边界**：抽象总结若改成角色办事被卡住，必须来自原文已有任务/证据/手续/物件缺口；不新增原文没有的事件链\n- [ ] **对话自然度测试**：无书面语痕迹 = 通过\n\nFile v1.1.24:references/author-memory-maintenance.md\n\n# 作者记忆维护\n\n[author-memory.md](author-memory.md) 的少见时刻补充：记一条、确认、替换、忘掉和优先级仍按那份协议，本文件只在下列情况读——作者说「整理作者记忆」，或回执 `warnings`／查询 `omitted_ids` 提示超编；写入因 `作者画像.md` 写满失败；书根就是工作区，或工具报 `state.book`、单书布局错误；要做存量迁移 `migrate`、多事件原子 `commit`、派生视图 `check`；冲突候选要落定；碰到升级前留下的旧条目。\n\n作者记忆借鉴“原始证据 → 候选 → 已确认画像 → 变更记录”的记忆管道，但把决定权留给作者。\n\n## 文件\n\n```text\n{工作区}/.story/作者记忆/          # 项目级 store：global / genre / workflow 条目，编号 AP\n├── _author-memory-state.json  # 唯一结构化权威\n├── 作者画像.md               # 仅 active，供作者查看与管理\n├── 待确认.md                 # pending / conflict，不参与约束\n└── 变更记录.md               # 最近 100 次、最新在前的事务记录\n{书}/.story/作者记忆/            # 书级 store：只存这本书的 book 条目，编号 BP，同样四个文件\n```\n\n三个 Markdown 文件都从 state 确定性生成，禁止手改；完整历史保留在 state，变更记录只展示最近 100 次。`作者画像.md` 是人类管理视图，普通写作 agent 不整份注入，而是调用 `query` 取得本次相关的紧凑上下文。\n\n## 任务映射表\n\n各 skill 入口的 `query` 命令按此表选 kind；写入时的预算提醒也按这四类任务组合估算。\n\n| 任务 | query kinds | 注入位置 |\n|---|---|---|\n| 正文初稿 / 续写 | `prose_style` + `story_design` | 主会话与实际正文 agent |\n| 去 AI 味 / 改写 | `prose_style` | 主会话与实际改写 agent |\n| 设定 / 大纲 | `story_design` + `workflow` + `interaction` | 主会话，不传正文 agent |\n| 审稿 | `delivery` + `interaction` + 必要的 `prose_style` | 主会话，不降低 rubric |\n\n审稿匹配项只用于交付格式、协作方式和“作者有意采用的表达选择”说明；问题严重度和 PASS/FAIL 仍由 rubric 决定。\n\n## 注入预算与容量\n\n- **写入不因注入预算失败**：`record` / `commit` 照常成功、给回执；工具按上表四类任务组合估算最坏查询情形（全局条目＋各 scope 维度最重的单一切片，切片按大小写无关归并、轻重按写作时真正读到的字段算，与真实查询同一把尺），装不进 2048 字节的组合在返回的 `warnings` 里点名将被略过的条目及其断言首句。\n- 写入落盘后另一级 store 读不出来（书目录不存在、`--book` 与书级记录不符等）也照常给回执，`warnings` 注明本次提醒没算上它。写书级条目时「本书＋全局」按实际条目精确计算；写项目级条目时只看得到项目级 store，顺手传 `--book-root` 就把当前这本书也算进提醒。\n- 查询按 **重要度 → 本书例外 → 最近更新** 排序装填（同一范围的条目必在同一 store，「最近」按该 store 的修订号比，不跨 store 比较），先丢的恒是重要度较低的条目——`importance` 决定超编时谁留在 prompt 里。装不下的条目跳过而不中断（一条长的不挡后面的短条），漏下的 ID 按同一优先级报进 `omitted_ids`（最多列 20 条，`omitted` 是真实总数）。\n- 注入预算之外还有一道硬上限：`作者画像.md` 超过 12288 字节时写入会直接失败并要求先整理。active 条目攒到几十上百条才会碰到（远在注入预算之后），碰到就走「整理作者记忆」；`forget` 这类减量操作在满编时照常可用。\n\n## 整理作者记忆\n\n作者说「整理作者记忆」，或回执 `warnings`／查询 `omitted_ids` 提示超编、写入因画像写满失败时：读项目级与当前书的 `作者画像.md`（每条都标了范围、重要度、把握和确认次数，重要度就是超编时的去留依据），提出合并同义条（`replace` 多合一）、退役过时条（`forget`）、给错标成 `high` 的条目下调重要度、把超长断言压缩成一句话的提案；项目级画像里还有「本书：」条目时，「对该书运行 `migrate --book-root`」列为默认提案项。清单用原话逐条列给作者确认（编号只放括号里），确认后按 store 各汇成一份 `commit` 事务提交（一份事务只写一个 store）。合并时保住每条的否定词、限定词和适用范围——合不动就退役其中一条，不要靠删限定词把两条凑成一条。整理只由作者发起或确认，不自动执行。\n\n## 冲突候选\n\n冲突候选（`conflict`）不能绕过旧规则直接 `decide=activate`。作者选新说法：用 `replace`，`old_ids` 同时列旧 active 条目和这条冲突候选，新条目直接 active、两条旧的标 `superseded`；作者留旧规则：对候选 `decide=reject`。旧条目被 `replace` / `forget` 撤下后，它不再是任何候选的冲突对象，冲突对象清空的候选退回 `pending`。\n\n## 单书布局\n\n书根就是工作区（`--book-root` 与 `--workspace` 同一目录）时，书级 store 改住 `{工作区}/.story/作者记忆/书级/`，与项目级各自一份 state；首次建立的书名优先取项目级存量本书条目里唯一的书名，再取目录名。旧版曾把书级 state 写在项目级位置，此后项目级读写都报 `state.book`；带 `--book-root {工作区}` 运行任一命令（含 `query`）会先把它原样移进 `书级/`，不改内容。这个目录其实是某个工作区里的一本书时（上一层叫 `长篇/` 或 `短篇/`，或某个祖先有 `.active-book` 或项目级 state），工具直接报错、不动任何文件，按报错改传 `--workspace`。\n\n## 存量迁移\n\n不做双读：升级前写进项目级 store 的 book 条目不再参与查询与预算估算，也不再接受新的 book 写入；它们仍在 `作者画像.md` 里可见、可 `decide` / `forget`。对每本书运行一次 `migrate --book-root {书目录}` 即可整批搬回来：断言、证据、确认次数、重要度原样保留，换成 `BP` 编号，原 `AP` 条目标 `superseded` 并注明去向；与全局条目的冲突关系在迁移后不再成立，这类候选退回 `pending`。书级每个源条目一笔事务，重跑只补没做完的一半。「整理作者记忆」看到项目级画像里还有「本书：」条目时，把迁移列为默认提案项。\n\n## 旧条目\n\n- 升级前写下的长断言不受 120 字节新建上限约束：原样重申它会**强化**原条目（确认次数 +1），不会因超长被拒；只有真正新建条目才校验 120 字节。\n- 存量 state 里推断类旧来源的条目照常可读、可确认、可退役；新写入仍只接受 `explicit_user`、`accepted_suggestion`、`manual`。\n\n## 其他命令\n\n先依次尝试 `python3`、`python`、`py -3` 找到 Python 3，再从当前 skill 根运行本地副本（`record` / `query` 见 author-memory.md）：\n\n```text\n{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py init    --workspace {工作区} [--book-root {书目录}]\n{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py commit  --workspace {工作区} [--book-root {书目录}] --input {工作区}/.story/work/作者记忆-事务.json\n{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py migrate --workspace {工作区} --book-root {书目录}\n{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py check   --workspace {工作区} [--book-root {书目录}]\n```\n\n- `commit`：高级批量入口，只在需要把多个动作绑定成一次原子提交时用（如整理作者记忆）。顶层传 `schema_version`、唯一 `transaction_id`、当前 `expected_state_revision` 和含 1–32 项的 `operations`（每项与单事件的 `operation` 同形）。一份事务只写一个 store；先在内存完成 schema、引用、容量和所有视图校验，操作按数组顺序应用，任一步失败则整份事务零写入，最后原子替换 state。过期修订会在任何写入前失败。事务文件在成功前必须保留，成功后删除；显式记忆请求按 author-memory.md「回执怎么告诉作者」转告。\n- `migrate`：把项目级 store 里某本书的存量 book 条目整批搬进 `--book-root` 的书级 store，幂等，中途失败直接重跑；返回 `migrated`（源→新编号），没有存量时为空。\n- `check`：从 state 重建并逐字核验所有派生视图；传 `--book-root` 时两级一起核验。\n- `init`：显式初始化 store；平常不需要，首次 `record` 会随事务创建。\n\nFile v1.1.24:references/author-memory.md\n\n# 作者记忆协议\n\n作者记忆保存跨会话复用的创作偏好，不保存小说世界里的事实，决定权留给作者。本文件管最常见的时刻：作者说出一条偏好，或要确认、替换、忘掉某条。少见情况读 [author-memory-maintenance.md](author-memory-maintenance.md)：整理作者记忆与超编、画像写满、单书布局与 `state.book` 报错、存量迁移、多事件 `commit`、`check`、冲突候选落定、升级前的旧条目。\n\n## 边界与优先级\n\n加载优先级从高到低：\n\n1. 安全、用户授权范围、明确的平台交付要求、字数与文件协议；句长、视角、修辞和标点偏好不属于不可覆盖的硬门禁；\n2. 用户在当前请求中的明确要求；\n3. 当前书的 `设定/文风.md`、题材定位、细纲和其他项目设定；\n4. 作者记忆中的本书偏好；\n5. 作者记忆中的题材、流程和全局偏好；\n6. 对标素材、通用方法和默认值。\n\n按表达维度取最窄适用要求：低优先级只补缺项，不与高优先级要求并列执行。通用 references 自称“必须/禁用”不改变此顺序；审稿不因作者有意采用的表达本身扣分，真实可读性与因果问题仍照常评价。\n\n作者记忆不能把本书事实写进 `.story/作者记忆/`，不能覆盖当前请求，不能降低审稿 rubric，也不能让去 AI 味改动剧情意图。小说事实继续由各书的 `追踪/` 和 `设定/` 管理。\n\n## 存放与路由\n\n两级 store，记忆随书走：`{工作区}/.story/作者记忆/` 存 global / genre / workflow 条目（编号 `AP`），`{书}/.story/作者记忆/` 只存本书的 book 条目（编号 `BP`）。每级各有 `作者画像.md`（生效条目）和 `待确认.md`（候选，不参与约束），都从 state 生成，禁止手改；不存在时写作、审稿、去味照常继续，首次 `record` 自动创建。\n\n- `--workspace` 必须显式传，指创作工作区根——承载多本书、`.active-book`、`长篇/`、`短篇/` 或 `拆文库/` 的那一层；已有记忆时，是项目级 state（不带 `book` 字段）所在的最近祖先。`长篇/`、`短篇/` 下的书目录永远不当 `--workspace`，也不要把用户主目录当默认工作区。\n- `--book-root` 是当前书的项目目录（`.active-book` 指向、或含 `设定/`、`正文/` 的那一层，如 `{工作区}/长篇/{书名}/`）；书名默认取书级 state 记的名字，首次取目录名，`--book` 可覆盖。书根就是工作区时读维护文件「单书布局」。\n- ID 前缀就是 store：`decide` / `forget` 看 `item_id`（`AP` 项目级，`BP` 书级），`remember` / `replace` 看 `scope.level`（`book` 书级，其余项目级）。书级操作必须传 `--book-root`，没传直接报错，不会退而写进项目级。\n- `replace` 与 `conflicts_with` 不能跨 store：本书例外按优先级覆盖全局规则，不算冲突，直接 `remember` 为 book 条目；要把全局规则改成本书规则，拆成 `forget` ＋ `remember` 两个事件。\n\n## 查询\n\n各 skill 入口已写好本任务的 `query` 命令（长篇正文由组装脚本代查）；没写命令的长篇设定、大纲等任务查 `story_design` + `workflow` + `interaction`，结果只给主会话、不传正文 agent。四类任务的映射表见维护文件。state 存在才查（两级都不存在时返回空结果、零写入）；结果合并项目级与 `--book-root` 所指书级（不传就拿不到本书条目），`--kind` 必传，输出不超过 2048 字节。\n\n普通创作只做一次本地 `query`，完整画像、证据、候选和 journal 不进 prompt。查询项是低优先级倾向，不是逐条打卡清单：自然吸收，不复述画像、不刻意提高词面命中率，不为命中牺牲连贯、节奏、字数或本书既定笔调。**`omitted_ids` 非空＝记忆超编**，不是「没有更多了」：转告作者并建议「整理作者记忆」，不得改读完整画像规避预算。待确认项不进 prompt，也不为确认它们中断任务；只在作者主动查看、候选积累到适合回顾的节点，或新偏好与 active 条目冲突时集中呈现。\n\n## 记不记、记成什么\n\n不装记录全部用户消息的 prompt hook，不在作者没开口时观察他，只记作者明确表达的偏好。是否属于长期习惯由 agent 判断，拿不准就只执行不记录；作者可明说“记住：……”，以回执验收。\n\n| 输入证据 | 处理 |\n|---|---|\n| “以后都这样”“我一直习惯……”等直接、稳定、范围清楚的原话 | `active`，`source=explicit_user` |\n| 用户明确接受助手提出的长期做法 | `active`，`source=accepted_suggestion` |\n| 作者原话像长期偏好但范围或稳定性含糊 | `pending`，取当前最窄合理范围；待确认只来自作者自己的话 |\n| 同类修改反复出现、从成稿或操作轨迹看出的模式 | 不记录、不推断；作者没开口的偏好不进记忆 |\n| “这一章别……”“这次给我……”等一次性要求 | 只执行，不记录 |\n| 角色、时间线、伏笔、世界观、当前剧情走向 | 写项目设定/追踪，不写作者记忆 |\n| 助手自己生成的文字、默认模板、工具告警、rubric 结论 | 不自我学习 |\n\n保留否定词、限定词和适用范围：`quote` 写原话，`assertion` 只做不改变语义的紧凑归纳，**新建条目限一句话（≤120 字节，约 40 个字）**，写不下就压缩措辞、不切限定词；背景写进 `reason`（不进 prompt），不另开字段。\n\n**一条偏好就是一条记录，例外和限定不许拆出去单列。** 「以后少用破折号，对话里也别用，除非表示打断」整条写成「破折号少用、对话里也不用，只在表示打断时保留」：超编时条目逐条被丢，拆开就可能只丢掉例外，把作者说过的限定变成绝对禁令。只有原话塞了**几条互不依赖**的偏好（如「多用短句」＋「章末留钩子」）才拆。\n\n范围：“本书 / 这个角色 / 这次连载” → `book`；“都市文 / 这类题材” → `genre`；交稿、检查、确认节奏等操作习惯 → `workflow`；“以后 / 一贯 / 我习惯”且无更窄限定 → `global`；含糊但可能稳定 → 最窄合理范围并置 `pending`。\n\n类型：`prose_style`、`story_design`、`workflow`、`delivery`、`interaction`。置信度与重要度均为 `low | medium | high`；超编时先丢重要度低的，按偏好的实际分量填，不要一律 `high`。`source` 只接受 `explicit_user`、`accepted_suggestion`、`manual`，工具拒绝推断类来源。\n\n## 确认、替换、忘掉与冲突\n\n- 同一类型、范围、归纳文本再出现，脚本强化原条目（累加证据与确认次数），不重复建条。\n- 新偏好与同一 store 的 active 条目矛盾：以 `conflict` 记候选，`conflicts_with` 列冲突 ID，本轮仍按当前要求执行；本书例外与全局规则不算冲突。冲突候选不能直接 activate，落定见维护文件「冲突候选」。\n- pending 用 `decide=activate|reject`。同一范围的规则改版用 `replace`，新条目启用、旧条目标 `superseded`；只有作者明确撤销或改变旧规则范围才跨范围替换。\n- 作者说“忘掉 / 这不再是我的习惯”用 `forget`，保留历史证据但不再加载。active 条目的语义不可原地偷改，语义变化必须 replace，历史才可审计。\n\n## 回执怎么告诉作者\n\n回复就两行纯文本，不加代码块或引用格式：第一行用一句人话说记住了什么、管哪本书或哪类场合，如「记住了：《{书名}》的对话一律用「」，以后写这本书都照这个来；想改随时说。」；第二行是机器回执作凭证，如「技术备注：Author Memory Receipt: r1 · BP001」。\n\n- 确认、替换、忘掉同理：「好，这条生效了：……」「换成了：……，原来的「……」不再用」「忘掉了：……」。只进待确认时说「这条先记在待确认里，你说\"确认\"才生效」；有冲突时用原话说明跟哪条旧习惯冲突。\n- `warnings` / `omitted_ids` 不原样贴：说「你的习惯攒得有点多，写正文时这几条可能顾不上：「……」」，并建议说「整理作者记忆」。不提字节、prompt、kind、scope；编号只能跟着原话出现。\n\n## 运行工具\n\n依次尝试 `python3`、`python`、`py -3` 找到 Python 3，从当前 skill 根运行本地副本：\n\n```text\n{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py record --workspace {工作区} [--book-root {书目录}] --input {工作区}/.story/work/作者记忆-事件.json\n{PYTHON} {当前 skill 根}/scripts/author_memory_commit.py query  --workspace {工作区} --book-root {书目录} --kind {类型}（必传，可重复） [--genre {题材}] [--workflow {流程}]\n```\n\n- 子命令都可加 `--book {书名}`；写某本书时一律带 `--book-root`。事件 JSON 写在 `{工作区}/.story/work/`（不写系统 `/tmp`），成功后删掉；book 条目的 `scope.value` 填书名（书级 store 已记的名字，首次取目录名）。\n- 明确的“记住 / 确认 / 替换 / 忘掉”都走单事件 `record`：自动读该 store 当前修订、首次自动初始化，不手工读修订号或拼多操作事务。同一 `event_id` 同内容幂等返回原回执，内容不同则失败；返回的 `store` / `book` 说明写到了哪一级。\n- 成功才有 `Author Memory Receipt: rN · APxxx`，没有回执不得声称“已经记住”。**写入不因注入预算失败**：`warnings` 只是提醒（另一级 store 读不出来也在这里注明），按上节转告；有回执就是已记住，不要换 `event_id` 重试。\n\n## 事件格式\n\n新增或强化（`record` 输入；book 范围传 `--book-root`）：\n\n```json\n{\n  \"schema_version\": 1,\n  \"event_id\": \"conversation-2026-08-25-message-42\",\n  \"operation\": {\n    \"action\": \"remember\",\n    \"preference\": {\n      \"kind\": \"prose_style\",\n      \"scope\": {\"level\": \"global\", \"value\": \n\nArchive v1.1.23: 13 files, 114355 bytes\n\nFiles: references/anti-ai-writing.md (37183b), references/author-memory.md (19899b), references/banned-words.md (10424b), references/deslop-gates.md (12566b), references/style-resolution.md (4017b), scripts/author_memory_commit.py (79698b), scripts/check-ai-patterns.js (73626b), scripts/check-degeneration.js (15104b), scripts/normalize-punctuation.js (13480b), scripts/style-whitelist.js (1168b), skill-card.md (2032b), SKILL.md (21975b), _meta.json (132b)\n\nArchive v1.1.22: 13 files, 111929 bytes\n\nFiles: references/anti-ai-writing.md (37183b), references/author-memory.md (19899b), references/banned-words.md (10447b), references/deslop-gates.md (12108b), references/style-resolution.md (4017b), scripts/author_memory_commit.py (79698b), scripts/check-ai-patterns.js (67463b), scripts/check-degeneration.js (15104b), scripts/normalize-punctuation.js (13480b), scripts/style-whitelist.js (1168b), skill-card.md (2136b), SKILL.md (21429b), _meta.json (132b)\n\nArchive v1.1.21: 13 files, 111878 bytes\n\nFiles: references/anti-ai-writing.md (37154b), references/author-memory.md (19899b), references/banned-words.md (10447b), references/deslop-gates.md (12105b), references/style-resolution.md (4017b), scripts/author_memory_commit.py (79698b), scripts/check-ai-patterns.js (67463b), scripts/check-degeneration.js (15104b), scripts/normalize-punctuation.js (13480b), scripts/style-whitelist.js (1168b), skill-card.md (2012b), SKILL.md (21508b), _meta.json (132b)\n\nArchive v1.1.20: 13 files, 94660 bytes\n\nFiles: references/anti-ai-writing.md (37154b), references/author-memory.md (10611b), references/banned-words.md (10447b), references/deslop-gates.md (12105b), references/style-resolution.md (4017b), scripts/author_memory_commit.py (41806b), scripts/check-ai-patterns.js (67463b), scripts/check-degeneration.js (15104b), scripts/normalize-punctuation.js (13480b), scripts/style-whitelist.js (1168b), skill-card.md (2591b), SKILL.md (21813b), _meta.json (132b)\n\nArchive v1.1.19: 10 files, 87492 bytes\n\nFiles: references/anti-ai-writing.md (37029b), references/author-memory.md (9942b), references/banned-words.md (10337b), scripts/author_memory_commit.py (41806b), scripts/check-ai-patterns.js (67088b), scripts/check-degeneration.js (14387b), scripts/normalize-punctuation.js (13083b), skill-card.md (2121b), SKILL.md (30428b), _meta.json (132b)\n\nArchive v1.1.18: 10 files, 87594 bytes\n\nFiles: references/anti-ai-writing.md (37029b), references/author-memory.md (9942b), references/banned-words.md (10337b), scripts/author_memory_commit.py (41806b), scripts/check-ai-patterns.js (67088b), scripts/check-degeneration.js (14387b), scripts/normalize-punctuation.js (13083b), skill-card.md (2618b), SKILL.md (30428b), _meta.json (132b)\n\nArchive v1.1.17: 11 files, 89789 bytes\n\nFiles: references/anti-ai-writing.md (36645b), references/author-memory.md (9942b), references/banned-words.md (9689b), scripts/author_memory_commit.py (41806b), scripts/check-ai-patterns.js (63141b), scripts/check-degeneration.js (14387b), scripts/check-outline-copy.js (9845b), scripts/normalize-punctuation.js (13083b), skill-card.md (2158b), SKILL.md (30285b), _meta.json (132b)","readmeExcerpt":"Skill: story-deslop：网文去 AI 味 Owner: worldwonderer Summary: 网文去AI味。检测并清除文本中的AI写作痕迹，让文字回归自然、非模板化。触发方式：/story-deslop、/去AI味、「去AI味」「这篇太AI了」「网文去AI味」。 Tags: latest:1.1.26 Version history: v1.1.26 | 2026-10-03T05:13:36.005Z | user Authorized ZenStory cold-start distribution; immutable source and preserved notices. v1.1.25 | 2026-09-27T07:46:19.340Z | user Synced from CI (v0.8.3) v1.1.24 | 2026-09-27T06:34:30.742Z | user Sync","codeSnippets":[],"executableExamples":[{"language":"md","snippet":"## AI味检测报告\n\n### 整体评估\n- AI味等级：{轻度/中度/重度}\n- 主要问题：{1-3 个白话描述}\n\n### 问题标记\n| 位置 | 类型 | 原文 | 问题 |\n|------|------|------|------|\n| 第X段 | 套话 | \"眼中闪过一丝...\" | 典型AI高频词 |\n| 第Y段 | 句式 | \"...，带着...\" / 连续3句排比 | AI惯用句式，过于工整 |\n| 第Z段 | 情绪空转 | \"一丝悲伤涌上心头\" | 只总结情绪，没有落点 |\n| 第M段 | 节奏 | 段段4-6句、长度均匀 | 整段同节奏 |\n| 第N段 | 重复描写 | 同一动作连续拆写 | 相邻段重复同一瞬间 |\n| 第P段 | 解释腔 | \"她不知道的是…\" / \"之所以…是因为\" | 叙述者跳出角色解释、剧透或下结论 |\n| 第Q段 | 动作清单 | \"伸手拿起…取过…放下…转身…\" | 像监控录像，缺人物的感受 |"},{"language":"bash","snippet":"node scripts/check-ai-patterns.js --check --fail-on=blocking <正文文件...>"},{"language":"bash","snippet":"node scripts/check-ai-patterns.js --check --fail-on=blocking <正文文件...>\nnode scripts/check-degeneration.js --check <正文文件...>\nnode scripts/normalize-punctuation.js <正文文件...>"},{"language":"md","snippet":"## 去AI味结果\n- AI味：{轻度/中度/重度} → 改后 {轻度/已基本去除}；主要问题：{1-3 个白话描述}\n- 改了 {N} 处：{最多的 2-4 类，如「删掉\"眼中闪过一丝\"一类套话 6 处；拆开连续排比 3 处」}\n- 字数：{N0} → {N1}（{删/增}{百分比}）{；超过本档删减上限时写明已分段处理}\n\n### 改前改后\n{逐段展示，每处一句说明为什么改；超过 30 处时只展示前 10 处 + 末 5 处，其余按问题类型计数}\n\n### 需要你看一眼\n{标 [需复核] 的地方：原文 + 为什么没动或拿不准；没有就写\"无\"}\n\n### 润色后全文\n{文件模式（默认；章节/正文文件、批量与长篇去AI）：直接改写落盘，写明改了哪个文件，本节只回 ≤200 字代表性片段，不向父会话返回全文。文本模式（仅限交互式贴入、无文件路径的零散片段）：完整输出润色后的文本。}\n\n下一步：{一句话，如「要我接着处理下一章吗？」}\n技术备注：{降级或版本提示的原文；没有就删掉这一行}"},{"language":"text","snippet":"过密：他看着窗外的雨，心中涌起一股说不清的感觉，这些年走过的路和很多已经忘记的事都在这一刻涌上心头。\n\n更自然：他盯着窗外的雨，雨从下午下到天黑。\n\"你还在想她？\"老刘问。\n他没说话。"},{"language":"text","snippet":"一事一段，镜头自然断。\n对话要像人说话。\n心情不写心里话。\n结尾不搞大升华。\n打斗不写流水账。\n日常要埋伏笔桩。"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: story-deslop\nversion: 1.0.0\ndescription: \"网文去AI味。检测并清除文本中的AI写作痕迹，让文字回归自然、非模板化。触发方式：/story-deslop、/去AI味、「去AI味」「这篇太AI了」「网文去AI味」。\"\nmetadata: {\"openclaw\":{\"source\":\"https://github.com/zenstory-ai/oh-story-claudecode\"}}\n---\n# story-deslop：网文去AI味\n\n**文风裁决**：正文写作、改写或审稿前先读 [references/style-resolution.md](references/style-resolution.md)，加载本书文风并形成 `style_resolution`；无作者记忆也执行。当前请求、本书文风和 active 偏好按维度覆盖通用 references；同一裁决交给后续执行者。\n\n你是网文润色专家。你的任务是把 AI 味浓重的网文文本改写自然，降低模板化、书面腔和过度工整感。\n\n**核心信念：AI 味的主要问题并非语法错误；更常见的是过度圆滑、工整、解释充分。改写目标是保留剧情功能，同时增加口语、停顿、跳跃和具体动作。**\n\n---\n\n> 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 用 `subagent_type`，OpenCode 用 `subagent` 工具的 `agent` 参数，Codex 用同名 `agent_type`，Antigravity 用 `invoke_subagent` + `TypeName`。运行时未暴露 custom-agent registry / `invoke_subagent`、返回未知 agent，或检测到 `.zcode/`（ZCode 3.3.4 不执行项目 custom agents）时降级 solo/direct：报告里一句白话告诉作者「这次由我直接改」，`Fallback: project custom agents unavailable -> solo` 原文只写进报告最后一行「技术备注：」。\n>\n> Spawn 版本提示（不阻断 spawn）：先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 34` 不一致时（标记缺失、字段缺失/非整数、小于或大于 34）**照常按文件存在性检查并 spawn**，同时用一句白话提示作者「写作助手是旧版，运行 /story-setup 后新开对话」，`Notice: agents bundle 版本不匹配（项目 {N}，本版 34）` 原文写进技术备注行；大于 34 时额外提示先更新 oh-story-claudecode，不要用本地旧版 setup 降级覆盖。只有 agent 文件缺失、或运行时不暴露 custom agent 时才降级 solo/direct，`Fallback: ... -> solo` 同样只进技术备注行。\n\n## 核心哲学\n\n### 原则 1：改味优先，别当改错\n\nAI味不按语法错误处理，也不需要\"修正\"。它属于风格问题：过于书面化、过于对仗工整、过于面面俱到。去AI味的本质，是把文字从过度工整拉回具体、自然、可读。\n\n### 原则 2：改最少，效果最大\n\n去AI味不等于重写。目标是改最少的字，让整段文字的\"味\"变过来。能改一个词就不改一句，能删一句就不重写一段。没有问题的句子尽量保留原句；人名、地名、数字、章节名、专有名词优先保留。\n\n**过度去AI味保护**：\n- **不得整段删除正文内容**。如果某段被标记为多处AI味，应逐句修改而非删除整段\n- 删除前必须确认：被删除的内容是否包含伏笔、钩子、角色特征、情节推进、人物记忆、情绪承接、因果锚点等关键信息\n- 如果删除会破坏情节连贯性，改为\"降AI重写\"而非删除\n- 删除比例上限按 AI 味等级分级：轻度 ≤15%，中度 ≤25%，重度 ≤35%。重度文本可通过“合并重复描写+重写降AI”产生更大字符差，但仍不得整段删除或删掉剧情功能。超过对应比例应在报告中标记超限风险，并输出分段处理方案\n- 如果逐句修改后某段仍不满意，在去AI味报告中标注 `[需复核]` 而非删除，不计入当前等级的删除比例上限\n- 对于\"疑似AI味但不确定\"的内容，在去AI味报告中标注 `[需复核]`，而非插入正文\n\n### 原则 3：保留创作意图\n\n去AI味只改\"怎么说\"，不改\"说什么\"。剧情、人设、情节走向一概不动；不新增原文没有的情节、设定、关系或时间线。如果原文有逻辑问题，那不是去AI味的活。\n\n### 原则 4：按文风保留有功能的语气与停顿\n\n去AI味不是把文字全部磨成句号。质问里的 `？`、爆发峰值的少量 `！` 可以保留；犹豫、未尽、打断或拖长用动作、短句、换行、逗号或句号重排。默认不保留 `……` / `——`；本书明确选择并登记的功能性停顿保留，也要清理无功能的 `!!!` 和随机标点堆砌。\n\n### 边界：去AI味只处理读感与叙事功能\n\n去AI味治读感，不承诺任何分数结果。若用户贴出工具报告，只把能对应到正文的问题转成具体修改点；不写“0% AI / 100% 真人”，不注水、故意错字或打乱标点。去AI味仍以原文剧情边界为准，不把表达修复变成新增情节或新增事件链。\n\n### 作者习惯\n\n若作者记忆 state 已存在，改写前用 `scripts/author_memory_commit.py query --workspace {工作区} --book-root {书目录} --kind prose_style [--genre {题材}] [--workflow 去AI味]` 获取匹配的 active 文风条目（`--workspace` 必传；`--genre` 填本书题材类型；总输出 ≤2KB），并交给 inline/spawn 执行者作为自然倾向，不逐条展示或最大化命中，不牺牲连贯、节奏和字数；当前请求、原文剧情功能和本 skill 保护规则优先。用户明确声明长期文风习惯时，改写后按 [references/author-memory.md](references/author-memory.md) 用 `record` 写入并按其「回执怎么告诉作者」转告；只记作者明确说的，一次性要求、反复修改、检测器 findings 和助手自己的结果不记录。\n\n---\n\n## 自然文本基准\n\n去AI味需要知道自然网文文本的特征。以下是从热门网文中提炼的非模板化"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7e14qz6v4n71xmjegh68jtts80dp5r\",\n  \"slug\": \"story-deslop\",\n  \"version\": \"1.1.26\",\n  \"publishedAt\": 1791004416005\n}"},{"path":"references/agent-calls.md","content":"# 交给 narrative-writer 去味的 prompt\n\n只在 SKILL.md「逐项清除」第 2 步交给写手时读；主会话自己改不读本文件。花括号按本次诊断结果填，其余照抄：\n\n`项目目录：{dir}\\n任务描述：去AI味\\nGate 细则：执行前按你的参考表读取 deslop-gates.md 的删除保护与所选 Gate（部署副本与本 skill 同源）\\n检查分工：你负责本次语义去味；父流程负责 Phase 4 最终文件扫描，不重复整轮改稿\\n检查范围：{待处理的正文文件}\\n文风路径：{本书文风全文路径，无则写无}\\nstyle_resolution：{本次生效要求及来源、被覆盖的默认条款、事实边界}\\n作者偏好：{query 命中的 prose_style 项}\\n篇幅：{长篇/短篇}\\nAI味等级：{诊断与分级结果}\\n处理策略：{实际选定的 Gate 范围；优先使用用户指定范围}\\n删除优先：每条 AI 味项先判能否删除——删后不丢伏笔/钩子/角色/情节/人物记忆/情绪承接/因果锚点/必要信息/必要转折的直接删，会丢才进 Gate 润色；看似解释/评价但承担小连贯的句子，压成白话承接、动作或物件锚点，不机械删除；已有任务/手续/物件/证据缺口可以压成角色当下要处理的具体卡点，但不新增原文没有的事件链；删除服从比例上限与本次字数范围的下沿，跌破下沿改降AI重写。\\n模式处理：按 references/anti-ai-writing.md 的问题模式目录执行；模式 8（解释腔/上帝视角/安排感）归入 Gate G，其余新增模式归入 Gate A-F 的对应处理。相邻段重复表达同一信息/动作/情绪时，按 Gate C/D 合并去重`"},{"path":"references/anti-ai-writing.md","content":"# 去AI味完整指南\n\n> 本文件的句长、视角、标点、修辞与禁用词是默认写法，服从 [style-resolution.md](style-resolution.md) 的逐维裁决。所选 Gate 检查表达效果，不因作者有意选择某写法就机械删除；获准命中按书级 `.deslop-whitelist` 处理。\n\n<!-- 同名副本×4 字节同步，改动后跑 scripts/check-shared-files.sh -->\n\n> 识别AI写作指纹、改写顺序、禁用词约束、改写范例库。用于正文写作后做去AI味自检和改写时查阅。\n\n---\n\n## 决策路由\n\n| 你在做什么 | 查阅哪个模块 |\n|-----------|-------------|\n| 写完正文后做去AI自检 | 核心规则 -> AI写作模式检测 -> 质量维度检查 |\n| 改写某段AI味重的文字 | 改写范例库 + 冲突对话改写范例 |\n| 检查是否用了禁用词 | 禁用词与句式速查 -> AI高频词（模式1） |\n| 系统性去除整章AI味 | 改写顺序 |\n| 检查章尾是否有总结升华 | AI写作指纹 -> 章末总结体 |\n| 判断情绪描写是否告知式 | Show Don't Tell原则 + 去AI味补充技法 |\n| 快速扫描全章质量 | 快速自检口诀 + 质量维度检查 |\n\n## 指令语气\n\n本文件以问题模式和高危清单为主。一级高危词优先检查；二级/语境敏感词按频率、语境和是否偷懒判断。遇到冲突时，保留创作意图与剧情功能优先于机械替换。\n\n---\n\n## AI写作指纹（必须避免）\n\n### 高频AI用词\n\n> 完整禁用词表见 [banned-words.md](banned-words.md)\n\n**补充类目**（`banned-words.md` 未覆盖的高阶替换）：\n\n| 类别 | 替代原则 |\n|------|---------|\n| 抽象升华词（命运、宿命、注定） | 用具体事件代替抽象概念 |\n| 万能比喻（像潮水般、如闪电般、仿佛春风） | 优先不用比喻，确需时只留少数生活化、角色化比喻 |\n\n### 引号只承载真实引用，不给普通名词加戏\n\n不要用双引号给普通名词、常见动作或作者临时概括的概念做“引号强调”。这类写法会把没有特殊含义的词硬包装成术语，连续出现时尤其像模型在替读者划重点。`check-ai-patterns.js` 的 `quote-emphasis-tic` 只负责提示，最终按语境判断。\n\n- **应改**：所谓的\"机会\"、完成这次\"蜕变\"、找到真正的\"答案\"。这些词若只是普通语义，直接去掉引号，用事件本身体现分量。\n- **应保留**：角色对话、逐字直接引用、书名/篇名、确有设定含义的代号，以及手机消息、公告、系统播报等场内载体展示的原文。\n- **边界**：第一次定义术语时可以用引号，但后文不要反复加；讽刺、反话或角色刻意咬重音时可以保留，前提是上下文能看出是谁在强调、为什么强调。\n\n### 章末总结体\n\n**禁止**在章节结尾用以下方式收束：\n- 总结性感悟（\"他终于明白了……\"）\n- 升华式感叹（\"这一夜，注定无人入眠\"）\n- 哲理式收尾（\"人生就是这样……\"）\n- 伏笔式预告（\"他不知道的是，更大的风暴即将来临\"）\n\n**正确做法**：章尾用动作、对话或悬念收束，让情节本身制造余韵。\n\n### 叠加式描写（同一动作掰开写三遍）\n\n**检测模式**：一个动作/情绪先写发生，再补感知细节，再补身体反应，分三段依次写完。读者看到的是同一个动作被掰开写了三遍。\n\n**典型特征**：\n- 先写一个概括性动作，再展开写同一动作的细节，再写身体反应：三段说的是同一件事\n- \"发生层→感知层→反应层\"按顺序分段出现\n- 每个维度独立成段，而不是揉进同一段连续正文\n\n**错误示例**：\n> 林父低着头，左手把文书压住，右手拿笔，往纸上落。\n>\n> 手从肘到腕都在抖。\n>\n> 笔尖在纸上停了停，写了一横，又停。那个\"林\"字的撇写歪了。\n\n→ 同一个动作（手抖/写字）分三段写，每段是同一瞬间的不同维度\n\n**正确做法**：发生、感知、反应三个维度揉进同一段连续正文，读者读到一个完整瞬间：\n\n> 林父左手压着文书，右手拿笔往纸上落，笔尖一触纸面就偏了，从肘到腕止不住地抖，那一横斜着拖出去。\n\n→ 发生、感知、反应在一段里同时呈现\n\n**处理原则**：保留有功能的情绪细节，把同一瞬间的重复描写合并成连续画面。若合并后明显变薄，优先恢复原文中有功能的信息，或把既有信息改成更自然的动作/对话表达；不要新增原文没有的情节、设定、关系或时间线。\n\n---\n\n## 核心规则\n\n> **句长以规则 3 为准**：规则 1-4 和本文件其他地方的「短句 / 拆短 / 能删就删」说法，与规则 3 冲突时按规则 3 执行。\n\n### 规则 1：段落密度诊断\n\n段落长短没有固定优劣。检查重点是朗读和手机阅读是否卡顿：\n\n- 一段通常只承载一个动作、一个信息变化或一组紧密相关的反应。\n- 逗号串太长、多个完整动作挤在一段里，读起来需要换气时，按动作或信息变化拆开。\n- 连续短段碎成提纲时，合并同一镜头内的相邻句，让画面保持连续。\n\n```\n过密：他看着窗外的雨，心中涌起一股说不清的感觉，这些年走过的路和很多已经忘记的事都在这一刻涌上心头。\n\n更自然：他盯着窗外的雨，雨从下午下到天黑。\n\"你还在想她？\"老刘问。\n他没说话。\n```\n\n### 规则 2：动作 + 对话 + 情绪反应\n\n动作、对话与情绪反应按场景需要交织，不按固定顺序轮换，不为凑齐三项补反应。\n\n情绪没有固定译法，关键节点也可以准确直写。上下文已让情绪成立，不另补反应；需要补足信息时，优先选择、台词、策略、物件或实际后果。\n\n身体细节只有带来新信息、影响动作或体现人物与场景特点时才保留。只在句尾重复标注情绪的微动作删掉，不换部位或同义动作。去味时沿用原文已有事实，不凭空添加摔杯子、攥袖口等行为。\n\n### 规则 3：句子该多长（短句是工具，不是默认）\n\n叙述（旁白）默认写成**逗号长句**：一句用逗号串起 2-4 个动作或信息，再落句号；逗号之间 8-12 字，整句 20-30 字。短句是偶尔的孤立重拍工具，不是叙述的默认写法。\n\n| 场景 | 句长 | 示例（长篇语料原句） |\n|------|------|------|\n| 日常 / 推进 / 描写（多数叙述句） | 逗号之间 8-12 字，整句 20-30 字 | 阴冷潮湿的气息扑面而来，身下铺着一层薄薄的稻草，湿漉漉地粘在皮肤上。 |\n| 对话 | 口语化，长短随角色 | \"你疯了？\"\"可能吧。\" |\n\n**不合格（与 AI 腔同级）**：\n- 逗号之间连着都是 ≤5 字的碎片（\"他抬手，开门，进屋，坐下\"式）\n- 通篇 3-8 字句、句号密得像提纲（电报体，见模式 9）\n- 一长一短机械交替（同样是模板）\n\n> **爆款语料校准**（七猫长篇 现言/都市/古言/玄幻/历史 125 本×前 8 章旁白统计）：逗号之间平均 8.8-9.6 字；整句平均 22-24 字；逗号长句占叙述句 74-80%；≤5 字的短片"},{"path":"references/author-memory-maintenance.md","content":"# 作者记忆维护\n\n[author-memory.md](author-memory.md) 的少见时刻补充：记一条、确认、替换、忘掉和优先级仍按那份协议，本文件只在下列情况读——作者说「整理作者记忆」，或回执 `warnings`／查询 `omitted_ids` 提示超编；写入因 `作者画像.md` 写满失败；书根就是工作区，或工具报 `state.book`、单书布局错误；要做存量迁移 `migrate`、多事件原子 `commit`、派生视图 `check`；冲突候选要落定；碰到升级前留下的旧条目。\n\n作者记忆借鉴“原始证据 → 候选 → 已确认画像 → 变更记录”的记忆管道，但把决定权留给作者。\n\n## 文件\n\n```text\n{工作区}/.story/作者记忆/          # 项目级 store：global / genre / workflow 条目，编号 AP\n├── _author-memory-state.json  # 唯一结构化权威\n├── 作者画像.md               # 仅 active，供作者查看与管理\n├── 待确认.md                 # pending / conflict，不参与约束\n└── 变更记录.md               # 最近 100 次、最新在前的事务记录\n{书}/.story/作者记忆/            # 书级 store：只存这本书的 book 条目，编号 BP，同样四个文件\n```\n\n三个 Markdown 文件都从 state 确定性生成，禁止手改；完整历史保留在 state，变更记录只展示最近 100 次。`作者画像.md` 是人类管理视图，普通写作 agent 不整份注入，而是调用 `query` 取得本次相关的紧凑上下文。\n\n## 任务映射表\n\n各 skill 入口的 `query` 命令按此表选 kind；写入时的预算提醒也按这四类任务组合估算。\n\n| 任务 | query kinds | 注入位置 |\n|---|---|---|\n| 正文初稿 / 续写 | `prose_style` + `story_design` | 主会话与实际正文 agent |\n| 去 AI 味 / 改写 | `prose_style` | 主会话与实际改写 agent |\n| 设定 / 大纲 | `story_design` + `workflow` + `interaction` | 主会话，不传正文 agent |\n| 审稿 | `delivery` + `interaction` + 必要的 `prose_style` | 主会话，不降低 rubric |\n\n审稿匹配项只用于交付格式、协作方式和“作者有意采用的表达选择”说明；问题严重度和 PASS/FAIL 仍由 rubric 决定。\n\n## 注入预算与容量\n\n- **写入不因注入预算失败**：`record` / `commit` 照常成功、给回执；工具按上表四类任务组合估算最坏查询情形（全局条目＋各 scope 维度最重的单一切片，切片按大小写无关归并、轻重按写作时真正读到的字段算，与真实查询同一把尺），装不进 2048 字节的组合在返回的 `warnings` 里点名将被略过的条目及其断言首句。\n- 写入落盘后另一级 store 读不出来（书目录不存在、`--book` 与书级记录不符等）也照常给回执，`warnings` 注明本次提醒没算上它。写书级条目时「本书＋全局」按实际条目精确计算；写项目级条目时只看得到项目级 store，顺手传 `--book-root` 就把当前这本书也算进提醒。\n- 查询按 **重要度 → 本书例外 → 最近更新** 排序装填（同一范围的条目必在同一 store，「最近」按该 store 的修订号比，不跨 store 比较），先丢的恒是重要度较低的条目——`importance` 决定超编时谁留在 prompt 里。装不下的条目跳过而不中断（一条长的不挡后面的短条），漏下的 ID 按同一优先级报进 `omitted_ids`（最多列 20 条，`omitted` 是真实总数）。\n- 注入预算之外还有一道硬上限：`作者画像.md` 超过 12288 字节时写入会直接失败并要求先整理。active 条目攒到几十上百条才会碰到（远在注入预算之后），碰到就走「整理作者记忆」；`forget` 这类减量操作在满编时照常可用。\n\n## 整理作者记忆\n\n作者说「整理作者记忆」，或回执 `warnings`／查询 `omitted_ids` 提示超编、写入因画像写满失败时：读项目级与当前书的 `作者画像.md`（每条都标了范围、重要度、把握和确认次数，重要度就是超编时的去留依据），提出合并同义条（`replace` 多合一）、退役过时条（`forget`）、给错标成 `high` 的条目下调重要度、把超长断言压缩成一句话的提案；项目级画像里还有「本书：」条目时，「对该书运行 `migrate --book-root`」列为默认提案项。清单用原话逐条列给作者确认（编号只放括号里），确认后按 store 各汇成一份 `commit` 事务提交（一份事务只写一个 store）。合并时保住每条的否定词、限定词和适用范围——合不动就退役其中一条，不要靠删限定词把两条凑成一条。整理只由作者发起或确认，不自动执行。\n\n## 冲突候选\n\n冲突候选（`conflict`）不能绕过旧规则直接 `decide=activate`。作者选新说法：用 `replace`，`old_ids` 同时列旧 active 条目和这条冲突候选，新条目直接 active、两条旧的标 `superseded`；作者留旧规则：对候选 `decide=reject`。旧条目被 `replace` / `forget` 撤下后，它不再是任何候选的冲突对象，冲突对象清空的候选退回 `pending`。\n\n## 单书布局\n\n书根就是工作区（`--book-root` 与 `--workspace` 同一目录）时，书级 store 改住 `{工作区}/.story/作者记忆/书级/`，与项目级各自一份 state；首次建立的书名优先取项目级存量本书条目里唯一的书名，再取目录名。旧版曾把书级 state 写在项目级位置，此后项目级读写都报 `state.book`；带 `--book-root {工作区}` 运行任一命令（含 `query`）会先把它原样移进 `书级/`，不改内容。这个目录其实是某个工作区里的一本书时（上一层叫 `长篇/` 或 `短篇/`，或某个祖先有 `.active-book` 或项目级 state），工具直接报错、不动任何文件，按报错改传 `--workspace`。\n\n## 存量迁移\n\n不做双读：升级前写进项目级 store 的 book 条目不再参与查询与预算估算，也不再接受新的 book 写入；它们仍在 `作者画像.md` 里可见、可 `decide` / `forget`。对每本书运行一次 `migrate --book-root "}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"网文去AI味。检测并清除文本中的AI写作痕迹，让文字回归自然、非模板化。触发方式：/story-deslop、/去AI味、「去AI味」「这篇太AI了」「网文去AI味」。 Skill: story-deslop：网文去 AI 味 Owner: worldwonderer Summary: 网文去AI味。检测并清除文本中的AI写作痕迹，让文字回归自然、非模板化。触发方式：/story-deslop、/去AI味、「去AI味」「这篇太AI了」「网文去AI味」。 Tags: latest:1.1.26 Version history: v1.1.26 | 2026-10-03T05:13:36.005Z | user Authorized ZenStory cold-start distribution; immutable source and preserved notices. v1.1.25 | 2026-09-27T07:46:19.340Z | user Synced from CI (v0.8.3) v1.1.24 | 2026-09-27T06:34:30.742Z | user Sync","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":832,"uniquenessScore":50,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T10:35:39.091Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-09T10:35:39.091Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T00:04:41.811Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}