Skill: qiqi52566/novel-serial (version 1.0.2)

--- name: novel-serial description: 番茄小说 AI 自动连载发布技能。每天定时生成并发布小说章节，支持多书管理、金手指边界校验、角色状态追踪。需配合 OpenClaw cron 使用。 --- # Novel Serial — 番茄小说日更连载技能（执行版） > 仅包含执行流程。知识性内容请参考 `KNOWLEDGE.md`。 --- ## 整体架构 ``` 用户 ↑ ↑ 飞书私信 ↑ OpenClaw（服务器） ├── Cron Scheduler（定时触发器） │ └── jobs.json → 每天 12:00 触发 │ ↓ └── Session（写作会话） ├── ① 读取本 SKILL.md + KNOWLEDGE.md ├── ② 扫描 novels/ 目录 ├── ③ 读取 meta.json + 最新章节 ├── ④ 写章节（调用 LLM） ├── ⑤ 保存到 chapters/ ├── ⑥ 更新 meta.json └── ⑦ 推送完整章节到飞书 ``` --- ## 部署步骤 ### 第一步：创建 cron 任务 在 OpenClaw 的 `jobs.json` 中添加： ```json { "name": "novel-serial-daily", "schedule": { "kind": "cron", "expr": "0 12 * * *", "tz": "Asia/Shanghai" }, "wakeMode": "now", "payload": { "kind": "agentTurn", "message": "执行小说日更任务：读取 ~/.openclaw/workspace/skills/novel-serial/SKILL.md 和 KNOWLEDGE.md，按「每日写作任务」流程执行——扫描 novels/ 目录，对每本 status ≠ 已放弃/已完本 的书写下一章，保存到 chapters/，更新 meta.json，将完整章节正文通过飞书发送给用户。", "timeoutSeconds": 600 }, "delivery": { "mode": "announce", "channel": "feishu", "to": [REDACTED_SECRET] } } ``` ### 第二步：建立小说目录 ``` ~/.openclaw/workspace/novels/ └── novel-{N}/ ← 每本书一个文件夹 ├── meta.json ← 必须：章节数、主角年龄/能力、状态 ├── book-bible.md ← 必须：金手指边界、各阶段能力、悬念清单 ├── memory/ │ ├── 人物性格.md ← 必须：主角各阶段能力/性格状态 │ ├── 世界观设定.md ← 必须：金手指详细规则+边界 │ └── 伏笔钩子.md ← 必须：埋线+回收追踪 └── chapters/ ├── ch01.md ← 每章一个文件 └── ... ``` ### 第三步：确认 meta.json 必须字段 ```json { "title": "《书名》", "author": "xxx", "status": "待更新", "current_chapter": 0, "word_count": 0, "platform": "番茄小说", "last_updated": "", "主角年龄": "X岁", "主角能力等级": "能A/B，不能C", "金手指当前等级": "LvX", "悬念状态": { "悬念A": {"承诺章节": N, "状态": "待交代"} } } ``` **status 可选值：** - `待更新` → 正常日更 - `停更` → 跳过 - `完结` → 跳过 --- ## ⚠️ 铁律：每次写作前必须读取状态文件 **禁止凭记忆写作。每次必须从文件读取当前状态。** 对一本书操作前，**按顺序读取以下所有文件**： ``` BOOK_DIR="~/.openclaw/workspace/novels/novel-{N}/" 必须读取： 1. meta.json → 章节数、主角年龄/能力、状态 2. book-bible.md → 金手指边界、主线进度、已承诺的悬念 3. memory/人物性格.md → 各角色当前能力/性格 4. memory/伏笔钩子.md → 哪些悬念承诺了几章内交代 5. 最新章节 ch{N}.md → 上章结尾主角做了什么/说了什么，承接关系 ``` --- ## 每日写作任务（完整流程） ### 目标：每天每本写 2 章，每章 大于 2000 字，最多 3500 字 ### 执行流程（每步不可跳过） ``` STEP 1：扫描 novels/ 目录 - 扫描 ~/.openclaw/workspace/novels/ - 过滤 meta.json 中 status ≠ "已放弃" 且 ≠ "已完本" 的书 - 停更/完结/不存在 → 跳过 STEP 2：读取当前书籍状态 对每本书，依次读取： a. meta.json → current_chapter、主角年龄、能力等级 b. memory/人物性格.md → 当前主角能做什么/不能做什么 c. memory/世界观设定.md → 金手指规则和边界 d. 最新章节 ch{N}.md → 上章结尾，必须承接 STEP 3：输出「本章状态确认」 必须输出以下内容后才能开始写： 📋 [{书名}] 第{N+1}章写作前确认 【基础状态】 - 当前章节：ch{N+1} - 主角年龄：{从meta.json} - 主角能力等级：{从memory/人物性格.md} - 金手指等级：{从book-bible.md} - 核心悬念待交代：{从memory/伏笔钩子.md} 【承接检查·上章结尾】 - 上章结尾：{从ch{N}.md最后一段} - 本章必须承接：{如何自然接上} 【能力边界检查】 - 本章主角能做什么：{列举} - 本章主角不能做什么：{列举}（严禁超出边界） 【悬念承诺检查】 - {悬念A}：第{X}章承诺→第{Y}章交代，本章是否该兑现？ 字数目标：2000-3500字 STEP 4：写章节（按单章模板） STEP 5：写完后的「一致性自检」——逐条确认才能发 【主角一致性检查】 - [ ] 年龄：本章={}岁，与meta.json一致，无跳跃 - [ ] 能力：能做{}，不能做{}，没有超出边界的新能力 - [ ] 情绪表现：通过{动作/表情/声音}表现，不是【系统提示】独挑大梁 【标题匹配检查】 - [ ] 标题"{章名}"核心事件={}，正文≥80%围绕此事件 【悬念推进检查】 - [ ] 承诺{章节}交代的{悬念}，本章已/未交代（不得逾期） - [ ] 新增悬念{悬念名}，承诺第{}章交代 【字数检查】 - [ ] 实际字数 2000-3500字（超出需拆分，短了需补写） STEP 6：保存章节 - 路径：chapters/ch{N+1}.md - 格式：Markdown STEP 7：更新 meta.json - current_chapter += 1 - word_count += 新增字数 - last_updated = 今天日期 - 如有主角年龄/能力变化，同步更新 STEP 8：更新 memory 文件 - memory/人物性格.md（如主角能力有变化） - memory/伏笔钩子.md（如有悬念推进或新增） STEP 9：发送飞书消息给用户 每章单独一条消息，格式见下方「发送格式」 STEP 10：发送日更汇总报告 格式见下方「日更汇总格式」 ``` --- ## 单章写作模板 ```markdown 【章节信息】 第{X}章 | {章节名} | 本章爽点类型：{钩子/反转/升级等} 【情节概述】 {两句话讲清楚这章发生什么} 【主角当前状态核对】 - 年龄：{从meta.json} - 能力等级：{从memory/人物性格.md} - 上章结尾主角做了什么/说了什么：{确认} 【必须包含元素】 - {冲突/危机} - {金手指展示（必须符合边界）} - {本章钩子} 【写作要求】 - **章节标题格式（必须严格遵守，否则发布脚本无法提取标题）：** - 第一行必须是 `第{N}章 | {标题}` 格式，示例：`第13章 | 真相` - 分隔符必须是 **竖线 `|`**，前后可以有空格，禁止使用冒号、破折号等其他分隔符 - 标题两个字以内算违规，标题里不能包含 `|` 字符 - 字数：2000-3500字 - 前500字必须有冲突 - 每1000字一个小高潮 - 结尾留悬念 - 短句为主，减少"的"字 - 情绪：必须通过{动作/表情/声音/行为}表现，禁止【系统提示】独挑大梁 ``` --- ## 发送给用户的格式 **每章单独一条消息：** ``` 📖 《{书名}》第{X}章 · {章节标题} {正文全文} --- 字数：{xxxx}字 | 本书总字数：{xxxxx}字 ``` **日更汇总（每本书日更完成后发一条）：** ``` 📖 《{书名}》日更 · {日期} ━━━ 第X章 ━━━ {章节标题} {正文} ━━━ 第X+1章 ━━━ {章节标题} {正文} 字数：{xxx}字 / {yyy}字 | 本书总字数：{zzzzz}字 ⚠️ 一致性确认：主角{X}岁 | 能力无新增 | 悬念无逾期 ``` --- ## 金手指边界规则（必须遵守） ``` 好的设定（金手指有边界）： 系统：金手指系统 能力：主角可通过情绪共鸣影响周围50米内所有人的情绪 限制：主角每次使用能力后需要睡眠2小时恢复；主角无法主动控制能力触发时机 升级条件：主角成长度达到20/50/80时解锁对应技能 禁止的设定（无边界！）： ❌ 系统可以生成任何能力，宿主需要什么就有什么 ❌ 系统可以主动触发宏观事件（热搜、舆论等） ❌ 系统没有使用代价和冷却机制 ``` --- ## 质量速查（每次输出前逐条确认） ### 创作质量 - [ ] 第一个字有冲突？ - [ ] 500字内有危机/钩子？ - [ ] 金手指展示了（且符合边界）？ - [ ] 每1000字有情节点？ - [ ] 结尾有悬念？ - [ ] 短句为主（每段≤3行）？ - [ ] 没有连续3段纯对话？ - [ ] **字数 2000-3500字？** ### 一致性（核心！） - [ ] **主角年龄：本章={}岁，与meta.json一致，无跳跃** - [ ] **主角能力：能做{列举}，不能做{列举}，没有超出边界的新能力** - [ ] **主角情绪表现：是通过{动作/表情/声音}表现，不是【系统提示】独挑大梁** - [ ] **标题匹配：标题"{章名}"核心事件={}，正文≥80%围绕此事件** - [ ] **悬念推进：承诺{章节}交代的{悬念}，本章已/未交代（不得逾期）** --- ## 常见错误清单（违反 = 严重错误） | # | 错误类型 | 错误描述 | 如何避免 | |---|---------|---------|---------| | 1 | **主角年龄跳跃** | 0岁婴儿突然会说话/唱歌/走路 | 严格按年龄-能力表写，用meta.json核对 | | 2 | **金手指无限膨胀** | 需要什么能力就冒出什么能力 | Book Bible阶段设好边界，禁止凭空创造 | | 3 | **标题与内容不符** | 标题写A，正文80%在写B | 写前核查清单里有标题匹配检查 | | 4 | **show-don't-tell违规** | 只写【系统提示：主角哭了】，没有动作/表情/声音 | 一致性检查里有情绪表现方式检查 | | 5 | **悬念不兑现** | 承诺3章内交代，结果写到第10章还没交代 | 伏笔钩子.md里记录承诺章节，超时=错误 | | 6 | **能力忽高忽低** | 主角这章能A，下章突然不能A了 | 每次写之前读memory/人物性格.md | | 7 | **不读取文件凭记忆** | "我记得主角上次做了什么"就直接写 | 写作前强制Step 1：读取所有状态文件 |

path: templates/meta.json
content: status: 待更新
current_chapter: 0
word_count: 0
platform: 番茄小说

path: scripts/word_count.sh
content: #!/bin/bash
# 用法: bash word_count.sh "文件路径" 或 bash word_count.sh --text "文本内容"
# 返回字数统计（纯中文计法）

if [ "$1" = "--text" ]; then
    text="$2"
else
    text=$(cat "$1" 2>/dev/null)
fi

# 统计中文字符+中文标点+字母+数字（忽略空格和纯英文标点）
count=$(echo "$text" | sed 's/ //g' | sed 's/\r//g' | grep -oP '[\x{4e00}-\x{9fff}]|[\x{3000}-\x{303f}]|[\x{ff00}-\x{ffef}]|[a-zA-Z0-9]' | wc -l)

echo "$count"


Security scan verdicts — ClawScan: malicious | static analysis: clean | VirusTotal: clean | SkillSpector:  ()