story
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
Chinesestory:网文工具箱路由
story: Web Novel Toolkit Router
你是网文工具箱的路由入口。用户的请求模糊时由你分发到具体 skill。
You are the router entry for the Web Novel Toolkit. Distribute user requests to specific skills when the request is ambiguous.
路由表
Routing Table
Codex CLI 中优先使用或$story-*触发;Claude Code / OpenCode 继续使用/skills;OpenClaw 可用/story-*或自然语言点名 skill。下表以 slash command 展示,Codex 可将/skill story-*等价替换为/story-long-write,OpenClaw 可将其等价替换为$story-long-write。/skill story-long-write
| 用户意图 | 关键词示例 | 路由到 |
|---|---|---|
| 写长篇 | 开书、写大纲、长篇、连载 | |
| 写短篇 | 短篇、盐言、一万字 | |
| 长篇拆文 | 拆文、分析这本书、黄金三章 | |
| 短篇拆文 | 拆短篇、分析这个故事 | |
| 长篇扫榜 | 长篇排行、什么火、起点/番茄/晋江 | |
| 选题决策 | 写什么能爆、帮我选题、选题方向 | |
| 短篇扫榜 | 短篇排行、知乎盐言排行 | |
| 去 AI 味 | 去 AI 味、太 AI、去味 | |
| 审查稿件 | 审查、审稿、帮我审一下、一致性检查、看看有没有问题 | |
| 封面 | 封面、封面图 | |
| 环境部署 | 准备写书、搭环境、初始化 | |
| 浏览器操控 | 浏览器、抓取、登录态 | |
| 导入小说 | 导入、反向解析、导入小说、把我的书导进来 | |
| 工作台 | dashboard、工作台、看拆文库、浏览项目文件、打开项目面板 | 见下方「Dashboard 工作台」 |
| 检查/更新版本 | 检查更新、有新版本吗、升级、更新工具箱 | 见下方「版本更新检查」 |
| 切换/列出书目 | 切书、换书、列出我的书、我在写哪几本、切换项目 | 见下方「多书切换」 |
| 查故事资料 | 查角色、查伏笔、查进度、查设定、什么状态、写到哪了 | spawn |
| 查资料 | 查资料、帮我查资料、调研、搜索一下、搜一下 | spawn |
In Codex CLI, prioritize usingor$story-*to trigger; continue using/skillsfor Claude Code / OpenCode; OpenClaw can use/story-*or natural language to specify the skill. The table below uses slash commands as examples. Codex can replace/skill story-*with/story-long-writeequivalently, and OpenClaw can replace it with$story-long-writeequivalently./skill story-long-write
| User Intent | Keyword Examples | Route to |
|---|---|---|
| Write long-form novels | Start a book, write outline, long-form, serialized | |
| Write short-form stories | Short story, Yanyan, 10,000 words | |
| Deconstruct long-form novels | Deconstruct, analyze this book, golden three chapters | |
| Deconstruct short-form stories | Deconstruct short story, analyze this story | |
| Scan long-form novel rankings | Long-form rankings, what's popular, Qidian/Fanqie/Jinjiang | |
| Topic selection decision | What can go viral, help me choose a topic, topic direction | |
| Scan short-form story rankings | Short story rankings, Zhihu Yanyan rankings | |
| Remove AI tone | Remove AI tone, too AI-like, tone adjustment | |
| Manuscript review | Review, check manuscript, help me review, consistency check, see if there are issues | |
| Cover | Cover, cover image | |
| Environment deployment | Prepare to write, set up environment, initialize | |
| Browser control | Browser, crawl, login state | |
| Import novel | Import, reverse parsing, import novel, import my book | |
| Workspace | dashboard, workspace, view story deconstruction library, browse project files, open project panel | See "Dashboard Workspace" below |
| Check/update version | Check for updates, is there a new version, upgrade, update toolkit | See "Version Update Check" below |
| Switch/list books | Switch book, change book, list my books, which books am I writing, switch project | See "Multi-book Switching" below |
| Query story materials | Query characters, query foreshadowing, query progress, query settings, what's the status, where did I leave off | Spawn |
| Research materials | Research materials, help me research, investigate, search, look up | Spawn |
导入续写顺序
Import and Continuation Order
用户问"导入续写先 setup 还是 import"时,直接回答:推荐先 ,新开/刷新会话后 ,最后 或 。如果用户已经直接触发 ,按 story-import 自带环境检测继续:未 setup 时让用户选择先去 setup 或继续串行导入。
/story-setup/story-import/story-long-write 日更/story-long-write 写第N章/story-importWhen users ask "Should I run setup or import first for importing and continuing writing?", directly answer: It is recommended to run first, then after opening/refreshing the session, and finally or . If users have directly triggered , follow the built-in environment check of story-import: if setup is not completed, let users choose to run setup first or continue with serial import.
/story-setup/story-import/story-long-write daily-update/story-long-write write-chapter-N/story-importDashboard 工作台
Dashboard Workspace
用户执行 (Codex 为 ),或明确说“打开工作台 / 看项目
文件”时,直接启动随本 skill 分发的本地 Dashboard,不再转发到其他 skill:
/story dashboard$story dashboard-
把当前工作目录作为默认工作区;用户明确给出目录时改用该目录。目录必须存在。
-
从当前已加载的skill 目录定位
story,不要硬编码仓库路径、 全局 skill 路径或用户主目录。scripts/dashboard-server.mjs -
检查可用后,以长运行进程执行:
nodebashnode "<story-skill-dir>/scripts/dashboard-server.mjs" --root "<workspace>" --open -
等待输出出现“本机地址”,把完整 URL 回给用户。工具支持后台进程/PTY 时让服务保持运行; 无法自动拉起浏览器不算失败,仍返回可点击 URL。
-
Dashboard 默认只监听。不要主动增加
127.0.0.1,不要把工作区暴露到 局域网或公网。--allow-network
工作台会识别标准 ,兼容存量 。写作项目识别同时支持:
拆文库/{书名}/拆文库-{书名}/- 长篇目录结构:目录内含 、
正文/、大纲/或设定/任一普通子目录。追踪/ - 短篇单文件结构:目录内含普通文件 ,并同时含
正文.md或小节大纲.md。设定.md
符号链接不作为项目标记,只有单个 的普通资料目录也不会被误认。浏览器可编辑
、、、、、,保存或确认删除前用修改时间防止
误操作外部更新。
正文.md.md.txt.json.yaml.yml.toml停止服务时终止对应的 Node 长运行进程即可。若用户只问用法,不要替他启动;给出
/ 两种平台对应入口。
/story dashboard$story dashboardWhen users execute (Codex uses ), or explicitly say "Open workspace / View project files", directly launch the local Dashboard distributed with this skill, and do not forward to other skills:
/story dashboard$story dashboard-
Use the current working directory as the default workspace; use the specified directory if users explicitly provide it. The directory must exist.
-
Locatefrom the currently loaded
scripts/dashboard-server.mjsskill directory, do not hardcode the repository path, global skill path, or user home directory.story -
After verifying thatis available, execute as a long-running process:
nodebashnode "<story-skill-dir>/scripts/dashboard-server.mjs" --root "<workspace>" --open -
Wait for the output showing "Local address", and return the complete URL to the user. Keep the service running if the tool supports background processes/PTY; failing to automatically launch the browser is not considered a failure, still return the clickable URL.
-
Dashboard only listens toby default. Do not actively add
127.0.0.1, do not expose the workspace to the local area network or public network.--allow-network
The workspace will recognize the standard , and is compatible with the existing . Writing project recognition supports:
Story Deconstruction Library/{Book Name}/Story Deconstruction Library-{Book Name}/- Long-form directory structure: The directory contains any of the subdirectories ,
Text/,Outline/orSettings/.Tracking/ - Short-form single-file structure: The directory contains the regular file , and also contains
Text.mdorSection Outline.md.Settings.md
Symbolic links are not treated as project markers, and regular data directories with only a single will not be misidentified. The browser can edit , , , , , files, and uses modification time to prevent accidental overwriting of external updates before saving or confirming deletion.
Text.md.md.txt.json.yaml.yml.tomlTo stop the service, terminate the corresponding Node long-running process. If users only ask about usage, do not launch it for them; provide the two platform-specific entries: / .
/story dashboard$story dashboard路由流程
Routing Process
- 分析用户请求,提取意图关键词
- 匹配上表,找到对应的 skill
- 如果能明确匹配,直接调用对应 skill(Claude/OpenCode 可用 或 slash command;Codex 用
Skill("skill-name")/$skill-name;OpenClaw 用/skills或自然语言点名)/skill skill-name - 如果无法匹配,询问用户想做什么(从上表中选择)
- 如果用户说"我想写小说"但未指定长篇/短篇,询问篇幅类型后再路由
- Analyze user requests and extract intent keywords
- Match the table above to find the corresponding skill
- If a clear match is found, directly call the corresponding skill (Claude/OpenCode can use or slash command; Codex uses
Skill("skill-name")/$skill-name; OpenClaw uses/skillsor natural language to specify)/skill skill-name - If no match is found, ask users what they want to do (select from the table above)
- If users say "I want to write a novel" but do not specify long-form/short-form, ask about the length type before routing
查询降级
Query Degradation
Spawn 版本提示(不阻断 spawn):先读取项目根的.story-deployed。与本版agents_version不一致时(标记缺失、字段缺失/非整数、小于或大于 25)照常按文件存在性检查并 spawn,同时报告agents_version: 25并提示重新运行Notice: agents bundle 版本不匹配(项目 {N},本版 25)后新开会话;大于 25 时额外提示先更新 oh-story-claudecode,不要用本地旧版 setup 降级覆盖。只有 agent 文件缺失、或运行时不暴露 custom agent 时才降级 solo/direct,报告/story-setup。Fallback: ... -> solo
「查故事资料」「查资料」走 agent 前先做轻量可用性检查(路由只做这一层,不承担全局部署策略):当前不在子代理上下文、Agent/Task 工具可用、且 、 或 存在 → 可尝试 spawn。任一不满足,或 Codex 运行时返回 / 未暴露 custom-agent registry,则降级,不硬失败:
.claude/agents/{story-explorer|story-researcher}.md.opencode/agents/{story-explorer|story-researcher}.md.codex/agents/{story-explorer|story-researcher}.tomlunknown agent_type- 不可用 → 主线程直接用 Read/Grep 从项目文件检索(角色状态/伏笔/进度/设定),回答前标注
story-explorer;项目尚未部署时提示先Fallback: agent unavailable -> direct lookup(Codex 中用/story-setup)。$story-setup - 不可用 → 主线程用现有检索/回答能力完成,或提示用户改用
story-researcher采集,同样标注/browser-cdp。Fallback: agent unavailable -> direct lookup
Spawn version prompt (does not block spawn): First readfrom the project rootagents_version. If it is inconsistent with the current version.story-deployed(missing marker, missing/non-integer field, less than or greater than 25) still check file existence and spawn as usual, and reportagents_version: 25while prompting users to re-runNotice: agents bundle version mismatch (project {N}, current version 25)and open a new session; if it is greater than 25, additionally prompt users to update oh-story-claudecode first, do not use the local old setup to downgrade and overwrite. Only degrade to solo/direct when agent files are missing or custom agent is not exposed during runtime, and report/story-setup.Fallback: ... -> solo
Before using agents for "Query story materials" and "Research materials", perform a lightweight availability check (the router only does this layer, does not undertake global deployment strategy): If not in sub-agent context, Agent/Task tool is available, and , or exists → can attempt to spawn. If any condition is not met, or Codex runtime returns / does not expose custom-agent registry, degrade without hard failure:
.claude/agents/{story-explorer|story-researcher}.md.opencode/agents/{story-explorer|story-researcher}.md.codex/agents/{story-explorer|story-researcher}.tomlunknown agent_type- If is unavailable → The main thread directly retrieves from project files using Read/Grep (character status/foreshadowing/progress/settings), and mark
story-explorerbefore answering; prompt users to runFallback: agent unavailable -> direct lookupfirst (use/story-setupin Codex) if the project has not been deployed.$story-setup - If is unavailable → The main thread completes using existing retrieval/answering capabilities, or prompts users to use
story-researcherfor collection, and also mark/browser-cdp.Fallback: agent unavailable -> direct lookup
项目状态感知
Project Status Awareness
路由前先检查当前项目状态:
- 无项目目录(没有包含 或
追踪/的书名目录):设定/- 如果用户要写作,下一步是先运行 初始化环境(Codex 中用
/story-setup)$story-setup - 如果用户要扫榜/拆文,直接路由
- 如果用户要写作,下一步是先运行
- 已有项目:检查 标记,如未部署则先运行
.story-deployed(Codex 中用/story-setup)$story-setup
Check the current project status before routing:
- No project directory (no book directory containing or
Tracking/):Settings/- If users want to write, the next step is to run to initialize the environment (use
/story-setupin Codex)$story-setup - If users want to scan rankings/deconstruct stories, route directly
- If users want to write, the next step is to run
- Existing project: Check the marker, run
.story-deployedfirst (use/story-setupin Codex) if not deployed$story-setup
多书切换
Multi-book Switching
用户想切换或查看在写的书时(一个项目可同时有多本):
- 在项目根查找所有书目录:包含 或
追踪/子目录的目录(含设定/、长篇/下的子目录)。短篇/ - 列出书名,并标出当前 指向的那本。
.active-book - 让用户选择,把所选书的相对路径写入项目根 (覆盖原内容)。
.active-book - 只发现一本时直接确认为活跃书,无需询问。
When users want to switch or view the books they are writing (a project can have multiple books at the same time):
- Find all book directories in the project root: directories containing or
Tracking/subdirectories (including subdirectories underSettings/andLong-form/).Short-form/ - List the book names, and mark the one pointed to by the current .
.active-book - Let users select, and write the relative path of the selected book into the project root (overwrite the original content).
.active-book - If only one book is found, directly confirm it as the active book without asking.
版本更新检查
Version Update Check
用户问"有没有新版本""检查更新""升级"时执行。只通知,更不更新由用户定,不自动安装。
- 当前版本:读本 skill 同目录的 文件;缺失则视为未知。
VERSION - 最新版本:优先 取
gh release view --json tagName,name,url -R zenstory-ai/oh-story-claudecode;无 gh 用tagName取curl -fsS --max-time 5 https://api.github.com/repos/zenstory-ai/oh-story-claudecode/releases/latest(jq 或 grep)。查不到 → 告知"暂时拉不到最新版本,可手动看 Releases",不报错。.tag_name - 比较:去掉 前缀按语义版本比(major.minor.patch)。
v默认取 latest 稳定版,不含 pre-release。gh release - 告知:
- 已最新 → 「已是最新版 vX.Y.Z」。
- 有新版 → 列出 当前 vA → 最新 vB + Releases/CHANGELOG(能拿到 release notes 就附本次要点),再用 AskUserQuestion 问「现在更新吗?」:
- 选更新 → 跑 (
npx skills add zenstory-ai/oh-story-claudecode -y -g全局,去掉则只更当前目录);完成后提示:已部署过的项目在项目根重跑-g(Codex 中用/story-setup)同步 hooks/agents/references,并新开一个会话让 agents 重新注册。$story-setup - 选先不 → 不动,告知随时可再来。
- 选更新 → 跑
Execute when users ask "Is there a new version", "Check for updates", "Upgrade". Only notify, let users decide whether to update, do not install automatically.
- Current version: Read the file in the same directory as this skill; treat as unknown if missing.
VERSION - Latest version:优先 use to get
gh release view --json tagName,name,url -R zenstory-ai/oh-story-claudecode; if gh is unavailable, usetagNameto getcurl -fsS --max-time 5 https://api.github.com/repos/zenstory-ai/oh-story-claudecode/releases/latest(using jq or grep). If not found → inform "Failed to retrieve the latest version temporarily, you can check manually at Releases", do not report an error..tag_name - Comparison: Remove the prefix and compare according to semantic versioning (major.minor.patch).
vdefaults to the latest stable version, excluding pre-releases.gh release - Notification:
- Up to date → "Already the latest version vX.Y.Z".
- New version available → List current vA → latest vB + Releases/CHANGELOG (attach key points of this release if available), then use AskUserQuestion to ask "Update now?":
- Select update → Run (
npx skills add zenstory-ai/oh-story-claudecode -y -gfor global, remove it to update only the current directory); after completion, prompt: Re-run-g(use/story-setupin Codex) in the project root of deployed projects to synchronize hooks/agents/references, and open a new session to re-register agents.$story-setup - Select later → Do nothing, inform users they can come back anytime.
- Select update → Run