# Story Publish

小说发布准备：为发布平台整理并核对书名、简介、主角名、分类和标签，定稿后保存发布资料。触发方式：/story-publish、/发布资料、「填写平台建书资料」「建书表单」「起书...

- Repository: https://github.com/zenstory-ai/oh-story-claudecode (8225 stars)
- Category: Engineering
- License: MIT
- Last updated: 2026-11-01
- Runs scripts: yes, review before use

## Install

Claude Code: `npx skills add zenstory-ai/oh-story-claudecode --skill story-publish -g -a claude-code -y`
Codex: `npx skills add zenstory-ai/oh-story-claudecode --skill story-publish -g -a codex -y`
Cursor: `npx skills add zenstory-ai/oh-story-claudecode --skill story-publish -g -a cursor -y`
Gemini CLI: `npx skills add zenstory-ai/oh-story-claudecode --skill story-publish -g -a gemini-cli -y`
Claude Code plugin marketplace: `/plugin marketplace add zenstory-ai/oh-story-claudecode`

## Description

小说发布准备：为发布平台整理并核对书名、简介、主角名、分类和标签，定稿后保存发布资料。触发方式：/story-publish、/发布资料、「填写平台建书资料」「建书表单」「起书名/写简介/选标签用于发布」；正文累计约 2 万字、准备上架时也适用。当前仅适配番茄（长篇与短故事），不代替后台填表或实际发布。

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# story-publish：发布资料准备

把作品已有的设定、大纲和作者的决定，整理成发布平台建书表单要填的资料，按平台规则核对后存成 `发布资料-<平台>.md`。剧情规划和正文写作归 `story-long-write` 等写作 skill，作者只说“开书”时也走那边；本 skill 也不替作者登录后台、填表或发布。

## 原则

- **只有作者确认的才是定稿。** 每个字段标一种状态：`已确认`（作者明确指定或接受）、`建议`（从作品材料推导或新拟）、`待确认`（缺失、含糊、矛盾）、`待平台核实`（平台规则不明或与界面不符）。沉默不算确认；作者接受整套候选方案，算确认其中列出的每一项。作者给的故事简介、大纲是素材，不自动当成平台“作品简介”。
- **作者已定的值不擅自改。** 书名、简介、笔名有问题时指出并给建议，保留原值。
- **平台候选只取自本 skill 的平台参考文件。** 不凭记忆，不从扫榜、拆文、选题材料里挪用，平台之间不共享。没有故事事实时先问，不编人物、情节或卖点。
- **准备完成不等于已发布。** 资料齐了只说“发布资料准备完成”，不说“已提交”“审核中”“已发布”。

## 读取作品材料

书目录：作者指定的优先，其次 `.active-book`；指向不明或多本书分不清时问作者，不从目录名猜。只读，不改设定、不启动写作阶段。

- 长篇：`设定/题材定位.md` 的基本信息和“作者已定”；需要核对主角时读 `设定/角色/` 的角色卡；简介需要剧情支撑时读 `大纲/大纲.md` 及相关卷纲、细纲。
- 短篇：`设定.md` 与 `小节大纲.md`。投稿导语是正文开头，不当平台简介。
- `选题决策.md`、拆文、扫榜材料只能支撑建议；暂定书名、角色卡姓名不自动成为定稿。设定里没写书名时，以书目录名为现用书名。

## 平台

当前支持番茄小说，读 `references/fanqie.md`，候选文件按它的指引按需读。

其他平台：明确说“当前未适配”，请作者提供带日期的建书表单截图或官方说明；拿到前只给不针对平台的书名、简介草案，不套用番茄规则。新增平台时照 `fanqie.md` 的结构写参考文件，注明核验日期和范围。

## 工作流程

1. 确认目标平台和作品类型（长篇/短故事），在回复开头写明平台、适配状态，以及平台参考里的核验日期与范围。
2. 读作品材料，记下作者已定的值，只为作者要求的字段生成候选；候选书名先按平台参考的书名规则自查字数和符号，并标出字数。
3. 按平台参考逐字段核对允许值、数量上限和长度；参考没写的限制标“资料未说明”。
4. 书名和简介确认后，按「封面」一节处理。
5. 本轮要的字段都有了结论（已确认，或作者决定不填）时保存文件；还没保存时，在回复里给出完整草案。保存后的回复只说这次写进了什么、还差什么，并给出文件路径，不重贴全文。
6. 发布资料是平台填写值的依据。确认的书名与 `设定/题材定位.md`（短篇为 `设定.md`）里的不一致时，保存后告诉作者；改设定和书目录交给写作 skill，本 skill 不改。

## 封面

先看当前会话实际能调用的生图工具（不凭模型名判断），再请作者选“直接生成”“仅提示词”或“暂缓”；作者已经选过且仍可执行的不再问。不因缺工具自动改用付费 API。

把已确认的书名、简介、笔名、平台、题材和角色/场景事实交给 `story-cover`，缺笔名时补问：直接生成走它的完整流程，仅提示词走它的 Step 1-3。两种都把完整提示词原文写进「封面」小节，生图成功另记图片路径。`story-cover` 不可用（如 OpenClaw 缺 Key 时发现不到）、失败或作者暂缓时，把原因写进「待作者确认」，不阻塞其他字段；生图失败后改仅提示词要作者同意。只有提示词或未保存的图片，不说“封面已备妥”。`story-cover` 的风格、尺寸建议不替代平台规格。

## 发布资料文件

文件名是 `发布资料-<目标平台>.md`，目标平台用平台参考元信息里的 `platform` 原文（如 `发布资料-番茄小说.md`）。放在书目录：长篇是 `正文/` 的上一级，短篇是 `正文.md` 所在目录；还没有正文时直接放书目录下。已有同名文件时先读，和作者手改的内容冲突就先问，不覆盖；旧文件按下面的格式重排，保留作者手写内容。

这份文件以后会被程序读来填后台表单，格式是固定契约：

The rest: https://github.com/zenstory-ai/oh-story-claudecode/blob/HEAD/skills/story-publish/SKILL.md
