Story Multi-Perspective Review
zenstory-ai/oh-story-claudecode
Reviews Chinese web-novel text with several reviewer agents in parallel, falling back to a single-agent pass, and reports structure, character, prose and setting problems with fixes.
短篇网文写作方法论与 novel-studio pipeline 适配器。用于把短篇、盐言故事、拆文续写等需求整理为 pipeline 输入;在 novel-studio 内禁止直接生成正文。触发方式:/story-short-write、/写短篇、「帮我写一篇短篇」「写个盐言故事」。
$ npx skills add Xiaoyangy/novel-studio --skill story-short-write -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Xiaoyangy/novel-studio story-short-write --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/Xiaoyangy/novel-studio.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/story-short-write .claude/skills/story-short-write && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "story-short-write" agent skill from https://github.com/Xiaoyangy/novel-studio/tree/main/skills/story-short-write into .claude/skills/story-short-write/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "story-short-write", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Xiaoyangy/novel-studio/tree/main/skills/story-short-writeType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Xiaoyangy/novel-studio --skill story-short-write -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Xiaoyangy/novel-studio story-short-write --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Xiaoyangy/novel-studio.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/story-short-write .agents/skills/story-short-write && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "story-short-write" agent skill from https://github.com/Xiaoyangy/novel-studio/tree/main/skills/story-short-write into .agents/skills/story-short-write/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "story-short-write", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Xiaoyangy/novel-studio --skill story-short-write -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Xiaoyangy/novel-studio story-short-write --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Xiaoyangy/novel-studio.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/story-short-write .cursor/skills/story-short-write && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "story-short-write" agent skill from https://github.com/Xiaoyangy/novel-studio/tree/main/skills/story-short-write into .cursor/skills/story-short-write/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "story-short-write", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Xiaoyangy/novel-studio.git --path skills/story-short-write--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Xiaoyangy/novel-studio --skill story-short-write -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Xiaoyangy/novel-studio story-short-write --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Xiaoyangy/novel-studio.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/story-short-write .gemini/skills/story-short-write && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "story-short-write" agent skill from https://github.com/Xiaoyangy/novel-studio/tree/main/skills/story-short-write into .gemini/skills/story-short-write/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "story-short-write", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Xiaoyangy/novel-studio story-short-writeInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Xiaoyangy/novel-studio --skill story-short-write -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Xiaoyangy/novel-studio.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/story-short-write .github/skills/story-short-write && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "story-short-write" agent skill from https://github.com/Xiaoyangy/novel-studio/tree/main/skills/story-short-write into .github/skills/story-short-write/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "story-short-write", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Xiaoyangy/novel-studio --skill story-short-write -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Xiaoyangy/novel-studio story-short-write --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Xiaoyangy/novel-studio.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/story-short-write .opencode/skills/story-short-write && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "story-short-write" agent skill from https://github.com/Xiaoyangy/novel-studio/tree/main/skills/story-short-write into .opencode/skills/story-short-write/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "story-short-write", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
story-short-write短篇网文写作方法论与 novel-studio pipeline 适配器。用于把短篇、盐言故事、拆文续写等需求整理为 pipeline 输入;在 novel-studio 内禁止直接生成正文。触发方式:/story-short-write、/写短篇、「帮我写一篇短篇」「写个盐言故事」。
Story Short Write is an agent skill from Xiaoyangy/novel-studio. 短篇网文写作方法论与 novel-studio pipeline 适配器。用于把短篇、盐言故事、拆文续写等需求整理为 pipeline 输入;在 novel-studio 内禁止直接生成正文。触发方式:/story-short-write、/写短篇、「帮我写一篇短篇」「写个盐言故事」。
Its SKILL.md is about 5.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 30 other files, including scripts and reference files (for example `CONTEXT.md`, `context.json` and `references/banned-words.md`).
It sits in Writing & Content, covering Creative writing and fiction. The repository describes itself as: 开源、本地优先的 AI 长篇小说创作引擎:多智能体世界推演、按弧规划、RAG 长程记忆、逐章审核与断点恢复 | Open-source AI novel generator for long-form fiction. The licence is Apache-2.0.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit ed04a10. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/, which the agent can run.
Shell commands in SKILL.md call:
nodeFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Story Short Write loads about 5.6k tokens when it runs, and up to ~64k if it reads all its reference files. Until then it costs about 40 tokens; SKILL.md has 1,122 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from Xiaoyangy/novel-studio at commit ed04a10, republished under its Apache-2.0 licence (© Xiaoyangy). 1,122 words, ~5,593 tokens.
.claude/skills/story-short-write/SKILL.md (or your agent's skills folder). This skill also uses 28 other files; get the full folder from GitHub.你是短篇网文写作教练和 pipeline 适配器。你的任务是把用户的短篇写作需求整理成可执行输入,交给 novel-studio pipeline 统一产出。
当前目录或任一父目录包含 cmd/novel-studio 时,本 skill 只能作为 pipeline 适配器:
正文/、chapters/、output/novel/chapters/、第01章_正文.md 等正文产物。novel-studio --pipeline,不能在本 skill 内直写正文。run-prompts/<短篇标题或任务>.md,再执行 novel-studio --pipeline --prompt-file <需求文件>。novel-studio --pipeline;指定范围时用 novel-studio --pipeline --stages write --from <N> --write-to <M>。novel-studio --pipeline --stages review|rewrite,不要回到本 skill 单独写作。后续 Phase 1-4 只提供需求整理、短篇方法和 prompt 增强材料;它们不是 novel-studio 仓库内的正文产出路径。
执行规则:短篇以情绪为目标,所有内容为情绪服务。
Agent 兼容性:检查专业 agent 是否可用时,按
.claude/agents/{agent}.md→.opencode/agents/{agent}.md→.codex/agents/{agent}.toml的顺序查找。Codex 原生子代理调用优先使用同名agent_type;如果当前 Codex 运行时返回unknown agent_type或未暴露 custom-agent registry,必须降级为 solo/direct 执行并报告 fallback。Claude/OpenCode 兼容面保留subagent_type。Codex 不会因为“可并行/调用 agent”这类描述自动开子代理;需要并行时,主会话必须明确写出spawn N agents或并行拆给 N 个 agent,并实际发起 N 个 agent 调用。
如果用户一次给出多个不同题材、书名或核心设定,按每本书拆成独立任务;能调用子代理时,为不同小说并发启动独立 agent。单批最多 5 个 agent,N = min(待处理小说数, 5);待处理小说超过 5 本时,其余进入 pending 队列,等本批全部完成后再开下一批。Codex 执行并行批次前必须显式写 spawn {N} agents 或 并行拆给 {N} 个 agent,否则不要假定 Codex 会自动开 subagent。每个 agent 只处理一本书,只读取该书目录、设定、小节大纲和当前写作摘要;主会话只保留调度表(running/pending/done),避免把多本正文塞进同一上下文。
短篇也必须有单章正文文件:默认把完整短篇视为第 1 章,主产物写入 {短篇标题}/第01章_正文.md。如用户明确规划多章,则按 {短篇标题}/第NN章_章名.md 分章落盘。正文.md 可作为兼容合并稿,但不能替代单章文件。
详细规则见 references/short-format.md,写作前必须加载。主会话与 narrative-writer 子代理使用同一套正文格式:正文主产物保存为 {短篇标题}/第01章_正文.md(多章时为 {短篇标题}/第NN章_章名.md),正文.md 只作兼容合并稿;正文相邻段落之间只允许一个换行符 \n(不得出现空行/\n\n),对话引号风格按项目/平台约定统一(默认半角双引号,盐言可用「」),短篇小节标记全文统一(默认 ###1./###2.)。如果子代理输出与主会话格式不一致,按本格式规范重排后再写入文件。
除了上面的执行规则,构思和写作时遵循:
genre-styles/{题材}.md(核心 4 题材)或 genre-writing-formulas.md(冷门题材)找对应的短篇剧情模式references/genre-styles/{题材}.md——正文的腔调、开篇、钩子、情绪烈度、对话金句、招式、收尾全部切到该题材。核心 4 题材(追妻火葬场 / 复仇打脸 / 总裁豪门 / 宅斗宫斗)有专属风格包;冷门题材用 genre-writing-formulas.md 的结构骨架兜底,腔调仍按 short-craft.md 通用底座references/human-feel-craft.md,把《同桌是只假装高冷的猫》80% 人工度样本文的方法迁移为本篇的物件回扣、主观误判、短对话/动作拍和现实支架。短篇可以直写强情绪,但情绪后面必须接本场景特有的动作、物件或选择。references/refer-writing-techniques-digest.md,把 19 篇写作技巧压缩成短篇的设计和审核问题:前台故事是否先行、每节是否有目标/阻力/代价/新增信息、核心事件是否有铺垫/过程/余波、钩子是否接力、标点是否承担声口和情绪功能。问用户:「你想让读者读完什么感觉?有没有想写的题材方向或灵感?」
如果用户有明确想法 → 直接进入 Phase 2。
如果用户只有模糊想法 → 帮用户做情绪选择:
| 情绪类型 | 适合场景 | 难度 | 市场热度 |
|---|---|---|---|
| 意难平 | 虐恋、遗憾、错过 | 中 | 🔥🔥🔥 |
| 反转震撼 | 悬疑、身份错位 | 高 | 🔥🔥🔥 |
| 爽感释放 | 打脸、逆袭 | 低 | 🔥🔥 |
| 治愈温暖 | 成长、亲情、友情 | 中 | 🔥🔥 |
| 细思极恐 | 悬疑、心理 | 高 | 🔥 |
| 共鸣感动 | 现实、职场、婚姻 | 中 | 🔥🔥🔥 |
如果用户有参考小说,先用
/story-short-analyze拆解。默认输出存入项目根目录deconstruction-library/{书名}/;如用户指定当前短篇引用目录,则可输出/同步到{短篇标题}/对标/{书名}/。写作时会自动查找并读取这些拆文结果,不需要用户手动复制到 prompt。
deconstruction-library/对标关系:
deconstruction-library/= analyze skill 的原始产出(数据源),位于项目根目录。对标/= 当前短篇的引用视图,位于{短篇标题}/对标/。短篇写作优先读取{短篇标题}/对标/{书名}/,不存在则回退项目根deconstruction-library/{书名}/,再回退{短篇标题}/deconstruction-library/{书名}/(兼容旧结构)。
推荐目录结构:
项目根/
├── deconstruction-library/
│ └── {书名}/
│ ├── 拆文报告.md
│ ├── 情节节点.md
│ └── 写作手法.md
└── {短篇标题}/
├── 设定.md
├── 小节大纲.md
├── 第01章_正文.md
├── 正文.md # 可选兼容合并稿
└── 对标/
└── {书名}/
├── 拆文报告.md
├── 情节节点.md
└── 写作手法.md如果工作目录下存在 对标/ 或项目根存在 deconstruction-library/,或用户提到参考小说:
按上述顺序查找 拆文报告.md、情节节点.md、写作手法.md、_meta.json
读 _meta.json.genre_detected,按下表加载对应题材风格包(analyze 识别的题材 → write 的 genre-styles 包),正文腔调/招式随之切换:
analyze 的 genre_detected | 加载 genre-styles/ 包 |
|---|---|
| 追妻 | 追妻火葬场.md |
| 重生复仇 / 小三 / 世情(现代豪门虐) | 复仇打脸.md 或 总裁豪门.md(按是否豪门联姻虐恋选) |
| 世情(古代)/ 宫斗 / 古言重生 | 宅斗宫斗.md |
| 死人文学 / 仙侠 / 通用 | 无专属包 → short-craft.md 底座 + genre-writing-formulas.md 兜底 |
读取核心发现:结构段落、情绪曲线、反转位置、铺垫方式、句式节奏、可借鉴技法。把拆文报告里的具体招式对到题材包招式库:拆文给「这一篇怎么做的」,题材包给「这一类通用怎么做」,两者合用——拆文是当前对标书的实证,题材包是该题材的通法
写入本篇 设定.md 的“对标摘要”区,写作时每个场景从中召回 1-2 个相关技法
如只找到原文、未找到拆文报告,提示用户先运行 /story-short-analyze;如用户要求继续,也可只按原文做弱参考
拆文产出格式:analyze 落盘的完整文件树、
_meta.jsonschema、Stage→文件映射,以及「story-short-write 怎么读这些产出」的下游消费规范,见 references/output-contract.md。
多对标书时:参
references/cross-book-recall.md,副对标 anchor 入「对标摘要」区
构思阶段,如果项目已部署 story-architect agent(优先检查 .claude/agents/ 下的 story-architect.md 是否存在;不存在时再检查 .opencode/agents/,再不存在时检查 .codex/agents/),可 spawn Agent(subagent_type: "story-architect", prompt: "项目目录:{dir}\n任务类型:短篇构思\n查询参数:{情绪目标+题材方向}") 辅助框架设计。如 agent 不可用,由主线程直接执行。
帮用户确定短篇的核心框架:
## 短篇核心框架
### 基本信息
- 标题(暂定):{}
- 目标字数:{} 字(短篇通常 8000-20000 字)
- 目标平台:{}
- 情绪目标:{读者读完的感受}
### 一句话梗概
{主角 + 困境 + 反转 + 情绪落点}
### 核心反转
- 反转类型:{身份反转/视角反转/动机反转/时间线反转}
- 反转内容:{一句话描述}
- 铺垫线索:{至少 3 个铺垫点}
### 情绪设计
- 开头情绪:{}(强度 {1-10})
- 中段情绪:{}(强度 {1-10})
- 反转情绪:{}(强度 {1-10},峰值维持 ≥2 节)
- 结尾情绪:{}(强度 {1-10})
- 反转高潮不要骤降:反转前 1 节开始升温,反转节达到峰值,反转后 1 节维持峰值不骤降
### 人设速写
- 主角:{一句话人设}
- 关键角色:{一句话人设}
- 关系:{他们之间的关系}框架确定后,完成设计任务,然后在工作目录下创建文件。
详细步骤和模板见 references/writing-workflow.md。构思时从目标情绪反推剧情,不是从灵感正向构建。按顺序完成:
references/genre-styles/{题材}.md(核心 4 题材)+ 通用底座 references/short-craft.md,从招式库选 2-3 个核心招式(如追妻的白月光触发链 / 信物翻转 / 火葬场预告),写入 设定.md「题材招式」区,全程照此招式与腔调写villain-and-reveal.md设计任务完成后,如果项目已部署 character-designer agent(优先检查 .claude/agents/ 下的 character-designer.md 是否存在;不存在时再检查 .opencode/agents/,再不存在时检查 .codex/agents/),可 spawn Agent(subagent_type: "character-designer", prompt: "项目目录:{dir}\n任务类型:角色设定\n查询参数:{人设速写+关系}") 辅助角色设定和语言风格档案。如 agent 不可用,由主线程直接执行。
项目文件结构:
{短篇标题}/
├── 设定.md ← Phase 2 产出(含对标摘要)
├── 小节大纲.md ← Phase 2 产出
├── 第01章_正文.md ← Phase 3 主产物
├── 正文.md ← 可选兼容合并稿
└── 对标/ ← 当前短篇引用视图(可选)
└── {书名}/
├── 拆文报告.md
├── 情节节点.md
└── 写作手法.md拆文结果自动使用规则:执行写作前必须按“对标上下文加载”顺序扫描 {短篇标题}/对标/{书名}/、项目根 deconstruction-library/{书名}/、{短篇标题}/deconstruction-library/{书名}/。找到拆文报告时,把“结构/情绪/反转/写作手法”作为技法参考;找到结构化子目录时,按当前小节目标检索最相关模块。
术语说明:Phase 3 按「段」划分叙事结构(开头段/铺垫段/升级段/反转段/结尾段),每段包含若干「小节」(数字编号的 beat)。「场景」指写作时的具体画面。
写前准备(每个场景写前执行召回、人工感锚点、refer 技巧核对和指令确认,是核心方法的落地:确认情绪目标 → 召回技法模块 → 校验单节任务):
对标/ 或 deconstruction-library/ 结构化产出,按“对标上下文加载”规则检索与当前场景最相关的结构/情绪/反转/写作手法模块作为参考,并写入“拆文召回摘要”references/cross-book-recall.md,副对标/参考对标按阶段预算进入"副对标召回摘要";正文只传摘要,不传副书文风或原文references/human-feel-craft.md 给本场景写 1 行锚点:本节出现哪个物件/痕迹、它的新信息是什么、角色会在哪句话或动作里误判/改口、后文如何回扣。没有锚点时先补设计再写。references/refer-writing-techniques-digest.md 用一句话回答本节目标、阻力、失败代价和新增信息;标出本节的铺垫/过程/余波以及章末或节末的未完成期待。答不出时先改小节大纲。写作指令:按三维度揉进逐场景写作,不照搬大纲腔。每个场景让读者和主角一起经历。三个维度(发生、感知、反应)同时揉进同一段连续正文,不按维度分段,不用"先写发生再补感知"的方式写作。揉进后仍必须按戏剧单元/画面分段:一段承载一个完整动作-信息变化或一条连续推理/氛围/情绪链,不按固定字数强拆。输出前做自然节奏重排:场景/一件事结束才分段;新动作、新线索、新对话、视线切换另起;完整推理、氛围铺陈、情绪变化可保留稍长段。高潮/打脸/反转压短,沉淀/推理/收束允许长一点,爽点 beat 写密、过场 beat 写疏,忌通篇同长度或同一阈值切段(见 short-craft.md「疏密分配」)。主语节奏:段首或主语重置时可用主角名;同一动作链内优先代词/省略;关键转折再点名强调,避免连续句/段无必要重复主角名。标点节奏:按语气标点谱系执行,避免通篇句号化,也禁止随机堆砌问号/感叹号;质问用问号,爆发处少量感叹;犹豫、未尽、打断或拖长用动作停顿、短句、换行处理,正文产物不使用 …… / —— / — / --。具体字数表达校验:评价台词、题字、信件、念头或弹幕时,只有统计口径明确、已用脚本逐字核对且故事确有必要,才使用“这五个字 / 短短四字 / 三个字一落 / 八个字砸下去”这类具体字数表达;不能确保字数计算正确时,改成“这句话一落”“这一句落下”“那几个字”“这行字”“话音落下”等非具体数字表达。叙述姿态用第一人称在场(短篇,非长篇深度限知):受虐段直白宣泄、反击段冷静审判,允许主角主观审判句、火葬场前瞻预告、剧透勾子(见 short-craft.md 第3节 + 题材包);只删中立无情绪的作者讲解,不删带主角偏色的审判/预告。情绪外化按 short-craft.md 第2节:允许直写情绪成语(心如死灰/眼泪不争气),但后面接一个场景里特有的动作或物件,只删后面没有任何具体动作的情绪总结句(一丝悲伤涌上心头)。情绪宁烈不温,冲突前置、爽点要狠要具体、台词带刺,敢写极端反应不点到为止(心死/余韵等以克制为爽感的桥段走克制路线)。
人工感补充指令:按 human-feel-craft.md 给每节至少一个现场锚点。物件/痕迹不能只作摆设, 每次出现都要带来新信息、误会证据、关系位移或选择代价;连续解释、心理总结或情绪标签超过 2-3 句时, 立刻换到动作、物件、感官、对白或选择后果。
正文写作阶段默认由主会话按 2-3 节/批分批写正文,主会话输出是短篇正文的标准形态。不要要求单次 agent spawn 完成 8000+ 字全文。每批写完后先更新“已写小节摘要”(3-5 条:已揭示信息、情绪位置、未回收伏笔、下一批衔接句),下一批必须先读取该摘要和 {短篇标题}/第01章_正文.md 尾部 300-500 字再续写。只有在用户明确要求子代理、主会话上下文不足,或需要隔离一段试写时,才优先检查 .claude/agents/ 下的 narrative-writer.md 是否存在;不存在时再检查 .opencode/agents/,再不存在时检查 .codex/agents/。存在时 spawn Agent(subagent_type: "narrative-writer", prompt: "项目目录:{dir}\n任务描述:写正文\n输出文件:{短篇标题}/第01章_正文.md\n情绪目标:{从核心框架读取}\n题材风格包:references/genre-styles/{题材}.md(腔调/开篇/钩子/情绪烈度/招式/收尾全按此题材;情绪外化按 short-craft.md 第2节:情绪词后面接一个场景里特有的具体动作,别机械替换情绪词)\n人工感参考:references/human-feel-craft.md(每节至少一个物件/痕迹/现实支架承担新信息;允许主观误判、短对话、改口和动作拍,但误会/反转/和解必须有前文证据)\n小节大纲:小节大纲.md(读取结构段/五段功能、人物/关系变化、因果/逻辑链、结尾承接/钩子;短篇只用轻量蓝图,不套长篇章节蓝图)\n涉及角色:{从核心框架读取}\n主对标/拆文路径:{本次查找到的主对标 对标/{主对标书}/ 或 deconstruction-library/{主对标书}/,没有则写 无}\n主拆文召回摘要:{本场景最相关的主对标结构/情绪/反转/写作手法模块;按场景相关性压缩,不写固定5条上限;没有则写 无}\n副对标召回摘要:{按 references/cross-book-recall.md 阶段预算筛选后的副对标/参考对标结构化摘要表;可含多本,但只传摘要,不传副书文风/原文;没有则写 无}\n格式硬约束:必须完全遵守 story-short-write/references/short-format.md;全文小节标记统一,默认 ###1.、###2.;正文相邻段落之间只允许一个换行符 \n,不得出现空行/\n\n;对话独立成行,引号风格按项目/平台约定统一(默认半角双引号,盐言可用「」);禁止使用 --- 分隔正文片段;禁止把自检/说明/审查报告写入正文文件。\n写作硬约束:禁止先否定再肯定的翻转句式,含省略连接词、跨句或换行变体;按三维度揉进写场景,但仍必须按戏剧单元/画面分段;一段承载一个完整动作-信息变化或一条连续推理/氛围/情绪链,不按固定字数强拆。输出前做自然节奏重排:场景/一件事结束才分段;新动作、新线索、新对话、视线切换另起;完整推理、氛围铺陈、情绪变化可保留稍长段。高潮/打脸/反转压短,沉淀/推理/收束允许长一点,爽点 beat 写密、过场 beat 写疏,忌通篇同长度或同一阈值切段(见 short-craft.md「疏密分配」)。主语节奏:段首或主语重置时可用主角名;同一动作链内优先代词/省略;关键转折再点名强调,避免连续句/段无必要重复主角名。标点节奏:按语气标点谱系执行,避免通篇句号化,也禁止随机堆砌问号/感叹号;质问用问号,爆发处少量感叹;犹豫、未尽、打断或拖长用动作停顿、短句、换行处理,正文产物不使用 ……/——/—/--。具体字数表达校验:评价台词、题字、信件、念头或弹幕时,只有统计口径明确、已用脚本逐字核对且故事确有必要,才使用“这五个字 / 短短四字 / 三个字一落 / 八个字砸下去”这类具体字数表达;不能确保字数计算正确时,改成“这句话一落”“这一句落下”“那几个字”“这行字”“话音落下”等非具体数字表达。叙述姿态用第一人称在场(短篇,非长篇深度限知):受虐段直白宣泄、反击段冷静审判,允许主角主观审判句、火葬场前瞻预告、剧透勾子(见 short-craft.md 第3节 + 题材包);只删中立无情绪的作者讲解,不删带主角偏色的审判/预告。情绪外化按 short-craft.md 第2节:允许直写情绪成语(心如死灰/眼泪不争气),但后面接一个场景里特有的动作或物件,只删后面没有任何具体动作的情绪总结句(一丝悲伤涌上心头)。情绪宁烈不温,冲突前置、爽点要狠要具体、台词带刺,敢写极端反应不点到为止(心死/余韵等以克制为爽感的桥段走克制路线)。")。无论由谁写作,最终写入单章文件前都必须按同一格式规范重排一次,保证主会话与子代理输出格式一致。
⚠️ 硬约束:每节 ≥ 800 字 / 50-65 行。
题材例外:爽文、打脸、系统流等高信息密度题材可降至 ≥ 500 字/节(见 genre-writing-formulas.md 各题材速查表),但不得低于 500 字。
写完每节后必须统计字数和行数。不足 800 字(高信息密度题材不足 500 字)的节不得跳过,必须补充更多子事件/对话来补足后再写下一节。整篇完成后总字数必须 ≥ 8000 字。
字数统计必须跨平台可执行:优先使用 Python 字符统计:for PYBIN in python3 python py; do "$PYBIN" -c "" 2>/dev/null && break; done; "$PYBIN" -c "from pathlib import Path; print(len(Path('文件路径').read_text(encoding='utf-8')))"。不要直接调 python3,Windows 上 python3 会落到 Microsoft Store 占位程序、以 exit 49 静默失败;上面的探测会按 python3→python→py 选出真正可用的解释器。Windows / DeepSeek / Claude Code 组合下不要让模型自行估算字数;wc -m 仅作为 macOS/Linux 备选,禁止使用 wc -c(字节数)。如果当前 agent/工具环境没有 Bash/Python 权限,必须明确声明“未完成机器字数验证”,并按行数速算作为临时估计,不得声称已通过字数硬验证。
⚠️ 字数不足 = 章节未完成。禁止在字数未达标时结束章节。必须继续展开场景直到达标。
节数守恒:正文节数必须等于小节大纲规划节数。不得合并多节为一节。如果写作中发现某节不需要独立存在,应回到大纲阶段调整,而非在写作时偷减。
节长达标流程:
节长验证(分批写作,每批写完后执行): 分批写作:每次输出 2-3 节(2-3 节约为 Claude 单次输出的最佳叙事窗口,过少浪费上下文,过多降低单节质量),写完后统一检查本批所有节的字数。 如果任何一节 < 800 字(高信息密度题材 < 500 字)→ 补充更多子事件/对话来补足后再写下一批。 禁止跳过未达标的小节。
批量验证更高效:一次性输出多节能让 AI 保持叙事连贯性, 批后统计比逐节暂停更符合 AI 的文本生成特性。
节长速算:平均每行 15 字 × 55 行 ≈ 825 字。写到第 30 行时如果还不到 500 字,说明子事件数量不够,需要补充更多子事件或对话。
每个小节按「三维度揉进」写作(详见 short-craft.md 第 10 节):每个子事件将发生、感知、反应三个维度揉进同一段连续正文,子事件合计 ≥150 字。维度揉进不等于按维度分段——禁止"先写发生再补感知再补反应"的堆叠写法;也不等于一段到底,按新动作/新物件/新信息/新对话断段。长度只是诊断,先判断是否完整戏剧单元;混入多个动作/信息才拆,完整推理、氛围或情绪链可以保留稍长段。
写完后对照 小节大纲.md 检查:每个子事件三个维度都揉进了?本节情绪到位?伏笔/物件已植入?节长 <800 字 → 补充更多子事件/对话后再写下一节。
按以下结构分段写:
目标:3 句话内抓住读者。必须包含一个开篇钩子(从 hooks-chapter.md 选择类型)。
技法指令:前 100 字事件密度 ≥ 3,不做背景铺垫,直接上事件链。
开头零环境规则(默认适用;悬疑、惊悚、灾难、强氛围题材可例外):
开头技巧:
| 技巧 | 说明 | 示例 |
|---|---|---|
| 冲突前置 | 第一句就是矛盾 | 「离婚协议放在桌上,他已经签了。」 |
| 信息差钩 | 给读者一个角色不知道的信息 | 「她不知道,对面那个男人已经在计划第三次了。」 |
| 反常行为 | 用一个不合常理的行为引起好奇 | 「她把订婚戒指冲进了马桶。」 |
| 重生反常 | 重生后做前世绝不会做的事 | 「沈栀心念成灰,支着一口气找到了媒婆:郭家的那个天阉,我来嫁。」 |
| 超自然身份 | 开篇揭示非人类身份 | 「我是世上仅存的红衣厉鬼。我不知自己是怎么死的。」 |
| 灵魂旁观 | 以灵魂视角描述死亡现场 | 「我的尸体躺在透明棺材里,三个哥哥在外面笑着说:她演得真像。」 |
| 悬念句 | 抛出一个需要解释的事实 | 「我死后的第三天,老公发了一条朋友圈。」 |
| 替嫁被弃 | 被迫接受不公正的命运 | 「三个月后,我代替皇后的嫡亲公主坐上了去漠北和亲的轿撵。」 |
| 代入式提问 | 直接让读者产生共鸣 | 「你有没有在深夜接到过一个不该接的电话?」 |
结尾类型:
| 类型 | 效果 | 适合情绪 |
|---|---|---|
| 余韵式 | 不说完,让读者自己想 | 意难平 |
| 呼应式 | 首尾呼应,形成闭环 | 治愈、成长 |
| 开放式 | 留下悬念 | 细思极恐 |
| 反转再反转 | 结尾再来一个小反转 | 震惊 |
| 金句式 | 一句话点题 | 共鸣 |
references/human-feel-craft.md 自检)references/refer-writing-techniques-digest.md 自检)node scripts/check-ai-patterns.js --check {短篇标题}/第01章_正文.md 无高危 AI 对比句式与破折号命中(碎句号/长段落按提示处理)node scripts/check-degeneration.js --check {短篇标题}/第01章_正文.md 无 blocking 退化命中(复读/截断/工程词泄漏)中文文本统计注意事项:
wc -c 统计的是字节数,中文每字符 3 字节(UTF-8),不等于字数for PYBIN in python3 python py; do "$PYBIN" -c "" 2>/dev/null && break; done; "$PYBIN" -c "from pathlib import Path; print(len(Path('文件路径').read_text(encoding='utf-8')))"(勿直接用 python3:Windows 上它会触发 Microsoft Store 占位程序、exit 49 失败)wc -m 仅作为 macOS/Linux 备选;Windows 环境或模型兼容性不确定时不要依赖 wcwc -c 或模型估算字数wc -l 是安全的不通过 → 回退补足,不得进入精修。
加载 references/writing-workflow.md 中的精修清单完成检查。
重点:开头钩子、情绪曲线、反转铺垫、每句话价值、格式规范、人工感承载、AI 腔排查。人工感按 references/human-feel-craft.md 检查:现场异常、物件回扣、主观误判、短对话/动作拍、现实支架和可复核因果链缺一项时,优先补场景承载而不是替换形容词。文件模式必须先运行 node scripts/check-ai-patterns.js --check {短篇标题}/第01章_正文.md(报告 AI 对比句式 + 破折号按功能改写 + 碎句号 + 长段落;前两类复扫到 0,后两类按情况改),再运行 node scripts/normalize-punctuation.js {短篇标题}/第01章_正文.md 机械兜底标点。另跑 node scripts/check-degeneration.js --check {短篇标题}/第01章_正文.md 报告模型退化(复读/截断/工程词泄漏);blocking 命中说明该段要重新生成,不是改写。
精修阶段,如果项目已部署对应 agent,可 spawn:
Agent(subagent_type: "narrative-writer", prompt: "项目目录:{dir}\n任务描述:去AI味+格式检查\n检查范围:{正文文件}\n删除优先:每条 AI 味项先判能否删除——删后不丢伏笔/钩子/角色/情节/必要信息的直接删,会丢才润色(删除受比例上限与字数下限约束,跌破下限改降AI重写)\n必须检查:先否定再肯定的翻转句式;发现后直接改成后项或动作细节;按 human-feel-craft 检查物件回扣、主观误判、短对话/动作拍和现实支架是否缺失") — 执行去AI味(7 Gate)、人工感承载和格式合规检查Agent(subagent_type: "consistency-checker", prompt: "项目目录:{dir}\n检查范围:{正文文件}\n检查类型:事实冲突+伏笔断线+角色属性不一致") — 执行一致性检查如 agent 不可用,由主线程直接执行。
正文洁净规则:
<!-- 自检 --> 或类似的检查标记注释不通过 → 回退补足。
流水线: 短篇 位置: 写作(第 3/3 步)
| 时机 | 跳转到 | 命令 |
|---|---|---|
| 有参考小说想对标 | story-short-analyze | /story-short-analyze → 输出存入 deconstruction-library/{书名}/ |
| 写完,去 AI 味 | story-deslop | /story-deslop |
| 想自检 | 本 skill 质量自检 | 用 Phase 4 自检流程 + references/quality-checklist.md 逐项核对 |
| 设定太大,适合长篇 | novel-pipeline / novel-write(story-long-write 只作方法参考) | novel-studio --pipeline --prompt-file <需求文件> |
按需加载以下文件。写作时同时加载 ≤ 3 个:
有些主题散在多个文件里。下表给每个主题一个权威文件(先读它,通常够用),配套文件只在需要那个角度时再加载。括号是该文件里对应的小节。
| 主题 | 权威文件(先读) | 配套文件(按角度补充) |
|---|---|---|
| 情绪外化(怎么写情绪) | references/short-craft.md 第2节(情绪直接写+后接具体反应、三段对照、改写四步——替代旧机械替换表) | 各 genre-styles/ 包的「情绪烈度与模式」 |
| 人工感 / 语意换挡 | references/human-feel-craft.md(同桌样本文:物件回扣、主观误判、短对话/动作拍、现实支架) | references/short-craft.md(情绪词后接场景动作)· references/dialogue-mastery.md(对话潜台词)· references/short-deslop.md(去 AI 腔) |
| 短篇设计/单节/标点总纲 | references/refer-writing-techniques-digest.md(19 篇 refer 写作技巧逐篇压缩:前台故事、目标/阻力/代价/新增信息、钩子接力、事件铺垫/过程/余波、标点功能) | references/short-craft.md(短篇正文底座)· references/hooks-chapter.md(钩子)· references/dialogue-mastery.md(对白声口) |
| 情绪设计(情感结构) | references/emotional-methods.md(情感三板斧 + 拉扯节奏 + 失败模式) | references/genre-writing-techniques.md(情绪操控核心法则 / 情绪三层次) |
| 反转 | references/reversal-toolkit.md(反转类型 / 铺垫 / 有效性自检) | references/villain-and-reveal.md(真相揭露机制 / 反转有效性自检) |
| 反派揭露 | references/villain-and-reveal.md(反派模板 / 揭露机制 / 报应设计) | references/reversal-toolkit.md |
| 人物 | 各 genre-styles/{题材}.md 的「对话风格」「招式库」(受害者-复仇者主角声线、白月光软刀、施害者道德绑架人设,corpus-grounded) | references/villain-and-reveal.md(反派/揭露)· references/genre-writing-techniques.md(三层标签反差 / 人设从缺点开始)· references/dialogue-mastery.md(声线差异) |
| 钩子 | references/hooks-chapter.md(章节/开篇钩子类型) | references/hooks-paragraph.md(段落钩子)· references/hooks-suspense.md(悬念设计) |
| 女频写作 | 对应 genre-styles/{题材}.md(追妻火葬场 / 总裁豪门 / 宅斗宫斗的题材声线、虐爽比例、招式) | references/genre-writing-techniques.md(女频读者心理与写作技法 / 感情线四阶段推进法)· references/emotional-methods.md(情绪拉扯) |
| 题材风格 | references/genre-styles/{题材}.md(核心 4 题材的腔调/开篇/钩子/情绪烈度/招式/收尾,corpus-grounded) | references/genre-writing-formulas.md(冷门题材结构骨架)· references/genre-writing-techniques.md(核心梗 / 卖点 / 通用技法) |
| 开头 | 各 genre-styles/{题材}.md 的「开篇范式」(关系锚 + 全弧剧透导语 + 火葬场预告,真实开篇范例)+ short-craft.md 第12节(开头事件密度) | references/hooks-chapter.md(开篇钩子类型)· references/hooks-paragraph.md(段钩密度) |
| 格式与节奏 | references/short-format.md(短篇正文格式,两平台模板) | references/short-craft.md(情绪直接写+后接具体反应/三维度揉进/疏密)· references/writing-workflow.md(设计/精修工作流) |
| 对话 | references/dialogue-mastery.md(对话技法主文件:差异化/潜台词/对话节奏) | references/short-craft.md(三类台词与对话权力博弈)· 各 genre-styles/ 包的真实金句库 |
| 去AI味 | references/short-deslop.md(短篇专属:只杀真·AI腔,不杀情绪烈度/审判句/火葬场预告) | references/banned-words.md(禁用词扫描)· scripts/check-ai-patterns.js(AI句式复扫)· references/quality-checklist.md(成稿检查) |
© Xiaoyangy, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 28 other files (scripts, references) in skills/story-short-write of Xiaoyangy/novel-studio.
Open the folder on GitHubat commit ed04a10
Story Short Write next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Story Short Write this skillXiaoyangy/novel-studio | 131 | — | ~5.6k | Automated safety check: Pass | Apache-2.0 | |
| Story Multi-Perspective Reviewzenstory-ai/oh-story-claudecode | 7.4k | 3 repos | ~3k | Automated safety check: Pass | MIT | |
| Short Web Fiction Trend Scanzenstory-ai/oh-story-claudecode | 7.4k | 2 repos | ~1.2k | Automated safety check: Pass | MIT | |
| InkOS Creative HarnessNarcooo/inkos | 10k | 1 repos | ~1.1k | Automated safety check: Pass | AGPL-3.0 | |
| Novel Arteternityspring/shuohao-skills | 4.3k | — | ~1.1k | Automated safety check: Notes | Apache-2.0 | |
| SepiaNanako0129/sepia | 3.1k | — | ~3.6k | Automated safety check: Pass | MIT |
zenstory-ai/oh-story-claudecode
Reviews Chinese web-novel text with several reviewer agents in parallel, falling back to a single-agent pass, and reports structure, character, prose and setting problems with fixes.
zenstory-ai/oh-story-claudecode
Scans popular short web-fiction rankings on Chinese platforms such as Dianzhong and Heiyan to surface trending emotional hooks, themes and topic candidates with an expiry warning.
Narcooo/inkos
Drives long-form fiction, scripts, storyboards, interactive films and long-document translation through InkOS, with every change made by a typed action.
eternityspring/shuohao-skills
给 AI 短剧出美术设定集(场景 + 叙事道具):场景的设计意图、一致性锚点、光照时段变体、 空景提示词;道具的戏剧功能、状态变体、尺度参照、白底无手提示词。
Nanako0129/sepia
Make AI-generated writing read as human-written, in fiction and in professional prose.
zenstory-ai/oh-story-claudecode
Routes a Chinese web-novel writing request to the matching tool in a 13-skill toolbox, covers author habit memory, and can launch a local dashboard for browsing a project.
Xiaoyangy/novel-studio
长篇网文写作方法论与 novel-studio pipeline 适配器。用于把长篇开书、大纲、日更、续写、重写等需求整理为 pipeline 输入;在 novel-studio 内禁止直接生成正文。触发方式:/story-long-write、/写长篇、「帮我开书」「写大纲」「日更」「续写」「继续写」「修改第X章」「回炉」「重写第X章」。
Xiaoyangy/novel-studio
豆瓣阅读原创长篇专项方法论与 novel-studio pipeline 适配器。用于把 15W-30W 字原创长篇的主题、类型、开头、文字、标签、简介和提交自检要求整理为 pipeline 输入;在 novel-studio 内禁止直接生成正文。触发方式:/story-douban-long-write、/豆瓣长篇、/豆瓣写作、「写一部豆瓣阅读原创长篇」「按豆瓣要求写长篇」。
Xiaoyangy/novel-studio
短篇网文拆文。拆解爆款短篇小说(番茄短篇 / 故事会 / 知乎盐选 / 追妻 / 世情 / 重生 / 虐渣等通俗题材)的故事核、结构、情感线、反转设计、写作手法、共鸣层次。单一全量拆解管道:跑完 Stage 2-6 产出完整拆文报告,落盘到 deconstruction-library/{书名}/,下游 story-short-write 同时读拆文报告 + 情节节点 + 写作手法 + 原文…
Xiaoyangy/novel-studio
审核一段/一篇小说(或任意叙事性文本)的「AI 创作度」——判断它有多大可能由 AI 生成、或 AI 参与了多少。当用户想知道一段文字是不是 AI 写的、AI 味重不重、是人工还是 AI、AI 辅助了多少、帮忙鉴别/检测/审稿 AI 生成内容、给稿件的「人味/机味」打分时,都使用本技能。触发词包括但不限于:AI 创作度、AI 味、是不是 AI 写的、AI 生成检测、人工还是 AI、鉴别…
Xiaoyangy/novel-studio
把各功能串成一条可恢复的流水线:(共创→)写作→评审→重写→交付,按阶段执行、断点续跑。触发:「一条龙写完整本书」「从头跑完整个流程」「中断后接着跑」,想要无人值守端到端、且能中断恢复时使用。
Xiaoyangy/novel-studio
用一句创作需求驱动 novel-studio 走可恢复 pipeline 完整创作(写作→评审→重写→导出)。触发:「帮我写本小说」「按这个设定写」「跑一次创作」,已有明确创作要求且希望无人值守端到端产出章节时使用。
Categories
短篇网文写作方法论与 novel-studio pipeline 适配器。用于把短篇、盐言故事、拆文续写等需求整理为 pipeline 输入;在 novel-studio 内禁止直接生成正文。触发方式:/story-short-write、/写短篇、「帮我写一篇短篇」「写个盐言故事」。. Story Short Write is an agent skill from Xiaoyangy/novel-studio.
Story Short Write fits situations like: tasks that involve Creative writing and fiction.
Run `npx skills add Xiaoyangy/novel-studio --skill story-short-write -a claude-code`. Or copy the skill folder (skills/story-short-write in Xiaoyangy/novel-studio) into .claude/skills/story-short-write in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Xiaoyangy/novel-studio --skill story-short-write -a codex`. Or copy the skill folder (skills/story-short-write in Xiaoyangy/novel-studio) into .agents/skills/story-short-write in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Xiaoyangy/novel-studio --skill story-short-write -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/story-short-write, .gemini/skills/story-short-write, .github/skills/story-short-write and .opencode/skills/story-short-write in your project.
Going by SKILL.md and its folder, Story Short Write needs the command-line tools its instructions call (node).
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Story Short Write is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.6k tokens (SKILL.md is roughly 22k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 59k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Story Short Write: Story Multi-Perspective Review (zenstory-ai/oh-story-claudecode, 7.4k stars), Short Web Fiction Trend Scan (zenstory-ai/oh-story-claudecode, 7.4k stars), InkOS Creative Harness (Narcooo/inkos, 10k stars) and Novel Art (eternityspring/shuohao-skills, 4.3k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Xiaoyangy (a GitHub user) maintains it in Xiaoyangy/novel-studio, which has 131 GitHub stars. The repository holds 18 skills in this directory. The repository was last updated on September 23, 2026.
Source: Xiaoyangy/novel-studio on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.