StoryForge ships with 51 skills invoked via the Claude Code syntax /storyforge:<skill-name>. Each skill is specialized for a specific task area and uses an appropriate Claude model:
| Demand | Model | Examples |
|---|---|---|
| Prose, creative decisions | claude-opus-4-8 | chapter-writer, character-creator, plot-architect |
| State management, formatting | Sonnet | session-start, export-engineer, configure |
| Classification, short lists | Haiku | ideas, register-callback, help |
/storyforge:new-book| Property | Value |
|---|---|
| Model | Sonnet |
| Argument | [title] (optional) |
| Prerequisite | Author profile exists |
Purpose: Creates a new book project. Asks for title, type (novel/novella/...), genre(s), author, primary language and creates the complete directory structure.
Output:
{content_root}/projects/{slug}/ with all skeleton filesREADME.md with YAML frontmattersynopsis.md, plot/*, characters/INDEX.md, world/*, CLAUDE.mdWhen to invoke:
/storyforge:brainstorm with "promoted" ideaRouting trigger in CLAUDE.md: Immediately when user says "New book"
Step 6 β Series-aware recurring-character copy (#196): When the new book is part of a series AND a prior book exists, the skill offers to auto-copy all recurring character files from the previous volume. Argument: --copy-recurring-from={prev-book-slug} (or auto-detected via series_number). Filters by tracker recurs_in β only characters that recur in the new volume are copied. 1:1 file copy, no frontmatter mutation (the actual snapshot synthesis is handled later by /storyforge:bootstrap-book-from-series).
/storyforge:session-start| Property | Value |
|---|---|
| Model | Sonnet |
| Argument | none |
Purpose: Initializes a new session. Checks setup (venv, config, author profiles). Rebuilds state cache from Markdown. Shows last session info (last book, phase).
When to invoke:
list_books appears empty despite existing projects/storyforge:resume| Property | Value |
|---|---|
| Model | Sonnet |
| Argument | <book-slug> |
Purpose: Resume work on a book. Loads metadata, status, last session context and recommends the next sensible skill.
Output:
/storyforge:next-step| Property | Value |
|---|---|
| Model | Sonnet |
| Argument | none (uses session context) |
Purpose: Analyzes the current book status and recommends the next logical step based on writing mode (Outliner/Plantser/Discovery).
Example output:
Book: "The Lighthouse Keeper"
Status: Plot Outlined
Writing Mode: outliner
Finished characters: 2 / 6 planned
β Recommendation: /storyforge:character-creator the-lighthouse-keeper
Define remaining 4 characters using character-arcs template.
/storyforge:book-dashboard| Property | Value |
|---|---|
| Model | Sonnet |
| Argument | [book-slug] (optional) |
Purpose: Compact progress dashboard for one book or all books.
Shows:
Example without argument: Lists all books in tabular form.
/storyforge:brainstorm| Property | Value |
|---|---|
| Model | claude-opus-4-8 |
| Argument | none (interactive) |
Purpose: Exploratory idea development before a book is created. Goes through 5 phases: Seed, Exploration, What-If, Genre Check, Feasibility.
Output:
{content_root}/ideas/{slug}.md (e.g. ~/projekte/book-projects/ideas/) β per-file Markdown with YAML frontmatterraw β explored β developed β ready/storyforge:new-bookNote: ~/.storyforge/cache/state.json is just an indexer cache, not the storage location for ideas. The source of truth is always the Markdown file under {content_root}/ideas/.
Example prompt: "I have an idea about an old lighthouse keeper. Help me develop it."
/storyforge:ideas| Property | Value |
|---|---|
| Model | Haiku |
| Argument | [status] [genre] (filter) |
Purpose: Lists saved ideas. Filter by status (raw, ready, ...) or genre.
Example:
/storyforge:ideas ready
/storyforge:ideas developed mystery
Invoke: /storyforge:start-session
Model: Sonnet
Initializes a StoryForge session: verifies setup, loads session context (last active book, chapter, phase) and shows status overview.
When: At the start of a writing session or after a longer break.
/storyforge:create-author| Property | Value |
|---|---|
| Model | claude-opus-4-8 |
| Argument | <author-name> |
Purpose: Creates a new author profile. Interactive. Asks for:
Output: ~/.storyforge/authors/{slug}/profile.md (incl. empty ## Writing Discoveries section) + vocabulary.md
/storyforge:study-author| Property | Value |
|---|---|
| Model | claude-opus-4-8 |
| Argument | <file-path> [author-slug] |
Purpose: Extracts style DNA from past works. Supports PDF, EPUB, DOCX. Analyzes:
Output:
profile.md (style parameters) via update_author(slug, field, value) for fields like tone, sentence_style, frontmattervocabulary.md (preferred words, phrases) β direct Write to ~/.storyforge/authors/{slug}/vocabulary.md~/.storyforge/authors/{slug}/studied-works/{title}.mdwrite_author_discovery(author_slug, section="style_principles", text=..., book_slug=...)write_author_banned_phrase(author_slug, phrase, reason=...)Typical call:
/storyforge:study-author ~/my-previous-novel.epub maja-sundberg
/storyforge:harvest-author-rules| Property | Value |
|---|---|
| Model | Sonnet |
| Argument | <book-slug> [author-slug] |
| Prerequisite | Book in Revision status or later, ideally after manuscript-checker |
Purpose: Promote findings from a finished book into the author profile. Classifies each entry from the book's CLAUDE.md ## Rules as banned_phrase, style_principle, or world_rule and dedupes against the existing author profile + vocabulary.
Workflow:
harvest_book_rules(book_slug, author_slug?) β classifies + dedupesbanned_phrase β vocabulary.md ### Absolutely Forbidden (or matching section)style_principle β profile.md ## Writing Discoveries / Style Principlesworld_rule β stays in book CLAUDE.md_(emerged from {book}, YYYY-MM)_. Recurrence in a later book appends a second origin tag β no duplicate.mode=remove removes the rule, mode=annotate leaves it with a tag).Triggers:
manuscript-checker and chapter-reviewer, when cross-book-relevant findings have been collectedConcept background: See reference/author-evolution.md in the plugin repo. 3-tier hierarchy book β author β global.
/storyforge:voice-checker| Property | Value |
|---|---|
| Model | claude-opus-4-8 |
| Argument | <book-slug> [chapter-slug] |
Purpose: Optional holistic AI-authenticity score (0β100) across 7 dimensions. Compares against author profile (incl. ## Writing Discoveries). Not a required step in the standard workflow β for targeted AI-tell removal use /storyforge:chapter-humanizer instead.
Detailed description: Quality System
Invoke: /storyforge:author-check [book-slug] [chapter-slug]
Model: claude-opus-4-8
Arguments: [book-slug] and [chapter-slug] (both optional, taken from active session)
Verifies positive style compliance: are the author's style_principles Writing Discoveries present in the current chapter draft?
Counterpart to manuscript-checker (checks negatives) and chapter-reviewer (checks constraints). author-check verifies that genre- and tone-specific positive style patterns β written to the author profile via study-author Phase 1.5 or backfill-style-principles β actually appear in the draft.
When: After chapter-writer or chapter-reviewer; optional but recommended before chapter-humanizer.
What it checks:
## Writing Discoveries / ### Style Principles/storyforge:book-conceptualizer| Property | Value |
|---|---|
| Model | claude-opus-4-8 |
| Argument | <book-slug> |
Purpose: Develops the book concept in 5 phases:
Output:
synopsis.md with back-cover copy + long synopsisREADME.md (theme, tone, premise in frontmatter)plot/tone.md (tonal guard rails)Discovery Writer variant: Reduced to premise + protagonist + core tension β no theme/tone deep-dive if author picked discovery mode.
/storyforge:plot-architect| Property | Value |
|---|---|
| Model | claude-opus-4-8 |
| Argument | <book-slug> |
Purpose: Structures the plot using one of 8 methods:
Snowflake Method (highlight):
10-step process from one-sentence summary to complete scene catalog:
1. One-sentence summary of the novel
2. Five-sentence plot paragraph
3. Character synopses (1 page per main character)
4. Expand 5 sentences into 1-page plot synopsis
5. Character bibles (4 pages per main character)
6. Expand to 4-page plot synopsis
7. Character charts (visualization)
8. Complete scene list
9. Narrative draft of every scene
10. First writing draft
Output:
plot/outline.md with acts and beatsplot/arcs.md with character arc overviewchapters/{NN-slug}/README.mdPlantser variant: Only 6 key beats (MVO β Minimum Viable Outline). Chapter details come later via rolling planner.
/storyforge:character-creator| Property | Value |
|---|---|
| Model | claude-opus-4-8 |
| Argument | <book-slug> [character-name] |
Purpose: Creates 3D characters in 14 psychology steps:
Output:
characters/{char-slug}.md with YAML frontmattercharacters/INDEX.mdplot/arcs.md with arc overviewThe character frontmatter supports two optional blocks consumed by quality gates:
tactical: β for action-relevant characters. Read by the verify_tactical_setup MCP tool to check combat/travel scenes for walking-order plausibility before drafting:
tactical:
protector_role: true # actively protects others
protected_role: false # needs protection in combat
combat_skill: high # none|low|medium|high|elite|unknown
movement_lead: true # tends to take point
movement_rear: false # tends to bring up the rear
vulnerable_to: [daylight]
carries: [knife, backup_blade]
knowledge: β for POV characters. Read by the POV boundary checker hook to flag narration that attributes domain expertise the character does not have:
knowledge:
expert: [it, programming, networking]
competent: [photography]
layperson: [psychology, history]
none: [forensics, ballistics, medicine, tactical_combat, automotive_repair]
Both blocks are optional. Missing blocks lead to graceful degrade (info-severity warning for tactical, scan-skipped for knowledge). Not every character needs both β tactical: only for combat/travel-relevant characters, knowledge: only for POV characters.
Example (fictional character "Inga Holm"):
---
name: Inga Holm
slug: inga-holm
role: deuteragonist
age: 34
profession: Marine biologist
status: Arc Defined
arc_type: Positive Change
fatal_flaw: distrusts anyone older than 50
tactical:
protector_role: false
protected_role: false
combat_skill: low
vulnerable_to: []
carries: []
knowledge:
expert: [marine_biology, oceanography]
competent: [photography, sailing]
layperson: [psychology]
none: [forensics, tactical_combat, ballistics]
---
## GMC
- Want: Finish a scientific study
- Motivation: Prove her academic theory is right
- Conflict: Arne knows the sea better but she does not want a mentor
## Ghost
Father (fisherman) died when she was 8. Of all nights, the one
when he promised to be back after supper.
## Lie
"Anyone older betrays you sooner or later."
## Truth
"Closeness to old people is not betrayal β it is risking love."
/storyforge:world-builder| Property | Value |
|---|---|
| Model | claude-opus-4-8 |
| Argument | <book-slug> |
Purpose: Builds the book's world. Adapts to genre:
Mandatory component: Travel Matrix
For ALL books (not just fantasy) β table with travel times between all locations:
# Travel Matrix β Kargholm (fictional North Sea island)
| From β To | Lighthouse | Harbor | Village | Parsonage | Cliff | Ferry-Mainland |
|-----------|------------|--------|---------|-----------|-------|----------------|
| Lighthouse | β | 25 min | 40 min | 45 min | 15 min | 2.5 h (incl. 1h ferry) |
| Harbor | 25 min | β | 15 min | 20 min | 35 min | 1.75 h |
| Village | 40 min | 15 min | β | 5 min | 30 min | 2 h |
| ... | | | | | | |
Assumptions: Walking speed 4 km/h, dry weather.
During storms: Lighthouse path impassable, 60 min detour.
Output:
world/setting.md (with travel matrix)world/rules.md (world rules / magic system)world/history.mdplot/canon-log.md populated/storyforge:rolling-planner| Property | Value |
|---|---|
| Model | Sonnet |
| Argument | [book-slug] |
Purpose: Scene-by-scene planning for discovery writers and plantsers. Plans 3-5 scenes ahead with the Goal / Conflict / Consequence (GCC) recipe.
Scene recipe template:
Scene: "Arne finds the coin"
POV: Arne Kruse
Location: Lighthouse cellar
Time: Day 3, 23:40
Goal: Arne searches the old logbook crate.
Conflict: The cellar is flooded from high tide, crate underwater.
Consequence: He does not find the logbook β but an old silver coin
minted 1987, the year his brother disappeared.
β New mystery. Drives chapter 5.
When to invoke:
Step 4b β Tactical sanity check: For combat or travel scenes (keywords walk, hike, drive, attack, mission, enter the building, approach with multiple characters), the skill calls verify_tactical_setup(book_slug, scene_outline_text, characters_present) before saving the recipe. Walking-order issues are addressed in the plan, not papered over in the draft.
/storyforge:chapter-writer| Property | Value |
|---|---|
| Model | claude-opus-4-8 |
| Argument | <book-slug> <chapter-number> |
Purpose: THE core creative skill. Writes a chapter in author voice.
Mandatory loads before the first word (brief architecture):
One MCP tool bundles 14 data sources into a single structured JSON brief. Remaining 9 mandatory loads:
get_chapter_writing_brief(book_slug, chapter_slug)) β Why: Bundles 14 data sources into one JSON: chapter meta, pov_character, story_anchor, recent_chapter_timelines, recent_chapter_endings, characters_present (with knowledge + tactical), pov_character_inventory (deterministically extracted POV character inventory with source pointers; extraction_method β {frontmatter, timeline_regex, draft_heuristic, none}; non-empty warnings β ask the user, do not invent), pov_character_state (4 physical categories: clothing, injuries, altered_states, environmental_limiters; each extracted independently; outline-aware warnings; consumed by Pre-Scene Logic Audit), rules_to_honor, callbacks_in_register, banned_phrases, recent_simile_count_per_chapter, tone_litmus_questions, tactical_constraints (auto-active on combat/travel), review_handle. Defensive composition: every sub-component wrapped in try/except, individual failures captured as {component, error} in errors, brief still ships with partial data.get_author()) β Why: Drives EVERYTHING β tone, vocabulary, rhythm, voice. Now also loads ## Writing Discoveries (Recurring Tics / Style Principles / Don'ts) β promoted findings from prior books. Outside book scope, hence separate load.get_book_full()) β Why: Genres, plot context, the frame the chapter must fit.get_genre()) β Why: Reader-expected conventions; violations need to be deliberate.get_craft_reference()):
chapter-construction β Hooks, scene-sequel, endingsdialog-craft β Subtext, beats, voice differentiationshow-dont-tell β Techniques and five sensespacing-guide β Scene vs. summaryanti-ai-patterns β Negative-space catalogprose-style β Sentence-level craftsimile-discipline β Two-question test for the pre-save scanplot-logic β Plot-hole patterns for pre-write awareness (causality_inversion, chekhov_gun, information_leak, motivation_break, premise_violation, pov_knowledge_boundary)world/setting.md) β Why: Travel Matrix and location facts. Mandatory when chapter involves travel.plot/timeline.md) β Why: Canonical day/date calendar (the brief's recent_chapter_timelines covers intra-day grids; timeline.md covers the macro arc).plot/canon-log.md) β Why: Established facts, including CHANGED revisions.Writing modes (user picks):
Pre-Scene Logic Audit (Step A1b / Step 2c) β MANDATORY before each scene / chapter: The skill emits a structured audit block to the chat before each scene (Mode A: Step A1b) or once per chapter (Mode B: Step 2c) β the structural counter to context-pressure invention. Five mandatory categories, each with source citation:
pov_character_inventory. If extraction_method: "none" or warnings is non-empty β ask the user, do not invent.world/setting.md (travel matrix), plot/timeline.md, recent_chapter_timelines.characters/{slug}.md, brief's canon_brief.banned_phrases and the author profile's recurring_tics / donts. Replan tic violations before any prose is written.pov_character_state (clothing, injuries, altered_states, environmental_limiters). If extraction_methods[cat] == "none" and the beat depends on that category β ask the user.Every gap is surfaced explicitly to the user β never papered over silently.
Step A2 β Tactical pre-write check: For combat/travel scenes (keyword detection via is_tactical_scene), Step A2 calls verify_tactical_setup and resolves warn-severity findings BEFORE prose is appended. Walking-order issues are not papered over in prose.
Inline review handles:
During scene-by-scene mode, comments with the configured review handle can appear inline in the prose:
Arne climbed the stairs. The steps creaked in a rhythm he could have
played back blind after forty years.
Author: Too nostalgic for the opening. Arne is angry here, not sentimental.
Chapter-writer reads these blocks on the next pass and revises accordingly. Read-First Rule (GH#27): When {review_handle}: is signaled, ALWAYS load the full draft.md via the Read tool β do not trust the file-change diff which truncates for long files.
Post-write updates (mandatory):
plot/timeline.md (one row per story day)plot/canon-log.md (new facts + changed facts marked CHANGED)chapters/{chapter}/README.md β ## Chapter Timeline section (intra-day times)## Promises section in chapters/{chapter}/README.md via register_chapter_promises(). Setup elements (Chekhov guns, mysteries, registered callbacks) are persisted for analyze_plot_logic scans.current_inventory, current_clothing, current_injuries, altered_states, environmental_limiters), waits for confirmation, and persists via MCP update_character_snapshot(book_slug, pov_slug, snapshot_json, book_category). Keeps pov_character_inventory and pov_character_state in the brief at frontmatter level (highest extraction priority) for subsequent chapters.Mode A session behavior (fixes #228, #230):
chapters/{chapter}/README.md under ## Scene Plan. On session restart the saved plan is loaded automatically β no reconstruction needed.author_writing_mode is plantser or discovery and no saved plan exists, the skill asks whether to run /storyforge:rolling-planner first./storyforge:chapter-reviewer| Property | Value |
|---|---|
| Model | claude-opus-4-8 |
| Argument | <book-slug> <chapter-slug> |
Purpose: 28-point quality check per chapter, including plot-logic.
Data brief: get_review_brief(book_slug, chapter_slug) assembles project-state metadata (chapter timeline, canonical timeline, travel matrix, canon log facts, tonal rules, active book rules, active callbacks) into one structured JSON β replacing 6+ direct file reads. Chapter draft texts are read separately as the content under review (ADR-0001: data-briefs-over-prompt-instructions).
Check categories:
### Phrase Echo Report with quote + location + fix suggestion (pronoun / synonym / reword).analyze_plot_logic(book_slug, chapter_slug) and surfaces findings for 5 additional categories:
causality_inversion β Cause-after-effect pattern via story-day map (deterministic).chekhov_gun β Registered promises with no payoff up to the end of the drafted manuscript (deterministic). Skipped on book_category: memoir.information_leak β POV character knows things not yet established per canon log (LLM pass with knowledge_index).motivation_break β Character action breaks with established arc state (LLM pass with character arcs).pov_knowledge_boundary β Like sub-point 20a but semantic (domain knowledge not declared in the knowledge: block) β LLM pass.First-chapter gate (additional 13 points): Chapter 1 has stricter criteria. Details: Quality System
/storyforge:chapter-humanizer| Property | Value |
|---|---|
| Model | claude-opus-4-8 |
| Argument | <book-slug> <chapter-slug> |
Purpose: Surgical AI-construction scanner. Identifies and interactively fixes AI-tell patterns that survive the chapter-reviewer pass. Two-pass approach:
Interact format: For each hit: apply N / skip N / N: shorter β proposed replacements written in the author's voice.
Workflow position: chapter-reviewer β chapter-humanizer β chapter-proofreader
Detailed description: Quality System
/storyforge:chapter-proofreader| Property | Value |
|---|---|
| Model | Sonnet |
| Argument | <book-slug> <chapter-slug> |
Purpose: Language-correctness check (spelling, grammar, punctuation) after chapter-humanizer β before the manuscript passes through manuscript-checker's cross-chapter analysis. Works for both fiction and memoir.
Workflow position: chapter-reviewer β chapter-humanizer β chapter-proofreader β manuscript-checker
Language detection:
| Priority | Field | Source |
|---|---|---|
| 1 | book_language |
Book frontmatter (authoritative) |
| 2 | preferred_writing_language |
Author profile (fallback) |
| 3 | "en" |
Global fallback |
Explanation language: native_language from the author profile β explanations appear in German, French, Spanish, etc. depending on the author's mother tongue. Native speakers receive only the fix, no explanation.
Check categories:
writing_language β native_language): article misuse, preposition errors, false friends, calque constructionsWhat is NOT checked: Craft issues (chapter-reviewer's job), cross-chapter repetitions (manuscript-checker's job), intentional stylistic choices from the author profile (avoid list).
Verdicts: CLEAN | ISSUES FOUND
/storyforge:continuity-checker| Property | Value |
|---|---|
| Model | Sonnet |
| Argument | <book-slug> |
Purpose: Validates the complete book against timeline and travel matrix.
Finds:
Reconstruction: When timeline/travel matrix are missing, the skill reconstructs them from all chapter drafts.
Uses MCP get_continuity_brief(book_slug) to load canonical calendar, travel matrix, canon log facts, character index, and ALL chapter timeline grids in one structured JSON call β instead of ad-hoc re-parsing of individual project files.
/storyforge:manuscript-checker| Property | Value |
|---|---|
| Model | claude-opus-4-8 |
| Argument | <book-slug> [--interactive] |
Purpose: Full-manuscript gate before revision. Detection across 16 categories:
plot_hole, new since v2.x β sorted before cliche) β aggregates all 6 categories from analyze_plot_logic: causality_inversion, chekhov_gun (skipped on memoir), information_leak, motivation_break, premise_violation (skipped on memoir), pov_knowledge_boundarycallback_dropped, callback_deferred)Interactive fix mode: Walks every finding and asks: keep / change / mark?
Detailed description: Quality System
/storyforge:beta-feedback| Property | Value |
|---|---|
| Model | claude-opus-4-8 |
| Argument | <book-slug> [--file path/to/feedback.md] |
Purpose: Triage curated ARC/beta reader feedback. Categorizes:
Output:
/storyforge:researcher| Property | Value |
|---|---|
| Model | claude-opus-4-8 |
| Argument | <topic> [book-slug] |
Purpose: Structured research on a topic. Uses web access, evaluates sources, saves results.
Output:
{project}/research/notes/{topic-slug}.mdExample: /storyforge:researcher north-sea-lighthouse-history the-lighthouse-keeper
/storyforge:sensitivity-reader| Property | Value |
|---|---|
| Model | claude-opus-4-8 |
| Argument | <book-slug> [chapter-slug] |
Purpose: Scan for problematic representations:
Important: Does not replace human sensitivity readers for critical topics (LGBTQ, trauma, race). It is supplementary.
/storyforge:export-engineer| Property | Value |
|---|---|
| Model | Sonnet |
| Argument | <book-slug> [format] |
Purpose: Generates EPUB / PDF / MOBI via Pandoc (and optionally Calibre for MOBI).
Prerequisites:
Final or Polishedexport/front-matter.md): copyright, dedication, optional epigraphexport/back-matter.md): about the author, other bookscover/art/cover.jpgOutput: export/output/{book-slug}.epub (or pdf/mobi)
CSS customization: Own styles at export/custom.css possible.
/storyforge:promo-writer| Property | Value |
|---|---|
| Model | claude-opus-4-8 |
| Argument | <book-slug> [platform] |
Purpose: Complete marketing campaign:
/storyforge:cover-artist| Property | Value |
|---|---|
| Model | claude-opus-4-8 |
| Argument | <book-slug> |
Purpose: Creates cover brief and image prompts. No direct image generation β delivers prompts for Midjourney, DALL-E, or human designers.
Output:
cover/brief.md β Mood, genre conventions, typography hintscover/prompts.md β Ready-to-use prompts for Midjourney/DALL-E/storyforge:translator| Property | Value |
|---|---|
| Model | claude-opus-4-8 |
| Argument | <book-slug> <target-language> |
Purpose: Translates the book into a target language with voice preservation.
Process:
translations/{lang}/glossary.md) with character names, places, technical termsExample: /storyforge:translator the-lighthouse-keeper de
/storyforge:series-planner| Property | Value |
|---|---|
| Model | claude-opus-4-8 |
| Argument | <series-name> |
Purpose: Creates a series level over multiple books. Manages:
{series}/world/canon.md)Structure:
series/
βββ README.md
βββ world/
β βββ canon.md
βββ characters-evolution.md
βββ projects/
βββ volume-1-slug/
βββ volume-2-slug/
βββ volume-3-slug/
Step 5 β Tracker-slug vs. book-slug mismatch (#194): When a tracker entry's slug deviates from the book-level character file slug (tracker king-caelan vs. book file caelan.md), the skill instructs the author to add a book_slug: field to the character frontmatter so cross-references resolve cleanly:
---
name: "King Caelan"
slug: "king-caelan"
book_slug: "caelan" # NEW β only when tracker slug β book slug
---
Zero-config when slugs match (kael β kael.md). The field is read by harvest-character-evolution and bootstrap-book-from-series to map tracker entries to character files.
/storyforge:harvest-character-evolution| Property | Value |
|---|---|
| Model | claude-sonnet-4-6 |
| Argument | [book-slug] (optional β falls back to active session) |
| Prerequisite | Book status Final / Export Ready / Published AND book is part of a series |
Purpose: End-of-book harvester for series-recurring characters. Walks every recurring tracker entry, reads the book-level end-state of the character, proposes a B{N} Ende summary, and writes confirmed entries to the tracker after a per-character diff prompt. The structural counterpart to harvest-author-rules β but at the series-character layer instead of the rules layer.
Reads (per character):
current_inventory, current_clothing, current_injuries, altered_states, environmental_limiters, as_of_chapter## Relationships section### B{N} Ende slot (if any) for diff displayWrites:
### B{N} Ende slot (per character, on user accept)## Updates Log entry with timestamp + book-slugWorkflow:
recurs_in containing the current bookSafety net: No silent overwrites. Every character requires explicit user confirmation. Tracker entries that already have a populated B{N} Ende slot are surfaced as diff so the author sees what is changing.
Workflow position: After /storyforge:harvest-author-rules, before /storyforge:new-book for the next volume in the series.
Triggers:
Final / Export Ready / PublishedIssue reference: D-1 of Epic #195.
/storyforge:bootstrap-book-from-series| Property | Value |
|---|---|
| Model | claude-sonnet-4-6 |
| Argument | <prev-book-slug> <new-book-slug> (positional, both required) |
| Prerequisite | Both books exist; tracker has B{prev} Ende for prev book; new book has recurring character files (typically copied via /storyforge:new-book --copy-recurring-from=) |
Purpose: Character-state migration for sequel volumes. Reads the tracker's B{prev} Ende and B{new} (geplant) entries, synthesizes a starting snapshot per character, and walks character-by-character with author confirmation. Adds a series_evolution_imported_from: B{prev} marker to every bootstrapped file so later passes know the seed origin.
Important: This skill does NOT create a new book. The new book must already exist (created via /storyforge:new-book --copy-recurring-from=). This skill handles character-state synthesis from the prior volume only.
Reads (per character):
### B{prev} Ende (end-state of prior volume)### B{new} (geplant) (planned starting state for new volume β author intentions)Writes:
current_inventory, current_clothing, current_injuries, altered_states, environmental_limiters, as_of_chapter: 0)series_evolution_imported_from: B{prev}## Updates Log entry with timestamp + new book slugWorkflow:
new-book/characters/ with a tracker entry β synthesize starting snapshot from B{prev} Ende + B{new} (geplant)Workflow position: After /storyforge:new-book (with --copy-recurring-from=) and after /storyforge:harvest-character-evolution on the previous book β before drafting begins.
Triggers:
new-book auto-copy (#196), before chapter drafts start in the new volumeIssue reference: D-2 of Epic #195.
/storyforge:genre-creator| Property | Value |
|---|---|
| Model | claude-opus-4-8 |
| Argument | <genre-name> |
Purpose: Creates a new genre mix. Asks for base genres to combine, defines conventions, tropes, expected beats.
Output: {plugin_root}/genres/{name}/README.md
Detailed description: Genre System
/storyforge:unblock| Property | Value |
|---|---|
| Model | claude-opus-4-8 |
| Argument | [book-slug] (optional) |
Purpose: Diagnose and resolve writer's block β book-context-aware. When a book slug is provided, the skill loads the current scene structure, open plot questions, and character dynamics to tailor the diagnosis and unblocking strategies to the specific project.
Diagnoses block type and delivers targeted strategies:
Trigger: "I'm stuck", "blocked", "writer's block" β with or without book context.
/storyforge:report-issue| Property | Value |
|---|---|
| Model | Sonnet |
| Argument | [book-slug] ["phrase or pattern"] |
Purpose: Converts a recurring prose problem into an enforceable rule at book, author, or global scope. Conversational β asks clarifying questions before writing anything.
Invoke when:
Output:
append_book_rule(book_slug, phrase, reason, severity, source_context) β writes a new backtick rule to book CLAUDE.md ## Ruleswrite_author_banned_phrase(author_slug, phrase, reason) β writes to the author profile's vocabulary.mdreference/craft/anti-ai-patterns.mdScope options: book β author β global (use /storyforge:promote-rule to escalate)
/storyforge:promote-rule| Property | Value |
|---|---|
| Model | Sonnet |
| Argument | [book-slug] ["phrase"] [--to author\|global] |
Purpose: Moves a banned-phrase rule from a lower scope to a higher scope. Supported promotions: book β author, author β global, book β global.
Invoke when:
/storyforge:report-issue completed and user requests escalationExample:
/storyforge:promote-rule the-lighthouse-keeper "pulsed with energy" --to author
Moves the rule from the-lighthouse-keeper/CLAUDE.md to ~/.storyforge/authors/maja-sundberg/vocabulary.md.
/storyforge:rules-audit| Property | Value |
|---|---|
| Model | Sonnet |
| Argument | [book-slug] (optional) |
Purpose: Interactive audit of the rules in a book CLAUDE.md. Walks every rule the manuscript-checker would silently ignore β italic-wrapped examples with ban cue, mixed quotes, dead patterns, bracket placeholders β and offers four options per finding: suggested rewrite, manual edit, mark as narrative, or skip.
Triggers:
rules audit, rules check, rules cleanup, audit my rulesWorkflow:
list_book_rules + lint_book_rulesupdate_book_rule(validate=True) with re-lint after every writeImportant: No blind rewrites. Every change goes through user confirmation. Lint findings are advisory; the user owns the rule semantics.
/storyforge:backfill-promises| Property | Value |
|---|---|
| Model | claude-opus-4-8 |
| Argument | <book-slug> |
| Prerequisite | Book has chapter drafts in status Draft or higher |
Purpose: One-shot LLM bridge for books drafted before v2.x that have no ## Promises section in their chapter READMEs. Walks every chapter, extracts setup elements (Chekhov guns, mysteries, registered callbacks) via an LLM pass, and writes them to the chapter README.md via register_chapter_promises().
Triggers:
/storyforge:backfill-promiseschekhov_gun detection in analyze_plot_logic to workWorkflow:
Draft or higher## Promises block to the chapter README.md via register_chapter_promises()After the run: analyze_plot_logic can produce chekhov_gun findings for the book. Single source of truth remains the canon log; promises are an additional index on top, not a second store for character knowledge.
/storyforge:backfill-style-principlesInvoke: /storyforge:backfill-style-principles [author-slug]
Model: claude-opus-4-8
Arguments: [author-slug] (optional, from session)
One-time extraction of positive style patterns from existing studied-works/analysis-*.md files β for authors studied before Phase 1.5 (v2.1.0) shipped, without re-reading the original books.
Background: Authors analyzed before PR #260 have rich analysis archives but empty style_principles Writing Discoveries. Phase 1.5 did not exist yet β patterns were documented in ## Distinctive Patterns and ## Signature Techniques but never promoted to the living profile. backfill-style-principles closes this gap.
Idempotent: write_author_discovery deduplicates by content β running twice does not create duplicates.
When: When an author has studied works but style_principles is empty or thin.
Anti-patterns found in analysis files are surfaced for optional confirmation β not auto-written.
/storyforge:migrate-source-genres| Property | Value |
|---|---|
| Model | claude-haiku-4-5 |
| Argument | <author-slug> |
Purpose: One-time migration helper. Backfills missing source_genres fields on author_discoveries DB entries β for author data created before the source_genres field was introduced.
Triggers:
/storyforge:migrate-source-genressource_genres fieldOutput: DB updated β all author_discoveries entries for the author populated with the appropriate source_genres value.
Note: One-time migration run. Idempotent β running multiple times does not create duplicates.
/storyforge:register-callback| Property | Value |
|---|---|
| Model | Haiku |
| Argument | <Rule\|Workflow\|Callback>: <text> |
Purpose: Explicitly write a callback/rule to the per-book CLAUDE.md. Alternative to the PreCompact hook automation.
Example:
/storyforge:register-callback Callback: The silver coin (ch 5) must return in ch 18
/storyforge:help| Property | Value |
|---|---|
| Model | Haiku |
| Argument | none |
Purpose: Shows all available skills with short descriptions.
/storyforge:setup| Property | Value |
|---|---|
| Model | Sonnet |
| Argument | none |
Purpose: First-time setup. Creates venv, installs dependencies, copies config template.
/storyforge:configure| Property | Value |
|---|---|
| Model | Sonnet |
| Argument | none (interactive) |
Purpose: Interactive config editing. Walks through config.yaml field by field.
These skills only activate on memoir books (book_category: memoir). They refuse to run on fiction projects.
/storyforge:plot-architect-memoir| Property | Value |
|---|---|
| Model | claude-opus-4-8 |
| Argument | <book-slug> |
| Prerequisite | book_category: memoir |
Purpose: Memoir variant of plot-architect. Selects one of four structure types and shapes the chapter spine accordingly. Loads memoir-specific craft references (scene-vs-summary, emotional-truth, memoir-anti-ai-patterns) β no fiction structure catalog (3-Act, Hero's Journey, Snowflake, etc.).
On fiction books: Refuses to run and redirects to /storyforge:plot-architect.
4 memoir structure types:
Output:
plot/outline.md with structure type + chapter spineplot/arcs.md with person arcs (memoir: real people, not fictional characters)When to invoke:
/storyforge:book-conceptualizer (memoir mode)book_category: memoirInvoke: /storyforge:character-creator-memoir <book-slug> [name]
Model: claude-opus-4-8
Memoir real-people handler. Captures real people with relationship, person category, consent status, and anonymization decisions. Creates person profiles at people/{slug}.md via MCP create_person().
For book_category == "memoir" only. Fiction books β /storyforge:character-creator.
When: After plot-architect-memoir, before chapter-writer-memoir.
/storyforge:memoir-ethics-checker| Property | Value |
|---|---|
| Model | claude-opus-4-8 |
| Argument | <book-slug> |
| Prerequisite | book_category: memoir, person profiles in people/ |
Purpose: Consent gate and defamation-risk scanner for memoir books.
Two-part check:
people/, checks consent_status. Verdict: PASS / WARN / FAIL per person.Verdict: EXPORT CLEAR / RESOLVE BEFORE EXPORT / EXPORT BLOCKED
Invoke when: User says "ethics check", "consent check" β or before any memoir export (also called automatically by export-engineer).
Invoke: /storyforge:chapter-writer-memoir <book-slug> <chapter-number>
Model: claude-opus-4-8
Memoir variant of chapter-writer. Writes memoir chapters in the author's voice, guided by memoir craft: scene-vs-summary, emotional truth, consent gates, and memoir-specific anti-AI patterns.
For book_category == "memoir" only. Fiction books β /storyforge:chapter-writer.
When: When a chapter outline exists and the book is in Drafting status.
Invoke: /storyforge:chapter-reviewer-memoir <book-slug> <chapter-slug>
Model: claude-opus-4-8
Memoir variant of chapter-reviewer. Reviews memoir chapters for craft quality, voice consistency, consent obligations, and memoir-specific AI tells.
For book_category == "memoir" only. Fiction books β /storyforge:chapter-reviewer.
When: After chapter-writer-memoir, before memoir-ethics-checker.
/storyforge:emotional-truth-prompt| Property | Value |
|---|---|
| Model | claude-opus-4-8 |
| Argument | <book-slug> [chapter-slug] |
| Prerequisite | book_category: memoir, chapter draft exists |
Purpose: Interactive felt-sense interrogation for memoir chapter drafts. Finds where the draft drifts toward plausible-feeling abstraction and asks targeted questions only the author can answer from lived experience.
Key rule: Outputs questions and revision directions β never prose rewrites.
7 interrogation dimensions: ET1 Implicit Feeling Β· ET2 Retrospective Vantage Drift Β· ET3 Memory Contradiction Β· ET4 Avoidance Hedge Β· ET5 Thoroughness Trap Β· ET6 Scene/Summary Mode Error Β· ET7 "I Was Wrong" Rendering
Verdict: PASS β proceed to chapter-reviewer | DEEPEN β address gaps first | REWRITE β structural rework needed
Invoke when: User says "emotional truth", "deepen scene", "felt sense" β after chapter draft, before /storyforge:chapter-reviewer.
| Category | Skill | Model | Arguments |
|---|---|---|---|
| Core | new-book | Sonnet | [title] |
| Core | session-start | Sonnet | β |
| Core | resume | Sonnet | <book-slug> |
| Core | next-step | Sonnet | β |
| Core | book-dashboard | Sonnet | [book-slug] |
| Core | brainstorm | claude-opus-4-8 | β |
| Core | ideas | Haiku | [status] [genre] |
| Core | start-session | Sonnet | β |
| Author | create-author | claude-opus-4-8 | <author-name> |
| Author | study-author | claude-opus-4-8 | <file-path> [author-slug] |
| Author | harvest-author-rules | Sonnet | <book-slug> [author-slug] |
| Author | voice-checker | claude-opus-4-8 | <book-slug> [chapter-slug] |
| Author | author-check | claude-opus-4-8 | [book-slug] [chapter-slug] |
| Creative | book-conceptualizer | claude-opus-4-8 | <book-slug> |
| Creative | plot-architect | claude-opus-4-8 | <book-slug> |
| Creative | character-creator | claude-opus-4-8 | <book-slug> [character-name] |
| Creative | world-builder | claude-opus-4-8 | <book-slug> |
| Creative | rolling-planner | Sonnet | [book-slug] |
| Writing | chapter-writer | claude-opus-4-8 | <book-slug> <chapter-number> |
| Writing | chapter-reviewer | claude-opus-4-8 | <book-slug> <chapter-slug> |
| Writing | chapter-humanizer | claude-opus-4-8 | <book-slug> <chapter-slug> |
| Writing | chapter-proofreader | Sonnet | <book-slug> <chapter-slug> |
| Writing | continuity-checker | Sonnet | <book-slug> |
| Writing | manuscript-checker | claude-opus-4-8 | <book-slug> [--interactive] |
| Writing | beta-feedback | claude-opus-4-8 | <book-slug> [--file path] |
| Research | researcher | claude-opus-4-8 | <topic> [book-slug] |
| Research | sensitivity-reader | claude-opus-4-8 | <book-slug> [chapter-slug] |
| Production | export-engineer | Sonnet | <book-slug> [format] |
| Production | promo-writer | claude-opus-4-8 | <book-slug> [platform] |
| Production | cover-artist | claude-opus-4-8 | <book-slug> |
| Production | translator | claude-opus-4-8 | <book-slug> <target-language> |
| Series | series-planner | claude-opus-4-8 | <series-name> |
| Series | harvest-character-evolution | claude-sonnet-4-6 | [book-slug] |
| Series | bootstrap-book-from-series | claude-sonnet-4-6 | <prev-book-slug> <new-book-slug> |
| Utility | genre-creator | claude-opus-4-8 | <genre-name> |
| Utility | unblock | claude-opus-4-8 | [book-slug] |
| Utility | report-issue | Sonnet | [book-slug] ["phrase"] |
| Utility | promote-rule | Sonnet | [book-slug] ["phrase"] [--to author\|global] |
| Utility | rules-audit | Sonnet | [book-slug] |
| Utility | backfill-promises | claude-opus-4-8 | <book-slug> |
| Utility | backfill-style-principles | claude-opus-4-8 | [author-slug] |
| Utility | migrate-source-genres | claude-haiku-4-5 | <author-slug> |
| Utility | register-callback | Haiku | <Rule\|Workflow\|Callback>: <text> |
| Utility | help | Haiku | β |
| Utility | setup | Sonnet | β |
| Utility | configure | Sonnet | β |
| Memoir | plot-architect-memoir | claude-opus-4-8 | <book-slug> |
| Memoir | character-creator-memoir | claude-opus-4-8 | <book-slug> [name] |
| Memoir | memoir-ethics-checker | claude-opus-4-8 | <book-slug> |
| Memoir | chapter-writer-memoir | claude-opus-4-8 | <book-slug> <chapter-number> |
| Memoir | chapter-reviewer-memoir | claude-opus-4-8 | <book-slug> <chapter-slug> |
| Memoir | emotional-truth-prompt | claude-opus-4-8 | <book-slug> [chapter-slug] |