r2
Free open-source Cloudflare R2 desktop client and S3 GUI for macOS, Windows, and Linux. Manage Cloudflare R2, AWS S3, M…
🌿 StoryMoss (草苔) — AI导演式小说创作系统。Tauri+Rust驱动的桌面写作软件,集成知识图谱、伏笔追踪、StyleDNA风格引擎、协同编辑、7阶段全自动创作工作流。让AI成为你的创作搭档,越写越懂你。
🌿 越写越懂的 AI 小说创作桌面应用
幕后管理故事资产,幕前沉浸式写作,AI 在需要时随行辅助
| 特性 | 说明 | |
|---|---|---|
| 🎬 | 双界面创作 | 幕前「墨纸」沉浸写作 + 幕后「机械」工作室管理,两套设计语言各得其所 |
| 🤖 | Agency 多代理创作 | 主创 / 管理 / 编辑审计三代理黑板并行协作,每章经 Gate v2 四级 grader 质量门(阈值 0.75)才交付 |
| ⚡ | 分时介入架构 | 写作 < 15s 秒出正文,审计与洞察后台异步——解开「质量与速度不可兼得」的根本矛盾 |
| 🧠 | 越写越懂你 | 持续学习:从创作事件观察模式 → 提炼 instinct → 确认后晋升为可复用技能 |
| 📝 | PROBLEM 七元素 | 简单指令自动基于 Erik Bork 七元素增强为强力 Logline,驱动大纲与续写 |
| 🌍 | 资产强关联 | 世界观 / 故事大纲 / 场景大纲 / 用户指令四位一体显式调和,剧情不跑偏 |
| 🔌 | 多模型适配 | OpenAI / Anthropic / Ollama / 本地 API,角色 × 任务模型路由 |
| 📚 | 全链路资产管理 | 角色 / 世界构建 / 场景 / 知识图谱 / 伏笔看板 / 叙事分析 / 拆书,AI 不「吃书」 |
幕前 · 极简全屏写作,AI 输入栏随行辅助,文思模式主动给萤火提示
幕后 · 故事 / 角色 / 世界构建 / 场景 / 知识图谱 / 代理工作室等全套资产管理
访问官网 https://storymoss.top 或 GitHub Releases 页面,下载对应平台安装包后直接安装即可。
需要安装 Node.js(推荐 20 LTS)和 Rust。
仓库通过 rust-toolchain.toml 固定 Rust 版本为 1.95.0,rustup 会自动下载对应工具链。
# 1. 克隆仓库 git clone https://github.com/91zgaoge/StoryMoss.git cd StoryMoss # 2. 安装前端依赖 cd src-frontend && npm install # 3. 安装 Tauri CLI 并运行桌面应用 cd .. npm install -g @tauri-apps/cli cargo tauri dev
注意:
Cargo.lock已纳入版本控制。如需升级依赖,请在本地验证cargo clippy/cargo test通过后再提交。
cd src-frontend npm run dev
然后在浏览器打开 http://localhost:5173/。
cd landing npm install npm run build
构建产物位于 landing/dist/,可部署到任意静态托管服务。开发模式运行 npm run dev,测试运行 npm run test。
完整变更日志见
CHANGELOG.md。
issue #14 用户报告"世界观生成失败,请重试",但日志显示 LLM API 调用成功返回内容,失败发生在下游 JSON 解析且完全无错误日志。根因三层:①模型将 JSON 包裹在 ```json ... ``` 代码块中、或在字符串值内直接换行/使用裸双引号,serde_json::from_str 静默失败;②novel_creation.rs 严格解析全量响应(含围栏)直接失败,agency parse_lenient 用 rfind('}') 会被尾部杂散 } 误导;③novel_creation_world_options.md prompt 要求"concepts 数组"但代码读 world_buildings,即使解析成功也找不到数组;prompt 缺少格式约束。三层修复:parse_lenient 复用 extract_and_sanitize_json(剥离围栏/修复裸换行/括号深度匹配);novel_creation.rs 提取 parse_world_options_response 纯函数先剥离围栏再解析 + 失败时 log::warn! 记录片段(此前完全静默);两份 prompt 修正字段名 + 新增格式约束(禁 markdown 围栏、引号转义)。
用户诊断报告显示续写生成时 LLM(deepseek-v4)成功返回 2511 字符,但前端仅显示 6 字符("续写\n黑暗。"),随后报"生成过程异常结束,未收到有效内容"。根因链:①模型在生成内容开头回显用户指令"续写"(非正文);②打字机动画首帧仅 3 字符("续写\n"),归一化后 2 字符"续写"几乎必然出现在已有正文中;③isTextDuplicate 假阳性返回 true,setGeneratedText 跳过赋值并 markAccepted 存入 2 字符指纹;④生成内容被静默丢弃。两层修复:isTextDuplicate 新增最小长度守卫(归一化后 < 30 字符直接返回 false,不进行去重检查);新增 stripInstructionEcho 剥离模型回显的用户指令前缀,在 handleRequestGeneration 和 handleSmartGeneration 的 sanitizeContinuationOutput 后调用。纯前端修复,无 Rust 变更。
用户报告幕后"代理工作室"页面不显示代理活动记录数据。根因:activeRunId 仅从实时事件捕获,用户在 run 启动后或完成后打开页面时无事件到达,activeRunId 恒 null,页面永远显示"暂无活动"。且无 list_runs 命令发现已有 run,activity 事件 fire-and-forget 不持久化。修复:后端新增 agency_list_runs 命令(按 created_at DESC 列出 story 的全部 run);前端页面打开时从 DB 水合最新 run 的 activeRunId(不依赖实时事件);时间线从仅 live 事件改为三源合并(live 事件 + board items 历史重建 + run 生命周期);新增 run 选择器下拉框可切换浏览历史 run。前后端修复。
用户报告"续写和故事大纲仍然缺乏强关联"、"没有按照故事大纲来写剧情和推进剧情"。根因:v0.30.31 引入的 build_progression_anchor(确定性注入剧情推进方向锚点:故事大纲硬约束 + 已推进进度指针 + 世界观规则 + 显式调和指令)只在 TriShot 路径调用,从未移植到 TimeSliced 路径,而 TimeSliced 是默认续写路径(generation_mode = "auto" 路由续写到 TimeSliced)。TimeSliced writer 得到完整大纲但缺少"已推进进度"指针,无法判断当前在故事大纲哪个节点 -> 偏离大纲、原地踏步、仅复述设定。修复:在 execute_time_sliced 的 prompt 模板后、ending_anchor 前插入 build_progression_anchor 调用,与 TriShot 路径完全对齐。纯 Rust 修复,界面无变化。
用户报告"第三次续写时出的错"--续写产出正文后紧接一段 AI 文学编辑元评论("好的,作为一名专业的文学编辑,我将根据您提供的问题列表和总体评分,对您的文本进行深度重塑…")。根因:分类提示词"继续写"示例省略 is_prose 字段,LLM 若遵循示例返回合法 JSON 但缺该字段,serde 默认 is_prose_request=false,导致 sanitize_plan_for_prose_request 跳过全部净化,SING 多步计划 [writer, inspector, style_enhancer] 未拦截,style_enhancer 的编辑器元评论覆盖 writer 正文。三层修复:①parse_classification_json 后置不变量--续写/创世缺 is_prose 时强制设 true;②提示词"继续写"示例补 is_prose=true;③sanitize 门控从 is_prose_request 扩展为 is_prose_request || is_continuation(纵深防御)。+4 回归测试。纯 Rust 修复,界面无变化。
用户反馈创作/生成失败时错误提示显示 [object Object]。根因与 issue #11(v0.30.31 修复的"获取模型列表"路径)同源:后端 AppError 序列化为普通对象 { code, message, severity },Tauri v2.4 作为普通对象(非 Error 实例)投递到前端 catch 块,前端用 String(err) 转字符串产出 [object Object],可读 message 被丢弃。v0.30.31 的 extractMessage helper 只覆盖了"获取模型列表"一条路径,创作/生成相关错误路径未迁移。修复:将 10 个前端文件(FrontstageApp / SceneEditor / Stories / RichTextEditor / WenSiPanel / usePipeline / CharacterStatePanel / Skills / PromptsPanel / useUpdater)共 36 处 catch 块的 String(err) / instanceof Error ? .message : String(err) / ?.message || String(err) 统一替换为 extractMessage(err)。新增 8 个回归测试。纯前端修复,界面无变化。
用户报告输入框历史输入内容没保存、按↑调取不到。根因:首次创世(无已有故事)时 currentStory=null,handleInputSubmit 的 if (sid) saveInputHistory(...) 跳过保存,创世指令从未持久化;随后 isBootstrap 分支 setCurrentStory(null) 清空历史,创世成功后新故事历史为空。v0.30.23 修复意图分类后创世指令正确走 isBootstrap 路径,暴露了此前被续写误分类掩盖的缺陷。修复:handleSmartGeneration 的 story_created 处理块在 setCurrentStory(新故事) 后同步写入 saveInputHistory(新故事ID, [创世指令, ...]),useEffect 随后加载即可读到。纯前端修复,界面无变化。
创世顶满 600s 超时无产出的根因:editor 质检在首章装配落库之前同步执行,被 600s 硬超时包裹;producer + writer 花约9分钟后 editor 仅剩约1分钟,其 LLM 调用被硬 600s 砍掉,整 run 超时无首章返回。修复:把 editor 质检从同步阻塞改为后台异步 spawn(assemble_only 装配 + spawn_editor_qc 后台质检,独立 300s deadline 不受 600s 限制)。writer 完成首章 + 装配后立即返回显示首章(约5-6min 可见,此前10min 超时),editor 后台质检完成后通过 genesis-qc-result 事件 + toast 反馈(通过 / 降级放行 / 不合格建议重新创世)。后台质检不影响写作,不自动重新创世。producer 深度资产保持前台(保障首章不脱节)。
v0.30.33 修复后续写内容仍丢失。根因:多次续写时保存操作并发执行,update_scene 全量覆写在 SQLite 写锁竞争下乱序提交,较早的小内容覆写较晚的大内容(编辑器正常但 DB 回退,重启才发现)。修复:①所有 update_scene 串行化(Promise 链排队,最后一次写总是最新);②修稿 setContent/insertText 后补同步 + 立即保存;③关闭等待 3s -> 6s(超过 SQLite busy_timeout)。
多次续写后关闭应用再重启,续写内容丢失。根因:AI 追加内容后仅调度 2 秒防抖保存,文思活跃连续续写时防抖被反复重置导致「永不出火」;关闭应用时后端直接退出不给保存机会。三层修复:①关闭前先保存未写入内容再退出(CloseRequested → 防关 → 通知前端 flush → 优雅关闭);②AI 每次追加后立即保存;③切换章节前也先保存当前内容。
v0.30.31 让世界观 / 大纲 / 场景 / 进度彼此强关联,但用户的增强性指令(logline 后缀)未纳入这套强关联——生成时不读世界观、进入管线后又与资产各居一隅。本次:①增强后缀生成纳入世界观(build_logline_context_sync 拉 world_buildings);②build_progression_anchor 加 user_instruction 参数,指令与资产显式调和(资产=硬约束,指令=创作方向,在硬约束内落实指令核心意图)。创世与 TimeSliced 同步加固。
审计发现幕前续写走 Legacy TriShot,但 final_prompt 由 Call1 LLM 合成,故事大纲 / 场景大纲 / 世界观三者均不到达 writer。新增 build_progression_anchor 确定性注入【剧情推进方向】段(无论 Call1 合成质量如何都到达 writer);进度指针用 scenes.outline_content 回读最近 3 章,无 DB 迁移。
创世装配接入清理三件套与续写共用;质量门 scoreless pass 兜底 0.85→0.7;salvage_failed_gate 让 editor 评不出裁决时 substantive 草稿降级放行;writer MaxTurns / Deadline 熔断先取回黑板草稿再散文回退,不再直接丢稿。
parse_lenient 丢弃(outline String→Value + normalize_outline);创世串行 producer-first;续写注入红线 + 落库前抗重复三件套 + 章节大纲改用 scene_outline.md-> 追加)IntentParser::classify_writing_intent)Invalid column type Null 系列)depends_on 混入上下文名)dynamic_traits 列 NULL)agency_sessions 会话快照与跨会话恢复)top_p=0 健康检测失败v0.26.x 完整历史见
CHANGELOG.md与docs/archive/AGENTS_HISTORY.md。
引入分时介入架构,解开 AI 长篇小说创作中「质量与速度不可兼得」的根本矛盾。第一性原理:把大灾难变成即时可见的小债务。 蚂蚁搬家,不积巨石。
把「写」和「审」解耦成三条独立时间线:
WriteTimeBundle 只带最小约束(合同红线 + 角色核心 + 场景大纲 + 题材反模式),直连 LLM 单轮生成,立即返回。AuditExecutor 后台异步跑 7 维 Inspector,问题以 inline 标注回流编辑器,用户当场处理小债。InsightExecutor 汇总追读力趋势 + 追读债务 + 标注盘点,产出整体健康度报告。Phase 0 实测(qwen3.6-35b,3 场景 A/B 盲测):最小约束 vs 全量资产平均质量差距仅 7.9%(< 30% 阈值),且会被后台审计追平。证实「慢的根源不是资产量,而是同步链路堆叠的 Inspector / Rewrite」。
设计文档见 docs/plans/2026-06-14-time-sliced-intervention-design.md,验收清单见 docs/time-sliced-architecture-qa-checklist.md。
针对「智能创作无处不在的卡顿、生成无输出」进行系统性性能重构:
generation-status 事件;知识图谱 viewport 裁剪 + LOD;引入 tiktoken-rs 真实 tokenizer 与上下文预算。修复计划见 PERFORMANCE_FIX_PLAN.md,阶段验证报告见 QA-Stage1-report.md、QA-Stage2-report.md、QA-Stage3-report.md。
以下基于当前版本实际界面截图整理,持续更新。完整图文版见
docs/USER_GUIDE.md。
草苔 StoryMoss 将创作流程分为两大空间:
| 空间 | 作用 | 适合场景 |
|---|---|---|
| 幕后(Backstage) | 管理故事、角色、场景、世界观、AI 配置 | 规划、整理素材、配置模型 |
| 幕前(Frontstage) | 沉浸式写作界面,专注正文创作 | 码字、与 AI 对话续写 |
核心思路:幕后把创作要素结构化管好,幕前让你专注写字,AI 在需要时介入,不打断心流。
v0.27.0–v0.30.0 上线的多代理创作框架取代了旧 GenesisPipeline(前端无感,smart_execute 创世分支自动切换):
三代理通过黑板(blackboard)模型并行协作;每章正文经过 Gate v2 质量门(code/rule/model/human 四级 grader 加权评分,阈值 0.75)才会交付。系统还具备持续学习能力:从创作事件中观察模式,提炼为 instinct,经你确认后晋升为可复用技能——越写越懂你。
在幕前输入"写一部……"即可触发三代理创世,中途可定点取消;侧栏「代理工作室」可实时观看协作过程。
极简、全屏的写作环境,唯一目的就是让你专注码字。
| 元素 | 作用 |
|---|---|
| 草苔 | 返回幕后 |
| 字数 | 当前章节字数 / 总字数 |
| 18px | 当前字号,点击可调 |
| 色调 | 暖赭 / 冷青 / 琥珀 / 靛紫 四种配色 |
| 设置 | 打开设置 / 幕后工作室 |
| 温 | 文思模式切换 |
点击右上角 温 切换 AI 介入程度:
左侧边栏是所有功能的入口,任何页面都可以一键切换。
| 按钮 | 作用 |
|---|---|
| 开幕前写作 | 快速打开「幕前写作」窗口 |
| 仪表盘 | 回到首页,查看统计与快捷入口 |
| 故事 | 管理所有故事项目 |
| 代理工作室 | 实时查看三代理协作、黑板与活动时间线 |
| 角色 | 管理登场角色与关系 |
| 世界构建 | 设定世界观、势力、规则 |
| 场景 | 管理场景(情节单元) |
| 知识图谱 | 可视化角色/地点/事件关系 |
| 技能 | 配置 AI 辅助技能 |
| MCP | 连接外部模型/工具 |
| 拆书 | 分析参考书籍结构 |
| 任务 | 查看后台 AI 任务队列 |
| 伏笔看板 | 追踪伏笔埋设与回收 |
| 叙事分析 | 诊断故事节奏与结构 |
| 创作评估 | 质量门评分趋势、检查点对比与 token 用量 |
| 学习中心 | 查看与管理 AI 学到的创作模式,确认晋升为技能 |
| Story System | 高级契约与版本管理 |
| 用量统计 | AI 调用与 Token 消耗 |
| 写作统计 | 字数、时长、写作习惯 |
| 设置 | 模型、账号、通用偏好 |
打开应用后首先进入这里。核心元素:
典型路径:打开应用 → 仪表盘 → AI 创建故事 → 输入创意 → 进入「故事」页继续完善。
"故事"是创作的顶层容器。一本小说、一个短篇,都是一个故事。
首次使用时页面为空,需要先创建故事。有数据后:
选择一个故事后,左侧底部会显示"当前编辑",角色、场景、世界观等页面自动切换到该故事的数据。
管理系统化的人物设定:
这让 AI 在续写时严格遵循人设,避免"角色崩坏"。
"场景"是故事的最小情节单位,类似"一场戏"。
存放世界观、势力、地理、规则等背景设定。支持分类浏览、AI 生成世界观、关联角色/场景。
保证奇幻/科幻/架空作品的设定不自相矛盾,防止 AI "吃书"。
把角色、地点、事件、势力变成一张可交互网络图:
直观发现"谁太久没出场""哪条线索忘了回收"。
管理和配置可复用的 AI 技能模板:
在幕前写作时,可随时调用已启用的技能(如"续写""润色""生成大纲")。
MCP(Model Context Protocol)让草苔连接外部模型或数据源,扩展 AI 能力。例如连接专门的"古文润色"模型或私有知识库。
上传参考小说,AI 自动分析:
把"凭感觉写"变成"有参照地写"。
当 AI 执行批量操作(批量润色、整书生成)时,会在这里显示进度。
你可以关闭界面去做别的事,回来在任务页查看结果。
管理伏笔的全生命周期:
防止"开头精彩、结尾烂尾",确保每条线索都有交代。
用 AI 诊断故事的叙事健康度:
像给小说做体检,发现结构问题再针对性修改。
高级用户功能:
让 AI 在长篇幅创作中保持高度一致性。
用量统计:AI 调用次数、Token 消耗、按模型/功能拆分。适合关注 API 成本的用户。
写作统计:每日字数、活跃时段、连续创作天数、平均写作速度。帮助你建立稳定输出节奏。
配置 AI 模型和应用偏好:
首次使用建议:进入 模型管理 → 添加聊天模型 → 填写 API 地址和 Key → 测试连接 → 完成后即可在幕前调用 AI。
进入 设置 → 提示词 可查看和编辑全部 35+ 个 AI 提示词:
{{variable}} 形式的变量会自动高亮所有修改即时生效,下次 AI 调用自动使用新提示词。
第一次使用草苔,建议按以下顺序:
agency_*agency_problem_logline / agency_problem_outlineContextPrioritizer 按 Critical/High/Normal/Background 排序系统提示词,并在结尾双重锚定关键约束,缓解长上下文中的 "Lost in the Middle"ErrorSeverity Fatal/Retry/Degraded/UserAction + 指数退避重试 + 降级回退 + AgentInterruptionModal 显式中断 UI| 文档 | 说明 |
|---|---|
docs/USER_GUIDE.md |
完整用户指南(含全部截图与详细说明) |
CHANGELOG.md |
版本更新日志 |
ARCHITECTURE.md |
系统架构设计(含分时介入架构章节) |
docs/plans/2026-06-14-time-sliced-intervention-design.md |
分时架构设计文档(Phase 0 已验证) |
docs/time-sliced-architecture-qa-checklist.md |
分时架构 QA 验收清单 |
AGENTS.md |
开发代理指南 |
所有界面截图均由 CDP 自动截取,保存在 docs/product-screenshots/:
| 文件名 | 页面 |
|---|---|
00_frontstage.png |
幕前写作 |
01_dashboard.png |
仪表盘 |
02_stories.png |
故事 |
03_characters.png |
角色 |
04_scenes.png |
场景 |
05_world_building.png |
世界构建 |
06_knowledge-graph.png |
知识图谱 |
07_skills.png |
技能工坊 |
08_mcp.png |
MCP |
09_book-deconstruction.png |
拆书 |
10_tasks.png |
任务 |
11_foreshadowing.png |
伏笔看板 |
12_narrative-analysis.png |
叙事分析 |
13_story-system.png |
Story System |
14_usage-stats.png |
用量统计 |
15_writing-stats.png |
写作统计 |
16_settings.png |
设置 |
欢迎通过 Issue 和 Pull Request 参与项目。大型改动建议先阅读 AGENTS.md 和 ARCHITECTURE.md。
Made with 🌿 by StoryMoss Team
more like this
Free open-source Cloudflare R2 desktop client and S3 GUI for macOS, Windows, and Linux. Manage Cloudflare R2, AWS S3, M…
Open-source, offline-first face recognition attendance platform that runs on any webcam.
📱 A React app to preview and edit Markdown✍. You can also export it as HTML.
search projects, people, and tags