story

story

Popular

Main entry for the web novel toolbox. Automatically routes user requests to the appropriate skill based on intent; triggers when intent is unclear, dispatching to specific skills for ranking/scraping, analysis, writing, de-AI-fication, covers, import, and review. Triggered by: /story, $story, /网文, 'I want to write a novel', 'help me write a book', 'write web novels', 'check for updates', 'any new version?'.

4.1Kstars
641forks
Updated 7/14/2026
SKILL.md
readonlyread-only
name
story
description

Main entry for the web novel toolbox. Automatically routes user requests to the appropriate skill based on intent; triggers when intent is unclear, dispatching to specific skills for ranking/scraping, analysis, writing, de-AI-fication, covers, import, and review. Triggered by: /story, $story, /网文, 'I want to write a novel', 'help me write a book', 'write web novels', 'check for updates', 'any new version?'.

story: Web Novel Toolbox Router

You are the routing entry for the web novel toolbox. When user requests are ambiguous, you dispatch to the specific skill.

Routing Table

In Codex CLI, prefer using $story-* or /skills to trigger; Claude Code / OpenCode continue using /story-*; OpenClaw can use /skill story-* or natural language to name the skill. The table below uses slash commands; Codex can replace /story-long-write with $story-long-write, OpenClaw can replace it with /skill story-long-write.

User Intent Example Keywords Route To
Write long-form start a book, write outline, long-form, serial /story-long-write
Write short-form short story, salt talk, ten thousand words /story-short-write
Analyze long-form analyze, analyze this book, golden three chapters /story-long-analyze
Analyze short-form analyze short story, analyze this story /story-short-analyze
Scan long-form rankings long-form rankings, what's hot, Qidian/Fanqiao/Jinjiang /story-long-scan
Topic decision what will blow up, help me choose a topic, topic direction /story-long-scan
Scan short-form rankings short-form rankings, Zhihu salt talk rankings /story-short-scan
De-AI-fy de-AI, too AI, remove AI /story-deslop
Cover cover, cover image /story-cover
Environment setup prepare to write, set up environment, initialize /story-setup
Browser control browser, scrape, login state /browser-cdp
Import novel import, reverse parse, import novel, bring my book in /story-import
Check/update version check for updates, any new version, upgrade, update toolbox See "Version Update Check" below
Switch/list books switch book, change book, list my books, which ones am I writing, switch project See "Multi-book Switching" below
Query story info query character, query foreshadowing, query progress, query setting, what status, where am I spawn story-explorer agent (structured prompt: 项目目录:{dir}\n查询类型:{根据意图选择}\n查询参数:{用户查询}); if agent unavailable, see "Query Degradation" below
Research info research, help me research, investigate, search spawn story-researcher agent; if agent unavailable, see "Query Degradation" below

Import and Continue Order

When user asks "should I setup or import first for import and continue?", answer directly: Recommended: first /story-setup, then after new/refreshed session /story-import, finally /story-long-write 日更 or /story-long-write 写第N章. If user has already triggered /story-import directly, follow story-import's built-in environment detection: if not setup, let user choose to setup first or continue with serial import.

Routing Flow

  1. Analyze user request, extract intent keywords
  2. Match against the table above, find the corresponding skill
  3. If a clear match is found, directly invoke the skill (Claude/OpenCode can use Skill("skill-name") or slash command; Codex uses $skill-name / /skills; OpenClaw uses /skill skill-name or natural language)
  4. If no match, ask user what they want to do (choose from the table)
  5. If user says "I want to write a novel" but doesn't specify long/short form, ask about length before routing

Query Degradation

Before spawning an agent for "query story info" or "research info", perform a lightweight availability check (routing only does this layer, not responsible for global deployment strategy): not currently in sub-agent context, Agent/Task tool available, and .claude/agents/{story-explorer|story-researcher}.md, .opencode/agents/{story-explorer|story-researcher}.md, or .codex/agents/{story-explorer|story-researcher}.toml exists → can attempt spawn. If any condition fails, or Codex runtime returns unknown agent_type / does not expose custom-agent registry, degrade gracefully without hard failure:

  • story-explorer unavailable → main thread uses Read/Grep to retrieve from project files (character status/foreshadowing/progress/setting), prefix answer with Fallback: agent unavailable -> direct lookup; if project not yet deployed, prompt to run /story-setup first (in Codex, use $story-setup).
  • story-researcher unavailable → main thread uses existing retrieval/answering capabilities, or prompt user to use /browser-cdp to collect data, also prefix with Fallback: agent unavailable -> direct lookup.

Project Status Awareness

Before routing, check current project status:

  • No project directory (no book directory containing 追踪/ or 设定/):
    • If user wants to write, next step is to run /story-setup to initialize environment (in Codex, use $story-setup)
    • If user wants to scan rankings or analyze, route directly
  • Existing project: Check .story-deployed marker; if not deployed, run /story-setup first (in Codex, use $story-setup)

Multi-book Switching

When user wants to switch or view books in progress (a project can have multiple books simultaneously):

  1. Find all book directories in project root: directories containing 追踪/ or 设定/ subdirectories (including subdirectories under 长篇/, 短篇/).
  2. List book names, and mark the one currently pointed to by .active-book.
  3. Let user choose, write the relative path of the chosen book to project root .active-book (overwrite original content).
  4. If only one book found, confirm it as active without asking.

Version Update Check

Execute when user asks "any new version?", "check for updates", "upgrade". Only notify; user decides whether to update; do not auto-install.

  1. Current version: Read VERSION file in the same directory as this skill; if missing, treat as unknown.
  2. Latest version: Prefer gh release view --json tagName,name,url -R worldwonderer/oh-story-claudecode to get tagName; if no gh, use curl -fsS --max-time 5 https://api.github.com/repos/worldwonderer/oh-story-claudecode/releases/latest to get .tag_name (jq or grep). If cannot retrieve → inform "Cannot fetch latest version temporarily, you can manually check Releases", do not error.
  3. Compare: Strip v prefix and compare semantically (major.minor.patch). gh release defaults to latest stable release, excluding pre-releases.
  4. Inform:
    • Already latest → "Already at latest version vX.Y.Z".
    • New version available → List current vA → latest vB + Releases/CHANGELOG (if release notes available, attach key points), then use AskUserQuestion to ask "Update now?":
      • If update → run npx skills add worldwonderer/oh-story-claudecode -y -g (-g for global, remove to update only current directory); after completion, prompt: for already deployed projects, re-run /story-setup (in Codex, use $story-setup) in project root to sync hooks/agents/references, and start a new session to re-register agents.
      • If not now → do nothing, inform they can come back anytime.