story について
story は、オンライン小説に関する依頼を執筆、分析、ランキング調査、レビューなどの適切なスキルへ振り分けます。プロジェクト判定、物語や資料の検索、作品の切り替え、Dashboard の手順も定めています。
主な機能
- 01執筆依頼を適切なスキルへ振り分け
- 02現在の作品とプロジェクト構成を判定
- 03物語情報や調査の依頼先を指定
- 04作品の切り替えと作者の好みを管理
- 05Dashboard と更新手順を案内
活用シーン
- 01長編・短編の依頼を適切なスキルへ渡す
- 02登場人物、伏線、執筆状況を調べる
- 03複数の執筆プロジェクトを切り替える
- 04プロジェクトの Dashboard を開く、または更新を確認する
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ zenstory-ai/ oh-story-claudecode --skill storyインストール後、Claude Code で/storyを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
VERSIONassets/app.jsindex.htmlstyles.csstokens.cssscripts/dashboard-server.mjs詳細
story:网文工具箱路由
识别用户的写作需求,并路由到对应 skill。
路由表
各宿主的调用写法:Claude Code、OpenCode 用 /story-*(Claude 插件安装时为 /oh-story:story-*),也可 Skill("story-*");Codex、ZCode 用 $story-*(Codex 也可 /skills);OpenClaw 用 /skill story-*;Antigravity、Reasonix 在 skill 入口选择或用自然语言点名。下表按 /story-* 写,其他宿主照此替换,本文件其余地方同理。
| 用户意图 | 关键词示例 | 路由到 |
|---|---|---|
| 长篇规划/写作 | 讨论长篇结构、规划剧情、开书、写大纲、补细纲、长篇、连载 | /story-long-write |
| 写短篇 | 短篇、盐言、一万字 | /story-short-write |
| 长篇拆文 | 拆文、分析这本书、黄金三章、灵感库、跨书灵感聚合 | /story-long-analyze |
| 短篇拆文 | 拆短篇、分析这个故事 | /story-short-analyze |
| 长篇扫榜 | 长篇排行、什么火、新书在冒什么、起点/番茄/晋江/七猫长篇 | /story-long-scan |
| 短篇扫榜 | 短篇排行、知乎盐言排行 | /story-short-scan |
| 选题决策 | 写什么能爆、帮我选题、选题方向 | 长篇 /story-long-scan,短篇 /story-short-scan;没说篇幅先问一句 |
| 去 AI 味 | 去 AI 味、太 AI、去味 | /story-deslop |
| 审查稿件 | 审查、审稿、帮我审一下、一致性检查、看看有没有问题 | /story-review |
| 封面 | 封面、封面图 | /story-cover |
| 环境部署 | 准备写书、搭环境、初始化 | /story-setup |
| 浏览器操控 | 浏览器、抓取、登录态 | /browser-cdp |
| 导入小说 | 导入、反向解析、导入小说、把我的书导进来 | /story-import |
| 工作台 | dashboard、工作台、看拆文库、浏览项目文件、打开项目面板 | 见下方「Dashboard 工作台」 |
| 检查/更新版本 | 检查更新、有新版本吗、升级、更新工具箱 | 见下方「版本更新检查」 |
| 切换/列出书目 | 切书、换书、列出我的书、我在写哪几本、切换项目 | 见下方「多书切换」 |
| 管理作者习惯 | 记住我的写作习惯、作者画像、待确认偏好、忘掉这个偏好 | 见下方「作者习惯管理」 |
| 查故事资料 | 查角色、查伏笔、查进度、查设定、什么状态、写到哪了 | 见下方「查询」 |
| 查资料 | 查资料、帮我查资料、调研、搜索一下、搜一下 | 见下方「查询」 |
能明确匹配就直接调用对应 skill;匹配不上时只问缺的那一项。用户说"我想写小说"但没说长篇还是短篇,先问篇幅再路由。
裸调用与新手
只说 /story、看不出意图时,不贴路由表,给四个白话选项:「开一本长篇或接着写」→ /story-long-write;「写一篇短篇」→ /story-short-write;「把一章改得不那么 AI」→ /story-deslop;「更多(拆书、扫榜、导入旧稿、审稿、封面)」→ 再列进阶项。还没部署过(项目根没有 .story-deployed)时先建议 /story-setup,并说明部署完要新开一个会话再开始,写作助手才会生效。
导入续写顺序
用户问"导入续写先 setup 还是 import"时,直接回答:推荐先 /story-setup,新开会话后 /story-import;导完长篇说 /story-long-write 写第N章(N 是导入后的下一章),短篇用 /story-short-write 先补完构思。如果用户已经直接触发 /story-import,按 story-import 自带环境检测继续:未 setup 时让用户选择先去 setup 或继续串行导入。
书目录判定
本文件的"书目录""当前书"均按此查找:
- 项目根有
.active-book且指向项目内一个存在的目录 → 就是它。 - 否则在项目根往下最多 4 层找,跳过以
.开头的目录、node_modules、拆文库/、对标/:- 含
追踪/、正文/子目录或正文.md文件的目录(与写作 hook 同一口径); - 刚定完方向、还没有正文的长篇:含
设定/题材定位.md的目录; - 构思中、还没有正文的短篇:同时有
设定.md与小节大纲.md的目录。 找到多本又没有.active-book时,需要"当前书"就问作者是哪本(做法同「多书切换」)。
- 含
- 篇幅:有
正文/或设定/子目录的是长篇,有正文.md或设定.md文件的是短篇。
没找到任何书目录:创建写作项目时先运行 /story-setup;只讨论结构、选题,或要扫榜、拆文时直接路由。找到了:按目标 skill 自己的环境检查继续,需要初始化或补部署时运行 /story-setup。
作者习惯管理
按用户明确指定的长篇/短篇选写作 skill;没指定时按当前书的篇幅。没有当前书的通用习惯交 /story-long-write 管理;只针对某本书却定位不到时问是哪本,不要求先建书。路由层只转交,不读写作者记忆文件。
查询
交给哪个助手、传什么
「查故事资料」交 story-explorer,prompt 三行:
项目目录:{书目录的绝对路径}
查询类型:{按下表选}
查询参数:{用户问到的角色名、伏笔、设定关键词或章节范围}
| 用户在问 | 查询类型 |
|---|---|
| 某角色现在什么状态 | character_status |
| 某角色在哪几章出场 | character_appearances |
| 某条伏笔的情况 | foreshadow_status |
| 还有哪些伏笔、哪些没收 | foreshadow_list |
| 某个设定怎么定的 | setting_detail |
| 某个设定在哪些章出现过 | setting_appearances |
| 第 X 到 Y 章发生了什么 | timeline(查询参数默认带 perspective: reader;作者明确问幕后真相时用 author) |
| 写到哪了 | progress |
| 两个角色现在什么关系 | relationship |
一句话含多类查询时,分次调用或只选最主要的一类;问的是创作建议而不是查已有内容时,不交给它,主会话直接答。
「查资料」交 story-researcher,prompt 按下面写,没有的可选项整行省略:
query:{要查的主题}
type:{可选:历史考证、地理/环境、职业知识、文化习俗、器物/服饰、描写参考、命名参考、体系构建、诗词典故、视觉参考、真实案例、读者偏好}
context:{可选:为什么要查,如正在写哪一段}
project_dir:{书目录的绝对路径;没有书目录时用项目根}
cdp_port:{可选:Chrome 调试端口不是 9222 时写}
アシスタントを使えますか
Spawn バージョンの通知(spawn はブロックしません):まずプロジェクトルートの
.story-deployedにあるagents_versionを読み取ります。本版のagents_version: 37と一致しない場合(マーカーがない、フィールドがない/整数ではない、37 未満または 37 より大きい場合)も、通常どおり現在のホストロールの提供元を確認して spawn します。同時に作者に「調べものアシスタントは旧版です。/story-setup を実行した後(ZCode の場合は先にプラグインを更新)、新しいセッションを開始してください」と平易な言葉で一言伝え、Notice: agents bundle 版本不匹配(项目 {N},本版 37)を原文のまま回答の最終行「技術メモ:」に記載します。37 より大きい場合は、oh-story-claudecode を先に更新し、ローカルの旧版 setup でダウングレード上書きしないよう、追加で伝えます。現在のホストロールが見つからない場合、または呼び出し機能を公開していない場合に限り、solo/direct にフォールバックします。Fallback: ... -> soloも同じく技術メモ行にのみ記載します。
アシスタントを使う前に、ローカルで利用できるかだけを確認します。現在サブエージェント内ではなく、ローカルに呼び出しツールがあり、対応するロールが利用可能な場合(Claude は .claude/agents/*.md、OpenCode は .opencode/agents/*.md、Codex は .codex/agents/*.toml、Antigravity は .agents/agents/agent-name/agent.md。ZCode はプラグインに登録された同名ロールを確認し、.zcode/agents は必須ではありません)→ spawn を試行できます。Antigravity は invoke_subagent と同名の TypeName を使い、ZCode は実際の schema に従って Agent をディスパッチします。別のホスト環境と誤認しないでください。いずれかの条件を満たさない場合、または unknown agent が返された場合は、次のようにフォールバックします。
story-explorerが利用できない → メインセッションで Read/Grep を直接使い、書籍ディレクトリから検索します(登場人物の状態、伏線、進捗、設定)。回答前に「調べものアシスタントが有効になっていないため、今回はプロジェクトファイルを直接確認します」と一言伝えます。プロジェクトがまだデプロイされていない場合は、先に/story-setupを実行するよう案内します。story-researcherが利用できない → メインセッションで現在利用可能な検索機能を使って回答します。回答前に「調べものアシスタントが有効になっていないため、今回は直接検索します」と一言伝えます。見つからない場合は、その旨を正直に説明します。
作者への回答方法
物語の内容(誰が、どの章で、何が起きたか)について説明します。ファイルのフィールド名や伏線/事件の番号だけを単独で記載せず、番号は必ず物語の説明に添えます。アシスタントから返された英語のフィールド名や不足内容の説明は、メインセッションで平易な言葉に直してから伝えます。
複数の本の切り替え
ユーザーが執筆中の本を切り替えたい、または確認したい場合(1 つのプロジェクトで複数の本を同時に扱えます):
- 「書籍ディレクトリの判定」第 2 条に従ってすべての書籍ディレクトリを列挙し、現在
.active-bookが指している本を示します。 - ユーザーに選択してもらい、選ばれた本の相対パスをプロジェクトルートの
.active-bookに書き込みます(既存の内容を上書き)。 - 見つかった本が 1 冊だけの場合は、確認を求めずにその本をアクティブとして確定します。
Dashboard ワークベンチ
ユーザーが /story dashboard を実行するか、ワークベンチを開くことやプロジェクトファイルを見ることを明確に求めた場合、この skill のローカル Dashboard を起動します。
-
現在の作業ディレクトリをデフォルトのワークスペースとします。ユーザーがディレクトリを明示した場合は、そのディレクトリを使います。ディレクトリは存在している必要があります。
-
現在読み込まれている
storyskill のディレクトリからscripts/dashboard-server.mjsを特定します。リポジトリのパス、 グローバル skill のパス、ユーザーのホームディレクトリをハードコードしないでください。 -
nodeが利用可能であることを確認した後、長時間実行プロセスとして実行します。node "<story-skill-dir>/scripts/dashboard-server.mjs" --root "<workspace>" --open -
出力に「ローカルアドレス」が表示されるまで待ち、完全な URL をユーザーに返します。ツールがバックグラウンドプロセス/PTY に対応している場合は、サービスを稼働したままにします; ブラウザーを自動起動できない場合も失敗とはみなしません。クリック可能な URL を返します。
-
Dashboard はデフォルトで
127.0.0.1のみをリッスンします。--allow-networkを追加したり、ワークスペースを LAN や公開ネットワークに公開したりしないでください。
ワークベンチは独自のルールでディレクトリを識別します。上記の「書籍ディレクトリの判定」とは異なります。標準の 拆文库/{书名}/ を識別し、既存の 拆文库-{书名}/ にも対応します。執筆プロジェクトは次の両方の形式に対応します。
- 長編のディレクトリ構成:ディレクトリ内に
正文/、大纲/、设定/、追踪/のいずれかの通常のサブディレクトリを含む。 - 短編の単一ファイル構成:ディレクトリ内に通常ファイル
正文.mdがあり、さらに小节大纲.mdまたは设定.mdを含む。
シンボリックリンクはプロジェクトの目印として扱いません。正文.md だけがある資料ディレクトリは執筆プロジェクトとして識別しません。ブラウザーでは .md、.txt、.json、.yaml、.yml、.toml を編集できます。保存時や削除の確定時にはファイル内容のバージョンを確認し、外部での変更を上書きしないようにします。
サービスを停止するには、該当する Node の長時間実行プロセスを終了するだけで十分です。ユーザーが使い方だけを尋ねている場合は、代わりに起動しないでください。/story dashboard を使うよう案内します(上記のホストに合わせた表記に置き換えてください)。
バージョン更新の確認
ユーザーから「新しいバージョンはありますか」「更新を確認して」「アップグレード」などと尋ねられた場合に実行します。まずバージョンを報告し、インストールするかどうかはユーザーに決めてもらいます。
- 現在のバージョン:この skill と同じディレクトリにある
VERSIONファイルを読み取ります。存在しない場合は不明として扱います。この skill が執筆プロジェクト内(プロジェクトのskills/、.agents/skills/、.zcode/skills/など)にある場合、読み取るのはプロジェクトのコピーのバージョンです。 - 最新バージョン:まず
gh release view --json tagName,name,url -R zenstory-ai/oh-story-claudecodeを使ってtagNameを取得します。ghがない場合はcurl -fsS --max-time 5 https://api.github.com/repos/zenstory-ai/oh-story-claudecode/releases/latestを使って.tag_nameを取得します(jq または grep)。確認できない場合は「最新バージョンを一時的に取得できません。Releases から手動で確認できます」と伝え、エラーは報告しません。 - 比較:現在のバージョンが判明している場合は、先頭の
vを除いてセマンティックバージョン(major.minor.patch)で比較します。不明の場合は最新の安定版のみを表示し、最新かどうかは判定しません。gh releaseはデフォルトで最新の安定版を取得し、pre-release は含みません。 - 案内:
- 更新(ユーザーの同意後):この skill のディレクトリの場所からインストール方法を判断します。
- プラグインディレクトリ内にある場合(パスに
plugins/が含まれる場合):Claude Code ではclaude plugin marketplace update oh-story-skillsを実行し、続けてclaude plugin update oh-story@oh-story-skillsを実行します。再起動後に反映されます。ZCode では Plugin Management でマーケットプレイスを更新した後、oh-storyを更新します。 npx skillsでグローバルまたは現在のディレクトリにインストールした場合:npx skills add zenstory-ai/oh-story-claudecode -y -gを再実行します(もともと現在のディレクトリにインストールした場合は-gを外します)。- その他のインストール方法(ClawHub など)の場合:元の方法で最新版を再インストールします。
- この skill が執筆プロジェクト内にある場合:上記に該当する方法でインストールパッケージを更新してから、新しくインストールしたパッケージを使ってプロジェクトルートで
/story-setupを実行します。これでプロジェクト内のコピーも新版に置き換わります。OpenClaw、Reasonix、汎用ファイルモードでは、プロジェクト内で実行されるのはこの旧版のコピーです。新しいパッケージを使って、プロジェクトのskills/内にある 13 個の skill ディレクトリを手動で上書きする必要があります。
- プラグインディレクトリ内にある場合(パスに
更新後、デプロイ済みのプロジェクトではプロジェクトルートで /story-setup を再実行して hooks、agents、参考資料を同期し、その後新しいセッションを開始するよう伝えます。これで執筆アシスタントが再読み込みされます。