From learning-skills
Generates long-form novels using WPS notes for persistent memory: cold-starts world-building/characters/images, writes chapters with prior context review to prevent inconsistencies, auto-archives. For ongoing novel creation requests.
npx claudepluginhub wpsnote/wpsnote-skills --plugin learning-skillsThis skill uses the workspace's default tool permissions.
> **核心设计哲学**:用 WPS 笔记作为小说的"大脑",AI 每次动笔前先"回忆",写完后再"存档"。用户只需给方向或提需求,其余全部自动完成。
Manages long-form novel writing via CLI using wpsnote-cli for WPS notes: cold-start world/character setup with AI images, chapter generation with prior context review, and persistent archiving. Activates on phrases like '帮我写小说' or story ideas.
Generates first-draft novel prose from Crucible outlines via scene-by-scene drafting, style matching, continuity tracking, and hallucination prevention. Use after planning/outlining on write/draft requests.
Writes webnovel chapters (2000-2500 words) via workflow: context, draft, style adapt, review, polish, data extraction. Use /webnovel-write or auto-activates on requests.
Share bugs, ideas, or general feedback.
核心设计哲学:用 WPS 笔记作为小说的"大脑",AI 每次动笔前先"回忆",写完后再"存档"。用户只需给方向或提需求,其余全部自动完成。
满足以下任一条件即启动本 Skill:
每部小说独立一套标签树,多级标签用 / 分隔写入 WPS 笔记。
#小说名/meta ← 体裁、偏好、风格、进度等配置
#小说名/设定/世界观 ← 世界背景、时代、规则体系
#小说名/设定/场景 ← 地点描写、场景库
#小说名/设定/冲突 ← 核心矛盾与戏剧冲突
#小说名/设定/剧情梗概 ← 总体剧情走向与大纲
#小说名/设定/伏笔 ← 已埋伏笔及回收状态
#小说名/设定/写作风格 ← 叙述视角、语言风格、节奏偏好
#小说名/人物/主角:人物名 ← 主角设定(含生成的形象图)
#小说名/人物/配角:人物名 ← 配角设定(含生成的形象图)
#小说名/人物/人物关系图 ← 角色之间的关系网
#小说名/剧情日志 ← 每章事件摘要+角色状态+伏笔(防穿帮核心)
#小说名/正文/第N章 ← 各章节正文
标签写法(XML 格式):<tag>#小说名/设定/世界观</tag>
AI 在对话中只能做两件事:
对话中绝对不能出现的内容:
每次向用户提问,必须附上 2–4 个备选项,用户可以直接选一个或在此基础上修改,不让用户面对空白发呆。
备选项格式示例:
你希望这部小说是什么体裁?
A. 奇幻/玄幻(有魔法或特殊力量体系)
B. 都市/现代(贴近现实生活)
C. 科幻(未来、技术、星际)
D. 悬疑/推理(谜题、反转、破案)
→ 也可以直接告诉我你想要的风格
主角是什么样的人?
A. 普通人意外卷入事件,逐渐成长
B. 天赋异禀但性格有缺陷,需要磨砺
C. 已经很强,故事聚焦在更大的阴谋或牺牲
D. 让 AI 自动决定,和故事背景匹配
调用任何 MCP 工具前,必须先说一句话告知用户,不允许沉默直接调用:
每篇笔记的结构:标题行 + 标签行 + 正文内容,标题和标签分开写,不混在一起。
# 笔记标题 ← h1 标题,只写名字,不含标签
#标签/子标签 ← 单独一行写标签,紧跟标题下方
正文内容...
对应 XML 写法:
<h1>笔记标题</h1>
<p><tag>#小说名/设定/世界观</tag></p>
<p>正文内容...</p>
当 search_notes({ keyword: 小说名 }) 未找到相关笔记时,进入冷启动。
流程:
当找到对应小说标签的笔记时,直接加载上下文续写。
流程:
AI 向用户提问,每个问题都必须附上备选项,用户可直接选或自由描述。全部问题收齐后,AI 自动推导所有设定,无需用户逐一确认。
问题 1:故事是关于什么的?
你的故事大概是什么方向?
A. 一个人在陌生/异世界的冒险与成长
B. 现代都市里的情感、阴谋或悬疑
C. 末世、星际或未来科技背景的生存/探索
D. 权谋、江湖、历史或古代架空
→ 也可以直接用一句话描述你的故事核心
问题 2:主角是什么样的人?
主角的起点是?
A. 普通人,被命运推着卷入事件,逐渐觉醒
B. 有天赋但有明显缺陷,需要经历磨砺
C. 已经足够强,故事聚焦更大的阴谋、牺牲或使命
D. 让 AI 根据故事背景自动决定
问题 3:你喜欢什么样的写作节奏?
偏好哪种风格?
A. 快节奏爽文,冲突密集,读着带劲
B. 慢热叙事,注重人物情感和内心刻画
C. 悬疑紧张,每章留钩子,让人想翻下一章
D. 随 AI 根据体裁自动匹配
用户回答后,AI 根据所有回答自动推导以下设定,不再追问:
| 设定项 | 推导依据 |
|---|---|
| 体裁 | 根据问题 1 回答自动判断 |
| 世界观 | 基于体裁和描述构建 |
| 主要冲突 | 从故事核心提炼 |
| 主角设定 | 结合问题 2 和体裁生成 |
| 叙述视角 | 默认第三人称有限视角(存入 meta) |
| 章节字数 | 根据体裁推导默认值(见下方字数规则),存入 meta |
| 语言风格 | 根据问题 3 和体裁判断,存入 meta |
用户明确说出的任何设定,都优先于 AI 推导。
章节字数推导规则:
| 体裁/偏好 | 默认目标字数 |
|---|---|
| 轻小说/网络爽文 | 2000–3000 字 |
| 奇幻/科幻/武侠 | 1500–2500 字 |
| 都市/言情/悬疑 | 1000–2000 字 |
| 纯文学/慢热风格 | 800–1500 字 |
| 用户明确指定 | 以用户指定为准 |
字数存入 meta 笔记后,每次写作前必须读取并作为硬约束执行。
按以下顺序创建,每个笔记打对应标签。
Meta 笔记是整部小说的唯一索引中心,存储所有子笔记的 note_id。后续所有流程应优先从 meta 索引读取 note_id,不再每次搜索。
title: 《小说名》创作设定
tag: #小说名/meta
XML 内容:
<h1>《小说名》创作设定</h1>
<p><tag>#小说名/meta</tag></p>
<h2>基本信息</h2>
<p>体裁:[奇幻/科幻/现代/悬疑...]</p>
<p>叙述视角:第三人称有限视角</p>
<p>语言风格:[沉稳/轻快/诗意/犀利...]</p>
<p>章节目标字数:[X–Y 字]</p>
<p>特殊禁忌:[用户不希望出现的内容,若无则写"无"]</p>
<h2>创作记录</h2>
<p>当前进度:第 0 章(待开始)</p>
<p>创作开始时间:[YYYY-MM-DD]</p>
<h2>笔记索引</h2>
<p>【meta】note_id = (本笔记自身 ID)</p>
<p>【世界观】note_id = (创建后填入)</p>
<p>【冲突设定】note_id = (创建后填入)</p>
<p>【剧情梗概】note_id = (创建后填入)</p>
<p>【伏笔日志】note_id = (创建后填入)</p>
<p>【剧情日志】note_id = (创建后填入)</p>
<h3>人物</h3>
<p>【人物:角色名】note_id = (创建后填入)</p>
<h3>场景</h3>
<p>【场景:场景名】note_id = (创建后填入)</p>
<h3>正文章节</h3>
<p>【第1章】note_id = (创建后填入)</p>
索引维护规则:
- 每创建一个新笔记,立即将其 note_id 回写到 meta 索引对应条目
- 使用索引中的 note_id 访问笔记时,若返回
BLOCK_NOT_FOUND或NOTE_NOT_FOUND,则用search_notes重新定位,找到后立即更新 meta 索引- 索引是唯一真相来源,错误的 ID 不能留着,必须修正
title: 《小说名》世界观设定
tag: #小说名/设定/世界观
XML 内容包含:
<h1>《小说名》世界观设定</h1>
<p><tag>#小说名/设定/世界观</tag></p>
- 世界背景(时代/地理/社会结构)
- 核心规则(魔法体系/科技水平/社会规范)
- 特殊设定(独有元素)
- 禁忌与约束(这个世界做不到的事)
title: 人物设定 — 角色名
tag: #小说名/人物/主角:角色名
XML 内容包含:
<h1>人物设定 — 角色名</h1>
<p><tag>#小说名/人物/主角:角色名</tag></p>
- 外貌描述(详细,用于生图):发色与发型、体型与身材比例、面部特征、着装偏好与典型服饰、标志性配件
- 性格特征(3-5 个核心词)
- 口头禅/说话风格
- 背景故事
- 与其他角色的关系
- 人物动机(想要什么/害怕什么)
- 当前状态:[初始状态,随剧情更新]
人物形象变迁规则:
<h2>形象变迁历史</h2>
<h3>第X章之后</h3>
<p>变迁类型:[受伤/换装/成长/魔化/其他...]</p>
<p>触发事件:[导致外貌变化的具体事件]</p>
<p>变迁描述:[详细说明外貌变成了什么样,哪些改变,哪些保留]</p>
<p>【变迁后形象图描述】[此图展示变迁后的外貌,角度/重点描述]</p>
[图片,生图失败时写 <p>(变迁形象图待补)</p>]
后续所有涉及该角色的生图 prompt,都必须使用最新形象描述(含最新变迁)而非初始描述。
创建完人物笔记后,立即生成人物形象图:
⚠️ 生成任何角色图片前,必须先完整阅读该角色笔记,提取并记录以下人设细节,生图 prompt 必须包含所有这些细节以保证跨章一致性:
- 发色与发型(如:银白色长直发、黑色短发、棕色卷发)
- 体型与身材比例(如:修长高挑、娇小纤细、壮实宽肩)
- 面部特征(如:眼睛颜色形状、肤色、标志性特征)
- 着装偏好与典型服饰(如:总穿深色风衣、偏爱白色宽袖长袍)
- 标志性配件(如:左耳银环、颈间红绳)
这些细节非常非常重要,后续所有涉及该角色的图片都必须严格遵循,不得出现与人设不符的外貌。
/ Step 0:阅读人物笔记,提取人设细节(必做,不可跳过)
read_note({ note_id: 人物笔记 })
→ 提取:发色、发型、体型、面部特征、着装偏好、标志性配件
→ 将这些细节全部写入 prompt
/ Step A:生成图片(4:3 尺寸,最大 2048x1536)
/ 注意:每 10 分钟最多生成 10 张图,生图失败时不要重试阻塞流程
/ 失败处理:先跳过,继续后续步骤;角色笔记里已有文字描述,后续回来发现没图再补
generate_image({
prompt: "[角色名],[发色发型],[体型描述],[面部特征],[典型着装],[标志性配件],[体裁]插画风格,精细人物肖像,[主要色调]。限 500 字符以内",
width: 2048,
height: 1536
})
→ 成功:{ image_url: "https:/...", task_id: "..." }
→ 失败:跳过插图,在笔记对应位置写 <p>(形象图待补)</p>,继续后续流程
/ Step B:插入人物笔记末尾(生图成功时执行)
/ 先获取笔记末尾的 block_id
get_note_outline({ note_id: 人物笔记 })
→ 找到最后一个 block_id(last_block)
insert_image({
note_id: 人物笔记,
anchor_id: last_block,
position: "after",
src: image_url,
alt: "角色名 初始形象图"
})
注意:每 10 分钟最多生成 10 张图。生图失败(含频率限制)时,先用文字描述占位,继续其他流程,不要卡住。后续回到该角色/场景笔记时,发现只有"(待补)"占位符,再补生即可。
⚠️ 每个新场景必须独立创建设定笔记,不可合并。场景设定必须包含:
title: 场景设定 — 场景名(如:陵风城·东市集)
tag: #小说名/设定/场景/场景名
XML 内容包含:
<h1>场景设定 — 场景名</h1>
<p><tag>#小说名/设定/场景/场景名</tag></p>
<h2>场景概述</h2>
<p>[场景类型:室内/室外/地下/空中等]</p>
<p>[所属区域/城市/世界位置]</p>
<p>[首次出现:第X章]</p>
<h2>环境细节(必须详尽,不可省略)</h2>
<p>地面:[材质、颜色、状态,如:青石板路,缝隙间长满苔藓,夜晚湿滑]</p>
<p>建筑/结构:[样式、材料、破损或完好程度、高度层次]</p>
<p>光线:[光源类型、颜色、照射角度、氛围感,如:吊挂的昏黄油灯,从窗缝透入的月光]</p>
<p>气味:[...]</p>
<p>声音:[...]</p>
<p>温度/气候:[...]</p>
<p>常驻元素:[固定摆设、标志性物件,如:门口总挂着半截破布帘、角落有一口锈迹斑斑的铁锅]</p>
<h2>配图</h2>
场景配图规范:
<p>【正面全景】从街道正面望向入口,左侧是歪斜的木牌,右侧堆着货箱,光线从右上方斜入,整体色调昏黄。</p>
[图片]
<p>【内部视角】站在柜台后方向门口看,地面潮湿反光,远处是嘈杂的市集人影。</p>
[图片]
<p>【特写细节】柜台左角的铁锅,锈迹斑斑,锅沿磕了一块缺口,旁边搭着一块灰布。</p>
[图片]
生成场景图时,prompt 需包含:场景名称、所有环境细节、光线色调、体裁风格。
场景变更规则:
<h2>场景变更历史</h2>
<h3>第X章之后</h3>
<p>变更类型:[破坏/改造/废弃/占领...]</p>
<p>变更描述:[详细说明场景变成了什么样,哪些细节改变了,哪些保留了]</p>
<p>触发事件:[导致变更的具体事件]</p>
[变更后配图:每张图上方同样要有角度描述文字;生图失败时写 <p>(变更状态图待补)</p>]
生成场景/人物配图的通用规范:
默认图片尺寸:4:3,最大 2048×1536 速率限制:每 10 分钟最多 10 张 失败处理:生图失败(含频率超限)时,先在对应位置写
<p>(图待补)</p>占位,继续后续流程,不阻塞创作。后续回到该笔记发现占位符时再补生即可,因为文字描述已经记录了所有细节。
/ Step 1:根据场景细节描述,按顺序生成多角度图
/ 每张图生成前先写好描述文字(insert into 笔记),再生成图片插入
/ 生图失败时:写 <p>(图待补)</p> 占位,继续下一步
/ 角度 1(正面全景)
edit_block({ op: "insert", content: "<p>【正面全景】[角度描述]</p>" })
generate_image({ prompt: "[场景名],[所有环境细节],正面全景,[光线色调],[体裁]插画风格,写实背景艺术", width: 2048, height: 1536 })
→ 成功:insert_image(...)
→ 失败:edit_block({ content: "<p>(正面全景图待补)</p>" }),继续
/ 角度 2(内部视角)
edit_block({ op: "insert", content: "<p>【内部视角】[角度描述]</p>" })
generate_image({ prompt: "[场景名],[所有环境细节],内部视角,[光线色调],[体裁]插画风格", width: 2048, height: 1536 })
→ 成功:insert_image(...)
→ 失败:edit_block({ content: "<p>(内部视角图待补)</p>" }),继续
/ 角度 3(特写细节,可选)
edit_block({ op: "insert", content: "<p>【特写细节】[角度描述]</p>" })
generate_image({ prompt: "[标志性物件名称],[细节描述],特写,[体裁]插画风格", width: 2048, height: 1536 })
→ 成功:insert_image(...)
→ 失败:edit_block({ content: "<p>(特写图待补)</p>" }),继续
title: 《小说名》剧情梗概
tag: #小说名/设定/剧情梗概
XML 内容包含:
<h1>《小说名》剧情梗概</h1>
<p><tag>#小说名/设定/剧情梗概</tag></p>
- 故事起点
- 主线走向(3-5 个关键转折点)
- 预计结局(可以模糊)
- 核心主题
title: 《小说名》伏笔日志
tag: #小说名/设定/伏笔
初始内容:
<h1>《小说名》伏笔日志</h1>
<p><tag>#小说名/设定/伏笔</tag></p>
<p>(尚未埋入伏笔)</p>
后续每章追加格式(全局唯一编号 F-1、F-2…):
<p>[F-1] 伏笔内容描述 → 埋入:第1章 / 状态:未回收</p>
<p>[F-2] 伏笔内容描述 → 埋入:第2章 / 已回收:第5章</p>
title: 《小说名》剧情日志
tag: #小说名/剧情日志
初始内容:
<h1>《小说名》剧情日志</h1>
<p><tag>#小说名/剧情日志</tag></p>
<p>(尚未开始写作)</p>
每章追加格式:
<h2>第X章《章节标题》</h2>
<p>主要事件:...</p>
<p>在场角色:...</p>
<p>埋入伏笔:...(若有,否则写"无")</p>
<p>角色状态变化:...(若有,否则写"无")</p>
<p>结尾句:[该章最后一句话]</p>
正式写作前,AI 必须完成以下 5 步:
/ 第一次启动时通过标签搜索找到 meta 笔记(此后通过索引直接访问)
search_notes({ tags: ["#小说名/meta"], limit: 1 })
→ note_id_meta
/ 读取整个 meta 笔记(包含基本信息 + 笔记索引)
read_note({ note_id: note_id_meta })
→ 从"基本信息"提取:章节目标字数、叙述视角、语言风格
→ 从"笔记索引"提取:世界观、剧情日志、伏笔日志、各角色、各场景、各章节的 note_id
→ 将这些 note_id 缓存在本次上下文中,后续步骤直接使用,无需再搜索
索引容错规则: 使用索引中的 note_id 访问时,若返回错误,立即用
search_notes重新定位,找到后调用edit_block更新 meta 索引中对应条目,再继续流程。
将目标字数作为硬约束:写作时严格控制在目标字数 ±20% 以内。
/ 从 meta 索引取最新章节 note_id(检查 0 已缓存)
/ 若索引里有多章,取编号最大的那条
read_note({ note_id: 最新章节note_id })
→ 或用 read_blocks 读末尾约 300-500 字:
get_note_outline({ note_id: 最新章节note_id })
→ 找到后几个 block_id
read_blocks({ note_id: 最新章节note_id, block_id: 倒数第二个block, after: 5 })
→ 读取结尾内容
记录:最后的情绪基调、主角所在位置、时间点。
/ 从 meta 索引取剧情日志 note_id(检查 0 已缓存)
read_note({ note_id: 剧情日志note_id })
→ 读取全文
关注:未回收的伏笔(本章适合回收吗?)、近期章节走向、有无角色消失太久。
/ 从 meta 索引取将要出场角色的 note_id(检查 0 已缓存)
search_note_content({ note_id: 角色note_id, query: "当前状态" })
→ 定位"当前状态"block_id
read_blocks({ note_id: 角色note_id, block_id: 当前状态block })
→ 确认角色状态(含最新形象变迁)
当用户提出"这章要出现 XX"、"处理某件事"等要求:
/ 语义检索相关设定
search_notes({ keyword: "用户提到的关键词", tags: ["#小说名"] })
→ 确认相关设定细节
/ 检查剧情日志有无相关铺垫
search_note_content({ note_id: 剧情日志, query: "关键词" })
→ 确认前文有无伏笔
对本章将要出现的每个场景:
/ 检索场景设定笔记
search_notes({ keyword: "场景名", tags: ["#小说名/设定/场景"] })
⛔ 绝对禁止:在对话中输出小说正文
AI 不允许在对话消息里写任何小说正文,无论任何情况,无一例外。
- 禁止在对话中写正文、片段、示范、草稿,哪怕只有一句话
- 禁止以"以下是本章内容"、"正文如下"等任何形式在消息里输出正文
- 唯一合法的写作方式:调用
create_note+batch_edit将正文写入 WPS 笔记- 写完后对话中只允许出现:章节标题、字数、一句话剧情摘要、"笔记已保存"
- 用户若要阅读,引导其打开笔记,AI 不在对话里展示内容
违反以上任一条,即为执行错误,必须立刻停止并重新通过工具写入。
根据 Meta 笔记中的风格约束进行写作。
写作 6 原则:
写作执行流程:
create_note + batch_edit 写入 WPS 笔记(见"归档 1")章节正文写完后立即执行,无需用户参与。
create_note({ title: "第X章 章节名" })
→ { fileId: new_note_id }
get_note_outline({ note_id: new_note_id })
→ { blocks: [{ id: "p_empty", type: "paragraph" }] }
batch_edit({ note_id: new_note_id, operations: [
{ op: "replace", block_id: "p_empty", content: "<h1>第X章 章节名</h1><p><tag>#小说名/正文/第X章</tag></p><p>正文第一段...</p><p>正文第二段...</p>..." }
]})
/ 写入成功后,立即将新章节 note_id 回写到 meta 索引
search_note_content({ note_id: meta笔记, query: "笔记索引" })
→ 定位索引区块末尾 block_id(正文章节部分)
edit_block({ note_id: meta笔记, op: "insert",
anchor_id: 章节索引末尾block,
position: "after",
content: "<p>【第X章】note_id = new_note_id</p>"
})
每章写完后必须追加到剧情日志,字段不可省略。
get_note_outline({ note_id: 剧情日志 })
→ 获取 last_block_id
edit_block({ note_id: 剧情日志, op: "insert",
anchor_id: last_block_id, position: "after",
content: "
<h2>第X章《章节标题》</h2>
<p>主要事件:[本章核心剧情一两句]</p>
<p>在场角色:[角色名, 角色名, ...]</p>
<p>角色状态变化:[无 / 角色名:[变化描述]]</p>
<p>结尾句:[本章最后一句原文]</p>
<h3>本章伏笔清单</h3>
<p>【新埋】[伏笔编号 F-X] [伏笔描述] → 状态:未回收</p>
<p>【新埋】[伏笔编号 F-X] [伏笔描述] → 状态:未回收</p>
<p>(本章无新埋伏笔则写:本章无新伏笔)</p>
<p>【回收】[伏笔编号 F-X] [伏笔描述] → 已回收(本章)</p>
<p>(本章无回收则省略此行)</p>
<p>累计未回收伏笔:[F-1、F-3、F-5...] 共 N 条</p>
"
})
伏笔编号规则:全局唯一,按埋入顺序编号,格式
F-1、F-2……跨章一致,方便追踪。
对本章中状态发生变化的角色:
/ 定位角色笔记中的"当前状态"字段
search_note_content({ note_id: 角色笔记, query: "当前状态" })
→ 定位 block_id
/ 替换状态描述
edit_block({ note_id: 角色笔记, op: "replace",
block_id: 状态block_id,
content: "<p>当前状态:[新状态描述]</p>"
})
无论本章有无新伏笔,都必须执行此步骤,保证伏笔日志与剧情日志中的清单一致。
情况 A:本章埋入新伏笔
get_note_outline({ note_id: 伏笔日志 }) → 获取 last_block_id
edit_block({ note_id: 伏笔日志, op: "insert",
anchor_id: last_block_id, position: "after",
content: "<p>[F-X] [伏笔描述] → 埋入:第X章 / 状态:未回收</p>"
})
情况 B:本章回收了已有伏笔
search_note_content({ note_id: 伏笔日志, query: "F-X" }) → 定位 block_id
edit_block({ note_id: 伏笔日志, op: "replace",
block_id: 伏笔block_id,
content: "<p>[F-X] [伏笔描述] → 埋入:第X章 / 已回收:第Y章</p>"
})
情况 C:本章无伏笔变动(也必须执行)
/ 读取伏笔日志,核对"累计未回收"数量与剧情日志最新条目一致
search_note_content({ note_id: 伏笔日志, query: "未回收" })
→ 若数量与剧情日志对得上,归档完成;若对不上,逐条比对补齐
search_note_content({ note_id: meta笔记, query: "当前进度" })
→ 定位 block_id
edit_block({ note_id: meta笔记, op: "replace",
block_id: 进度block_id,
content: "<p>当前进度:第 X 章</p>"
})
| 穿帮类型 | 触发场景 | 防护措施 |
|---|---|---|
| 角色状态矛盾 | 第三章受伤,第四章却行动如常 | 写前读角色"当前状态"字段 |
| 能力越界 | 角色突然会了设定里没有的技能 | 写前读世界观/角色设定笔记 |
| 人际关系错误 | 已决裂的人突然像老朋友 | 读人物关系图笔记 |
| 地理矛盾 | 三天路程突然一天到 | 场景笔记标注地理距离 |
| 场景细节矛盾 | 同一地点描述前后不一致 | 写前读场景设定笔记,照实执行细节 |
| 场景状态错误 | 已破坏的房间又恢复原样 | 查看场景变更历史,使用最新状态 |
| 角色外貌不一致 | 同一角色发色或着装前后矛盾 | 生图/写作前必须先读人物笔记人设细节 |
| 伏笔遗忘 | 第二章埋的东西从未回收 | 每次写前扫描剧情日志 |
| 时间线混乱 | 事件先后顺序不清楚 | 剧情日志按章节顺序记录 |
处理流程:
search_notes({ keyword: 角色名/设定名, tags: ["#小说名"] }) 找出所有相关笔记处理流程:
处理流程:
<p>[待写] 第X章 占位</p>Step 1:加载 meta 笔记(索引 + 风格约束)
/ 首次使用标签搜索定位 meta,后续直接用已知 note_id
search_notes({ tags: ["#小说名/meta"], limit: 1 }) → note_id_meta
read_note({ note_id: note_id_meta })
→ 从"基本信息"取:目标字数、叙述视角、语言风格
→ 从"笔记索引"取:剧情日志、伏笔日志、各角色、各场景、最新章节的 note_id
→ 将所有 note_id 缓存在本次上下文
Step 2:读最新章节结尾(用索引中的 note_id 直接访问)
get_note_outline({ note_id: 最新章节note_id })
read_blocks({ note_id: 最新章节note_id, block_id: 倒数block, after: 5 })
Step 3:扫描剧情日志(直接用索引 note_id)
read_note({ note_id: 剧情日志note_id })
Step 4:[如有用户需求] 检索设定
/ 先从 meta 索引查找对应笔记的 note_id
/ 索引中没有时再用 search_notes,找到后更新索引
Step 5:写作
Step 6:存档(见"写作后归档"章节,含回写 note_id 到索引)
/ 先从 meta 索引直接读取 note_id(检查 0 已加载)
/ 若 meta 索引中的 note_id 访问失败,执行以下修复流程:
search_notes({ keyword: "小说名" })
list_notes({ sort: "update_time", direction: "desc", limit: 20 })
/ 找到正确 note_id 后,立即更新 meta 索引中对应条目
<p>(图待补)</p> 占位,继续后续步骤编辑操作后 block_id 会变化,需刷新:
get_note_outline({ note_id })
→ 获取最新 block_id 后重试
当日志超过 medium(>20K 字)时,改用精准搜索:
search_note_content({ note_id: 剧情日志, query: "未回收" })
→ 只读未回收的伏笔条目
| 场景 | 配合 Skill |
|---|---|
| 写完后发公众号 | wechat-publisher |
| 生成小红书图片 | xiaohongshu-article-layout |
| 回顾笔记找灵感 | ie-recall-memory / ie-engine |
| 整理标签 | tag-organize |
| 美化设定笔记排版 | wpsnote-beautifier |