#175 by GitHub stars
zenstory-ai/oh-story-claudecode
AI 写网文全流程 skill 包:扫榜选材、拆解爆款、大纲细纲、长篇设定与伏笔追踪、短篇反转、去AI味与封面生成,适配 Claude Code / Codex / Antigravity / OpenCode 等 | Agent skill pack for writing Chinese web novels
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
skills/browser-cdp/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Local scripts → After Network or broad shell
cc6397f2b071 → 7383fd6cd8ac
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → cc6397f2b071
No earlier version was observed for comparison.
skills/story/SKILL.md
Week of Nov 2, 2026 · +1 / −1 lines
Before Network or broad shell → After Network or broad shell
cc6397f2b071 → 7383fd6cd8ac
- 105 > Spawn 版本提示(不阻断 spawn):先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 38` 不一致时(标记缺失、字段缺失/非整数、小于或大于 38)**照常按当前宿主角色来源检查并 spawn**;同时用一句白话提示作者「查资料助手是旧版,运行 /story-setup(ZCode 先更新插件)后新开会话」,`Notice: agents bundle 版本不匹配(项目 {N},本版 38)` 原文写进回答最末一行「技术备注:」;大于 38 时额外提示先更新 oh-story-claudecode,不要用本地旧版 setup 降级覆盖。只有当前宿主角色缺失或不暴露调用能力时才降级 solo/direct,`Fallback: ... -> solo` 同样只进技术备注行。
+ 105 > Spawn 版本提示(不阻断 spawn):先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 40` 不一致时(标记缺失、字段缺失/非整数、小于或大于 40)**照常按当前宿主角色来源检查并 spawn**;同时用一句白话提示作者「查资料助手是旧版,运行 /story-setup(ZCode 先更新插件)后新开会话」,`Notice: agents bundle 版本不匹配(项目 {N},本版 40)` 原文写进回答最末一行「技术备注:」;大于 40 时额外提示先更新 oh-story-claudecode,不要用本地旧版 setup 降级覆盖。只有当前宿主角色缺失或不暴露调用能力时才降级 solo/direct,`Fallback: ... -> solo` 同样只进技术备注行。
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → cc6397f2b071
No earlier version was observed for comparison.
skills/story-cover/SKILL.md
Week of Nov 2, 2026 · +8 / −8 lines
Before Network or broad shell → After Network or broad shell
cc6397f2b071 → 7383fd6cd8ac
- 17 - **Codex 内置(优先)**:当前 Codex CLI 会话可调用 `$imagegen` / `image_gen` 时,直接调用工具生成并保存,无需 `OPENAI_API_KEY` 或 `GPT_IMAGE_API_KEY`,不运行 `curl`。
- 18 - **API 回退**:仅在会话没有内置工具或用户明确指定 API 时使用,需要 `GPT_IMAGE_API_KEY`;环境变量和命令在 [references/api-fallback.md](references/api-fallback.md),走这条通路时再读。工具缺失不等于 Codex 订阅不支持生图;内置调用失败时先报告错误,不静默切换到可能收费的 API。
+ 17 - **内置生图(优先)**:当前会话可调 Codex `$imagegen` / `image_gen` 或 Antigravity `generate_image` / `image-generator` 时,直接调用生成并保存,无需 `OPENAI_API_KEY` 或 `GPT_IMAGE_API_KEY`,不跑 `curl`。
+ 18 - **API 回退**:仅在无内置工具或用户指定 API 时使用,需 `GPT_IMAGE_API_KEY`;变量和命令见 [references/api-fallback.md](references/api-fallback.md),走该通路再读。工具缺失不等于订阅不支持生图;内置失败先报错,不静默切到收费 API。
- 27 - 短篇:`设定.md`「基本信息」的标题、目标平台、目标情绪,以及「一句话梗概」「题材招式」。
+ 27 - 短篇:`设定.md`「基本信息」的标题、目标平台、目标情绪,以及「一句话梗概」「这篇用的套路」(旧书叫「题材招式」)。
- 45 1. 有「题材类型」(长篇)或梗概、题材招式(短篇)时,按内容选风格库中最接近的一节。
+ 45 1. 有「题材类型」(长篇)或梗概、套路(短篇)时,按内容选风格库中最接近的一节。
- 86 #### Codex 内置 ImageGen(优先)
+ 86 #### 内置生图(Codex / Antigravity,优先)
- 88 1. 用 Step 3 的完整提示词调用 `image_gen`。比例和安全区写进提示词,不传 `GPT_IMAGE_MODEL`、`GPT_IMAGE_SIZE`、`response_format` 等 API 参数。
- 89 2. 有 `REF_IMAGE` 时,本地文件先用图片查看工具载入会话;URL 先下载再载入。说明它是编辑目标还是风格参考,并列出必须保持的内容。
- 90 3. 先创建 `BOOK_DIR/封面/`,再把工具返回的图片复制为 `封面_vN.png`,`N` 自增且不覆盖旧版;保留 `$CODEX_HOME/generated_images/` 原文件,同时保存同名 `.prompt.txt`,有参考图再保存 `.ref.txt`。确认图片可读,并把原图绝对路径交给 Step 5。
+ 88 1. 用 Step 3 的完整提示词调用 `image_gen`(Codex)或 `generate_image` / `image-generator`(Antigravity)。比例和安全区写进提示词,不传 `GPT_IMAGE_MODEL`、`GPT_IMAGE_SIZE`、`response_format` 等 API 参数。
+ 89 2. 有 `REF_IMAGE` 时,本地文件先载入会话(或传给 `image-generator`);URL 先下载再载入。说明是编辑目标还是风格参考,并列出须保持的内容。
+ 90 3. 先创建 `BOOK_DIR/封面/`,把生成的图片复制为 `封面_vN.png`(`N` 自增不覆盖旧版);保留 `$CODEX_HOME/generated_images/` 等原文件,并存同名 `.prompt.txt`(有参考图再存 `.ref.txt`)。确认可读后把原图绝对路径交给 Step 5。
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → cc6397f2b071
No earlier version was observed for comparison.
skills/story-deslop/SKILL.md
Week of Nov 2, 2026 · +3 / −3 lines
Before Local scripts → After Network or broad shell
cc6397f2b071 → 7383fd6cd8ac
- 32 从正文路径确定书目录和篇幅:单个 `正文.md` 一般是短篇,`正文/` 下逐章文件一般是长篇;优先采用作者与项目的明确说明。按开头的文风裁决读本书要求,通读本次正文,按需查相关前文和已定设计,不整读无关全书。资料缺失时继续有依据的部分,标明未知。本次涉及多章时,逐章完成 Phase 1–4 再进下一章,交给写手时每章派一次。
+ 32 从正文路径确定书目录和篇幅:单个 `正文.md` 一般是短篇,`正文/` 下逐章文件一般是长篇;优先采用作者与项目的明确说明;短篇另读 [references/short-deslop.md](references/short-deslop.md) 的卖点保护。按开头的文风裁决读本书要求,通读本次正文,按需查相关前文和已定设计,不整读无关全书。资料缺失时继续有依据的部分,标明未知。本次涉及多章时,逐章完成 Phase 1–4 再进下一章,交给写手时每章派一次。
- 78 > Spawn 版本提示(不阻断 spawn):先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 38` 不一致时(标记缺失、字段缺失/非整数、小于或大于 38)**照常按当前宿主角色来源检查并 spawn**,同时用一句白话提示作者「写作助手是旧版,运行 /story-setup(ZCode 先更新插件)后新开会话」,`Notice: agents bundle 版本不匹配(项目 {N},本版 38)` 原文写进技术备注行;大于 38 时额外提示先更新 oh-story-claudecode,不要用本地旧版 setup 降级覆盖。只有当前宿主角色缺失或不暴露调用能力时才降级 solo/direct,`Fallback: ... -> solo` 同样只进技术备注行。
+ 78 > Spawn 版本提示(不阻断 spawn):先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 40` 不一致时(标记缺失、字段缺失/非整数、小于或大于 40)**照常按当前宿主角色来源检查并 spawn**,同时用一句白话提示作者「写作助手是旧版,运行 /story-setup(ZCode 先更新插件)后新开会话」,`Notice: agents bundle 版本不匹配(项目 {N},本版 40)` 原文写进技术备注行;大于 40 时额外提示先更新 oh-story-claudecode,不要用本地旧版 setup 降级覆盖。只有当前宿主角色缺失或不暴露调用能力时才降级 solo/direct,`Fallback: ... -> solo` 同样只进技术备注行。
- 109 标点脚本把白名单以外的省略号、破折号、双连字符换成逗号、句号、冒号或删去,并删除独立分隔线;不动问号和感叹号,默认不改引号。仅作者或项目明确要求时才加 `--quote-mode ascii` 或 `--quote-mode yan`。白名单登记按文风裁决文件执行,不因脚本报警自行放行。
+ 109 标点脚本保留引号里的省略号(统一成 `……`),把白名单以外的其余省略号、破折号、双连字符换成逗号、句号、冒号或删去,并删除独立分隔线;不动问号和感叹号,默认不改引号。仅作者或项目明确要求时才加 `--quote-mode ascii` 或 `--quote-mode yan`。白名单登记按文风裁决文件执行,不因脚本报警自行放行。
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → cc6397f2b071
No earlier version was observed for comparison.
skills/story-import/SKILL.md
Week of Nov 2, 2026 · +1 / −1 lines
Before Local scripts → After Local scripts
cc6397f2b071 → 7383fd6cd8ac
- 13 > Spawn 版本提示(不阻断 spawn):先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 38` 不一致时(标记缺失、字段缺失/非整数、小于或大于 38)**照常按当前宿主角色来源检查并 spawn**,同时用一句白话提示作者「分析助手是旧版,运行 /story-setup(ZCode 先更新插件)后新开会话」,`Notice: agents bundle 版本不匹配(项目 {N},本版 38)` 原文写进汇报最后一行「技术备注:」;大于 38 时额外提示先更新 oh-story-claudecode,不要用本地旧版 setup 降级覆盖。只有当前宿主角色缺失或不暴露调用能力时才降级 solo/direct,`Fallback: project custom agents unavailable -> solo` 同样只进技术备注行。
+ 13 > Spawn 版本提示(不阻断 spawn):先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 40` 不一致时(标记缺失、字段缺失/非整数、小于或大于 40)**照常按当前宿主角色来源检查并 spawn**,同时用一句白话提示作者「分析助手是旧版,运行 /story-setup(ZCode 先更新插件)后新开会话」,`Notice: agents bundle 版本不匹配(项目 {N},本版 40)` 原文写进汇报最后一行「技术备注:」;大于 40 时额外提示先更新 oh-story-claudecode,不要用本地旧版 setup 降级覆盖。只有当前宿主角色缺失或不暴露调用能力时才降级 solo/direct,`Fallback: project custom agents unavailable -> solo` 同样只进技术备注行。
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → cc6397f2b071
No earlier version was observed for comparison.
skills/story-long-analyze/SKILL.md
Week of Nov 2, 2026 · +1 / −1 lines
Before Local scripts → After Local scripts
cc6397f2b071 → 7383fd6cd8ac
- 15 > Spawn 版本提示(不阻断 spawn):先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 38` 不一致时(标记缺失、字段缺失/非整数、小于或大于 38)照常按当前宿主角色来源检查并 spawn,同时报告 `Notice: agents bundle 版本不匹配(项目 {N},本版 38)` 并提示重新运行 `/story-setup` 后新开会话;大于 38 时额外提示先更新 oh-story-claudecode,不要用本地旧版 setup 降级覆盖。只有当前宿主角色缺失或不暴露调用能力时才降级 solo/direct。
+ 15 > Spawn 版本提示(不阻断 spawn):先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 40` 不一致时(标记缺失、字段缺失/非整数、小于或大于 40)照常按当前宿主角色来源检查并 spawn,同时报告 `Notice: agents bundle 版本不匹配(项目 {N},本版 40)` 并提示重新运行 `/story-setup` 后新开会话;大于 40 时额外提示先更新 oh-story-claudecode,不要用本地旧版 setup 降级覆盖。只有当前宿主角色缺失或不暴露调用能力时才降级 solo/direct。
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → cc6397f2b071
No earlier version was observed for comparison.
skills/story-long-scan/SKILL.md
Week of Nov 2, 2026 · +1 / −1 lines
Before Network or broad shell → After Network or broad shell
cc6397f2b071 → 7383fd6cd8ac
- 59 4. 看聚合的「采集情况」:标了问题(书名没解出来、没采到、只有书单、详情没取到)的榜单,按平台参考的「采不到时」排查后重采;重采不了,报告里说明结论不含它。
+ 59 4. 看聚合的「采集情况」:标了问题(书名没解出来、没采到、只有书单、详情没取到)的榜单,按平台参考的「采不到时」排查后重采;重采不了,报告里说明结论不含它。只缺热度数字的榜不算采不到:题材、字数照用,只是不进热度结论。
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → cc6397f2b071
No earlier version was observed for comparison.
skills/story-long-write/SKILL.md
Week of Nov 2, 2026 · +45 / −47 lines
Before Local scripts → After Local scripts
cc6397f2b071 → 7383fd6cd8ac
- 13 任何创建或修改长篇故事文件的动作前,先判断场景并读完下列文件。**只读本 SKILL.md 不算完成;`rg` 检索或局部摘读也不算完整读取。**
+ 13 创建或修改长篇故事文件前,按下表读完当前时刻的文件(这张表是唯一的读取清单);只读本文件、`rg` 检索或摘读都不算。**按节读只允许两种**:任务包切好的节,或本表、文件内「什么时候读这份」点名的节;其余文件整份读到结尾。缺文件或没读完就停,报准确路径,**不得先写正文再补读**;每个任务、每个会话重新读。
- 15 必须分块读到 EOF:
+ 15 | 时刻 | 必读 | 条件满足才读 |
+ 16 |---|---|---|
+ 17 | 定方向 | `workflow-setup.md` | 没方向:`long-genre-catalog.md`(特殊题材只读对应一节);女频改读 `female-audience-writing.md`;平台、赛道、暂定书名:`genre-readers.md`;派子代理:`agent-calls.md` |
+ 18 | 定设定 | `workflow-setup.md`;自己做加 `character-basics.md`、`reader-contract-and-progression.md`、`long-genre-mechanics.md`「核心梗三层递进设计」「金手指」、`character-relations.md`「人物关系类型」 | 女频:`female-audience-writing.md`;有感情线:`character-relations.md`「感情线阶段」;对标登记 ≥2 本:`cross-book-recall.md` |
+ 19 | 出卷纲 | `workflow-volume.md`;自己排加 `artifact-protocols.md`、`outline-methods.md`「卷纲排法」、`reader-contract-and-progression.md` | 没有主对标:outline-methods「常见的八步结构」;有自创剧情段:「情绪模块公式」;换地图:「换地图」;有反转:`long-reversal.md`「反转类型」;感情线、对标同上 |
+ 20 | 出细纲、补纲 | `workflow-outline.md`;自己出加 `outline-template.md`、`plot-core-methods.md`、`character-basics.md`、`long-chapter-hooks.md`「章尾钩子 13 式」「章首钩子 7 式」 | 含前 3 章:`opening-design.md`「开篇规划」;感情线、对标同上 |
+ 21 | 写一章 | `workflow-chapter.md`;交写手加 `agent-calls.md`;自己写加 `long-format.md`、`writing-craft.md`、本章技法 | 新书第 1 章:`tracking-initialization.md`、`genre-prose-cards.md`「全书题材正文提示卡」与核对报告点名的卡;召回降档不成立:`benchmark-recall.md`;缺文件、找产物放哪:`project-files.md`;自己写第 1-3 章:`opening-design.md`「开篇落笔」;排查单章问题:`long-chapter-quality.md` |
+ 22 | 日更 | 先 `workflow-daily.md`,每章同「写一章」 | 同「写一章」 |
+ 23 | 大修 | `workflow-revision.md`;交写手加 `agent-calls.md`;自己改加 `long-format.md`、`writing-craft.md`,改情绪对抗戏加本章技法 | 只说读者反应:`revision-diagnosis.md`;追踪提交报错:`tracking-transaction.md` |
+ 24 | 管理作者习惯 | `author-memory.md`;完成即停,不建书、不写正文 | — |
- 17 1. 规划按时刻读:定方向、定设定读 `references/workflow-setup.md`,出卷纲读 `references/workflow-volume.md`,出细纲或补纲读 `references/workflow-outline.md`,只读当前时刻的;写指定章读取 `references/workflow-chapter.md`;日更先读取 `references/workflow-daily.md`,进入正文前再完整读取 `workflow-chapter.md`;大修先读 `references/workflow-revision.md`,改稿时还要读什么由它写明。
- 18 2. 主会话直接写正文时,首次落笔前完整读取 `references/long-format.md` 与 `references/writing-craft.md`,与写手用同一套技法;`references/long-chapter-quality.md` 只在排查具体问题时读,去味走检测器,不预读。交给 narrative-writer 时,由该 agent 按自己的 reference 表完成写前读取,主会话不得用未读 reference 的临时 prompt 替代。
- 19 3. 本章技法按下方「本章技法」一段选,至多一份;主会话自己写时按那段只读指定小节,这是本条唯一允许的按节读。
- 20 4. 正文写前,references 读完后立即重读当前用户请求、本章细纲和卷纲,先在上下文里**记下本轮约束**:原样记录用户明确字数范围、必发生、禁止发生、精确时间锚与本章停笔点、章尾新债。references 只提供技法,不得覆盖这些项目事实;作者给的字数范围写在细纲「字数范围」行(命令参数只作临时覆盖),有它就不用默认 ±15%。交付前逐项复核:字数带外按 `workflow-chapter.md` 的收口流程交用户处置,不自动补字;其余项越界不算完成。
+ 26 交给 story-architect 时主会话只读时刻文件和 `agent-calls.md`,方法随任务包;交给 narrative-writer 时它按自己的读取表读,不得用没读参考的临时 prompt 替代。去味走检测器,不预读。写正文、改稿前读本书 `设定/文风.md`(没有就按作者当前请求)。
- 22 任一必需路径不存在、不可读或未读完时立即停止,报告准确路径,**不得先写正文再补读**。写前必读按当前任务、当前会话重新执行;旧会话的“读过”不能沿用。
+ 28 **本章技法**(每章至多一份;类别只在这里定义,写手模板的读取表与它同步):按细纲主功能选。
+ 29
+ 30 | 类别(读者情绪) | 文件 |
+ 31 |---|---|
+ 32 | 打脸/逆袭(爽感释放) | `style-combat-face.md` |
+ 33 | 身份/认知/立场反转(震撼+痛快) | `long-reversal.md` |
+ 34 | 感情拉扯(意难平) | `emotional-methods.md` |
+ 35 | 悬疑/惊悚/异常线索(紧张+好奇) | `long-suspense.md` |
+ 36 | 日常装逼(期待感) | `style-combat-face.md`「爽点公式与日常装逼」 |
+ 37
+ 38 都不对应就不读。交给写手只在 prompt「本章技法」填类别;自己写只读该文件「什么时候读这份」和它指向的那一节,日更一批只读一份,按最需要的那章选。作者只说情绪时按括号反查题材。
+ 39
+ 40 **记下本轮约束**:正文写前,读完上面的文件后重读当前请求、本章细纲和卷纲,原样记下用户明确的字数范围、必发生、禁止发生、精确时间锚与本章停笔点、章尾新债。参考文件只提供技法,不覆盖这些事实;作者给的字数范围写在细纲「字数范围」行(命令参数只作临时覆盖),有它就不用默认长度带(见 tracking-transaction.md)。交付前逐项复核:字数出了范围按 workflow-chapter「检测收口」交作者处置,不自动补字;其余项越界不算完成。
- 26 > 专业 agent 只查当前宿主:Claude `.claude/agents`、OpenCode `.opencode/agents`、Codex `.codex/agents` TOML、Antigravity `.agents/agents`(`invoke_subagent` + 同名 `TypeName`);ZCode 查已启用插件注册的同名角色,用 `Agent` 工具按实际 schema 派发,不要求 `.zcode/agents`。仅角色或调用能力缺失、返回 unknown agent 时报告 fallback 并 solo/direct,不因宿主名或其他端目录存在而降级。
+ 44 > 专业 agent 只查当前宿主:Claude `.claude/agents`、OpenCode `.opencode/agents`、Codex `.codex/agents` TOML、Antigravity `.agents/agents`(`invoke_subagent` + 同名 `TypeName`);ZCode 查已启用插件注册的同名角色,用 `Agent` 工具按实际 schema 派发,不要求 `.zcode/agents`。返回 unknown agent 时按下面的降级处理,不因宿主名或其他端目录存在而降级。
- 28 > Spawn 版本提示(不阻断 spawn):先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 38` 不一致时(标记缺失、字段缺失/非整数、小于或大于 38)**照常按当前宿主角色来源检查并 spawn**;同时用一句白话提示作者「写作助手是旧版,运行 /story-setup(ZCode 先更新插件)后新开会话」,`Notice: agents bundle 版本不匹配(项目 {N},本版 38)` 原文写进技术备注行;大于 38 时额外提示先更新 oh-story-claudecode,不要用本地旧版 setup 降级覆盖。只有当前宿主角色缺失或不暴露调用能力时才降级 solo/direct,`Fallback: ... -> solo` 同样只进技术备注行。
- 29
- 30 **文风裁决**:正文写作、改写或审稿前先读 [references/style-resolution.md](references/style-resolution.md),加载本书文风并形成 `style_resolution`;无作者记忆也执行。当前请求、本书文风和 active 偏好按维度覆盖通用 references;同一裁决交给后续执行者。
- 31
- 32 ## 作者记忆管理
- 33
- 34 管理习惯读 `references/author-memory.md`(整理、超编、迁移按其中指路)。仅管理习惯时完成即停,不建书、不写正文。
+ 46 > 版本:项目根 `.story-deployed` 的 `agents_version` 与本版 `agents_version: 40` 不一致(缺失、非整数、更小或更大)时照常按当前宿主角色来源检查并 spawn,只对作者说一句「写作助手是旧版,运行 /story-setup(ZCode 先更新插件)后新开会话」;大于 40 时额外提示先更新 oh-story-claudecode。只有当前宿主角色缺失或不暴露调用能力时才降级 solo/direct,对作者只说「这次我自己写」。
- 38 先明确每个场景的主导情绪,从对标中找有依据的剧情模式,把角色当功能位,用本书的角色和素材实现;写每章只读「不知道就会写错」的状态、伏笔与设定。契约与推进决策先过 `references/reader-contract-and-progression.md`「契约四问」。作者记忆:写正文时组装脚本已代查注入;其他任务直接跑 `{PYTHON} {skill 根}/scripts/author_memory_commit.py query --workspace {放 .active-book 的那层} --book-root {书目录} --kind …`(规划查 story_design、workflow、interaction,改稿查 prose_style,整章重写另加 story_design;无记忆返回空),执行者只拿输出的 `lines`,当前请求与本书文风优先。
- 39
- 40 **本章技法(每章至多读一份)**:按细纲主功能选——打脸/逆袭(爽感释放)`style-combat-face.md`;身份/认知/立场反转(震撼+痛快)`long-reversal.md`;感情拉扯(意难平)`emotional-methods.md`,自己写时加 `emotion-on-page.md`;悬疑/惊悚/异常线索(紧张+好奇)`long-suspense.md`;日常装逼(期待感)`long-chapter-hooks.md`。都不对应就不读,按 writing-craft 写。第 1-3 章另读 `opening-design.md`「开篇落笔」。交给写手时只在 prompt「本章技法」填类别,由写手整份读;主会话自己写正文时只读该文件的「决策路由」和它指向的那一节(先看标题定位,不整读),日更一批只读一份,按本批最需要的那章选,其余章按 writing-craft 写。作者先说情绪没说题材时按括号反查,再从 `long-genre-catalog.md` 找细分方向。
+ 50 先明确每个场景的主导情绪,从对标中找有依据的剧情模式,把角色当功能位,用本书素材实现;写每章只读「不知道就会写错」的状态、伏笔与设定。推进决策先过四个排纲问题。作者记忆:写正文时组装脚本已代查;其他任务按 author-memory.md「查询」查,当前请求与本书文风优先。
- 46 先确定操作对象、交付范围和停点,再看项目状态;空项目不等于授权完整开书。范围与转正文规则如下。
+ 56 先确定操作对象、交付范围和停点,再看项目状态;空项目不等于授权完整开书。
- 53 | **开书** | "帮我开书",未限定规划层级 | 按确认点逐个走:定方向→定设定→卷纲→首批 10 章细纲,每个确认点作者说继续才往下;**最远停在细纲交付,不自动写正文** |
- 54 | **定设定** | "定设定",或已有题材定位、还没有角色与关系 | 定设定时刻:`references/workflow-setup.md` Phase 2,交付设定后停 |
+ 63 | **开书** | "帮我开书",未限定规划层级 | 按确认点逐个走:定方向→定设定→卷纲→前 10 章细纲,每个确认点作者说继续才往下;**最远停在细纲交付,不自动写正文** |
+ 64 | **定设定** | "定设定",或已有题材定位、还没有角色与关系 | Phase 2,交付设定后停 |
- 56 | **日更续写** | 关键词("日更"/"续写"/"继续写")**且**项目已有正文+追踪 | 加载 `references/workflow-daily.md` |
- 57 | **大修** | "修改第X章" / "回炉" / "重写第X章",对象是已写正文 | 加载 `references/workflow-revision.md`;只改细纲不进此流程 |
+ 66 | **日更续写** | 关键词("日更"/"续写"/"继续写")**且**项目已有正文+追踪 | 按 workflow-daily 控制批次 |
+ 67 | **大修** | "修改第X章" / "回炉" / "重写第X章",对象是已写正文 | 按 workflow-revision;只改细纲不进此流程 |
- 63 **转入正文**:明确的正文请求只授权进入写作流程。落正文前重新完成本轮「写前必读」,按 workflow-chapter 处理缺 state、使 `tracking_commit.py check` 通过,任一未完成就停止;之后按原流程写作、质检、提交,不再问是否继续。
+ 73 **转入正文**:明确的正文请求只授权进入写作流程。落正文前重新完成本轮「写前必读」,按 workflow-chapter 开头修好缺文件,没修好就停;之后按原流程写作、质检、提交,不再问是否继续。
- 75 无法判断场景时,给 2-4 个白话选项(如「只聊结构」「写大纲」「写第N章正文」)让用户选,不贴场景表,也不开放式提问。
+ 85 无法判断场景时,给 2-4 个白话选项让用户选,不贴场景表,也不开放式提问。
- 79 所有给作者看的汇报、提问和停下说明只讲三件事:写了/改了什么(章名、发生了什么);要作者定的事(一句白话问题+白话选项+推荐默认);下一步。不写脚本、字段、参数名、状态码和内部清单名(如 排纲自查、供给自查、S1-S4、字数带);编号必带故事标签,如「伏笔 F057(那封信的去处)」。检查结果一句白话带过,如「自查过设定和前文,没发现冲突」。回执、Notice、Fallback 等机器行只放最末一行「技术备注:」,其前可有一句下一步建议(如新开对话)。汇报照各 workflow 的模板写,不带代码块围栏;子 agent 返回的术语由主会话翻译后再说。
+ 89 所有给作者看的汇报、提问和停下说明只讲故事:写了/改了什么(章名、发生了什么);要作者定的事(一句白话问题+白话选项+推荐默认);下一步。不写脚本、字段、参数名、状态码、版本号和内部清单名(如 排纲自查、写纲前查缺、字数带);编号必带故事标签,如「伏笔 F057(那封信的去处)」。检查结果一句白话带过,如「自查过设定和前文,没发现冲突」。不加技术备注行:版本提示、没请写作助手这类事各用一句白话说。汇报照各 workflow 的模板写,不带代码块围栏;子 agent 返回的术语由主会话翻译后再说。
- 85 > **对标书路径查找**:优先 `{项目}/对标/{书名}/`,不存在则回退 `拆文库/{书名}/`(`拆文库/` 是拆文原始产出,`对标/` 是本项目引用视图,首次引用的复制规则见 workflow-setup.md「对标发现」第 3 条)。
+ 95 > **对标资料**:路径查找、无对标的判定、缺资料怎么办,都只在 benchmark-recall.md 定义。
- 87 > **卷纲不整读**:一律走 `{PYTHON} {skill 根}/scripts/outline_view.py --unit {单元ID} {卷纲路径}`(只要契约用 `--contract`,看目录用 `--toc`);找不到单元就核对单元ID或先补卷纲,不改用整读。排纲底稿放 `大纲/排纲底稿_{单元ID}.md`,只在排纲/补纲时读;取段器的作用域、历史与校验选项见 artifact-protocols.md 卷纲模板。
+ 97 > **卷纲不整读**:一律走 `{PYTHON} {skill 根}/scripts/outline_view.py --chapter {章号} {卷纲路径}`(知道编号也可用 `--unit {编号}`;只要卷级部分用 `--contract`,看目录用 `--toc`);找不到就核对章节范围或先补卷纲,不改用整读。
- 89 > **新增物三级**(排纲、写正文、处置共用;只看下一章需不需要知道它存在过):
+ 99 > **新增物三级**(缺东西时三种处理;排纲、写正文、处置共用;只看下一章需不需要知道它存在过):
- 91 > - **写了要报**:具名配角、势力、复用地点属性、能力形态、规矩、刻度、新伏笔、新关系或承诺、给主角留下的东西;照写并逐条进申报表(类型/名目/落在哪/后续义务;无写 `0`;末行「本章没写成的」),主会话核对后才算续写事实。
- 92 > - **先问作者**:新主线事件或反转、金手指规则与力量档位、真相或伏笔结算、经济锚点、读者契约、提前写后续章、改变细纲已定结果或人物决定、卷纲新增编号、碰主推线或终局底牌、与既有裁定或承诺冲突;写正文时不写,排纲时挂起列候选,由主会话问作者。
- 93 > 拿不准:写时按写了要报,处置时按先问作者。
+ 101 > - **补上并记下**:具名配角、势力、复用地点属性、能力形态、规矩、刻度、新伏笔、新关系或承诺、给主角留下的东西;照写并逐条进申报表(类型/名目/落在哪/后续义务;无写 `0`;末行「本章没写成的」),主会话核对后才算续写事实。正文里新长出的伏笔由主会话登记时取本卷伏笔表的下一个编号、追加进伏笔表(只增不改,不算改卷纲)。
+ 102 > - **先问作者**:新主线事件或反转、金手指规则与力量档位、真相或伏笔结算、经济锚点、读者期待、提前写后续章、改变细纲已定结果或人物决定、卷纲新增主线或故事线、碰这卷主打的线或后面才揭开的东西、与既有规矩或承诺冲突;写正文时不写,排纲时挂起列候选,由主会话问作者。
+ 103 > 拿不准:写时按补上并记下,处置时按先问作者。
- 99 按作者确认点分时刻读(见首屏写前必读第 1 条);每个时刻文件开头写了本时刻的交接规则,出卷纲、出细纲时不必再读 workflow-setup.md。
+ 109 按作者确认点分时刻走,每个时刻文件开头写了交接规则。
- 105 #### 项目文件与产物
- 106
- 107 要找某类产物放哪、或修复缺失文件时,完整读取 [references/project-files.md](references/project-files.md) 照做;开书建文件按各时刻文件写明的路径直接落盘,写正文时缺文件按 workflow-chapter 开头停下修,都不必先读它。
- 108
- 109 #### 单章写作流程
- 110
- 111 **执行前先读 [references/workflow-chapter.md](references/workflow-chapter.md)**,按其步骤 1-13 执行。日更批量另加载 `references/workflow-daily.md`。
+ 115 每章按 workflow-chapter「单章写作流程」逐步执行。
- 115 所有追踪写入都走 `scripts/tracking_commit.py`:`追踪/_tracking-state.json` 是唯一权威,`上下文.md`、角色快照、`伏笔.md`、时间线都由它派生,禁止手改。体积上限由脚本检查、超限一次报全;字段与上限见 [tracking-transaction.md](references/tracking-transaction.md),出错时才读。
+ 119 所有追踪写入都走 `scripts/tracking_commit.py`:`追踪/_tracking-state.json` 是唯一底账,`上下文.md`、角色快照、`伏笔.md`、时间线都由它自动生成,禁止手改。体积上限由脚本检查;字段与上限见 [tracking-transaction.md](references/tracking-transaction.md)。
- 130
- 131 ---
- 132
- 133 ## 参考资料索引
- 134
- 135 阶段必读项按首屏「写前必读」执行;写正文不按索引加读;规划或作者点名问技法时按 [参考索引](references/reference-index.md) 的加载条件选用。
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → cc6397f2b071
No earlier version was observed for comparison.
skills/story-publish/SKILL.md
Week of Nov 2, 2026 · +14 / −11 lines
Before Local scripts → After Local scripts
cc6397f2b071 → 7383fd6cd8ac
- 3 description: "小说发布准备:为发布平台整理并核对书名、简介、主角名、分类和标签,定稿后保存发布资料。触发方式:/story-publish、/发布资料、「填写平台建书资料」「建书表单」「起书名/写简介/选标签用于发布」;正文累计约 2 万字、准备上架时也适用。当前仅适配番茄(长篇与短故事),不代替后台填表或实际发布。"
+ 3 description: "小说发布准备:调用即生成并保存发布资料,缺失字段留空;按平台整理书名、笔名、分类、标签及所需简介。触发方式:/story-publish、/发布资料、「填写平台建书资料」「建书表单」「起书名/写简介/选标签用于发布」;正文累计约 2 万字、准备上架时也适用。当前适配番茄长篇与短故事(短故事无需简介),不代替后台填表或实际发布。"
+ 13 - **每次调用必须交付资料。** 不得只提问、列计划或因缺项结束本轮。先保存可逐步完善的资料,再补问;所有未获取或未确认的填写值留空。平台未适配、书目录不明、封面未就绪都不豁免生成。回复前确认文件存在且可读并给出路径;写入失败或无写入能力时,在回复中完整输出资料并说明未落盘。
- 15 - **平台候选只取自本 skill 的平台参考文件。** 不凭记忆,不从扫榜、拆文、选题材料里挪用,平台之间不共享。没有故事事实时先问,不编人物、情节或卖点。
+ 16 - **平台候选只取自本 skill 的平台参考文件。** 不凭记忆,不从扫榜、拆文、选题材料里挪用,平台之间不共享。没有故事事实时先留空、保存后补问,不编人物、情节或卖点。
- 20 书目录:作者指定的优先,其次 `.active-book`;指向不明或多本书分不清时问作者,不从目录名猜。只读,不改设定、不启动写作阶段。
+ 21 书目录:作者指定的优先,其次 `.active-book`;指向不明或多本书分不清时先在当前工作目录保存草案,并列出待确认的书目录,不猜作品、不读取不明作品。只读,不改设定、不启动写作阶段。
- 24 - `选题决策.md`、拆文、扫榜材料只能支撑建议;暂定书名、角色卡姓名不自动成为定稿。设定里没写书名时,以书目录名为现用书名。
+ 25 - `选题决策.md`、拆文、扫榜材料只能支撑建议;暂定书名、角色卡姓名和目录名不自动成为定稿。未获取已确认书名时留空。
- 30 其他平台:明确说“当前未适配”,请作者提供带日期的建书表单截图或官方说明;拿到前只给不针对平台的书名、简介草案,不套用番茄规则。新增平台时照 `fanqie.md` 的结构写参考文件,注明核验日期和范围。
+ 31 其他平台:明确说“当前未适配”,先保存平台无关的资料草案,未知字段留空;再请作者提供带日期的建书表单截图或官方说明,不套番茄规则。新增平台时照 `fanqie.md` 的结构写参考文件,注明核验日期和范围。
- 34 1. 确认目标平台和作品类型(长篇/短故事),在回复开头写明平台、适配状态,以及平台参考里的核验日期与范围。
+ 35 1. 调用即先生成并保存资料骨架,再逐步补齐。用已知目标平台、作品类型和平台参考的核验日期与范围;平台或类型未知就留空、列待办,不猜,也不等待补问回复才输出。先读已有同名文件,按下文保护作者修改。
- 37 4. 书名和简介确认后,按「封面」一节处理。
- 38 5. 本轮要的字段都有了结论(已确认,或作者决定不填)时保存文件;还没保存时,在回复里给出完整草案。保存后的回复只说这次写进了什么、还差什么,并给出文件路径,不重贴全文。
+ 38 4. 已有书名、笔名及题材依据时按「封面」处理,不以简介确认作为前置条件。番茄短故事无需平台简介,用设定中的梗概、题材招式和目标情绪支持封面。
+ 39 5. 本轮已知信息写入资料,未获取或未确认的字段留空,并在「待作者确认」列出;不要为填满文件编造书名、笔名或其他值。封面选择或补问不阻塞保存。回复说明文件路径、已填写和缺失项;只有所有需求均有结论时才说“发布资料准备完成”。无文件写入能力时在回复中完整输出草案,并明确未落盘。
- 45 把已确认的书名、简介、笔名、平台、题材和角色/场景事实交给 `story-cover`,缺笔名时补问:直接生成走它的完整流程,仅提示词走它的 Step 1-3。两种都把完整提示词原文写进「封面」小节,生图成功另记图片路径。`story-cover` 不可用(如 OpenClaw 缺 Key 时发现不到)、失败或作者暂缓时,把原因写进「待作者确认」,不阻塞其他字段;生图失败后改仅提示词要作者同意。只有提示词或未保存的图片,不说“封面已备妥”。`story-cover` 的风格、尺寸建议不替代平台规格。
+ 46 把已确认的书名、笔名、平台及作品中的题材依据交给 `story-cover`:长篇用题材类型、核心梗;短篇用梗概、题材招式、目标情绪。已有简介可作补充参考,与平台是否填写简介无关,不为封面另拟或强求简介。缺书名或笔名时先保存资料,将封面字段留空并列待办;仅提示词模式缺题材依据时也先留待确认。直接生成走完整流程,仅提示词走 Step 1-3。完整提示词写进「封面」,成功另记图片路径。入口不可用、失败或暂缓时写明原因,不阻塞保存;生图失败后改仅提示词须作者同意。仅有提示词不称“封面已备妥”,风格尺寸建议不替代平台规格。
- 49 文件名是 `发布资料-<目标平台>.md`,目标平台用平台参考元信息里的 `platform` 原文(如 `发布资料-番茄小说.md`)。放在书目录:长篇是 `正文/` 的上一级,短篇是 `正文.md` 所在目录;还没有正文时直接放书目录下。已有同名文件时先读,和作者手改的内容冲突就先问,不覆盖;旧文件按下面的格式重排,保留作者手写内容。
+ 50 文件名是 `发布资料-<目标平台>.md`,目标平台用平台参考元信息里的 `platform` 原文(如 `发布资料-番茄小说.md`)。放在书目录:长篇是 `正文/` 的上一级,短篇是 `正文.md` 所在目录;还没有正文时直接放书目录下。已有同名文件先读;有手改冲突先另存本轮草案,再请作者确认,不覆盖原文件。无冲突时直接补齐或保留已有资料,不为每次调用重复建文件。
+ 51
+ 52 平台未知先用 `发布资料-待确认平台.md`;书目录未知先存当前工作目录,位置列待确认。未知平台或类型不套平台字段,不宣称通过平台校验;确认后再迁移和补齐,目标文件已存在先核对。已有文件有冲突时保留原文件,本轮草案另存不重名文件并告知路径。
- 54 - 元信息后紧接 `# 书本名称:<书名>`,然后是基础字段、`## 封面`、平台的标签或分类小节、`## 作品简介`、`## 待作者确认`、`## 待平台核实`、`## 来源说明`。基础字段和标签小节以平台参考元信息里该作品类型的 `basics`、`tag_sections` 为准,每个字段一行 `- 字段:值`,同一字段多个值用顿号分隔。
+ 57 - 元信息后紧接 `# 书本名称:<书名>`,然后是基础字段、`## 封面`、平台标签或分类、所需简介、`## 待作者确认`、`## 待平台核实`、`## 来源说明`。平台规则 `synopsis: false` 时不输出「作品简介」(番茄短故事);其余保留。基础字段和标签以 `basics`、`tag_sections` 为准,每个字段独立一行 `- 字段:值`,多值用顿号分隔。
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → cc6397f2b071
No earlier version was observed for comparison.
skills/story-review/SKILL.md
Week of Nov 2, 2026 · +1 / −1 lines
Before Local scripts → After Network or broad shell
cc6397f2b071 → 7383fd6cd8ac
- 9 > Spawn 版本提示(不阻断 spawn):先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 38` 不一致时(标记缺失、字段缺失/非整数、小于或大于 38)**照常按当前宿主角色来源检查并 spawn**;同时在「这次怎么审的」里用一句白话提示作者「审稿助手是旧版,运行 /story-setup(ZCode 先更新插件)后新开会话」,`Notice: agents bundle 版本不匹配(项目 {N},本版 38)` 原文写进技术备注行;大于 38 时额外提示先更新 oh-story-claudecode,不要用本地旧版 setup 降级覆盖。版本提示本身不触发降级;文件缺失或异常、工具不可用、递归限制或调用失败按 Phase 0 处理,技术备注写 `Fallback: ... -> solo`。
+ 9 > Spawn 版本提示(不阻断 spawn):先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 40` 不一致时(标记缺失、字段缺失/非整数、小于或大于 40)**照常按当前宿主角色来源检查并 spawn**;同时在「这次怎么审的」里用一句白话提示作者「审稿助手是旧版,运行 /story-setup(ZCode 先更新插件)后新开会话」,`Notice: agents bundle 版本不匹配(项目 {N},本版 40)` 原文写进技术备注行;大于 40 时额外提示先更新 oh-story-claudecode,不要用本地旧版 setup 降级覆盖。版本提示本身不触发降级;文件缺失或异常、工具不可用、递归限制或调用失败按 Phase 0 处理,技术备注写 `Fallback: ... -> solo`。
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → cc6397f2b071
No earlier version was observed for comparison.
skills/story-setup/SKILL.md
Week of Nov 2, 2026 · +6 / −6 lines
Before Network or broad shell → After Network or broad shell
cc6397f2b071 → 7383fd6cd8ac
- 3 version: 1.3.6
+ 3 version: 1.3.8
- 29 - `agents_version` 缺失、非整数或小于 `38` → 标记为待更新,继续执行当前部署
- 30 - `agents_version: 38` → 使用 AskUserQuestion 确认是否重新部署;提示里写明重新部署只用**当前本地 skill 包**刷新项目文件,要拿 skill 本身的新版本得先更新 oh-story-claudecode(`npx skills add` 或 marketplace),再回来重跑
- 31 - `agents_version` 大于 `38` → 当前 story-setup 比项目部署旧;停止以避免降级覆盖,提示先更新 oh-story-claudecode,不写任何部署文件
+ 29 - `agents_version` 缺失、非整数或小于 `40` → 标记为待更新,继续执行当前部署
+ 30 - `agents_version: 40` → 使用 AskUserQuestion 确认是否重新部署;提示里写明重新部署只用**当前本地 skill 包**刷新项目文件,要拿 skill 本身的新版本得先更新 oh-story-claudecode(`npx skills add` 或 marketplace),再回来重跑
+ 31 - `agents_version` 大于 `40` → 当前 story-setup 比项目部署旧;停止以避免降级覆盖,提示先更新 oh-story-claudecode,不写任何部署文件
- 92 agents_version: 38
- 93 setup_skill_version: 1.3.6
+ 92 agents_version: 40
+ 93 setup_skill_version: 1.3.8
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → cc6397f2b071
No earlier version was observed for comparison.
skills/story-short-analyze/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Instructions only → After Instructions only
cc6397f2b071 → 7383fd6cd8ac
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → cc6397f2b071
No earlier version was observed for comparison.
skills/story-short-scan/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
cc6397f2b071 → 7383fd6cd8ac
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → cc6397f2b071
No earlier version was observed for comparison.
skills/story-short-write/SKILL.md
Week of Nov 2, 2026 · +25 / −31 lines
Before Local scripts → After Network or broad shell
cc6397f2b071 → 7383fd6cd8ac
- 15 短篇按作者当前要做的事分阶段加载,阶段之间靠落盘文件交接。创建或修改故事文件前,先判断当前时刻,再完整读取该时刻的必读项;分块读取直到 EOF,`rg` 检索或局部摘读不算读完。**只读本 SKILL.md 不算完成门禁。**
+ 15 短篇按作者当前要做的事分时刻读文件,时刻之间靠落盘文件交接。创建或修改故事文件前,先判断当前时刻,按下表读完(这张表是唯一的读取清单);只读本文件、`rg` 检索或摘读都不算。**按节读只允许两种**:本表点名的节,或文件内「什么时候读这份」点名的节;其余整份读到结尾。缺文件、没读完或题材还没对上唯一的题材包就停,报准确路径或待定项,**不得创建或修改故事产物**。每个时刻、每个会话重新读。
- 17 | 时刻 | 作者确认什么 | 读什么 | 落盘 |
- 18 |---|---|---|---|
- 19 | 定情绪(Phase 1) | 读者读完的感觉、题材方向 | 本文件 | 进构思时写入 `设定.md` |
- 20 | 构思(Phase 2) | 故事核、人物、反转、付费点 | ① `references/workflow-design.md`、`references/submission-craft.md`、`references/short-craft.md`、`references/short-reversal.md` ② 核心 10 题材读一个精确的 `references/genre-styles/{题材}.md`,冷门题材读 `references/genre-writing-formulas.md` ③ 有反派或真相揭露设计时读 `references/villain-and-reveal.md`,不适用时在设计校验区写明原因 | `设定.md`、`小节大纲.md` |
- 21 | 写正文(Phase 3–4) | 成稿 | Phase 3 写正文前完整读取 `references/workflow-draft.md`,按其「写前加载」读写作手法;Phase 4 精修前完整读取 `references/workflow-revision.md` | `正文.md` |
+ 17 | 时刻 | 作者确认什么 | 必读 | 条件满足才读 | 落盘 |
+ 18 |---|---|---|---|---|
+ 19 | 定情绪(Phase 1) | 读者读完的感觉、题材方向 | 本文件 | — | 进构思时写入 `设定.md` |
+ 20 | 构思(Phase 2) | 故事核、人物、反转、付费点 | `workflow-design.md`、`submission-craft.md`、`short-craft.md`、`short-reversal.md`、`emotional-methods.md`「情感拉扯节奏设计」;核心 10 题材读一个 `genre-styles/{题材}.md`,冷门读 `genre-writing-formulas.md` | 有反派或真相揭露:`villain-and-reveal.md`;有对标或参考小说:`benchmark-recall.md`;付费点断点拿不准:`hooks-chapter.md`「2. 节尾」 | `设定.md`、`小节大纲.md` |
+ 21 | 写正文(Phase 3) | 成稿 | `workflow-draft.md`、`short-format.md`、`short-craft.md`、`scene-craft.md`、设定.md 写的那个题材包(冷门不读) | 写羁绊或余韵:`emotional-methods.md`「情感虐心三板斧」;对白驱动的博弈、审判、打脸:`dialogue-mastery.md`「什么时候读这份」和它点名的一节;交给写手:`agent-calls.md` | `正文.md` |
+ 22 | 精修(Phase 4) | 交付 | `workflow-revision.md`、`short-format.md` | 主会话自己去味:`short-deslop.md`,拿不准某条信号时查 `banned-words.md` 对应一节;去味交给写手:`agent-calls.md` | `正文.md` |
+ 23 | 管理作者习惯 | 记、改、忘 | `author-memory.md`;完成即停,不建书、不写正文 | — | — |
- 23 构思必读项须在首次写入 `设定.md` / `小节大纲.md` 前读完。任一必需路径不存在、不可读,或题材尚未对应到唯一 reference 时,立即停止,报告准确路径或待定项,**不得创建或修改故事产物**。故事文件只记录选出的题材招式、反转计算等设计,不写“已读 references”的回执。进入每个时刻都按当前任务完整回读。
+ 25 故事文件只记录选出的套路、反转位置等设计,不写“已读 references”的回执。
- 25 **交接只靠落盘**:作者在对话里定下的字数、平台、人称、偏好、红线和否掉的方案,构思交付前写进 `设定.md`;写正文只读两份设计文件与本时刻的写作手法,不重读构思方法论,也不回翻对话。
- 26 **换上下文**:构思阶段加载最多,汇报末尾建议作者新开对话说「写正文」;作者选择在本对话接着写时照常执行。新对话中,两份设计文件通过构思完成门禁即可进入写正文。
+ 27 **交接只靠落盘**:作者在对话里定下的字数、平台、人称、偏好、红线和否掉的方案,构思交付前写进 `设定.md`;写正文只读两份设计文件与本时刻的写作手法,不重读构思方法,也不回翻对话。
+ 28 **换上下文**:构思时刻读得最多,汇报末尾建议作者新开对话说「写正文」;作者选择在本对话接着写时照常执行。新对话中,两份设计文件通过构思完成门禁即可进入写正文。
- 30 > Agent 只查当前宿主:Claude `.claude/agents`(`subagent_type`)、OpenCode `.opencode/agents`(`subagent` 的 `agent`)、Codex `.codex/agents` TOML(`agent_type`)、Antigravity `.agents/agents`(`invoke_subagent` + `TypeName`);ZCode 查插件注册的同名角色,用 `Agent` 按实际 schema 派发,不要求 `.zcode/agents`。主会话自己写正文、去味是常态,不报;作者明确要交给写作助手而角色/工具缺失或 unknown agent 时,由主会话接手并一句白话告诉作者,`Fallback: project custom agents unavailable -> solo` 原文只进汇报最后一行「技术备注:」。
+ 32 > 专业 agent 只查当前宿主:Claude `.claude/agents`(`subagent_type`)、OpenCode `.opencode/agents`(`subagent` 的 `agent`)、Codex `.codex/agents` TOML(`agent_type`)、Antigravity `.agents/agents`(`invoke_subagent` + `TypeName`);ZCode 查插件注册的同名角色,用 `Agent` 按实际 schema 派发,不要求 `.zcode/agents`。主会话自己写正文、去味是常态,不报;作者明确要交给写作助手而角色/工具缺失或返回 unknown agent 时,由主会话接手,对作者只说「这次我自己写」。
- 32 > Spawn 版本提示(不阻断 spawn):先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 38` 不一致时(标记缺失、字段缺失/非整数、小于或大于 38)**照常按当前宿主角色来源检查并 spawn**,同时用一句白话提示作者「写作助手是旧版,运行 /story-setup(ZCode 先更新插件)后新开会话」,`Notice: agents bundle 版本不匹配(项目 {N},本版 38)` 原文写进技术备注行;大于 38 时额外提示先更新 oh-story-claudecode,不要用本地旧版 setup 降级覆盖。只有当前宿主角色缺失或不暴露调用能力时才降级 solo/direct,`Fallback: ... -> solo` 同样只进技术备注行。
- 33
- 34 **文风裁决**:正文写作、改写或审稿前先读 [references/style-resolution.md](references/style-resolution.md),加载本书文风并形成 `style_resolution`;无作者记忆也执行。当前请求、本书文风和 active 偏好按维度覆盖通用 references;同一裁决交给后续执行者。
+ 34 > 版本:项目根 `.story-deployed` 的 `agents_version` 与本版 `agents_version: 40` 不一致(缺失、非整数、更小或更大)时照常按当前宿主角色来源检查并 spawn,只对作者说一句「写作助手是旧版,运行 /story-setup(ZCode 先更新插件)后新开会话」;大于 40 时额外提示先更新 oh-story-claudecode,不要用本地旧版 setup 降级覆盖。只有当前宿主角色缺失或不暴露调用能力时才降级 solo/direct,对作者只说「这次我自己写」。
- 41 4. **开头 3 句定生死,结尾定传播**。开头必须包含钩子,结尾必须有余韵。
+ 41 4. **开头抓人,结尾留余韵**。开头写法以 short-craft「开头事件密度」为准,题材包「开篇范式」覆盖它。
- 48 管理习惯读 `references/author-memory.md`(整理、超编、迁移按其中指路)。仅管理习惯时完成即停,不建书、不写正文。
+ 48 管理习惯按上表读 `references/author-memory.md`(整理、超编、迁移按其中指路)。
- 52 - **按题材选写法**:确定题材后,按文风裁决选用题材包的腔调、开篇、钩子、情绪烈度、金句、招式与收尾;追妻按时代变体及小三/死人文学分支选择。冷门题材用公式安排结构,腔调按 `short-craft.md`
+ 52 - **按题材选写法**:确定题材后选用[题材包](references/genre-styles/)的腔调、开篇、钩子、情绪烈度、金句、套路与收尾;追妻按时代变体及小三/死人文学分支选择。冷门题材用公式安排结构,腔调按 `short-craft.md`。写法冲突时的先后见 short-craft 开头。
- 69 | 情绪类型 | 适合场景 | 难度 | 常配题材包 |
+ 69 | 情绪类型 | 适合场景 | 难度 | 常见题材 |
- 84 存在本篇 `对标/`、项目根 `拆文库/` 或用户提供参考小说时,先完整读取 [references/benchmark-recall.md](references/benchmark-recall.md),执行对标发现、排除本书续写基线、题材匹配与召回。无外部对标时仍按原题材包执行。
+ 84 存在本篇 `对标/`、项目根 `拆文库/` 或用户提供参考小说时,先完整读取 [references/benchmark-recall.md](references/benchmark-recall.md),执行对标发现、排除本书已写部分、题材匹配与召回。无外部对标时仍按原题材包执行。
- 94 进入正文写作前,完整读取 [references/workflow-draft.md](references/workflow-draft.md),执行交付参数锁定、写前验收与逐场景写作;只做构思或精修时不加载。
+ 94 进入正文写作前,完整读取 [references/workflow-draft.md](references/workflow-draft.md),执行交付参数锁定、写前验收与逐场景写作;只做构思或精修时不加载。下面两段是写正文和精修共用的完成标准,只在这里写。
- 97 1. **写作时**:每节围绕一个主问题推进;让风险、信息、关系、资源、决定、行动或读者理解至少发生一项可见变化。相关情节点可以由同一动作链或对话同时兑现,不为拆成多个“子事件”重复铺陈。
- 98 2. **写完后**:对照 `小节大纲.md` 检查批准内容是否落地、因果与下一步是否读得懂、感知/反应是否提供新信息、伏笔/物件是否按计划出现。
+ 97 1. **写作时**:每节围绕一个主问题推进;让风险、信息、关系、资源、决定、行动或读者理解至少发生一项具体变化。相关情节点可以由同一动作链或对话同时兑现,不为拆成多个“子事件”重复铺陈。
+ 98 2. **写完后**:对照 `小节大纲.md` 检查批准内容是否落地、因果与下一步是否读得懂、感知/反应是否提供新信息、埋下的东西后面有没有接上。
- 104 - [ ] 总字数进入锁定的用户范围;作者没给时进入 `设定.md` 的目标字数(构思时按所选平台的投稿区间定,未定平台用 8000-12000,见 submission-craft.md)
+ 104 - [ ] 总字数(交付检查报的非空白字数)进入锁定的用户范围;作者没给时进入 `设定.md` 的目标字数
- 106 - [ ] 节数 = 小节大纲规划节数(不得合并/省略)
+ 106 - [ ] 节数 = 小节大纲规划节数(不得合并/省略;某节确实不需要独立存在,回构思改大纲,不在写正文时偷减)
- 109 - [ ] `node scripts/check-ai-patterns.js --check --fail-on=blocking 正文.md` 无 blocking 命中;其余提示先通读,确属问题再改
- 110 - [ ] `node scripts/check-degeneration.js --check 正文.md` 无 blocking 退化命中(复读/截断/工程词泄漏)
+ 109 - [ ] `node {skill 根}/scripts/check-ai-patterns.js --check --fail-on=blocking {短篇目录}/正文.md` 无 blocking 命中;其余提示先通读,确属问题再改
+ 110 - [ ] `node {skill 根}/scripts/check-degeneration.js --check {短篇目录}/正文.md` 无 blocking 退化命中(复读/截断/工程词泄漏)
- 128
- 129 ---
- 130
- 131 ## 参考资料
- 132
- 133 阶段必读项按首屏「写前必读」执行;其他资料按 [参考索引](references/reference-index.md) 的加载条件选用。
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Local scripts
First observation → cc6397f2b071
No earlier version was observed for comparison.
Verified commit 7383fd6cd8acee8cf9f7805b058d1f342874a7c2
git clone --filter=blob:none --no-checkout https://github.com/zenstory-ai/oh-story-claudecode.git .hotskills/zenstory-ai-oh-story-claudecode && git -C .hotskills/zenstory-ai-oh-story-claudecode checkout --detach 7383fd6cd8acee8cf9f7805b058d1f342874a7c2
# Copy each selected skill directory from .hotskills/zenstory-ai-oh-story-claudecode into .claude/skills/<skill-name>/git clone --filter=blob:none --no-checkout https://github.com/zenstory-ai/oh-story-claudecode.git .hotskills/zenstory-ai-oh-story-claudecode && git -C .hotskills/zenstory-ai-oh-story-claudecode checkout --detach 7383fd6cd8acee8cf9f7805b058d1f342874a7c2
# Copy each selected skill directory from .hotskills/zenstory-ai-oh-story-claudecode into .agents/skills/<skill-name>/Heat
7.8- Star growth, last 7 daysAhead of 92% of tracked repositories
- Star growth, last 24 hoursAhead of 92% of tracked repositories
- Rank movement, last 7 daysAhead of 78% of tracked repositories
- Commits, last 30 daysAhead of 92% of tracked repositories
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekAhead of 0% of tracked repositories
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
Individual skills in this repository
- browser-cdp
skills/browser-cdp - story
skills/story - story-cover
skills/story-cover - story-deslop
skills/story-deslop - story-import
skills/story-import - story-long-analyze
skills/story-long-analyze - story-long-scan
skills/story-long-scan - story-long-write
skills/story-long-write - story-publish
skills/story-publish - story-review
skills/story-review - story-setup
skills/story-setup - story-short-analyze
skills/story-short-analyze - story-short-scan
skills/story-short-scan - story-short-write
skills/story-short-write
How it works
browser-cdp
When your agent uses it
Use this skill when you need to control a Chrome browser via CDP (Chrome DevTools Protocol) to reuse existing login sessions. Covers: launching Chrome in debug mode, opening URLs, waiting for page load, evaluating JavaScript, taking snapshots, and extracting auth tokens. Trigger phrases: browser automation, CDP, agent-browser, 浏览器操作, 操作浏览器, Chrome CDP, 复用登录态, extract token from browser.
What it loads into context
Frontmatter
132 tokensAlways available to the agent
SKILL.md
2,372 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 前置条件
- 启动流程(每次都按这个顺序)
- 启动脚本选项
- 常用操作
- 停止 / 清理
- 长命令加超时
- 常见问题
Scripts executed separately
scripts/setup-cdp-chrome.js
Files
../../.claude-plugin/marketplace.jsonasset554 bytes../../.claude-plugin/plugin.jsonasset245 bytesSKILL.mdcore8,083 bytesSKILL.mdcore8,083 bytesSKILL.mdcore8,083 bytesSKILL.mdcore8,083 bytesSKILL.mdcore8,083 bytesSKILL.mdcore8,083 bytesSKILL.mdcore8,083 bytesSKILL.mdcore8,083 bytesSKILL.mdcore8,083 bytesSKILL.mdcore8,083 bytesSKILL.mdcore8,083 bytesscripts/setup-cdp-chrome.jsruns40,851 bytes
Read SKILL.md
# Browser CDP 操作工具
通过 CDP(Chrome DevTools Protocol)连接 Chrome,复用登录态并执行浏览器操作。
## 前置条件
- macOS / Linux / Windows(实验性),已安装并使用过 Google Chrome,来源 profile 已存在
- Node.js 20+
- `agent-browser` 已安装:`npm install -g agent-browser`
> 启动或重建时,若需结束 Chrome 进程,先按下方流程征得同意;未保存的标签页或草稿可能丢失。
---
## 启动流程(每次都按这个顺序)View the complete source on GitHubstory
When your agent uses it
网络小说工具箱主入口。根据用户需求自动路由到对应 skill,并可启动本地 Dashboard。触发方式:/story、$story、/story dashboard、/网文、「我想写小说」「记住我的写作习惯」「打开工作台」「检查更新」。
What it loads into context
Frontmatter
94 tokensAlways available to the agent
SKILL.md
3,969 tokensWhen the skill is activated
Reference documents
0 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 路由表
- 书目录判定
- 作者习惯管理
- 查询
- 多书切换
- Dashboard 工作台
- 版本更新检查
Scripts executed separately
assets/app.jsscripts/dashboard-server.mjs
Files
SKILL.mdcore14,125 bytesSKILL.mdcore14,125 bytesVERSIONasset7 bytesassets/app.jsruns38,854 bytesassets/index.htmlasset10,276 bytesassets/styles.cssasset26,967 bytesassets/tokens.cssasset9,064 bytesscripts/dashboard-server.mjsruns33,012 bytes
Read SKILL.md
# story:网文工具箱路由
识别用户的写作需求,并路由到对应 skill。
## 路由表
各宿主的调用写法:Claude Code、OpenCode 用 `/story-*`(Claude 插件安装时为 `/oh-story:story-*`),也可 `Skill("story-*")`;Codex、ZCode 用 `$story-*`(Codex 也可 `/skills`);OpenClaw 用 `/skill story-*`;Antigravity、Reasonix 在 skill 入口选择或用自然语言点名。下表按 `/story-*` 写,其他宿主照此替换,本文件其余地方同理。
| 用户意图 | 关键词示例 | 路由到 |
|---|---|---|
| 长篇规划/写作 | 讨论长篇结构、规划剧情、开书、写大纲、补细纲、长篇、连载 | `/story-long-write` |
| 发布准备 | 发布资料、建书表单、平台书名简介标签、建书资料 | `/story-publish` |
| 写短篇 | 短篇、盐言、一万字 | `/story-short-write` |
| 长篇拆文 | 拆文、分析这本书、黄金三章、灵感库、跨书灵感聚合 | `/story-long-analyze` |
| 短篇拆文 | 拆短篇、分析这个故事 | `/story-short-analyze` |View the complete source on GitHubstory-cover
When your agent uses it
小说封面生成与提示词设计。根据书名、作者名和题材构建封面提示词;用户只要提示词时不生图,要求封面图时调用 GPT-Image-2,Codex CLI 优先使用内置 ImageGen。触发方式:/story-cover、/封面、「帮我做个封面」「生成封面图」「封面提示词」「封面设计」。
What it loads into context
Frontmatter
162 tokensAlways available to the agent
SKILL.md
3,103 tokensWhen the skill is activated
Reference documents
4,752 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 生成通路
- 生成流程
- 参考资料
Files
SKILL.mdcore10,456 bytesSKILL.mdcore10,456 bytesreferences/api-fallback.mddoc4,808 bytesreferences/cover-styles.mddoc11,168 bytes
Read SKILL.md
# story-cover:小说封面生成
根据书名和题材生成包含书名、笔名的完整封面,让读者一眼看出题材和氛围。
**仅提示词模式**:用户只要提示词,或 `story-publish` 选了仅提示词时,只做 Step 1-3,交付完整提示词,不需要生图工具、API Key 或输出目录;要封面图才继续 Step 4-6。由 `story-publish` 调用时,它传来的已确认书名、简介、笔名、平台和题材不再重问;结束时返回完整提示词原文,生图成功再附图片路径和质量检查结果,失败就说明原因。
---
## 生成通路
- **内置生图(优先)**:当前会话可调 Codex `$imagegen` / `image_gen` 或 Antigravity `generate_image` / `image-generator` 时,直接调用生成并保存,无需 `OPENAI_API_KEY` 或 `GPT_IMAGE_API_KEY`,不跑 `curl`。
- **API 回退**:仅在无内置工具或用户指定 API 时使用,需 `GPT_IMAGE_API_KEY`;变量和命令见 [references/api-fallback.md](references/api-fallback.md),走该通路再读。工具缺失不等于订阅不支持生图;内置失败先报错,不静默切到收费 API。
## 生成流程
View the complete source on GitHubstory-deslop
When your agent uses it
网文去AI味。从表达、叙事用笔、故事因果三层诊断并修复文本,保留作者文风与已定剧情。触发方式:/story-deslop、/去AI味、「去AI味」「这篇太AI了」「网文去AI味」。
What it loads into context
Frontmatter
110 tokensAlways available to the agent
SKILL.md
3,265 tokensWhen the skill is activated
Reference documents
12,324 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 执行边界
- 去味流程
- 流程衔接
Scripts executed separately
scripts/check-ai-patterns.jsscripts/check-degeneration.jsscripts/normalize-punctuation.jsscripts/style-whitelist.js
Files
SKILL.mdcore12,078 bytesSKILL.mdcore12,078 bytesSKILL.mdcore12,078 bytesSKILL.mdcore12,078 bytesreferences/agent-calls.mddoc1,258 bytesreferences/banned-words.mddoc11,297 bytesreferences/deslop-gates.mddoc2,536 bytesreferences/expression.mddoc9,746 bytesreferences/narrative-focus.mddoc6,856 bytesreferences/short-deslop.mddoc1,570 bytesreferences/story-logic.mddoc6,051 bytesreferences/style-resolution.mddoc3,799 bytesscripts/check-ai-patterns.jsruns75,274 bytesscripts/check-degeneration.jsruns15,389 bytesscripts/normalize-punctuation.jsruns15,411 bytesscripts/style-whitelist.jsruns1,168 bytes
Read SKILL.md
# story-deslop:网文去AI味
**文风裁决**:先读 [references/style-resolution.md](references/style-resolution.md),加载本书文风,复用调用方的 `style_resolution` 与作者偏好;单独调用时按当前请求与本书文风裁决。同一裁决交给后续执行者。
**改写重点:表达自然、笔墨有重心、故事有依据;诊断与执行都按作者范围。**
---
## 执行边界
- 未限定范围的独立去味,完整检查表达、用笔、故事三层。三层是检查对象,不按词频分轻中重;每层可以没有问题。用户明确只查词句、某段或某类问题时,尊重范围。
- 普通去味可修表达、恢复已有承接、调整已定内容的详略;允许删除整段无功能内容,保护伏笔、因果、人物选择、情绪体验与揭露顺序。需要改变事件、动机、结果或新增成立条件时,按故事层区分设计提案和已授权重写。不能用新微动作、粗话、证据或冲突制造“真人感”。
- 文风裁决只影响表达,不改变事实与信息边界。准确直写、心理活动、带立场的叙述和有功能的停顿均可保留,不机械套 Show/Tell、句长或删减率。
- 用户只要检测或标注时,只出诊断,不修改正文。作者只说「去AI味」「这篇太AI了」时按改稿处理:表达与用笔直接改,故事层缺口给出方案,作者授权后再改。作者报告用白话、原文位置与阅读后果,不把检测类别名、脚本字段当评价。
- 长篇项目(书目录下有 `正文/` 与 `追踪/`)需要改变事件、关系、人物所知或结果时,即使作者已授权,也带着诊断和授权转 `/story-long-write`「修改第X章」执行,由那边备份原文并同步追踪;本流程只改表达、用笔和已有依据的承接。View the complete source on GitHubstory-import
When your agent uses it
逆向导入已有小说。将已写好的小说(半成品或完本)反向解析为标准项目目录结构,兼容 story-long-write / story-short-write 后续写作流程;内部复用 story-long-analyze / story-short-analyze 的拆解管道,按篇幅自动分流。触发方式:/story-import、「导入小说」「反向解析」「导入」「把我的书导进来」。
What it loads into context
Frontmatter
138 tokensAlways available to the agent
SKILL.md
3,427 tokensWhen the skill is activated
Reference documents
22,966 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 名词与目录边界(全流程硬约束)
- 时刻表与交接
- Phase 1:确认来源与范围
- Phase 2:深度分析
- Phase 3:结构迁移
- Phase 4:追踪初始化(仅长篇)
- Phase 5:汇报与激活
- 流程衔接
Scripts executed separately
scripts/build_outline_brief.pyscripts/check-outline-contract.jsscripts/outline_view.pyscripts/tracking_commit.pyscripts/wordcount_core.py
Files
SKILL.mdcore11,738 bytesreferences/benchmark-sync.mddoc4,103 bytesreferences/character-state-reverse.mddoc4,157 bytesreferences/deep-analysis.mddoc5,398 bytesreferences/import-report.mddoc4,482 bytesreferences/import-special-cases.mddoc2,607 bytesreferences/import-tracking.mddoc7,717 bytesreferences/length-routing.mddoc4,048 bytesreferences/outline-reverse-rules.mddoc6,156 bytesreferences/outline-reverse.mddoc2,845 bytesreferences/structure-mapping-long.mddoc21,931 bytesreferences/structure-mapping-short.mddoc10,333 bytesreferences/tracking-initialization.mddoc1,651 bytesscripts/build_outline_brief.pyruns16,109 bytesscripts/check-outline-contract.jsruns27,845 bytesscripts/outline_view.pyruns18,637 bytesscripts/tracking_commit.pyruns85,124 bytesscripts/wordcount_core.pyruns19,317 bytes
Read SKILL.md
# story-import:逆向导入已有小说
你是小说项目逆向工程师,把作者已有的书整理成**可续写的写作工程**,包含设定、大纲、正文及所需追踪。`拆文库/{导入书名}/` 保留为分析数据源;向作者汇报工程整理结果和续写入口。
> Agent 兼容性:只检查当前宿主:Claude `.claude/agents/{agent}.md`(`subagent_type`)、OpenCode `.opencode/agents/{agent}.md`(`subagent` 的 `agent`)、Codex `.codex/agents/{agent}.toml`(`agent_type`)、Antigravity `.agents/agents/agent-name/agent.md`(`invoke_subagent` + `TypeName`)。ZCode 查插件注册的同名角色,用 `Agent` 按实际 schema 派发,不要求 `.zcode/agents`。仅角色/工具不可用或返回未知 agent 时降级 solo/direct,不因其他端目录存在或宿主名固定串行。
>
> Spawn 版本提示(不阻断 spawn):先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 40` 不一致时(标记缺失、字段缺失/非整数、小于或大于 40)**照常按当前宿主角色来源检查并 spawn**,同时用一句白话提示作者「分析助手是旧版,运行 /story-setup(ZCode 先更新插件)后新开会话」,`Notice: agents bundle 版本不匹配(项目 {N},本版 40)` 原文写进汇报最后一行「技术备注:」;大于 40 时额外提示先更新 oh-story-claudecode,不要用本地旧版 setup 降级覆盖。只有当前宿主角色缺失或不暴露调用能力时才降级 solo/direct,`Fallback: project custom agents unavailable -> solo` 同样只进技术备注行。
## 名词与目录边界(全流程硬约束)
- `{导入书名}`:用户自己已经写到一半或已经完本、现在要重建为工程的小说;它的分析源固定为 `拆文库/{导入书名}/`。
- `{对标书名}`:用户另行选择的外部参考作品;它必须是独立拆解产物,来源固定为 `拆文库/{对标书名}/`,且不得指向本次导入源。
- `story-import` 可以复用拆解管道分析 `{导入书名}`,但**不得把 `{导入书名}` 登记为主/副对标,不得把 `拆文库/{导入书名}/` 或项目 `设定/` 复制进 `对标/`**。
- 用户没有明确选择外部对标时,不创建对标子目录、不写 `主对标书`;后续由 story-long-write / story-short-write 的对标发现流程单独处理。
View the complete source on GitHubstory-long-analyze
When your agent uses it
长篇网文拆文。保留黄金三章、逐章摘要、剧情、情绪、节奏、角色、设定和文风接口,以连续章节块完成因果、双时间线、关系与三维节奏分析;兼容旧成果直接使用、按需增强和断点续跑。含可选三层灵感库管道(灵感库、跨书灵感聚合、更新灵感库)。触发方式:/story-long-analyze、/长篇拆文、「帮我拆这本书」「拆这本书」「分析黄金三章」「深度拆解」「完整拆解」或提供小说文本文件路径。
What it loads into context
Frontmatter
190 tokensAlways available to the agent
SKILL.md
3,255 tokensWhen the skill is activated
Reference documents
29,965 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 分析边界
- 对作者说话
- 运行约定
- 按时刻读
- Phase 1:确认对象并检查目录
- Phase 2:按检查结果走哪条路
- 各阶段要点
- 状态与旧项目
Scripts executed separately
scripts/build_chapter_index.pyscripts/inspect_existing_assets.pyscripts/inspiration_index.pyscripts/manage_analysis_run.pyscripts/render_relation_chart.py
Files
SKILL.mdcore11,151 bytesreferences/author-facing.mddoc12,729 bytesreferences/final-checks.mddoc1,022 bytesreferences/index-rebuild.mddoc3,187 bytesreferences/inspiration-library.mddoc10,587 bytesreferences/pipeline-ops.mddoc11,357 bytesreferences/stage1-golden-chapters.mddoc6,819 bytesreferences/stage2-extraction.mddoc11,004 bytesreferences/stage3-plot-rhythm.mddoc20,790 bytesreferences/stage4-characters-settings.mddoc6,704 bytesreferences/stage5-report.mddoc2,756 bytesreferences/style-profile-generator.mddoc7,739 bytesreferences/synthesis-inputs.mddoc4,097 bytesscripts/build_chapter_index.pyruns20,937 bytesscripts/inspect_existing_assets.pyruns32,162 bytesscripts/inspiration_index.pyruns39,303 bytesscripts/manage_analysis_run.pyruns57,868 bytesscripts/render_relation_chart.pyruns19,423 bytes
Read SKILL.md
# story-long-analyze:长篇网文拆文
你是网络小说结构分析师。
**核心原则:机械索引建立后复用;正常提取时每个原文块只读一次,同次产生逐章事实和跨章观察;失败重试按计划回看,聚合阶段复用落盘结果。**
> Agent 兼容性:只检查当前宿主的 agent;ZCode 查插件注册的同名角色,用 `Agent` 按实际 schema 派发,不要求 `.zcode/agents`。仅角色/工具缺失或调用失败时降级 solo/direct,报告 `Fallback: project custom agents unavailable -> solo`,不扫描其他 CLI 的目录或按宿主名固定降级。
>
> Spawn 版本提示(不阻断 spawn):先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 40` 不一致时(标记缺失、字段缺失/非整数、小于或大于 40)照常按当前宿主角色来源检查并 spawn,同时报告 `Notice: agents bundle 版本不匹配(项目 {N},本版 40)` 并提示重新运行 `/story-setup` 后新开会话;大于 40 时额外提示先更新 oh-story-claudecode,不要用本地旧版 setup 降级覆盖。只有当前宿主角色缺失或不暴露调用能力时才降级 solo/direct。
## 分析边界
1. 只根据可读原文和已有资料下结论;缺失写“未知”或“文本未明确”。
2. 硬事实附章节、`source_locator` 或 5–15 字定位词;推断标证据等级。
3. 区分客观发生顺序、文本披露顺序、读者所知和角色所知。View the complete source on GitHubstory-long-scan
When your agent uses it
长篇网文扫榜。分析起点、番茄、晋江、七猫等平台排行榜与新书数据,提炼市场趋势与热门题材。触发方式:/story-long-scan、/长篇扫榜、「长篇什么火」「起点排行」「扫七猫新书」。
What it loads into context
Frontmatter
113 tokensAlways available to the agent
SKILL.md
2,658 tokensWhen the skill is activated
Reference documents
6,576 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 扫榜原则
- 扫榜流程
- 流程衔接
- 参考资料
Scripts executed separately
scripts/aggregate-rank.jsscripts/cdp-utils.jsscripts/ciweimao-rank-scraper.jsscripts/fanqie-rank-scraper.jsscripts/jjwxc-rank-scraper.jsscripts/qidian-rank-scraper.jsscripts/qimao-rank-scraper.js
Files
SKILL.mdcore8,934 bytesreferences/genre-trends.mddoc3,846 bytesreferences/platform-ciweimao.mddoc1,693 bytesreferences/platform-fanqie.mddoc2,867 bytesreferences/platform-jjwxc.mddoc1,898 bytesreferences/platform-qidian.mddoc3,435 bytesreferences/platform-qimao.mddoc2,558 bytesreferences/topic-decision.mddoc4,972 bytesscripts/aggregate-rank.jsruns32,105 bytesscripts/cdp-utils.jsruns8,564 bytesscripts/ciweimao-rank-scraper.jsruns9,554 bytesscripts/fanqie-rank-scraper.jsruns26,182 bytesscripts/jjwxc-rank-scraper.jsruns16,528 bytesscripts/qidian-rank-scraper.jsruns49,572 bytesscripts/qimao-rank-scraper.jsruns35,531 bytes
Read SKILL.md
# story-long-scan:长篇网文扫榜
你负责从长篇榜单的重复样本中识别题材候选,结合作者条件给出可行性、失败风险与验证动作。
**核心信念:单本排名提供线索,近期多榜单、多作品的重复模式才支持趋势判断。**
---
## 扫榜原则
### 原则 1:扫榜看模式,别只看排名
提取样本中重复的题材、设定、套路、书名词和简介卖点,判断能否支持趋势候选。
### 原则 2:各平台的热度口径不同View the complete source on GitHubstory-long-write
When your agent uses it
长篇网文规划与写作。支持只讨论结构、只写大纲或指定细纲,明确要求正文后再写章节。触发方式:/story-long-write、/写长篇、「帮我开书」「定设定」「出卷纲」「规划剧情」「写大纲」「补细纲」「日更」「续写」「继续写」「修改第X章」「回炉」「重写第X章」。
What it loads into context
Frontmatter
136 tokensAlways available to the agent
SKILL.md
3,975 tokensWhen the skill is activated
Reference documents
146,065 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 写前必读(强制,先读后写)
- 核心方法
- 写作流程
- 流程衔接
Scripts executed separately
scripts/author_memory_commit.pyscripts/build_architect_brief.pyscripts/build_writer_prompt.pyscripts/check-ai-patterns.jsscripts/check-degeneration.jsscripts/check-outline-contract.jsscripts/check-outline-copy.jsscripts/convert_outline_format.pyscripts/normalize-punctuation.jsscripts/outline_view.pyscripts/storyctl.pyscripts/style-whitelist.jsscripts/template_fence.pyscripts/tracking_commit.pyscripts/wordcount_core.py
Files
SKILL.mdcore13,678 bytesreferences/agent-calls.mddoc5,306 bytesreferences/artifact-protocols.mddoc11,577 bytesreferences/author-memory.mddoc9,928 bytesreferences/banned-words.mddoc11,297 bytesreferences/benchmark-recall.mddoc5,496 bytesreferences/character-basics.mddoc18,109 bytesreferences/character-relations.mddoc12,790 bytesreferences/cross-book-recall.mddoc4,142 bytesreferences/dialogue-mastery.mddoc11,714 bytesreferences/emotional-methods.mddoc8,320 bytesreferences/female-audience-writing.mddoc8,454 bytesreferences/genre-prose-cards.mddoc8,464 bytesreferences/genre-prose-cards/东方仙侠.mddoc2,800 bytesreferences/genre-prose-cards/传统玄幻.mddoc2,804 bytesreferences/genre-prose-cards/历史古代.mddoc2,659 bytesreferences/genre-prose-cards/历史脑洞.mddoc2,946 bytesreferences/genre-prose-cards/双男主.mddoc3,275 bytesreferences/genre-prose-cards/古言脑洞.mddoc2,697 bytesreferences/genre-prose-cards/古风世情.mddoc2,652 bytesreferences/genre-prose-cards/女频悬疑.mddoc2,649 bytesreferences/genre-prose-cards/女频种田.mddoc2,708 bytesreferences/genre-prose-cards/宫斗宅斗.mddoc2,552 bytesreferences/genre-prose-cards/年代.mddoc3,054 bytesreferences/genre-prose-cards/快穿.mddoc2,879 bytesreferences/genre-prose-cards/悬疑灵异.mddoc2,616 bytesreferences/genre-prose-cards/悬疑脑洞.mddoc2,812 bytesreferences/genre-prose-cards/战神赘婿.mddoc2,798 bytesreferences/genre-prose-cards/抗战谍战.mddoc2,734 bytesreferences/genre-prose-cards/星光璀璨.mddoc2,827 bytesreferences/genre-prose-cards/民国言情.mddoc2,811 bytesreferences/genre-prose-cards/流派兜底.mddoc13,430 bytesreferences/genre-prose-cards/游戏体育.mddoc2,911 bytesreferences/genre-prose-cards/玄幻脑洞.mddoc3,019 bytesreferences/genre-prose-cards/玄幻言情.mddoc2,623 bytesreferences/genre-prose-cards/现言脑洞.mddoc2,774 bytesreferences/genre-prose-cards/科幻末世.mddoc2,665 bytesreferences/genre-prose-cards/职场婚恋.mddoc2,611 bytesreferences/genre-prose-cards/西方奇幻.mddoc2,834 bytesreferences/genre-prose-cards/豪门总裁.mddoc3,346 bytesreferences/genre-prose-cards/都市修真.mddoc2,580 bytesreferences/genre-prose-cards/都市日常.mddoc3,766 bytesreferences/genre-prose-cards/都市种田.mddoc2,602 bytesreferences/genre-prose-cards/都市脑洞.mddoc3,482 bytesreferences/genre-prose-cards/都市高武.mddoc3,033 bytesreferences/genre-prose-cards/青春甜宠.mddoc2,814 bytesreferences/genre-readers.mddoc9,093 bytesreferences/long-chapter-hooks.mddoc7,058 bytesreferences/long-chapter-quality.mddoc3,414 bytesreferences/long-format.mddoc2,287 bytesreferences/long-genre-catalog.mddoc12,662 bytesreferences/long-genre-mechanics.mddoc12,348 bytesreferences/long-reversal.mddoc15,638 bytesreferences/long-suspense.mddoc15,450 bytesreferences/opening-design.mddoc4,378 bytesreferences/outline-methods.mddoc16,617 bytesreferences/outline-template.mddoc8,383 bytesreferences/plot-core-methods.mddoc6,586 bytesreferences/project-files.mddoc8,599 bytesreferences/reader-contract-and-progression.mddoc10,614 bytesreferences/revision-diagnosis.mddoc3,679 bytesreferences/style-combat-face.mddoc18,555 bytesreferences/tracking-initialization.mddoc1,651 bytesreferences/tracking-transaction.mddoc15,877 bytesreferences/workflow-chapter.mddoc14,914 bytesreferences/workflow-daily.mddoc7,423 bytesreferences/workflow-outline.mddoc14,408 bytesreferences/workflow-revision.mddoc6,694 bytesreferences/workflow-setup.mddoc13,812 bytesreferences/workflow-volume.mddoc7,953 bytesreferences/writing-craft.mddoc26,352 bytesscripts/author_memory_commit.pyruns76,766 bytesscripts/build_architect_brief.pyruns22,054 bytesscripts/build_writer_prompt.pyruns42,705 bytesscripts/check-ai-patterns.jsruns75,274 bytesscripts/check-degeneration.jsruns15,389 bytesscripts/check-outline-contract.jsruns27,845 bytesscripts/check-outline-copy.jsruns13,676 bytesscripts/convert_outline_format.pyruns20,267 bytesscripts/normalize-punctuation.jsruns15,411 bytesscripts/outline_view.pyruns18,637 bytesscripts/storyctl.pyruns33,969 bytesscripts/style-whitelist.jsruns1,168 bytesscripts/template_fence.pyruns2,655 bytesscripts/tracking_commit.pyruns85,124 bytesscripts/wordcount_core.pyruns19,317 bytes
Read SKILL.md
# story-long-write:长篇网文写作
你是网络小说创作教练,帮用户从选题、大纲到正文写完一本长篇网络小说。
## 写前必读(强制,先读后写)
创建或修改长篇故事文件前,按下表读完当前时刻的文件(这张表是唯一的读取清单);只读本文件、`rg` 检索或摘读都不算。**按节读只允许两种**:任务包切好的节,或本表、文件内「什么时候读这份」点名的节;其余文件整份读到结尾。缺文件或没读完就停,报准确路径,**不得先写正文再补读**;每个任务、每个会话重新读。
| 时刻 | 必读 | 条件满足才读 |
|---|---|---|
| 定方向 | `workflow-setup.md` | 没方向:`long-genre-catalog.md`(特殊题材只读对应一节);女频改读 `female-audience-writing.md`;平台、赛道、暂定书名:`genre-readers.md`;派子代理:`agent-calls.md` |
| 定设定 | `workflow-setup.md`;自己做加 `character-basics.md`、`reader-contract-and-progression.md`、`long-genre-mechanics.md`「核心梗三层递进设计」「金手指」、`character-relations.md`「人物关系类型」 | 女频:`female-audience-writing.md`;有感情线:`character-relations.md`「感情线阶段」;对标登记 ≥2 本:`cross-book-recall.md` |
| 出卷纲 | `workflow-volume.md`;自己排加 `artifact-protocols.md`、`outline-methods.md`「卷纲排法」、`reader-contract-and-progression.md` | 没有主对标:outline-methods「常见的八步结构」;有自创剧情段:「情绪模块公式」;换地图:「换地图」;有反转:`long-reversal.md`「反转类型」;感情线、对标同上 |
| 出细纲、补纲 | `workflow-outline.md`;自己出加 `outline-template.md`、`plot-core-methods.md`、`character-basics.md`、`long-chapter-hooks.md`「章尾钩子 13 式」「章首钩子 7 式」 | 含前 3 章:`opening-design.md`「开篇规划」;感情线、对标同上 |
| 写一章 | `workflow-chapter.md`;交写手加 `agent-calls.md`;自己写加 `long-format.md`、`writing-craft.md`、本章技法 | 新书第 1 章:`tracking-initialization.md`、`genre-prose-cards.md`「全书题材正文提示卡」与核对报告点名的卡;召回降档不成立:`benchmark-recall.md`;缺文件、找产物放哪:`project-files.md`;自己写第 1-3 章:`opening-design.md`「开篇落笔」;排查单章问题:`long-chapter-quality.md` |View the complete source on GitHubstory-publish
When your agent uses it
小说发布准备:调用即生成并保存发布资料,缺失字段留空;按平台整理书名、笔名、分类、标签及所需简介。触发方式:/story-publish、/发布资料、「填写平台建书资料」「建书表单」「起书名/写简介/选标签用于发布」;正文累计约 2 万字、准备上架时也适用。当前适配番茄长篇与短故事(短故事无需简介),不代替后台填表或实际发布。
What it loads into context
Frontmatter
150 tokensAlways available to the agent
SKILL.md
2,523 tokensWhen the skill is activated
Reference documents
5,086 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 原则
- 读取作品材料
- 平台
- 工作流程
- 封面
- 发布资料文件
- 格式检查
Scripts executed separately
scripts/check-publish-format.py
Files
SKILL.mdcore9,273 bytesreferences/fanqie-content-tags.mddoc4,565 bytesreferences/fanqie-reading-female.mddoc2,583 bytesreferences/fanqie-reading-male.mddoc2,246 bytesreferences/fanqie-short.mddoc3,354 bytesreferences/fanqie.mddoc3,432 bytesscripts/check-publish-format.pyruns10,490 bytes
Read SKILL.md
# story-publish:发布资料准备
把作品已有的设定、大纲和作者的决定,整理成发布平台建书表单要填的资料,按平台规则核对后存成 `发布资料-<平台>.md`。剧情规划和正文写作归 `story-long-write` 等写作 skill,作者只说“开书”时也走那边;本 skill 也不替作者登录后台、填表或发布。
## 原则
- **每次调用必须交付资料。** 不得只提问、列计划或因缺项结束本轮。先保存可逐步完善的资料,再补问;所有未获取或未确认的填写值留空。平台未适配、书目录不明、封面未就绪都不豁免生成。回复前确认文件存在且可读并给出路径;写入失败或无写入能力时,在回复中完整输出资料并说明未落盘。
- **只有作者确认的才是定稿。** 每个字段标一种状态:`已确认`(作者明确指定或接受)、`建议`(从作品材料推导或新拟)、`待确认`(缺失、含糊、矛盾)、`待平台核实`(平台规则不明或与界面不符)。沉默不算确认;作者接受整套候选方案,算确认其中列出的每一项。作者给的故事简介、大纲是素材,不自动当成平台“作品简介”。
- **作者已定的值不擅自改。** 书名、简介、笔名有问题时指出并给建议,保留原值。
- **平台候选只取自本 skill 的平台参考文件。** 不凭记忆,不从扫榜、拆文、选题材料里挪用,平台之间不共享。没有故事事实时先留空、保存后补问,不编人物、情节或卖点。
- **准备完成不等于已发布。** 资料齐了只说“发布资料准备完成”,不说“已提交”“审核中”“已发布”。
## 读取作品材料
View the complete source on GitHubstory-review
When your agent uses it
多视角对抗式审查。full/lean 模式在已部署 reviewer agents 时并行 spawn;缺失/异常 agents 或 spawn 失败时自动降级 solo,参考文件不可读时使用内置 rubric fallback。触发方式:/story-review、/审查、「审查一下」「帮我审一下」。
What it loads into context
Frontmatter
114 tokensAlways available to the agent
SKILL.md
5,924 tokensWhen the skill is activated
Reference documents
24,818 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 作者偏好边界
- Review Mode 选择
- Phase 0:预检与降级(必须先执行)
- 审查基准与参考资料规则(必须遵守)
- Phase 1:收集待审查内容
- 统一 Findings Schema(所有模式必须使用)
- Phase 2:并行 Spawn Agent(full/lean 模式)
- Phase 3:综合裁决(full / lean 模式)
- Phase 4:输出报告(full / lean 模式)
- solo 模式
- 追踪文件维护
- 流程衔接
Scripts executed separately
scripts/check-ai-patterns.jsscripts/check-degeneration.jsscripts/normalize-punctuation.jsscripts/style-whitelist.jsscripts/tracking_commit.pyscripts/wordcount_core.py
Files
SKILL.mdcore21,128 bytesSKILL.mdcore21,128 bytesreferences/agent-prompts.mddoc14,249 bytesreferences/banned-words.mddoc11,297 bytesreferences/batch-review.mddoc2,325 bytesreferences/expression.mddoc9,746 bytesreferences/narrative-focus.mddoc6,856 bytesreferences/quality-rubric.mddoc4,847 bytesreferences/review-tracking.mddoc2,620 bytesreferences/rubrics/fanqie.mddoc1,140 bytesreferences/rubrics/qidian.mddoc1,133 bytesreferences/rubrics/zhihu.mddoc1,571 bytesreferences/solo.mddoc3,471 bytesreferences/story-logic.mddoc6,051 bytesreferences/style-resolution.mddoc3,799 bytesreferences/tracking-initialization.mddoc1,651 bytesreferences/tracking-transaction.mddoc15,877 bytesscripts/check-ai-patterns.jsruns75,274 bytesscripts/check-degeneration.jsruns15,389 bytesscripts/normalize-punctuation.jsruns15,411 bytesscripts/style-whitelist.jsruns1,168 bytesscripts/tracking_commit.pyruns85,124 bytesscripts/wordcount_core.pyruns19,317 bytes
Read SKILL.md
# story-review:多视角对抗式审查
> Spawn 版本提示(不阻断 spawn):先读取项目根 `.story-deployed` 的 `agents_version`。与本版 `agents_version: 40` 不一致时(标记缺失、字段缺失/非整数、小于或大于 40)**照常按当前宿主角色来源检查并 spawn**;同时在「这次怎么审的」里用一句白话提示作者「审稿助手是旧版,运行 /story-setup(ZCode 先更新插件)后新开会话」,`Notice: agents bundle 版本不匹配(项目 {N},本版 40)` 原文写进技术备注行;大于 40 时额外提示先更新 oh-story-claudecode,不要用本地旧版 setup 降级覆盖。版本提示本身不触发降级;文件缺失或异常、工具不可用、递归限制或调用失败按 Phase 0 处理,技术备注写 `Fallback: ... -> solo`。
你负责协调审查,找出小说的结构、角色、文字与设定问题,给出有原文依据的修改建议。
**执行铁律:审查是找问题,不是验证正确性。**
**文风裁决**:先读 [references/style-resolution.md](references/style-resolution.md),加载本书文风,复用调用方的 `style_resolution` 与作者偏好;单独调用时按当前请求与本书文风裁决。同一裁决交给后续执行者。
## 作者偏好边界
只接收调用方已有的作者偏好,不查询或记录作者记忆;独立调用时不加载记忆文件。偏好只能帮助解释意图和组织报告,不能降低 rubric 严重度、把事实冲突判为无问题或跳过平台门禁;当前请求仍优先。
---View the complete source on GitHubstory-setup
When your agent uses it
网文写作工具集基础设施部署与检查。为 Claude Code / OpenCode / Codex / Google Antigravity / ZCode / OpenClaw / Reasonix 提供内置适配;Web AI / 通用 Agent 可走 skills + AGENTS.md 文件模式。触发方式:/story-setup、$story-setup、「准备写书」「帮我搭一下环境」「配置写作项目」「检查写作环境」。
What it loads into context
Frontmatter
137 tokensAlways available to the agent
SKILL.md
5,064 tokensWhen the skill is activated
Reference documents
235,797 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 选择模式
- Phase 1:判断宿主与项目
- Phase 2:部署基础设施
- Phase 3:验证安装
- 模板占位符
- 项目指令合并(CLAUDE.md / AGENTS.md)
- 参考资料
- 流程衔接
Scripts executed separately
references/antigravity/hooks/story_antigravity_hook.jsreferences/antigravity/hooks/story_hook_core.jsreferences/codex/hooks/run-story-hook.cmdreferences/codex/hooks/run-story-hook.shreferences/codex/hooks/story_codex_hook.pyreferences/opencode/plugin.tsreferences/opencode/pre-commit.shreferences/opencode/story_hook_core.jsreferences/templates/hooks/check-prose-after-write.shreferences/templates/hooks/detect-story-gaps.shreferences/templates/hooks/guard-outline-before-prose.shreferences/templates/hooks/lib/common.shreferences/templates/hooks/lib/sentinel.shreferences/templates/hooks/post-compact.shreferences/templates/hooks/pre-compact.shreferences/templates/hooks/session-end.shreferences/templates/hooks/session-start.shreferences/templates/hooks/story_hook_cli.jsreferences/templates/hooks/story_hook_core.jsreferences/templates/hooks/validate-story-commit.shreferences/zcode/hooks/story_hook_core.jsreferences/zcode/hooks/story_zcode_hook.jsscripts/copy-path-safety.pyscripts/deploy-antigravity-skills.pyscripts/generate-antigravity-agents.mjsscripts/merge-antigravity-hooks.pyscripts/merge-claude-settings.pyscripts/merge-codex-hooks.pyscripts/merge-project-instructions.py
Files
SKILL.mdcore17,843 bytesSKILL.mdcore17,843 bytesUPGRADING.mddoc16,237 bytesreferences/agent-references/agent-quality.mddoc3,614 bytesreferences/agent-references/agent-reference-profiles.mddoc4,272 bytesreferences/agent-references/banned-words.mddoc11,297 bytesreferences/agent-references/benchmark-style-load.mddoc10,306 bytesreferences/agent-references/character-basics.mddoc18,109 bytesreferences/agent-references/character-relations.mddoc12,790 bytesreferences/agent-references/cross-book-recall.mddoc4,142 bytesreferences/agent-references/deslop-gates.mddoc2,536 bytesreferences/agent-references/dialogue-mastery.mddoc11,714 bytesreferences/agent-references/expression.mddoc9,746 bytesreferences/agent-references/female-audience-writing.mddoc8,454 bytesreferences/agent-references/format-and-structure.mddoc10,665 bytesreferences/agent-references/genre-prose-cards.mddoc8,464 bytesreferences/agent-references/genre-prose-cards/东方仙侠.mddoc2,800 bytesreferences/agent-references/genre-prose-cards/传统玄幻.mddoc2,804 bytesreferences/agent-references/genre-prose-cards/历史古代.mddoc2,659 bytesreferences/agent-references/genre-prose-cards/历史脑洞.mddoc2,946 bytesreferences/agent-references/genre-prose-cards/双男主.mddoc3,275 bytesreferences/agent-references/genre-prose-cards/古言脑洞.mddoc2,697 bytesreferences/agent-references/genre-prose-cards/古风世情.mddoc2,652 bytesreferences/agent-references/genre-prose-cards/女频悬疑.mddoc2,649 bytesreferences/agent-references/genre-prose-cards/女频种田.mddoc2,708 bytesreferences/agent-references/genre-prose-cards/宫斗宅斗.mddoc2,552 bytesreferences/agent-references/genre-prose-cards/年代.mddoc3,054 bytesreferences/agent-references/genre-prose-cards/快穿.mddoc2,879 bytesreferences/agent-references/genre-prose-cards/悬疑灵异.mddoc2,616 bytesreferences/agent-references/genre-prose-cards/悬疑脑洞.mddoc2,812 bytesreferences/agent-references/genre-prose-cards/战神赘婿.mddoc2,798 bytesreferences/agent-references/genre-prose-cards/抗战谍战.mddoc2,734 bytesreferences/agent-references/genre-prose-cards/星光璀璨.mddoc2,827 bytesreferences/agent-references/genre-prose-cards/民国言情.mddoc2,811 bytesreferences/agent-references/genre-prose-cards/流派兜底.mddoc13,430 bytesreferences/agent-references/genre-prose-cards/游戏体育.mddoc2,911 bytesreferences/agent-references/genre-prose-cards/玄幻脑洞.mddoc3,019 bytesreferences/agent-references/genre-prose-cards/玄幻言情.mddoc2,623 bytesreferences/agent-references/genre-prose-cards/现言脑洞.mddoc2,774 bytesreferences/agent-references/genre-prose-cards/科幻末世.mddoc2,665 bytesreferences/agent-references/genre-prose-cards/职场婚恋.mddoc2,611 bytesreferences/agent-references/genre-prose-cards/西方奇幻.mddoc2,834 bytesreferences/agent-references/genre-prose-cards/豪门总裁.mddoc3,346 bytesreferences/agent-references/genre-prose-cards/都市修真.mddoc2,580 bytesreferences/agent-references/genre-prose-cards/都市日常.mddoc3,766 bytesreferences/agent-references/genre-prose-cards/都市种田.mddoc2,602 bytesreferences/agent-references/genre-prose-cards/都市脑洞.mddoc3,482 bytesreferences/agent-references/genre-prose-cards/都市高武.mddoc3,033 bytesreferences/agent-references/genre-prose-cards/青春甜宠.mddoc2,814 bytesreferences/agent-references/genre-readers.mddoc9,347 bytesreferences/agent-references/long-chapter-hooks.mddoc7,058 bytesreferences/agent-references/long-emotional-methods.mddoc8,320 bytesreferences/agent-references/long-genre-catalog.mddoc12,662 bytesreferences/agent-references/long-genre-mechanics.mddoc12,348 bytesreferences/agent-references/long-quality.mddoc3,142 bytesreferences/agent-references/long-reversal.mddoc15,638 bytesreferences/agent-references/long-suspense.mddoc15,450 bytesreferences/agent-references/narrative-focus.mddoc6,856 bytesreferences/agent-references/opening-design.mddoc4,378 bytesreferences/agent-references/outline-methods.mddoc16,617 bytesreferences/agent-references/plot-core-methods.mddoc6,586 bytesreferences/agent-references/short-chapter-hooks.mddoc9,050 bytesreferences/agent-references/short-emotional-methods.mddoc6,469 bytesreferences/agent-references/short-genre-formulas.mddoc20,285 bytesreferences/agent-references/short-quality.mddoc2,782 bytesreferences/agent-references/short-reversal.mddoc15,885 bytesreferences/agent-references/story-logic.mddoc6,051 bytesreferences/agent-references/style-combat-face.mddoc18,555 bytesreferences/agent-references/style-resolution.mddoc3,799 bytesreferences/agent-references/writing-craft.mddoc26,352 bytesreferences/antigravity/hooks/hooks.jsonasset1,036 bytesreferences/antigravity/hooks/story_antigravity_hook.jsruns8,527 bytesreferences/antigravity/hooks/story_hook_core.jsruns58,748 bytesreferences/antigravity/rules/oh-story.mddoc3,751 bytesreferences/codex/AGENTS.md.tmplasset3,877 bytesreferences/codex/agents/chapter-extractor.tomlasset16,599 bytesreferences/codex/agents/character-designer.tomlasset5,269 bytesreferences/codex/agents/consistency-checker.tomlasset13,047 bytesreferences/codex/agents/narrative-writer.tomlasset16,124 bytesreferences/codex/agents/story-architect.tomlasset10,825 bytesreferences/codex/agents/story-explorer.tomlasset12,321 bytesreferences/codex/agents/story-researcher.tomlasset13,468 bytesreferences/codex/hooks/hooks.jsonasset6,981 bytesreferences/codex/hooks/run-story-hook.cmdruns699 bytesreferences/codex/hooks/run-story-hook.shruns769 bytesreferences/codex/hooks/story_codex_hook.pyruns73,659 bytesreferences/deploy-antigravity.mddoc9,023 bytesreferences/deploy-claude-code.mddoc7,728 bytesreferences/deploy-codex.mddoc6,087 bytesreferences/deploy-generic.mddoc2,502 bytesreferences/deploy-openclaw.mddoc2,957 bytesreferences/deploy-opencode.mddoc14,982 bytesreferences/deploy-reasonix.mddoc3,449 bytesreferences/deploy-zcode.mddoc7,575 bytesreferences/diagnostics.mddoc4,437 bytesreferences/generic/AGENTS.md.tmplasset4,426 bytesreferences/openclaw/AGENTS.md.tmplasset5,046 bytesreferences/opencode/AGENTS.md.tmplasset3,288 bytesreferences/opencode/agents/chapter-extractor.mddoc16,438 bytesreferences/opencode/agents/character-designer.mddoc4,776 bytesreferences/opencode/agents/consistency-checker.mddoc12,522 bytesreferences/opencode/agents/narrative-writer.mddoc15,637 bytesreferences/opencode/agents/story-architect.mddoc10,342 bytesreferences/opencode/agents/story-explorer.mddoc11,817 bytesreferences/opencode/agents/story-researcher.mddoc12,987 bytesreferences/opencode/commands/browser-cdp.mddoc284 bytesreferences/opencode/commands/story-cover.mddoc189 bytesreferences/opencode/commands/story-deslop.mddoc222 bytesreferences/opencode/commands/story-import.mddoc235 bytesreferences/opencode/commands/story-long-analyze.mddoc214 bytesreferences/opencode/commands/story-long-scan.mddoc232 bytesreferences/opencode/commands/story-long-write.mddoc200 bytesreferences/opencode/commands/story-publish.mddoc224 bytesreferences/opencode/commands/story-review.mddoc212 bytesreferences/opencode/commands/story-setup.mddoc322 bytesreferences/opencode/commands/story-short-analyze.mddoc209 bytesreferences/opencode/commands/story-short-scan.mddoc215 bytesreferences/opencode/commands/story-short-write.mddoc192 bytesreferences/opencode/commands/story.mddoc243 bytesreferences/opencode/plugin.tsruns12,536 bytesreferences/opencode/pre-commit.shruns4,440 bytesreferences/opencode/story_hook_core.jsruns58,748 bytesreferences/reasonix/AGENTS.md.tmplasset5,373 bytesreferences/templates/.gitkeepasset0 bytesreferences/templates/CLAUDE.md.tmplasset3,309 bytesreferences/templates/agents/chapter-extractor.mddoc16,497 bytesreferences/templates/agents/character-designer.mddoc4,631 bytesreferences/templates/agents/consistency-checker.mddoc12,289 bytesreferences/templates/agents/narrative-writer.mddoc15,599 bytesreferences/templates/agents/story-architect.mddoc10,254 bytesreferences/templates/agents/story-explorer.mddoc11,579 bytesreferences/templates/agents/story-researcher.mddoc12,811 bytesreferences/templates/hooks/check-prose-after-write.shruns6,126 bytesreferences/templates/hooks/detect-story-gaps.shruns7,199 bytesreferences/templates/hooks/guard-outline-before-prose.shruns14,729 bytesreferences/templates/hooks/lib/common.shruns7,878 bytesreferences/templates/hooks/lib/sentinel.shruns1,510 bytesreferences/templates/hooks/post-compact.shruns698 bytesreferences/templates/hooks/pre-compact.shruns1,040 bytesreferences/templates/hooks/session-end.shruns946 bytesreferences/templates/hooks/session-start.shruns11,480 bytesreferences/templates/hooks/story_hook_cli.jsruns10,893 bytesreferences/templates/hooks/story_hook_core.jsruns58,748 bytesreferences/templates/hooks/validate-story-commit.shruns6,509 bytesreferences/templates/rules/story-consistency.mddoc2,554 bytesreferences/templates/rules/story-format.mddoc3,314 bytesreferences/templates/rules/story-narrative.mddoc2,501 bytesreferences/templates/rules/story-outline.mddoc3,166 bytesreferences/templates/settings-hooks.jsonasset2,025 bytesreferences/zcode/AGENTS.md.tmplasset4,468 bytesreferences/zcode/agents/chapter-extractor.mddoc16,138 bytesreferences/zcode/agents/character-designer.mddoc4,531 bytesreferences/zcode/agents/consistency-checker.mddoc12,303 bytesreferences/zcode/agents/narrative-writer.mddoc15,403 bytesreferences/zcode/agents/story-architect.mddoc10,094 bytesreferences/zcode/agents/story-explorer.mddoc11,593 bytesreferences/zcode/agents/story-researcher.mddoc12,759 bytesreferences/zcode/commands/browser-cdp.mddoc221 bytesreferences/zcode/commands/story-cover.mddoc204 bytesreferences/zcode/commands/story-deslop.mddoc234 bytesreferences/zcode/commands/story-import.mddoc200 bytesreferences/zcode/commands/story-long-analyze.mddoc218 bytesreferences/zcode/commands/story-long-scan.mddoc206 bytesreferences/zcode/commands/story-long-write.mddoc202 bytesreferences/zcode/commands/story-publish.mddoc247 bytesreferences/zcode/commands/story-review.mddoc217 bytesreferences/zcode/commands/story-setup.mddoc363 bytesreferences/zcode/commands/story-short-analyze.mddoc214 bytesreferences/zcode/commands/story-short-scan.mddoc217 bytesreferences/zcode/commands/story-short-write.mddoc204 bytesreferences/zcode/commands/story.mddoc221 bytesreferences/zcode/config.json.patchasset1,698 bytesreferences/zcode/hooks/hooks.jsonasset1,623 bytesreferences/zcode/hooks/story_hook_core.jsruns58,748 bytesreferences/zcode/hooks/story_zcode_hook.jsruns6,895 bytesscripts/copy-path-safety.pyruns3,155 bytesscripts/deploy-antigravity-skills.pyruns4,654 bytesscripts/generate-antigravity-agents.mjsruns12,698 bytesscripts/merge-antigravity-hooks.pyruns2,360 bytesscripts/merge-claude-settings.pyruns4,743 bytesscripts/merge-codex-hooks.pyruns5,316 bytesscripts/merge-project-instructions.pyruns10,735 bytes
Read SKILL.md
# story-setup:网文写作工具集基础设施部署
你负责把网文写作工具集部署到用户项目目录:已适配的 CLI 使用专用 hooks/agents/config;NarraFork、Web AI、自定义 Agent 等使用通用文件模式。
**保留用户配置;受管文件按清单更新,共同维护的文件按管理块合并。**
作者第一次部署的顺序:判断当前宿主 → 确认项目根 → 按宿主部署 → 验收 → 告诉作者下一步。本文件写公共流程;各宿主的部署清单、算法、校验和报告提示见 Phase 2 对应文件,**只读本次目标宿主的那一份**。
## 选择模式
- 参数为 `check`,或用户只要求检查部署、诊断环境、排查 agent 不可用时:完整读取 [references/diagnostics.md](references/diagnostics.md),按其中流程仅检查并报告;不进入下面的部署流程。
- 用户要求安装、更新或修复时:执行下面的部署流程。检查后已明确授权的修复沿用本文件与宿主部署文件的部署与合并规则。
---
View the complete source on GitHubstory-short-analyze
When your agent uses it
短篇网文拆文。拆解爆款短篇小说(番茄短篇 / 故事会 / 知乎盐言 / 追妻 / 世情 / 重生 / 虐渣等通俗题材)的故事核、结构、情感线、反转设计、写作手法、共鸣层次。单一全量拆解管道:跑完 Stage 2-6 产出完整拆文报告,落盘到 拆文库/{书名}/,下游 story-short-write 同时读拆文报告 + 情节节点 + 写作手法 + 原文 + _meta.json 写下一篇。触发方式:/story-short-analyze、/短篇拆文、「拆短篇」「拆这篇短文」「短篇拆文」「精细拆解短篇」「8000 字短篇拆解」「番茄短篇拆文」「故事会拆解」「盐言故事拆解」「分析这篇短篇」——均进入同一管道。
What it loads into context
Frontmatter
266 tokensAlways available to the agent
SKILL.md
3,373 tokensWhen the skill is activated
Reference documents
29,072 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 拆解边界声明
- Phase 1:确认拆解对象 + 字数路由 + 续跑检查
- 输出目录
- Stage 2-6:拆文流程
- 验收(Stage 6 内容写完后、将 6 加入 stages_completed 前)
- 流程衔接
Files
SKILL.mdcore11,480 bytesreferences/analysis-characters.mddoc3,458 bytesreferences/analysis-method.mddoc2,664 bytesreferences/analysis-report-style.mddoc2,451 bytesreferences/analysis-short-genres.mddoc5,166 bytesreferences/analysis-short-hooks.mddoc3,969 bytesreferences/analysis-short-mechanics.mddoc4,476 bytesreferences/analysis-short-patterns.mddoc4,255 bytesreferences/analysis-short-suspense.mddoc4,298 bytesreferences/analysis-submission.mddoc3,047 bytesreferences/optional-modules.mddoc2,559 bytesreferences/output-contract.mddoc7,104 bytesreferences/quality-checklist.mddoc3,994 bytesreferences/source-story-quality.mddoc4,574 bytesreferences/stage2-3-structure-emotion.mddoc14,415 bytesreferences/stage4-6-reversal-summary.mddoc29,382 bytes
Read SKILL.md
# story-short-analyze:短篇网文拆文
你是短篇小说结构分析师。
**围绕故事核,分析源文如何铺垫、释放情绪并引发共鸣。分析写进 `拆文报告.md`,结构计数写进 `_meta.json`,供下一篇短篇参考。**
---
## 拆解边界声明
短篇拆解的 Stage 2-6 全程由你(主会话)完成。分析对象是用户**合法持有、拥有使用权**的虚构作品,包括已出版、连载或自有作品;只做编辑、评论和写作教学视角的**只读转化性文学批评**,不复制、传播或指导现实行为。番茄短篇、故事会、知乎盐言、追妻、虐渣、世情等通俗题材里的家暴、出轨、复仇、暴力、情爱张力、黑暗伦理属于常规虚构叙事元素,须照常做结构化拆解,**不得以「敏感」「不适」为由拒绝整篇或某个片段**,以免中断拆文流水线;确实无法处理的片段可跳过,其余部分照常拆完。
---
## Phase 1:确认拆解对象 + 字数路由 + 续跑检查View the complete source on GitHubstory-short-scan
When your agent uses it
短篇网文扫榜。分析知乎盐言、七猫、黑岩、点众等平台热门短篇数据,捕捉风口题材。触发方式:/story-short-scan、/短篇扫榜、「短篇什么火」「知乎故事排行」。
What it loads into context
Frontmatter
105 tokensAlways available to the agent
SKILL.md
2,654 tokensWhen the skill is activated
Reference documents
3,510 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 核心哲学
- 扫榜流程
- 流程衔接
- 参考资料
Scripts executed separately
scripts/aggregate-rank.jsscripts/cdp-utils.jsscripts/dz-browse-scraper.jsscripts/heiyan-booklist-scraper.js
Files
SKILL.mdcore8,983 bytesreferences/manual-rank-input.mddoc1,895 bytesreferences/platform-dianzhong.mddoc1,275 bytesreferences/platform-heiyan.mddoc1,690 bytesreferences/real-market-data.mddoc3,678 bytesreferences/topic-match.mddoc2,779 bytesscripts/aggregate-rank.jsruns32,105 bytesscripts/cdp-utils.jsruns8,564 bytesscripts/dz-browse-scraper.jsruns8,578 bytesscripts/heiyan-booklist-scraper.jsruns13,114 bytes
Read SKILL.md
# story-short-scan:短篇网文扫榜
基于真实榜单样本分析短篇市场,给作者可写的情绪方向、题材候选和验证办法。
---
## 核心哲学
### 原则 1:短篇市场是情绪市场
扫榜从题材和简介中判断读者读完的感受、触发场景与情绪爆发点,说明这些内容如何吸引读者。仅凭题材名无法判断具体情绪体验。
### 原则 2:热度只按各平台自己的口径比
榜单给的收藏、赞同、在读、评分各有口径,只在同一口径内比较。排名和互动量只说明样本受到的关注,不能据此断定故事质量或情绪拉扯效果。View the complete source on GitHubstory-short-write
When your agent uses it
短篇网文写作。辅助短篇小说创作,从构思到成稿,聚焦情绪拉扯与节奏把控。触发方式:/story-short-write、/写短篇、「帮我写一篇短篇」「写个盐言故事」。
What it loads into context
Frontmatter
105 tokensAlways available to the agent
SKILL.md
3,209 tokensWhen the skill is activated
Reference documents
94,948 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 写前必读(强制,先读后写)
- 执行规则
- 作者记忆管理
- 核心方法
- 写作流程
- 流程衔接
Scripts executed separately
scripts/author_memory_commit.pyscripts/check-ai-patterns.jsscripts/check-degeneration.jsscripts/check-delivery-contract.jsscripts/check-outline-copy.jsscripts/check-phase2-contract.jsscripts/normalize-punctuation.jsscripts/style-whitelist.js
Files
SKILL.mdcore10,818 bytesSKILL.mdcore10,818 bytesSKILL.mdcore10,818 bytesreferences/agent-calls.mddoc2,532 bytesreferences/author-memory.mddoc9,928 bytesreferences/banned-words.mddoc11,297 bytesreferences/benchmark-recall.mddoc3,915 bytesreferences/dialogue-mastery.mddoc11,714 bytesreferences/emotional-methods.mddoc6,469 bytesreferences/genre-styles/世情打脸.mddoc16,195 bytesreferences/genre-styles/双男主.mddoc12,262 bytesreferences/genre-styles/复仇打脸.mddoc14,545 bytesreferences/genre-styles/宅斗宫斗.mddoc15,386 bytesreferences/genre-styles/总裁豪门.mddoc16,984 bytesreferences/genre-styles/悬疑.mddoc13,528 bytesreferences/genre-styles/民俗怪谈.mddoc12,868 bytesreferences/genre-styles/沙雕脑洞.mddoc14,405 bytesreferences/genre-styles/甜宠.mddoc11,827 bytesreferences/genre-styles/追妻火葬场.mddoc15,729 bytesreferences/genre-writing-formulas.mddoc20,285 bytesreferences/hooks-chapter.mddoc9,050 bytesreferences/scene-craft.mddoc2,948 bytesreferences/short-craft.mddoc10,197 bytesreferences/short-deslop.mddoc1,570 bytesreferences/short-format.mddoc9,584 bytesreferences/short-reversal.mddoc15,885 bytesreferences/submission-craft.mddoc5,858 bytesreferences/villain-and-reveal.mddoc5,796 bytesreferences/workflow-design.mddoc10,440 bytesreferences/workflow-draft.mddoc11,251 bytesreferences/workflow-revision.mddoc8,196 bytesscripts/author_memory_commit.pyruns76,766 bytesscripts/check-ai-patterns.jsruns75,274 bytesscripts/check-degeneration.jsruns15,389 bytesscripts/check-delivery-contract.jsruns9,055 bytesscripts/check-outline-copy.jsruns13,676 bytesscripts/check-phase2-contract.jsruns19,908 bytesscripts/normalize-punctuation.jsruns15,411 bytesscripts/style-whitelist.jsruns1,168 bytes
Read SKILL.md
# story-short-write:短篇网文写作
你负责从构思到成稿,完成一篇完整的短篇小说。
**执行规则:短篇以情绪为目标,所有内容为情绪服务。**
## 写前必读(强制,先读后写)
短篇按作者当前要做的事分时刻读文件,时刻之间靠落盘文件交接。创建或修改故事文件前,先判断当前时刻,按下表读完(这张表是唯一的读取清单);只读本文件、`rg` 检索或摘读都不算。**按节读只允许两种**:本表点名的节,或文件内「什么时候读这份」点名的节;其余整份读到结尾。缺文件、没读完或题材还没对上唯一的题材包就停,报准确路径或待定项,**不得创建或修改故事产物**。每个时刻、每个会话重新读。
| 时刻 | 作者确认什么 | 必读 | 条件满足才读 | 落盘 |
|---|---|---|---|---|
| 定情绪(Phase 1) | 读者读完的感觉、题材方向 | 本文件 | — | 进构思时写入 `设定.md` |
| 构思(Phase 2) | 故事核、人物、反转、付费点 | `workflow-design.md`、`submission-craft.md`、`short-craft.md`、`short-reversal.md`、`emotional-methods.md`「情感拉扯节奏设计」;核心 10 题材读一个 `genre-styles/{题材}.md`,冷门读 `genre-writing-formulas.md` | 有反派或真相揭露:`villain-and-reveal.md`;有对标或参考小说:`benchmark-recall.md`;付费点断点拿不准:`hooks-chapter.md`「2. 节尾」 | `设定.md`、`小节大纲.md` |
| 写正文(Phase 3) | 成稿 | `workflow-draft.md`、`short-format.md`、`short-craft.md`、`scene-craft.md`、设定.md 写的那个题材包(冷门不读) | 写羁绊或余韵:`emotional-methods.md`「情感虐心三板斧」;对白驱动的博弈、审判、打脸:`dialogue-mastery.md`「什么时候读这份」和它点名的一节;交给写手:`agent-calls.md` | `正文.md` |View the complete source on GitHubSkills included
- browser-cdp
- story
- story-cover
- story-deslop
- story-import
- story-long-analyze
- story-long-scan
- story-long-write
- story-publish
- story-review
- story-setup
- story-short-analyze
- story-short-scan
- story-short-write
Repository facts
- License
- MIT
- Created
- Apr 22, 2026
- Last pushed
- Nov 7, 2026
- Forks
- 1,178
- Open issues
- 3
- Project activity
- Active
Rank over the last 12 weeks
Now #175 · best #173 · up 1 in 30 days
- #175 from Oct 30 to Oct 31
- #174 on Nov 1
- #173 on Nov 2
- #174 on Nov 3
- #173 on Nov 4
- #175 since Nov 5
66 earlier periods
- #194 on Aug 2
- #191 on Aug 8
- #192 on Aug 9
- #194 on Aug 10
- #192 on Aug 11
- #190 on Aug 12
- #194 on Aug 13
- #193 on Aug 14
- #191 on Aug 15
- #190 from Aug 16 to Aug 17
- #192 on Aug 18
- #188 on Aug 19
- #182 on Aug 20
- #185 on Aug 21
- #181 on Aug 22
- #187 on Aug 23
- #185 on Aug 24
- #186 from Aug 25 to Aug 26
- #185 on Aug 27
- #182 on Aug 28
- #183 on Aug 29
- #181 from Aug 30 to Aug 31
- #186 on Sep 1
- #178 on Sep 2
- #184 on Sep 3
- #181 on Sep 4
- #182 on Sep 5
- #180 on Sep 6
- #181 on Sep 7
- #180 from Sep 8 to Sep 9
- #179 on Sep 10
- #178 on Sep 11
- #180 from Sep 12 to Sep 13
- #179 from Sep 14 to Sep 16
- #180 from Sep 17 to Sep 18
- #178 on Sep 19
- #182 on Sep 20
- #181 from Sep 21 to Sep 22
- #183 on Sep 23
- #181 on Sep 24
- #180 from Sep 25 to Sep 26
- #181 on Sep 27
- #182 from Sep 28 to Sep 29
- #178 on Sep 30
- #180 on Oct 1
- #181 on Oct 2
- #178 on Oct 3
- #175 on Oct 4
- #178 on Oct 5
- #175 on Oct 6
- #177 on Oct 7
- #176 on Oct 8
- #178 on Oct 9
- #177 on Oct 10
- #178 on Oct 11
- #176 from Oct 12 to Oct 13
- #175 on Oct 14
- #174 on Oct 15
- #173 on Oct 16
- #176 on Oct 17
- #177 on Oct 18
- #175 on Oct 19
- #174 from Oct 20 to Oct 22
- #173 from Oct 23 to Oct 24
- #174 on Oct 25
- #174 from Oct 28 to Oct 29
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 7, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 19 notes
skills/browser-cdp/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/browser-cdp/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/browser-cdp/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/browser-cdp/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/browser-cdp/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/browser-cdp/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/browser-cdp/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/browser-cdp/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/browser-cdp/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/browser-cdp/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/story/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/story-cover/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/story-deslop/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/story-deslop/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/story-deslop/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/story-review/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/story-setup/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/story-short-write/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/story-short-write/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- 29 dangerous shell commandsin 9 files: story-setup/references/codex/agents/story-researcher.toml:118 story-setup/references/opencode/agents/story-researcher.md:139 story-setup/references/templates/agents/story-researcher.md:123 and 6 more
- 220 network referencesin 35 files: story-long-scan/scripts/fanqie-rank-scraper.js:342 story-cover/references/api-fallback.md:8 story-long-scan/scripts/qidian-rank-scraper.js:40 and 32 more
- 13 obfuscation signalsin 12 files: story-import/scripts/build_outline_brief.py:202 story-import/scripts/check-outline-contract.js:121 story-long-analyze/scripts/inspiration_index.py:80 and 9 more
- No instruction overrides
- 87 executable scriptsin 87 files: browser-cdp/scripts/setup-cdp-chrome.js:1 story-deslop/scripts/check-ai-patterns.js:1 story-deslop/scripts/check-degeneration.js:1 and 84 more
- 20 references to secretsin 8 files: story-cover/references/api-fallback.md:9 story-cover/SKILL.md:5 browser-cdp/scripts/setup-cdp-chrome.js:627 and 5 more
- No requests to vote in Hot
Show all 369 signals by file
skills/browser-cdp/SKILL.md
- Network accessline 2
name: browser-cdp description: "Use this skill when you need to control a Chrome browser via CDP (Chrome DevTools Protocol) to reuse existing login sessions. Covers: launching Chrome in debug mode, opening URLs, waiting for page load, evalu - Network accessline 3
description: "Use this skill when you need to control a Chrome browser via CDP (Chrome DevTools Protocol) to reuse existing login sessions. Covers: launching Chrome in debug mode, opening URLs, waiting for page load, evaluating JavaScript, - Network accessline 4
metadata: {"openclaw":{"requires":{"bins":["agent-browser"]},"source":"https://github.com/zenstory-ai/oh-story-claudecode"}} - Network accessline 33
CDP_STATUS=ready # 已就绪,可直接复用 CDP_URL=http://127.0.0.1:9222/json/version - Network accessline 34
CDP_URL=http://127.0.0.1:9222/json/version - Dangerous shell operationline 95
agent-browser --cdp 9222 eval 'document.body.innerText.substring(0, 8000)' - Dangerous shell operationline 103
agent-browser --cdp 9222 eval 'localStorage.getItem("token") || document.cookie' - Dangerous shell operationline 150
$job = Start-Job { agent-browser --cdp 9222 eval "window.location.replace('https://www.qidian.com/rank/')" } - Network accessline 150
$job = Start-Job { agent-browser --cdp 9222 eval "window.location.replace('https://www.qidian.com/rank/')" } - Dangerous shell operationline 160
timeout 30 agent-browser --cdp 9222 eval "window.location.replace('https://www.qidian.com/rank/')" || echo "⏱ CDP 操作超时(30s),请重试或手动打断" - Network accessline 160
timeout 30 agent-browser --cdp 9222 eval "window.location.replace('https://www.qidian.com/rank/')" || echo "⏱ CDP 操作超时(30s),请重试或手动打断"
skills/browser-cdp/scripts/setup-cdp-chrome.js
- Executable scriptline 1
#!/usr/bin/env node - Network accessline 238
async function probeCDP(port) { try { const version = await httpGet(`http://127.0.0.1:${port}/json/version`); - Network accessline 239
try { const version = await httpGet(`http://127.0.0.1:${port}/json/version`); return version; - Network accessline 240
const version = await httpGet(`http://127.0.0.1:${port}/json/version`); - Access to secretsline 627
[Credential-related source omitted] - Access to secretsline 628
[Credential-related source omitted] - Network accessline 679
if (version) { log("CDP_STATUS=ready"); log(`CDP_URL=http://127.0.0.1:${CDP_PORT}/json/version`); - Network accessline 681
log(`CDP_URL=http://127.0.0.1:${CDP_PORT}/json/version`); - Network accessline 794
step("启动 Chrome(含 --remote-allow-origins=*, --no-first-run 等)"); step( `验证 http://127.0.0.1:${CDP_PORT}/json/version 来自本次启动的实例` + - Network accessline 795
step( `验证 http://127.0.0.1:${CDP_PORT}/json/version 来自本次启动的实例` + "(身份取得到且已变 + 进程存活 + 端口的 LISTEN 持有者就在这棵进程树里)" - Network accessline 796
`验证 http://127.0.0.1:${CDP_PORT}/json/version 来自本次启动的实例` +
skills/story-cover/SKILL.md
- Network accessline 3
version: 1.0.0 description: "小说封面生成与提示词设计。根据书名、作者名和题材构建封面提示词;用户只要提示词时不生图,要求封面图时调用 GPT-Image-2,Codex CLI 优先使用内置 ImageGen。触发方式:/story-cover、/封面、「帮我做个封面」「生成封面图」「封面提示词」「封面设计」。" metadata: {"openclaw":{"requires":{"env":["GPT_IMAGE_API_KEY"],"bin - Network accessline 4
description: "小说封面生成与提示词设计。根据书名、作者名和题材构建封面提示词;用户只要提示词时不生图,要求封面图时调用 GPT-Image-2,Codex CLI 优先使用内置 ImageGen。触发方式:/story-cover、/封面、「帮我做个封面」「生成封面图」「封面提示词」「封面设计」。" metadata: {"openclaw":{"requires":{"env":["GPT_IMAGE_API_KEY"],"bins":["curl","jq" - Network accessline 5
[Credential-related source omitted] - Access to secretsline 5
[Credential-related source omitted] - Access to secretsline 17
[Credential-related source omitted] - Access to secretsline 18
[Credential-related source omitted]
skills/story-cover/references/api-fallback.md
- Network accessline 8
|:-----|:----:|:-----|:-----| | `GPT_IMAGE_API_KEY` | 是 | — | OpenAI 或兼容代理的 API Key | | `GPT_IMAGE_BASE_URL` | | `https://api.openai.com/v1` | 用兼容代理时改这个 | - Network accessline 9
[Credential-related source omitted] - Access to secretsline 9
[Credential-related source omitted] - Network accessline 10
| `GPT_IMAGE_BASE_URL` | | `https://api.openai.com/v1` | 用兼容代理时改这个 | - Network accessline 21
[Credential-related source omitted] - Access to secretsline 21
[Credential-related source omitted] - Network accessline 22
: "${PROMPT:?请先 export PROMPT=构建提示词步骤拼好的完整提示词}" BASE_URL="${GPT_IMAGE_BASE_URL:-https://api.openai.com/v1}" MODEL="${GPT_IMAGE_MODEL:-gpt-image-2}" - Network accessline 23
BASE_URL="${GPT_IMAGE_BASE_URL:-https://api.openai.com/v1}" - Dangerous shell operationline 35
trap 'rm -f "$RESP"' EXIT - Network accessline 44
[Credential-related source omitted] - Access to secretsline 44
[Credential-related source omitted] - Access to secretsline 46
[Credential-related source omitted] - Network accessline 74
[Credential-related source omitted] - Access to secretsline 74
[Credential-related source omitted] - Network accessline 75
: "${PROMPT:?请先 export PROMPT=构建提示词步骤拼好的完整提示词}" BASE_URL="${GPT_IMAGE_BASE_URL:-https://api.openai.com/v1}" MODEL="${GPT_IMAGE_MODEL:-gpt-image-2}" - Network accessline 76
BASE_URL="${GPT_IMAGE_BASE_URL:-https://api.openai.com/v1}" - Dangerous shell operationline 90
trap '[ -n "$REF_TMP" ] && rm -f "$REF_TMP"; rm -f "$RESP"' EXIT - Network accessline 92
# URL 先下载到临时文件,本地路径直接用。用裸 mktemp 以保证 macOS/Linux 行为一致。 case "$REF_IMAGE" in http://*|https://*) - Network accessline 93
case "$REF_IMAGE" in http://*|https://*) REF_TMP=$(mktemp) - Network accessline 94
http://*|https://*) REF_TMP=$(mktemp) curl -fsSL --max-time 60 -o "$REF_TMP" "$REF_IMAGE" - Network accessline 95
REF_TMP=$(mktemp) curl -fsSL --max-time 60 -o "$REF_TMP" "$REF_IMAGE" REF_LOCAL="$REF_TMP" - Network accessline 96
curl -fsSL --max-time 60 -o "$REF_TMP" "$REF_IMAGE" - Network accessline 105
[Credential-related source omitted] - Access to secretsline 105
[Credential-related source omitted] - Access to secretsline 107
[Credential-related source omitted]
skills/story-deslop/SKILL.md
- Network accessline 3
version: 1.0.0 description: "网文去AI味。从表达、叙事用笔、故事因果三层诊断并修复文本,保留作者文风与已定剧情。触发方式:/story-deslop、/去AI味、「去AI味」「这篇太AI了」「网文去AI味」。" metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudecode"}} - Network accessline 4
description: "网文去AI味。从表达、叙事用笔、故事因果三层诊断并修复文本,保留作者文风与已定剧情。触发方式:/story-deslop、/去AI味、「去AI味」「这篇太AI了」「网文去AI味」。" metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudecode"}} --- - Network accessline 5
metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudecode"}}
skills/story-deslop/scripts/check-ai-patterns.js
- Executable scriptline 1
#!/usr/bin/env node
skills/story-deslop/scripts/check-degeneration.js
- Executable scriptline 1
#!/usr/bin/env node
skills/story-deslop/scripts/normalize-punctuation.js
- Executable scriptline 1
#!/usr/bin/env node
skills/story-deslop/scripts/style-whitelist.js
- Executable scriptline 1
Executable file
skills/story-import/SKILL.md
- Network accessline 3
version: 1.0.0 description: "逆向导入已有小说。将已写好的小说(半成品或完本)反向解析为标准项目目录结构,兼容 story-long-write / story-short-write 后续写作流程;内部复用 story-long-analyze / story-short-analyze 的拆解管道,按篇幅自动分流。触发方式:/story-import、「导入小说」「反向解析」「导入」「把我的书导进来」。" metadata: {"opencla - Network accessline 4
description: "逆向导入已有小说。将已写好的小说(半成品或完本)反向解析为标准项目目录结构,兼容 story-long-write / story-short-write 后续写作流程;内部复用 story-long-analyze / story-short-analyze 的拆解管道,按篇幅自动分流。触发方式:/story-import、「导入小说」「反向解析」「导入」「把我的书导进来」。" metadata: {"openclaw":{"source":"h - Network accessline 5
metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudecode"}}
skills/story-import/scripts/build_outline_brief.py
- Executable scriptline 1
#!/usr/bin/env python3 - Possible obfuscationline 202
" " + line for line in summary_lines(summary.read_text(encoding="utf-8").lstrip("<U+FEFF>"))] - Possible obfuscationline 246
"\n---\n\n<!-- 资料:outline-reverse-rules.md -->\n\n" + RULES.read_text(encoding="utf-8").lstrip("<U+FEFF>").strip()]
skills/story-import/scripts/check-outline-contract.js
skills/story-import/scripts/outline_view.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/story-import/scripts/tracking_commit.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/story-import/scripts/wordcount_core.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/story-long-analyze/SKILL.md
- Network accessline 3
version: 1.0.0 description: "长篇网文拆文。保留黄金三章、逐章摘要、剧情、情绪、节奏、角色、设定和文风接口,以连续章节块完成因果、双时间线、关系与三维节奏分析;兼容旧成果直接使用、按需增强和断点续跑。含可选三层灵感库管道(灵感库、跨书灵感聚合、更新灵感库)。触发方式:/story-long-analyze、/长篇拆文、「帮我拆这本书」「拆这本书」「分析黄金三章」「深度拆解」「完整拆解」或提供小说文本文件路径。" metadata: {"opencl - Network accessline 4
description: "长篇网文拆文。保留黄金三章、逐章摘要、剧情、情绪、节奏、角色、设定和文风接口,以连续章节块完成因果、双时间线、关系与三维节奏分析;兼容旧成果直接使用、按需增强和断点续跑。含可选三层灵感库管道(灵感库、跨书灵感聚合、更新灵感库)。触发方式:/story-long-analyze、/长篇拆文、「帮我拆这本书」「拆这本书」「分析黄金三章」「深度拆解」「完整拆解」或提供小说文本文件路径。" metadata: {"openclaw":{"source":" - Network accessline 5
metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudecode"}}
skills/story-long-analyze/scripts/build_chapter_index.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/story-long-analyze/scripts/inspect_existing_assets.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/story-long-analyze/scripts/inspiration_index.py
skills/story-long-analyze/scripts/manage_analysis_run.py
skills/story-long-analyze/scripts/render_relation_chart.py
skills/story-long-scan/SKILL.md
- Network accessline 3
version: 1.0.0 description: "长篇网文扫榜。分析起点、番茄、晋江、七猫等平台排行榜与新书数据,提炼市场趋势与热门题材。触发方式:/story-long-scan、/长篇扫榜、「长篇什么火」「起点排行」「扫七猫新书」。" metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudecode"}} - Network accessline 4
description: "长篇网文扫榜。分析起点、番茄、晋江、七猫等平台排行榜与新书数据,提炼市场趋势与热门题材。触发方式:/story-long-scan、/长篇扫榜、「长篇什么火」「起点排行」「扫七猫新书」。" metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudecode"}} --- - Network accessline 5
metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudecode"}}
skills/story-long-scan/references/platform-ciweimao.md
- Network accessline 24
终端提示「未解析到榜单」或文件头「数据质量」标了问题:在 Chrome 里打开 `https://www.ciweimao.com/rank-index`,确认页面正常、没有跳到登录或验证页,再重采。
skills/story-long-scan/references/platform-fanqie.md
- Network accessline 33
文件头「数据质量」标 `[标题解析异常]`(书名多为 `(标题待解析)`):多半是被登录或验证页拦住,或页面改版。在已登录的 Chrome 里手动打开任一 `https://fanqienovel.com/page/{bookId}`,确认页面正常、不是验证页;报 `CDP 无响应` 就按 browser-cdp 重新启动 Chrome。确认正常后重采。
skills/story-long-scan/scripts/aggregate-rank.js
skills/story-long-scan/scripts/cdp-utils.js
- Executable scriptline 1
Executable file
skills/story-long-scan/scripts/ciweimao-rank-scraper.js
- Executable scriptline 1
#!/usr/bin/env node - Network accessline 22
const RANK_URL = "https://www.ciweimao.com/rank-index"; - Network accessline 109
if(t&&t.length>byId[id].length)byId[id]=t; }); return order.map(function(id){return {bookId:id,title:byId[id],url:'https://www.ciweimao.com/book/'+id};}); - Network accessline 110
}); return order.map(function(id){return {bookId:id,title:byId[id],url:'https://www.ciweimao.com/book/'+id};}); })())`; - Network accessline 111
return order.map(function(id){return {bookId:id,title:byId[id],url:'https://www.ciweimao.com/book/'+id};});
skills/story-long-scan/scripts/fanqie-rank-scraper.js
- Executable scriptline 1
#!/usr/bin/env node - Network accessline 342
const initCatId = ch === "1" ? "1141" : "1139"; // 男频:西方奇幻 / 女频:古风世情 const initUrl = `https://fanqienovel.com/rank/${ch}_${type}_${initCatId}`; - Network accessline 343
const initUrl = `https://fanqienovel.com/rank/${ch}_${type}_${initCatId}`; - Network accessline 394
try { ab(PORT, "open", `https://fanqienovel.com${cat.href}`); - Network accessline 395
ab(PORT, "open", `https://fanqienovel.com${cat.href}`); - Network accessline 429
bodyLines.push(`**最新更新:** ${b.lastChapterTitle || "未知"}`); bodyLines.push(`**bookId:** ${b.bookId}`); bodyLines.push(`[作品页](https://fanqienovel.com/page/${b.bookId})`); - Network accessline 430
bodyLines.push(`**bookId:** ${b.bookId}`); bodyLines.push(`[作品页](https://fanqienovel.com/page/${b.bookId})`); const desc = cleanDesc(info.desc); - Network accessline 431
bodyLines.push(`[作品页](https://fanqienovel.com/page/${b.bookId})`); - Network accessline 465
console.error( ` ✗ ${chLabel}${tyLabel}:${totalBooks} 本全部标题解析失败。多为详情页结构变动或登录/验证拦截,` + `请在 Chrome 内手动打开任一 https://fanqienovel.com/page/{bookId} 确认页面正常。` - Network accessline 466
` ✗ ${chLabel}${tyLabel}:${totalBooks} 本全部标题解析失败。多为详情页结构变动或登录/验证拦截,` + `请在 Chrome 内手动打开任一 https://fanqienovel.com/page/{bookId} 确认页面正常。` ); - Network accessline 467
`请在 Chrome 内手动打开任一 https://fanqienovel.com/page/{bookId} 确认页面正常。` - Network accessline 517
const ids = []; for (let page = 1; page <= PAGES; page++) { const url = `https://fanqienovel.com/library/${seg}/page_${page}?sort=hottes`; - Network accessline 518
for (let page = 1; page <= PAGES; page++) { const url = `https://fanqienovel.com/library/${seg}/page_${page}?sort=hottes`; ab(PORT, "open", url); - Network accessline 519
const url = `https://fanqienovel.com/library/${seg}/page_${page}?sort=hottes`; - Network accessline 561
body.push(`**最新更新:** ${info.lastChapterTitle || "未知"}`); body.push(`**bookId:** ${id}`); body.push(`[作品页](https://fanqienovel.com/page/${id})`); - Network accessline 562
body.push(`**bookId:** ${id}`); body.push(`[作品页](https://fanqienovel.com/page/${id})`); const desc = cleanDesc(info.desc); - Network accessline 563
body.push(`[作品页](https://fanqienovel.com/page/${id})`); - Network accessline 575
`# 番茄 · ${listName}`, "", `- 来源:https://fanqienovel.com/library/${seg}/page_1?sort=hottes`, - Network accessline 576
"", `- 来源:https://fanqienovel.com/library/${seg}/page_1?sort=hottes`, `- 筛选:${filters || "不限"};按「最热」排序,取前 ${PAGES} 页`, - Network accessline 577
`- 来源:https://fanqienovel.com/library/${seg}/page_1?sort=hottes`,
skills/story-long-scan/scripts/jjwxc-rank-scraper.js
- Executable scriptline 1
#!/usr/bin/env node - Network accessline 29
const BASE_URL = "https://www.jjwxc.net/topten.php"; - Network accessline 114
function buildDetailJS(ids) { return `Promise.all(${JSON.stringify(ids)}.map(function(id){ return fetch('/onebook.php?novelid='+id) - Network accessline 115
return `Promise.all(${JSON.stringify(ids)}.map(function(id){ return fetch('/onebook.php?novelid='+id) .then(function(r){return r.arrayBuffer()}) - Network accessline 116
return fetch('/onebook.php?novelid='+id) - Network accessline 314
const meta = seg.filter(Boolean).join(" · "); if (meta) lines.push(`*${meta}*`); if (b.novelid) lines.push(`[作品页](https://www.jjwxc.net/onebook.php?novelid=${b.novelid})`); - Network accessline 315
if (meta) lines.push(`*${meta}*`); if (b.novelid) lines.push(`[作品页](https://www.jjwxc.net/onebook.php?novelid=${b.novelid})`); lines.push(""); - Network accessline 316
if (b.novelid) lines.push(`[作品页](https://www.jjwxc.net/onebook.php?novelid=${b.novelid})`);
skills/story-long-scan/scripts/qidian-rank-scraper.js
- Executable scriptline 1
#!/usr/bin/env node - Network accessline 40
const PC_BASE_URL = "https://www.qidian.com/rank"; - Network accessline 41
const MOBILE_BASE_URL = "https://m.qidian.com"; - Network accessline 90
id: "sanjiang", label: "三江推荐", baseUrl: "https://www.qidian.com/sanjiang/", - Network accessline 91
label: "三江推荐", baseUrl: "https://www.qidian.com/sanjiang/", mobilePath: "/sanjiang/", - Network accessline 92
baseUrl: "https://www.qidian.com/sanjiang/", - Network accessline 98
id: "library", label: "男频书库人气新书", baseUrl: "https://www.qidian.com/all/action0-size1-update1/", - Network accessline 99
label: "男频书库人气新书", baseUrl: "https://www.qidian.com/all/action0-size1-update1/", library: true, - Network accessline 100
baseUrl: "https://www.qidian.com/all/action0-size1-update1/", - Network accessline 509
Accept: "*/*", "Accept-Encoding": "identity", Referer: "https://www.qidian.com/", - Network accessline 510
"Accept-Encoding": "identity", Referer: "https://www.qidian.com/", }; - Network accessline 511
Referer: "https://www.qidian.com/", - Network accessline 901
bookId, title, url: `https://www.qidian.com/book/${bookId}/`, - Network accessline 902
title, url: `https://www.qidian.com/book/${bookId}/`, author, - Network accessline 903
url: `https://www.qidian.com/book/${bookId}/`,
skills/story-long-scan/scripts/qimao-rank-scraper.js
- Executable scriptline 1
#!/usr/bin/env node - Network accessline 27
const RANK_URL = "https://www.qimao.com/paihang"; - Network accessline 109
} }); return order.map(function(id){return {bookId:id,title:byId[id],url:'https://www.qimao.com/shuku/'+id+'/'};}); - Network accessline 110
}); return order.map(function(id){return {bookId:id,title:byId[id],url:'https://www.qimao.com/shuku/'+id+'/'};}); })())`; - Network accessline 111
return order.map(function(id){return {bookId:id,title:byId[id],url:'https://www.qimao.com/shuku/'+id+'/'};}); - Network accessline 301
function libraryPageUrl(page) { return `https://${LIBRARY_HOST}/shuku/a-a-a-1-1-a-0-click-${page}/`; - Network accessline 302
return `https://${LIBRARY_HOST}/shuku/a-a-a-1-1-a-0-click-${page}/`; - Network accessline 306
function categoryUrl(mainId) { return `https://${LIBRARY_HOST}/shuku/a-${mainId}-a-a-a-a-a-click-1/`; - Network accessline 307
return `https://${LIBRARY_HOST}/shuku/a-${mainId}-a-a-a-a-a-click-1/`; - Network accessline 478
bookId, title: anchor ? htmlText(anchor[2]) : "", url: bookId ? `https://${LIBRARY_HOST}/shuku/${bookId}/` : "", - Network accessline 479
title: anchor ? htmlText(anchor[2]) : "", url: bookId ? `https://${LIBRARY_HOST}/shuku/${bookId}/` : "", author: text("s-author"), - Network accessline 480
url: bookId ? `https://${LIBRARY_HOST}/shuku/${bookId}/` : "",
skills/story-long-write/SKILL.md
- Network accessline 3
version: 1.0.0 description: "长篇网文规划与写作。支持只讨论结构、只写大纲或指定细纲,明确要求正文后再写章节。触发方式:/story-long-write、/写长篇、「帮我开书」「定设定」「出卷纲」「规划剧情」「写大纲」「补细纲」「日更」「续写」「继续写」「修改第X章」「回炉」「重写第X章」。" metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-clau - Network accessline 4
description: "长篇网文规划与写作。支持只讨论结构、只写大纲或指定细纲,明确要求正文后再写章节。触发方式:/story-long-write、/写长篇、「帮我开书」「定设定」「出卷纲」「规划剧情」「写大纲」「补细纲」「日更」「续写」「继续写」「修改第X章」「回炉」「重写第X章」。" metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudecode"}} --- - Network accessline 5
metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudecode"}}
skills/story-long-write/scripts/author_memory_commit.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/story-long-write/scripts/build_architect_brief.py
skills/story-long-write/scripts/build_writer_prompt.py
skills/story-long-write/scripts/check-ai-patterns.js
- Executable scriptline 1
#!/usr/bin/env node
skills/story-long-write/scripts/check-degeneration.js
- Executable scriptline 1
#!/usr/bin/env node
skills/story-long-write/scripts/check-outline-contract.js
skills/story-long-write/scripts/check-outline-copy.js
skills/story-long-write/scripts/convert_outline_format.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/story-long-write/scripts/normalize-punctuation.js
- Executable scriptline 1
#!/usr/bin/env node
skills/story-long-write/scripts/outline_view.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/story-long-write/scripts/storyctl.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/story-long-write/scripts/style-whitelist.js
- Executable scriptline 1
Executable file
skills/story-long-write/scripts/template_fence.py
skills/story-long-write/scripts/tracking_commit.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/story-long-write/scripts/wordcount_core.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/story-publish/SKILL.md
- Network accessline 2
name: story-publish description: "小说发布准备:调用即生成并保存发布资料,缺失字段留空;按平台整理书名、笔名、分类、标签及所需简介。触发方式:/story-publish、/发布资料、「填写平台建书资料」「建书表单」「起书名/写简介/选标签用于发布」;正文累计约 2 万字、准备上架时也适用。当前适配番茄长篇与短故事(短故事无需简介),不代替后台填表或实际发布。" metadata: {"openclaw":{"source":"https:/ - Network accessline 3
description: "小说发布准备:调用即生成并保存发布资料,缺失字段留空;按平台整理书名、笔名、分类、标签及所需简介。触发方式:/story-publish、/发布资料、「填写平台建书资料」「建书表单」「起书名/写简介/选标签用于发布」;正文累计约 2 万字、准备上架时也适用。当前适配番茄长篇与短故事(短故事无需简介),不代替后台填表或实际发布。" metadata: {"openclaw":{"source":"https://github.com/zenstory - Network accessline 4
metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudecode"}}
skills/story-publish/scripts/check-publish-format.py
skills/story-review/SKILL.md
- Network accessline 3
version: 1.1.1 description: "多视角对抗式审查。full/lean 模式在已部署 reviewer agents 时并行 spawn;缺失/异常 agents 或 spawn 失败时自动降级 solo,参考文件不可读时使用内置 rubric fallback。触发方式:/story-review、/审查、「审查一下」「帮我审一下」。" metadata: {"openclaw":{"source":"https://github.com/zenst - Network accessline 4
description: "多视角对抗式审查。full/lean 模式在已部署 reviewer agents 时并行 spawn;缺失/异常 agents 或 spawn 失败时自动降级 solo,参考文件不可读时使用内置 rubric fallback。触发方式:/story-review、/审查、「审查一下」「帮我审一下」。" metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story - Network accessline 5
metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudecode"}}
skills/story-review/scripts/check-ai-patterns.js
- Executable scriptline 1
#!/usr/bin/env node
skills/story-review/scripts/check-degeneration.js
- Executable scriptline 1
#!/usr/bin/env node
skills/story-review/scripts/normalize-punctuation.js
- Executable scriptline 1
#!/usr/bin/env node
skills/story-review/scripts/style-whitelist.js
- Executable scriptline 1
Executable file
skills/story-review/scripts/tracking_commit.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/story-review/scripts/wordcount_core.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/story-setup/SKILL.md
- Network accessline 3
version: 1.3.8 description: "网文写作工具集基础设施部署与检查。为 Claude Code / OpenCode / Codex / Google Antigravity / ZCode / OpenClaw / Reasonix 提供内置适配;Web AI / 通用 Agent 可走 skills + AGENTS.md 文件模式。触发方式:/story-setup、$story-setup、「准备写书」「帮我搭一下环境」「配置写作项目」「检查写 - Network accessline 4
description: "网文写作工具集基础设施部署与检查。为 Claude Code / OpenCode / Codex / Google Antigravity / ZCode / OpenClaw / Reasonix 提供内置适配;Web AI / 通用 Agent 可走 skills + AGENTS.md 文件模式。触发方式:/story-setup、$story-setup、「准备写书」「帮我搭一下环境」「配置写作项目」「检查写作环境」。" metadata - Network accessline 5
metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudecode"}}
skills/story-setup/UPGRADING.md
- Dangerous shell operationline 69
1. 升级 OpenCode:先卸载旧包 `npm rm -g opencode-ai`,再 `npm i -g @opencode/cli`(或 `curl -fsSL https://opencode.ai/v2/install | bash`),确认 `opencode --version` 为 2.x。两个包都提供 `opencode` 命令,不先卸载旧包时 PATH 上可能仍是 1.x。 - Network accessline 69
1. 升级 OpenCode:先卸载旧包 `npm rm -g opencode-ai`,再 `npm i -g @opencode/cli`(或 `curl -fsSL https://opencode.ai/v2/install | bash`),确认 `opencode --version` 为 2.x。两个包都提供 `opencode` 命令,不先卸载旧包时 PATH 上可能仍是 1.x。 - Network accessline 113
claude plugin marketplace update oh-story-skills # 仅在 catalog 尚不存在时: claude plugin marketplace add https://github.com/zenstory-ai/oh-story-claudecode - Network accessline 115
claude plugin marketplace add https://github.com/zenstory-ai/oh-story-claudecode - Network accessline 124
5. 新开 Claude Code 会话,使用 `/oh-story:story-setup` 或 `/oh-story:story dashboard`。命令与 manifest 格式见 [Claude Code 插件参考](https://code.claude.com/docs/en/plugins-reference)。 - Network accessline 128
在 Plugin Management 中卸载受影响的旧条目,刷新市场;必要时重新添加本仓库,再安装一个 `oh-story`。沿用界面中的市场名(`oh-story-skills` 或 `oh-story-zcode`),避免重复安装。若无法卸载,保留数据备份,附 ZCode 版本与界面现象联系官方支持,不要清空全部缓存或手改缓存 JSON。操作说明见 [ZCode 插件文档](https://zcode.z.ai/en/docs/plugin)。
skills/story-setup/references/antigravity/hooks/story_antigravity_hook.js
- Executable scriptline 1
#!/usr/bin/env node
skills/story-setup/references/antigravity/hooks/story_hook_core.js
- Executable scriptline 1
Executable file
skills/story-setup/references/codex/agents/story-researcher.toml
- Network accessline 64
| 引擎 | URL 格式 | 何时使用 | |------|---------|---------| | Google | `https://www.google.com/search?q={query}` | 默认首选 | - Network accessline 65
|------|---------|---------| | Google | `https://www.google.com/search?q={query}` | 默认首选 | | Bing | `https://www.bing.com/search?q={query}` | Google 不可达时自动切换 | - Network accessline 66
| Google | `https://www.google.com/search?q={query}` | 默认首选 | - Network accessline 67
| Bing | `https://www.bing.com/search?q={query}` | Google 不可达时自动切换 | - Network accessline 91
```bash node -e "require('http').get('http://127.0.0.1:'+process.argv[1]+'/json/version',{timeout:3000},r=>console.log(r.statusCode===200?'CDP_AVAILABLE':'CDP_UNAVAILABLE')).on('timeout',function(){this.destroy()}).on('error',()=>console.lo - Network accessline 92
node -e "require('http').get('http://127.0.0.1:'+process.argv[1]+'/json/version',{timeout:3000},r=>console.log(r.statusCode===200?'CDP_AVAILABLE':'CDP_UNAVAILABLE')).on('timeout',function(){this.destroy()}).on('error',()=>console.log('CDP_U - Network accessline 116
```bash # Google 搜索(默认) agent-browser --cdp {cdp_port} eval "window.location.replace('https://www.google.com/search?'+new URLSearchParams({q:'{搜索词}'}).toString())" - Network accessline 117
# Google 搜索(默认) agent-browser --cdp {cdp_port} eval "window.location.replace('https://www.google.com/search?'+new URLSearchParams({q:'{搜索词}'}).toString())" agent-browser --cdp {cdp_port} wait 5000 - Dangerous shell operationline 118
agent-browser --cdp {cdp_port} eval "window.location.replace('https://www.google.com/search?'+new URLSearchParams({q:'{搜索词}'}).toString())" - Network accessline 118
agent-browser --cdp {cdp_port} eval "window.location.replace('https://www.google.com/search?'+new URLSearchParams({q:'{搜索词}'}).toString())" - Network accessline 131
**页面加载失败检测**:如果 snapshot 中不包含搜索结果特征(如链接列表、结果标题),视为加载失败: - Google 失败 → 切换 Bing:`eval "window.location.replace('https://www.bing.com/search?...')"` → wait 5000 → 重新 snapshot - Dangerous shell operationline 132
- Google 失败 → 切换 Bing:`eval "window.location.replace('https://www.bing.com/search?...')"` → wait 5000 → 重新 snapshot - Network accessline 132
- Google 失败 → 切换 Bing:`eval "window.location.replace('https://www.bing.com/search?...')"` → wait 5000 → 重新 snapshot - Dangerous shell operationline 141
agent-browser --cdp {cdp_port} eval 'JSON.stringify(Array.from(document.querySelectorAll("a[href]")).filter(a=>a.href&&!a.href.includes("google.com")&&!a.href.includes("bing.com")&&!a.href.includes("javascript:")).slice(0,10).map(a=>({text: - Dangerous shell operationline 150
agent-browser --cdp {cdp_port} eval "window.location.replace('{提取到的URL}')" - Dangerous shell operationline 157
agent-browser --cdp {cdp_port} eval 'document.body.innerText.substring(0,8000)'
skills/story-setup/references/codex/hooks/run-story-hook.cmd
- Executable scriptline 1
Executable file
skills/story-setup/references/codex/hooks/run-story-hook.sh
- Executable scriptline 1
#!/bin/sh
skills/story-setup/references/codex/hooks/story_codex_hook.py
skills/story-setup/references/deploy-opencode.md
- Network accessline 9
1. 运行 `opencode --version`,取第一个 `主.次.修` 版本号: - 主版本 ≥ 2 → 继续 - 主版本 < 2 → 停止 OpenCode 部署(其它 target 照常),告诉用户先升级到 2.x(先 `npm rm -g opencode-ai`,再 `npm i -g @opencode/cli` 或 `curl -fsSL https://opencode.ai/v2/install | bash`),装好后重跑 story-s - Network accessline 10
- 主版本 ≥ 2 → 继续 - 主版本 < 2 → 停止 OpenCode 部署(其它 target 照常),告诉用户先升级到 2.x(先 `npm rm -g opencode-ai`,再 `npm i -g @opencode/cli` 或 `curl -fsSL https://opencode.ai/v2/install | bash`),装好后重跑 story-setup - 命令不可用或解析不出版本 → 同样停止 OpenCode 部署,请用户在自己 - Dangerous shell operationline 11
- 主版本 < 2 → 停止 OpenCode 部署(其它 target 照常),告诉用户先升级到 2.x(先 `npm rm -g opencode-ai`,再 `npm i -g @opencode/cli` 或 `curl -fsSL https://opencode.ai/v2/install | bash`),装好后重跑 story-setup - Network accessline 11
- 主版本 < 2 → 停止 OpenCode 部署(其它 target 照常),告诉用户先升级到 2.x(先 `npm rm -g opencode-ai`,再 `npm i -g @opencode/cli` 或 `curl -fsSL https://opencode.ai/v2/install | bash`),装好后重跑 story-setup - Network accessline 157
「部署明细」只留一行:模型写在 `.opencode/agents/{agent名}.md` frontmatter 的 `model:`,可用模型见 `opencode models`,定价见 https://models.dev/。
skills/story-setup/references/deploy-zcode.md
- Network accessline 19
**ZCode 支持子代理与插件角色**:oh-story 插件通过 manifest 的 `agents` 注册七个专业角色;使用当前运行时的 `Agent` 工具,参数以其 schema 为准。不要创建 `.zcode/agents/` 或修改用户 home:官方用户级定义与插件注册不是 workspace 目录发现。独立 Skills 安装不会自动注册插件角色,缺角色时提示启用/更新 oh-story 插件,仍不可用才 solo/direct。依据:[插件](https
skills/story-setup/references/openclaw/AGENTS.md.tmpl
skills/story-setup/references/opencode/agents/story-researcher.md
- Network accessline 85
| 引擎 | URL 格式 | 何时使用 | |------|---------|---------| | Google | `https://www.google.com/search?q={query}` | 默认首选 | - Network accessline 86
|------|---------|---------| | Google | `https://www.google.com/search?q={query}` | 默认首选 | | Bing | `https://www.bing.com/search?q={query}` | Google 不可达时自动切换 | - Network accessline 87
| Google | `https://www.google.com/search?q={query}` | 默认首选 | - Network accessline 88
| Bing | `https://www.bing.com/search?q={query}` | Google 不可达时自动切换 | - Network accessline 113
node -e "require('http').get('http://127.0.0.1:'+process.argv[1]+'/json/version',{timeout:3000},r=>console.log(r.statusCode===200?'CDP_AVAILABLE':'CDP_UNAVAILABLE')).on('timeout',function(){this.destroy()}).on('error',()=>console.log('CDP_U - Network accessline 138
# Google 搜索(默认) agent-browser --cdp {cdp_port} eval "window.location.replace('https://www.google.com/search?'+new URLSearchParams({q:'{搜索词}'}).toString())" - Dangerous shell operationline 139
agent-browser --cdp {cdp_port} eval "window.location.replace('https://www.google.com/search?'+new URLSearchParams({q:'{搜索词}'}).toString())" - Network accessline 139
agent-browser --cdp {cdp_port} eval "window.location.replace('https://www.google.com/search?'+new URLSearchParams({q:'{搜索词}'}).toString())" - Network accessline 152
**页面加载失败检测**:如果 snapshot 中不包含搜索结果特征(如链接列表、结果标题),视为加载失败: - Google 失败 → 切换 Bing:`eval "window.location.replace('https://www.bing.com/search?...')"` → wait 5000 → 重新 snapshot - Dangerous shell operationline 153
- Google 失败 → 切换 Bing:`eval "window.location.replace('https://www.bing.com/search?...')"` → wait 5000 → 重新 snapshot - Network accessline 153
- Google 失败 → 切换 Bing:`eval "window.location.replace('https://www.bing.com/search?...')"` → wait 5000 → 重新 snapshot - Dangerous shell operationline 162
agent-browser --cdp {cdp_port} eval 'JSON.stringify(Array.from(document.querySelectorAll("a[href]")).filter(a=>a.href&&!a.href.includes("google.com")&&!a.href.includes("bing.com")&&!a.href.includes("javascript:")).slice(0,10).map(a=>({text: - Dangerous shell operationline 171
agent-browser --cdp {cdp_port} eval "window.location.replace('{提取到的URL}')" - Dangerous shell operationline 178
agent-browser --cdp {cdp_port} eval 'document.body.innerText.substring(0,8000)'
skills/story-setup/references/opencode/plugin.ts
- Executable scriptline 1
Executable file
skills/story-setup/references/opencode/pre-commit.sh
- Executable scriptline 1
#!/bin/sh
skills/story-setup/references/opencode/story_hook_core.js
- Executable scriptline 1
Executable file
skills/story-setup/references/reasonix/AGENTS.md.tmpl
skills/story-setup/references/templates/agents/story-researcher.md
- Network accessline 69
| 引擎 | URL 格式 | 何时使用 | |------|---------|---------| | Google | `https://www.google.com/search?q={query}` | 默认首选 | - Network accessline 70
|------|---------|---------| | Google | `https://www.google.com/search?q={query}` | 默认首选 | | Bing | `https://www.bing.com/search?q={query}` | Google 不可达时自动切换 | - Network accessline 71
| Google | `https://www.google.com/search?q={query}` | 默认首选 | - Network accessline 72
| Bing | `https://www.bing.com/search?q={query}` | Google 不可达时自动切换 | - Network accessline 97
node -e "require('http').get('http://127.0.0.1:'+process.argv[1]+'/json/version',{timeout:3000},r=>console.log(r.statusCode===200?'CDP_AVAILABLE':'CDP_UNAVAILABLE')).on('timeout',function(){this.destroy()}).on('error',()=>console.log('CDP_U - Network accessline 122
# Google 搜索(默认) agent-browser --cdp {cdp_port} eval "window.location.replace('https://www.google.com/search?'+new URLSearchParams({q:'{搜索词}'}).toString())" - Dangerous shell operationline 123
agent-browser --cdp {cdp_port} eval "window.location.replace('https://www.google.com/search?'+new URLSearchParams({q:'{搜索词}'}).toString())" - Network accessline 123
agent-browser --cdp {cdp_port} eval "window.location.replace('https://www.google.com/search?'+new URLSearchParams({q:'{搜索词}'}).toString())" - Network accessline 136
**页面加载失败检测**:如果 snapshot 中不包含搜索结果特征(如链接列表、结果标题),视为加载失败: - Google 失败 → 切换 Bing:`eval "window.location.replace('https://www.bing.com/search?...')"` → wait 5000 → 重新 snapshot - Dangerous shell operationline 137
- Google 失败 → 切换 Bing:`eval "window.location.replace('https://www.bing.com/search?...')"` → wait 5000 → 重新 snapshot - Network accessline 137
- Google 失败 → 切换 Bing:`eval "window.location.replace('https://www.bing.com/search?...')"` → wait 5000 → 重新 snapshot - Dangerous shell operationline 146
agent-browser --cdp {cdp_port} eval 'JSON.stringify(Array.from(document.querySelectorAll("a[href]")).filter(a=>a.href&&!a.href.includes("google.com")&&!a.href.includes("bing.com")&&!a.href.includes("javascript:")).slice(0,10).map(a=>({text: - Dangerous shell operationline 155
agent-browser --cdp {cdp_port} eval "window.location.replace('{提取到的URL}')" - Dangerous shell operationline 162
agent-browser --cdp {cdp_port} eval 'document.body.innerText.substring(0,8000)'
skills/story-setup/references/templates/hooks/check-prose-after-write.sh
- Executable scriptline 1
#!/bin/bash
skills/story-setup/references/templates/hooks/detect-story-gaps.sh
- Executable scriptline 1
#!/bin/bash
skills/story-setup/references/templates/hooks/guard-outline-before-prose.sh
- Executable scriptline 1
#!/bin/bash
skills/story-setup/references/templates/hooks/lib/common.sh
- Executable scriptline 1
#!/bin/bash
skills/story-setup/references/templates/hooks/lib/sentinel.sh
- Executable scriptline 1
#!/bin/bash
skills/story-setup/references/templates/hooks/post-compact.sh
- Executable scriptline 1
#!/bin/bash
skills/story-setup/references/templates/hooks/pre-compact.sh
- Executable scriptline 1
#!/bin/bash
skills/story-setup/references/templates/hooks/session-end.sh
- Executable scriptline 1
#!/bin/bash
skills/story-setup/references/templates/hooks/session-start.sh
- Executable scriptline 1
#!/bin/bash - Dangerous shell operationline 43
rm -f "$ROOT/.claude/.agents-pending-restart" 2>/dev/null || true - Network accessline 65
if ! node -e "" >/dev/null 2>&1; then OUTPUT+="[WARN] 检测不到 node 运行时:正文兜底网/commit 格式提示/连续性检查已停用(大纲拦截仍有纯 bash 兜底)。${NL}" OUTPUT+=" 修复:安装 Node.js(https://nodejs.org,或 nvm / brew install node)后新开会话即可恢复。${NL}${NL}" - Network accessline 66
OUTPUT+="[WARN] 检测不到 node 运行时:正文兜底网/commit 格式提示/连续性检查已停用(大纲拦截仍有纯 bash 兜底)。${NL}" OUTPUT+=" 修复:安装 Node.js(https://nodejs.org,或 nvm / brew install node)后新开会话即可恢复。${NL}${NL}" HAS_CONTENT=true - Network accessline 67
OUTPUT+=" 修复:安装 Node.js(https://nodejs.org,或 nvm / brew install node)后新开会话即可恢复。${NL}${NL}" - Network accessline 162
story_update_check() { [ -n "${STORY_NO_UPDATE_CHECK:-}" ] && return 0 command -v curl >/dev/null 2>&1 || return 0 - Network accessline 163
[ -n "${STORY_NO_UPDATE_CHECK:-}" ] && return 0 command -v curl >/dev/null 2>&1 || return 0 local vfile="" - Network accessline 164
command -v curl >/dev/null 2>&1 || return 0 - Network accessline 180
if [ "$((now - last))" -ge 86400 ]; then checked=1 latest=$(curl -fsS --max-time 5 "https://api.github.com/repos/zenstory-ai/oh-story-claudecode/releases/latest" 2>/dev/null \ - Network accessline 181
checked=1 latest=$(curl -fsS --max-time 5 "https://api.github.com/repos/zenstory-ai/oh-story-claudecode/releases/latest" 2>/dev/null \ | grep -o '"tag_name"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | grep -o '[0-9][0-9.]*' | hea - Network accessline 182
latest=$(curl -fsS --max-time 5 "https://api.github.com/repos/zenstory-ai/oh-story-claudecode/releases/latest" 2>/dev/null \
skills/story-setup/references/templates/hooks/story_hook_cli.js
- Executable scriptline 1
#!/usr/bin/env node
skills/story-setup/references/templates/hooks/story_hook_core.js
- Executable scriptline 1
Executable file
skills/story-setup/references/templates/hooks/validate-story-commit.sh
- Executable scriptline 1
#!/bin/bash
skills/story-setup/references/zcode/agents/story-researcher.md
- Network accessline 69
| 引擎 | URL 格式 | 何时使用 | |------|---------|---------| | Google | `https://www.google.com/search?q={query}` | 默认首选 | - Network accessline 70
|------|---------|---------| | Google | `https://www.google.com/search?q={query}` | 默认首选 | | Bing | `https://www.bing.com/search?q={query}` | Google 不可达时自动切换 | - Network accessline 71
| Google | `https://www.google.com/search?q={query}` | 默认首选 | - Network accessline 72
| Bing | `https://www.bing.com/search?q={query}` | Google 不可达时自动切换 | - Network accessline 97
node -e "require('http').get('http://127.0.0.1:'+process.argv[1]+'/json/version',{timeout:3000},r=>console.log(r.statusCode===200?'CDP_AVAILABLE':'CDP_UNAVAILABLE')).on('timeout',function(){this.destroy()}).on('error',()=>console.log('CDP_U - Network accessline 122
# Google 搜索(默认) agent-browser --cdp {cdp_port} eval "window.location.replace('https://www.google.com/search?'+new URLSearchParams({q:'{搜索词}'}).toString())" - Dangerous shell operationline 123
agent-browser --cdp {cdp_port} eval "window.location.replace('https://www.google.com/search?'+new URLSearchParams({q:'{搜索词}'}).toString())" - Network accessline 123
agent-browser --cdp {cdp_port} eval "window.location.replace('https://www.google.com/search?'+new URLSearchParams({q:'{搜索词}'}).toString())" - Network accessline 136
**页面加载失败检测**:如果 snapshot 中不包含搜索结果特征(如链接列表、结果标题),视为加载失败: - Google 失败 → 切换 Bing:`eval "window.location.replace('https://www.bing.com/search?...')"` → wait 5000 → 重新 snapshot - Dangerous shell operationline 137
- Google 失败 → 切换 Bing:`eval "window.location.replace('https://www.bing.com/search?...')"` → wait 5000 → 重新 snapshot - Network accessline 137
- Google 失败 → 切换 Bing:`eval "window.location.replace('https://www.bing.com/search?...')"` → wait 5000 → 重新 snapshot - Dangerous shell operationline 146
agent-browser --cdp {cdp_port} eval 'JSON.stringify(Array.from(document.querySelectorAll("a[href]")).filter(a=>a.href&&!a.href.includes("google.com")&&!a.href.includes("bing.com")&&!a.href.includes("javascript:")).slice(0,10).map(a=>({text: - Dangerous shell operationline 155
agent-browser --cdp {cdp_port} eval "window.location.replace('{提取到的URL}')" - Dangerous shell operationline 162
agent-browser --cdp {cdp_port} eval 'document.body.innerText.substring(0,8000)'
skills/story-setup/references/zcode/hooks/story_hook_core.js
- Executable scriptline 1
Executable file
skills/story-setup/references/zcode/hooks/story_zcode_hook.js
- Executable scriptline 1
#!/usr/bin/env node
skills/story-setup/scripts/copy-path-safety.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/story-setup/scripts/deploy-antigravity-skills.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/story-setup/scripts/generate-antigravity-agents.mjs
- Executable scriptline 1
#!/usr/bin/env node
skills/story-setup/scripts/merge-antigravity-hooks.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/story-setup/scripts/merge-claude-settings.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/story-setup/scripts/merge-codex-hooks.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/story-setup/scripts/merge-project-instructions.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/story-short-analyze/SKILL.md
- Network accessline 3
version: 3.1.0 description: "短篇网文拆文。拆解爆款短篇小说(番茄短篇 / 故事会 / 知乎盐言 / 追妻 / 世情 / 重生 / 虐渣等通俗题材)的故事核、结构、情感线、反转设计、写作手法、共鸣层次。单一全量拆解管道:跑完 Stage 2-6 产出完整拆文报告,落盘到 拆文库/{书名}/,下游 story-short-write 同时读拆文报告 + 情节节点 + 写作手法 + 原文 + _meta.json 写下一篇。触发方式:/story-sh - Network accessline 4
description: "短篇网文拆文。拆解爆款短篇小说(番茄短篇 / 故事会 / 知乎盐言 / 追妻 / 世情 / 重生 / 虐渣等通俗题材)的故事核、结构、情感线、反转设计、写作手法、共鸣层次。单一全量拆解管道:跑完 Stage 2-6 产出完整拆文报告,落盘到 拆文库/{书名}/,下游 story-short-write 同时读拆文报告 + 情节节点 + 写作手法 + 原文 + _meta.json 写下一篇。触发方式:/story-short-analyze、/短篇 - Network accessline 5
metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudecode"}}
skills/story-short-scan/SKILL.md
- Network accessline 3
version: 1.0.0 description: "短篇网文扫榜。分析知乎盐言、七猫、黑岩、点众等平台热门短篇数据,捕捉风口题材。触发方式:/story-short-scan、/短篇扫榜、「短篇什么火」「知乎故事排行」。" metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudecode"}} - Network accessline 4
description: "短篇网文扫榜。分析知乎盐言、七猫、黑岩、点众等平台热门短篇数据,捕捉风口题材。触发方式:/story-short-scan、/短篇扫榜、「短篇什么火」「知乎故事排行」。" metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudecode"}} --- - Network accessline 5
metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudecode"}}
skills/story-short-scan/scripts/aggregate-rank.js
skills/story-short-scan/scripts/cdp-utils.js
- Executable scriptline 1
Executable file
skills/story-short-scan/scripts/dz-browse-scraper.js
- Executable scriptline 1
#!/usr/bin/env node - Network accessline 25
const CHANNELS = [ { id: "male", label: "男频", tab: "男频", url: "https://www.ishugui.com/browse" }, - Network accessline 26
{ id: "male", label: "男频", tab: "男频", url: "https://www.ishugui.com/browse" }, - Network accessline 27
{ id: "female", label: "女频", tab: "女频", url: "https://www.ishugui.com/browse/on3" }, - Network accessline 95
var um=card.match(/最新章节[::\\s]*([^·]{1,40})/); var update=um?um[1].trim():''; out.push({rank:out.length+1,bookId:id,title:title,score:score,author:author,tag:tag,status:status,words:words,update:update,desc:desc.slice(0,200),url - Network accessline 96
var update=um?um[1].trim():''; out.push({rank:out.length+1,bookId:id,title:title,score:score,author:author,tag:tag,status:status,words:words,update:update,desc:desc.slice(0,200),url:'https://www.ishugui.com/book/'+id}); }); - Network accessline 97
out.push({rank:out.length+1,bookId:id,title:title,score:score,author:author,tag:tag,status:status,words:words,update:update,desc:desc.slice(0,200),url:'https://www.ishugui.com/book/'+id});
skills/story-short-scan/scripts/heiyan-booklist-scraper.js
- Executable scriptline 1
#!/usr/bin/env node - Network accessline 5
* ⚠<U+FE0F> 前置条件(必须): * 1. 启动 Chrome CDP 环境 * 2. 在 Chrome 中手动登录 https://manage.zhangwenpindu.cn - Network accessline 6
* 1. 启动 Chrome CDP 环境 * 2. 在 Chrome 中手动登录 https://manage.zhangwenpindu.cn * 登录后会生成 Admin-Token cookie,脚本需要它调用后端 API - Network accessline 7
* 2. 在 Chrome 中手动登录 https://manage.zhangwenpindu.cn - Network accessline 24
const BOOKLIST_URL = "https://manage.zhangwenpindu.cn/books/booklist"; - Network accessline 25
const API_BASE = "https://ms.zhangwenpindu.cn"; - Network accessline 49
const t = safeStr(token); const js = "fetch(" + safeStr(API_BASE + "/manage/book/list") + "," + - Network accessline 50
const js = "fetch(" + safeStr(API_BASE + "/manage/book/list") + "," + "{method:'POST'," + - Network accessline 51
"fetch(" + safeStr(API_BASE + "/manage/book/list") + "," + - Network accessline 64
const t = safeStr(token); const js = "fetch(" + safeStr(API_BASE + "/manage/book/" + encodeURIComponent(bookId)) + "," + - Network accessline 65
[Credential-related source omitted] - Network accessline 66
"fetch(" + safeStr(API_BASE + "/manage/book/" + encodeURIComponent(bookId)) + "," + - Network accessline 221
if (!token) { console.log(" ✗ 未检测到 Admin-Token(CDP 已连,但当前未登录)"); console.log(" → 请先在 Chrome 中打开 https://manage.zhangwenpindu.cn 并登录"); - Network accessline 222
console.log(" ✗ 未检测到 Admin-Token(CDP 已连,但当前未登录)"); console.log(" → 请先在 Chrome 中打开 https://manage.zhangwenpindu.cn 并登录"); console.log(" → 登录后重新运行本脚本"); - Network accessline 223
console.log(" → 请先在 Chrome 中打开 https://manage.zhangwenpindu.cn 并登录");
skills/story-short-write/SKILL.md
- Network accessline 3
version: 1.0.0 description: "短篇网文写作。辅助短篇小说创作,从构思到成稿,聚焦情绪拉扯与节奏把控。触发方式:/story-short-write、/写短篇、「帮我写一篇短篇」「写个盐言故事」。" metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudecode"}} - Network accessline 4
description: "短篇网文写作。辅助短篇小说创作,从构思到成稿,聚焦情绪拉扯与节奏把控。触发方式:/story-short-write、/写短篇、「帮我写一篇短篇」「写个盐言故事」。" metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudecode"}} --- - Network accessline 5
metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudecode"}}
skills/story-short-write/scripts/author_memory_commit.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/story-short-write/scripts/check-ai-patterns.js
- Executable scriptline 1
#!/usr/bin/env node
skills/story-short-write/scripts/check-degeneration.js
- Executable scriptline 1
#!/usr/bin/env node
skills/story-short-write/scripts/check-delivery-contract.js
- Executable scriptline 1
#!/usr/bin/env node
skills/story-short-write/scripts/check-outline-copy.js
skills/story-short-write/scripts/check-phase2-contract.js
- Executable scriptline 1
#!/usr/bin/env node
skills/story-short-write/scripts/normalize-punctuation.js
- Executable scriptline 1
#!/usr/bin/env node
skills/story-short-write/scripts/style-whitelist.js
- Executable scriptline 1
Executable file
skills/story/SKILL.md
- Network accessline 2
name: story description: "网络小说工具箱主入口。根据用户需求自动路由到对应 skill,并可启动本地 Dashboard。触发方式:/story、$story、/story dashboard、/网文、「我想写小说」「记住我的写作习惯」「打开工作台」「检查更新」。" metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudecode"}} - Network accessline 3
description: "网络小说工具箱主入口。根据用户需求自动路由到对应 skill,并可启动本地 Dashboard。触发方式:/story、$story、/story dashboard、/网文、「我想写小说」「记住我的写作习惯」「打开工作台」「检查更新」。" metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudecode"}} --- - Network accessline 4
metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudecode"}} - Network accessline 155
1. **当前版本**:读本 skill 同目录的 `VERSION` 文件;缺失则视为未知。本 skill 在写作项目里(如项目下的 `skills/`、`.agents/skills/`、`.zcode/skills/`)时,读到的是项目副本的版本。 2. **最新版本**:优先 `gh release view --json tagName,name,url -R zenstory-ai/oh-story-claudecode` 取 `tagName`;无 gh 用 ` - Network accessline 156
2. **最新版本**:优先 `gh release view --json tagName,name,url -R zenstory-ai/oh-story-claudecode` 取 `tagName`;无 gh 用 `curl -fsS --max-time 5 https://api.github.com/repos/zenstory-ai/oh-story-claudecode/releases/latest` 取 `.tag_name`(jq 或 grep)。查不 - Network accessline 158
4. **告知**: - 已最新 → 「已是最新版 vX.Y.Z」。 - 有新版或当前版本未知 → 展示已知版本与 [Releases](https://github.com/zenstory-ai/oh-story-claudecode/releases)/[CHANGELOG](https://github.com/zenstory-ai/oh-story-claudecode/blob/main/CHANGELOG.md),有 release notes 时 - Network accessline 159
- 已最新 → 「已是最新版 vX.Y.Z」。 - 有新版或当前版本未知 → 展示已知版本与 [Releases](https://github.com/zenstory-ai/oh-story-claudecode/releases)/[CHANGELOG](https://github.com/zenstory-ai/oh-story-claudecode/blob/main/CHANGELOG.md),有 release notes 时附更新要点,再用宿主可用的提 - Network accessline 160
- 有新版或当前版本未知 → 展示已知版本与 [Releases](https://github.com/zenstory-ai/oh-story-claudecode/releases)/[CHANGELOG](https://github.com/zenstory-ai/oh-story-claudecode/blob/main/CHANGELOG.md),有 release notes 时附更新要点,再用宿主可用的提问方式问「现在更新吗?」。选先不 → 不动,告知随时可
skills/story/assets/app.js
skills/story/scripts/dashboard-server.mjs
- Executable scriptline 1
#!/usr/bin/env node - Network accessline 742
if (!hostHeader) return ""; try { return new URL(`http://${hostHeader}`).hostname.replace(/^\[|\]$/g, "").toLowerCase(); - Network accessline 743
try { return new URL(`http://${hostHeader}`).hostname.replace(/^\[|\]$/g, "").toLowerCase(); } catch { - Network accessline 744
return new URL(`http://${hostHeader}`).hostname.replace(/^\[|\]$/g, "").toLowerCase(); - Network accessline 775
try { assertLocalRequest(request, allowNetwork); const url = new URL(request.url || "/", "http://127.0.0.1"); - Network accessline 776
assertLocalRequest(request, allowNetwork); const url = new URL(request.url || "/", "http://127.0.0.1"); if (request.method === "GET" && url.pathname === "/health") { - Network accessline 777
const url = new URL(request.url || "/", "http://127.0.0.1"); - Network accessline 965
const port = await listen(server, options.host, options.port); const displayHost = options.host === "::1" ? "[::1]" : options.host; const url = `http://${displayHost}:${port}`; - Network accessline 967
const url = `http://${displayHost}:${port}`;
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Combined signals: 1 fact
- Reads browser cookies or profile data, and the same file sends data over the network or runs a command (line 679)browser-cdp/scripts/setup-cdp-chrome.js:627High confidence
Declared and executed: 7 facts
- Contacts www.ciweimao.com, which SKILL.md, the README and the plugin manifest do not mentionstory-long-scan/scripts/ciweimao-rank-scraper.js:22High confidence
- Contacts fanqienovel.com, which SKILL.md, the README and the plugin manifest do not mentionstory-long-scan/scripts/fanqie-rank-scraper.js:343High confidence
- Contacts www.jjwxc.net, which SKILL.md, the README and the plugin manifest do not mentionstory-long-scan/scripts/jjwxc-rank-scraper.js:29High confidence
- Contacts www.qimao.com, which SKILL.md, the README and the plugin manifest do not mentionstory-long-scan/scripts/qimao-rank-scraper.js:27High confidence
- Contacts www.ishugui.com, which SKILL.md, the README and the plugin manifest do not mentionstory-short-scan/scripts/dz-browse-scraper.js:26High confidence
- Contacts manage.zhangwenpindu.cn, which SKILL.md, the README and the plugin manifest do not mentionstory-short-scan/scripts/heiyan-booklist-scraper.js:24High confidence
- Contacts ms.zhangwenpindu.cn, which SKILL.md, the README and the plugin manifest do not mentionstory-short-scan/scripts/heiyan-booklist-scraper.js:25High confidence
Signal confidence: 349 facts
- Network access in the frontmatter of the SKILL.mdbrowser-cdp/SKILL.md:2Low confidence
- Network access in the frontmatter of the SKILL.mdbrowser-cdp/SKILL.md:3Low confidence
- Network access in the frontmatter of the SKILL.mdbrowser-cdp/SKILL.md:4Low confidence
- Network access in code of the SKILL.mdbrowser-cdp/SKILL.md:33High confidence
- Network access in code of the SKILL.mdbrowser-cdp/SKILL.md:34High confidence
- Dangerous shell operation in code of the SKILL.mdbrowser-cdp/SKILL.md:95High confidence
- Dangerous shell operation in code of the SKILL.mdbrowser-cdp/SKILL.md:103High confidence
- Dangerous shell operation in code of the SKILL.mdbrowser-cdp/SKILL.md:150High confidence
- Network access in code of the SKILL.mdbrowser-cdp/SKILL.md:150High confidence
- Dangerous shell operation in code of the SKILL.mdbrowser-cdp/SKILL.md:160High confidence
- Network access in code of the SKILL.mdbrowser-cdp/SKILL.md:160High confidence
- Executable script in code of a file that runsbrowser-cdp/scripts/setup-cdp-chrome.js:1High confidence
- Network access in code of a file that runsbrowser-cdp/scripts/setup-cdp-chrome.js:238High confidence
- Network access in code of a file that runsbrowser-cdp/scripts/setup-cdp-chrome.js:239High confidence
- Network access in code of a file that runsbrowser-cdp/scripts/setup-cdp-chrome.js:240High confidence
- Access to secrets in code of a file that runs: reads a credential storebrowser-cdp/scripts/setup-cdp-chrome.js:627High confidence
- Access to secrets in code of a file that runs: reads a credential storebrowser-cdp/scripts/setup-cdp-chrome.js:628High confidence
- Network access in code of a file that runsbrowser-cdp/scripts/setup-cdp-chrome.js:679High confidence
- Network access in code of a file that runsbrowser-cdp/scripts/setup-cdp-chrome.js:681High confidence
- Network access in code of a file that runsbrowser-cdp/scripts/setup-cdp-chrome.js:794High confidence
- Network access in code of a file that runsbrowser-cdp/scripts/setup-cdp-chrome.js:795High confidence
- Network access in code of a file that runsbrowser-cdp/scripts/setup-cdp-chrome.js:796High confidence
- Network access in the frontmatter of the SKILL.mdstory-cover/SKILL.md:3Low confidence
- Network access in the frontmatter of the SKILL.mdstory-cover/SKILL.md:4Low confidence
- Network access in the frontmatter of the SKILL.mdstory-cover/SKILL.md:5Low confidence
- Access to secrets in the frontmatter of the SKILL.mdstory-cover/SKILL.md:5Low confidence
- Access to secrets in prose of the SKILL.md: a variable, placeholder or call, not a stored valuestory-cover/SKILL.md:17Low confidence
- Access to secrets in prose of the SKILL.mdstory-cover/SKILL.md:18Low confidence
- Network access in prose of documentationstory-cover/references/api-fallback.md:8Low confidence
- Network access in prose of documentationstory-cover/references/api-fallback.md:9Low confidence
- Access to secrets in prose of documentationstory-cover/references/api-fallback.md:9Low confidence
- Network access in prose of documentationstory-cover/references/api-fallback.md:10Low confidence
- Network access in code of documentationstory-cover/references/api-fallback.md:21Low confidence
- Access to secrets in code of documentation: a variable, placeholder or call, not a stored valuestory-cover/references/api-fallback.md:21Low confidence
- Network access in code of documentationstory-cover/references/api-fallback.md:22Low confidence
- Network access in code of documentationstory-cover/references/api-fallback.md:23Low confidence
- Dangerous shell operation in code of documentationstory-cover/references/api-fallback.md:35Low confidence
- Network access in code of documentationstory-cover/references/api-fallback.md:44Low confidence
- Access to secrets in code of documentationstory-cover/references/api-fallback.md:44Low confidence
- Access to secrets in code of documentation: a variable, placeholder or call, not a stored valuestory-cover/references/api-fallback.md:46Low confidence
- Network access in code of documentationstory-cover/references/api-fallback.md:74Low confidence
- Access to secrets in code of documentation: a variable, placeholder or call, not a stored valuestory-cover/references/api-fallback.md:74Low confidence
- Network access in code of documentationstory-cover/references/api-fallback.md:75Low confidence
- Network access in code of documentationstory-cover/references/api-fallback.md:76Low confidence
- Dangerous shell operation in code of documentationstory-cover/references/api-fallback.md:90Low confidence
- Network access in code of documentationstory-cover/references/api-fallback.md:92Low confidence
- Network access in code of documentationstory-cover/references/api-fallback.md:93Low confidence
- Network access in code of documentationstory-cover/references/api-fallback.md:94Low confidence
- Network access in code of documentationstory-cover/references/api-fallback.md:95Low confidence
- Network access in code of documentationstory-cover/references/api-fallback.md:96Low confidence
and 299 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Manifest .claude-plugin/marketplace.json | .claude/skills/<skill-name>/ |
| Codex | Native | Manifest AGENTS.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md skills/browser-cdp/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md skills/browser-cdp/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md skills/browser-cdp/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md skills/browser-cdp/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.
Explore alternatives and comparisons
Add this badge to your README
It updates every night and links to this page.
[](https://hotskills.dev/skill/zenstory-ai-oh-story-claudecode/)