---
name: story-publish
description: "小说发布准备：调用即生成并保存发布资料，缺失字段留空；按平台整理书名、笔名、分类、标签及所需简介。触发方式：/story-publish、/发布资料、「填写平台建书资料」「建书表单」「起书名/写简介/选标签用于发布」；正文累计约 2 万字、准备上架时也适用。当前适配番茄长篇与短故事（短故事无需简介），不代替后台填表或实际发布。"
metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudecode"}}
---

# 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。完整提示词写进「封面」，成功另记图片路径。入口不可用、失败或暂缓时写明原因，不阻塞保存；生图失败后改仅提示词须作者同意。仅有提示词不称“封面已备妥”，风格尺寸建议不替代平台规格。

## 发布资料文件

文件名是 `发布资料-<目标平台>.md`，目标平台用平台参考元信息里的 `platform` 原文（如 `发布资料-番茄小说.md`；平台未知先用 `发布资料-待确认平台.md`，不套平台字段、不宣称通过平台校验，确认后再迁移补齐）。放在书目录（长篇为 `正文/` 的上一级，短篇为 `正文.md` 所在目录，还没有正文时直接放书目录下；书目录未知先存当前工作目录，位置列待确认）。已有同名文件先读：有手改冲突时保留原文件，本轮草案另存不重名文件并请作者确认；无冲突时直接补齐或保留已有资料，不为每次调用重复建文件。

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

- 开头每行一项元信息，依次为 `> 格式版本：1`、`> 目标平台：<platform>`、`> 作品类型：长篇` 或 `短故事`、`> 核验：<核验日期与范围>`。
- 元信息后紧接 `# 书本名称：<书名>`，然后是基础字段、`## 封面`、平台标签或分类、所需简介、`## 待作者确认`、`## 待平台核实`、`## 来源说明`。平台规则 `synopsis: false` 时不输出「作品简介」（番茄短故事）；其余保留。基础字段和标签以 `basics`、`tag_sections` 为准，每个字段独立一行 `- 字段：值`，多值用顿号分隔。
- 字段值只有三种：已确认的值；`（不填）`，表示作者决定不填；留空，表示还没定，并在「待作者确认」里列出。书名未定时标题写成 `# 书本名称：`，简介未定时小节留空。建议、说明、占位词一律不写进字段值。
- 候选书名、简介、标签等建议草案，以及要作者到后台界面上看的事项，都放「待作者确认」；规则缺失或适用范围不明的放「待平台核实」；两节没有事项写“无”。来源和核验依据放最后的「来源说明」。

长篇示例（番茄）：

```markdown
> 格式版本：1
> 目标平台：番茄小说
> 作品类型：长篇
> 核验：2026-10-29；标签对照 Web 创建作品弹窗，App 与提交结果未核验

# 书本名称：<书名>

- 作者/笔名：
- 签约模式：
- 目标读者：
- 主角1：
- 主角2：

## 封面

- 模式：<直接生成/仅提示词/暂缓；未选时留空>
- 状态：<提示词与图片的状态分开写>
- 提示词：<完整提示词原文>
- 图片：<已保存的图片路径>

## 阅读标签

- 主分类：
- 主题：
- 角色：
- 情节：

## 内容标签

- 情节：
- 情感：
- 人设：
- 世界观：

## 作品简介

## 待作者确认

## 待平台核实

## 来源说明
```

长提示词可以放进代码块。不列完整候选清单，除非作者要。

## 格式检查

保存后依次探测 `python3`、`python`、`py`，运行本 skill 根目录下的 `scripts/check-publish-format.py <发布资料文件>`。脚本只读：FAIL 是文件不合契约，或填了平台没有的选项和标签，要修正后重跑；WARN 是已确认的值可能被平台拒收（如书名、长度），转告作者，不替作者改。环境不能运行脚本时，重读文件逐项核对，并告诉作者没跑自动检查。
