danjdewhurst/story-skills

story-init

This skill should be used when the user asks to "start a new story", "initialize a story project", "create a story", "new book", "set up a story", or wants to begin a new fiction writing project from scratch.

Voir la source
Document Skill original

Rendu depuis le dépôt source en conservant titres, exemples, code, tableaux, liens et images.

Story Initialization

Overview

Initialize a new story project with a structured markdown folder layout. Creates the story bible, registries, scene tracking, continuity state, glossary, worldbuilding folders, plot structure, and chapter tracker - all as cross-referenced markdown files with YAML frontmatter.

When to Use

  • Starting a new story, book, or fiction project
  • Setting up the folder structure for an existing story idea
  • NOT for adding to an existing story project (use the domain-specific skills instead)
  • NOT for a sequel, prequel, or companion to an existing book: use series-continuity, which links the projects and carries canon across
  • NOT for finding the idea itself: when the user has only a vague notion ("something about lighthouses"), several competing ideas, or no premise yet, run the premise-workshop skill first, then return here with the chosen premise, form, and genre
  • NOT for converting an existing manuscript or chapter drafts: run story import <source> --title '{Title}' instead, then build out the bible from the entity candidates it prints. Import does not accept --form, so afterwards set form and target-words in story.md by hand (see the form list and defaults below); without them story validate never checks length and story progress has no target

Workflow

  1. Ask for basic story information (if a premise-workshop session produced a premise, logline, genre, and form, reuse them rather than asking again):
  • Title
  • Form: novel, novella, novelette, short-story, flash, serial, picture-book, or chapter-book. Without --form, story init writes no form and no target-words, so if the user doesn't choose, pass --form novel
  • Genre and sub-genre
  • Brief synopsis (2-3 sentences)
  • Setting era/time period
  • Key themes (2-4)
  • POV style (first-person, third-person-limited, third-person-omniscient)
  • Tense (past, present, future, mixed)
  • Language the book is written in, as a BCP 47 tag: en, en-GB, fr, es-MX, pt-BR, de, ja, zh-Hans. Add a region only when it matters (spelling, punctuation, or market). If the user writes to you in a language other than English, confirm rather than assume. Default en

If the Story CLI is available, prefer using it to create the starter project, then inspect and refine the generated files as needed:

shell
story init '{Title}' --form '{form}' --genre '{genre}' --sub-genre '{sub-genre}' --setting-era '{era}' --pov '{pov-style}' --tense '{tense}' --synopsis '{synopsis}' --theme '{theme-1}' --theme '{theme-2}'

The values are the user's own words, so quote each one for the shell: wrap it in single quotes and write any single quote inside it as '\''. Never paste a value into double quotes, where $(...), backticks, and " still take effect.

--form records form in story.md and, when no target is given, sets a default target-words for the form (novel 80,000, novella 30,000, novelette 12,000, short story 5,000, flash 1,000, chapter book 10,000, picture book 500; serials get no book-level default). story validate then warns when target-words is outside the form's usual range. For short forms, point the user to references/short-story-form.md in the plot-structure skill.

Record the language straight after init. story init has no flag for it, so add language: {tag} to the story.md frontmatter by hand, with the exact tag the user gave, regional variants such as en-GB or en-AU included. Write it for English books too: it costs nothing, and a missing field only means en. The language is not just metadata: drafting, editing, and critique skills write and judge prose in it, story validate checks the tag, and builds declare it. For a book not in English, set dialect: unspecified in style-sheet.md (the British and American spelling pairs are English) and, before the first chapter, settle the dialogue punctuation with the voice-style skill.

A Chinese (zh) or Japanese (ja) book is counted in characters, not words: story wordcount, story progress, the registries, and the form check all measure characters, against target-characters. Because the language is added after init, --form will have written a target-words; replace it with target-characters for the form (Chinese: novel 200,000, novella 60,000, short story 10,000, flash 1,500; Japanese: novel 150,000, novella 80,000, short story 20,000, flash 4,000), or a number the user names. No source sets a novelette, picture-book, or chapter-book length in characters, so those forms get no default and no range check: ask the user for a target. story validate warns unused-target until you do. Only set count-unit: words or count-unit: characters when the user asks to count the other way. Then run story wordcount . --write and story validate ..

The other publishing metadata (isbn, publisher, publication-date, description, keywords, subjects, copyright, cover-alt, ai-disclosure) is optional and can wait until the book is ready to publish; the publishing skill fills it in. Do not ask for it at init.

The story id recorded in every registry is the kebab-case form of the title (--dir sets only the directory). A title with no ASCII letters or digits takes its story id from the folder name: a Cyrillic or Greek title is transliterated for the default folder (Война и мир goes in voyna-i-mir), and a title in a script with no transliteration table, such as Chinese, needs --dir with an ASCII folder name. The id is recomputed from the title on every run, so it changes whenever the title does: after editing title in story.md, run story reindex . to rewrite the id in every registry, plot/timeline.md, and continuity/state.md, or story validate fails with story must be <new-id>. For a folder-name id, a new title that gains any ASCII letter or digit (Война и мир — том 2) takes over the id (2), so prefer titles without them or reindex afterwards. init refuses an existing directory unless you pass --force; with --force it only creates missing starter files and never overwrites an existing story.md, registry, timeline, or continuity/state.md.

init also writes a .gitignore listing dist/ (build output), .story.lock, leftover .*.story-*.tmp and .story-*.tmp files, and OS and editor swap files, but only when the project has none. It never edits an existing .gitignore; if it prints note: .gitignore was kept and does not ignore dist/, tell the user and offer to add a dist/ line (or remove a !dist/... negation).

If story is not installed, use bun run story -- from the Story Skills repository checkout or the bundled fallback node ../story-maintenance/scripts/story.js with the same arguments, resolving the path relative to this skill folder:

shell
node ../story-maintenance/scripts/story.js init "{Title}"

If neither command is available, create the files manually using the steps below.

  1. Create the folder structure at the current working directory:
{story-title-kebab}/
├── .gitignore
├── story.md
├── style-sheet.md
├── characters/
│   └── _index.md
├── worldbuilding/
│   ├── _index.md
│   ├── locations/
│   ├── systems/
│   ├── factions/
│   └── artifacts/
├── plot/
│   ├── _index.md
│   ├── arcs/
│   └── timeline.md
├── scenes/
│   └── _index.md
├── continuity/
│   ├── state.md
│   ├── questions/
│   │   └── _index.md
│   ├── promises/
│   │   └── _index.md
│   └── clues/
│       └── _index.md
├── glossary/
│   ├── _index.md
│   └── terms/
└── chapters/
    └── _index.md

Write .gitignore only if the folder has none, with dist/, .story.lock, .*.story-*.tmp, .story-*.tmp, .DS_Store, Thumbs.db, *.swp, *.swo, and *~, one per line.

  1. Populate story.md with the story bible:
yaml
---
title: "{Title}"
schema-version: 2
genre: {genre}
sub-genre: {sub-genre}
setting-era: {era}
status: planning
form: {form}
themes:
  - {theme-1}
  - {theme-2}
premise: "{One-sentence controlling idea: value + cause, e.g. justice triumphs because the hero outsmarts the system}"
counter-premise: "{The antagonist's embodied argument}"
pov: {pov-style}
tense: {tense}
language: {language-tag}
---

Below the frontmatter, include sections:

  • Synopsis - the 2-3 sentence synopsis provided
  • Tone & Style - brief notes on the story's voice (derive from genre/themes)
  • Notes - empty section for the user to fill in
  1. Draft a working premise:

Fill in the premise: and counter-premise: fields as hypotheses, not commitments. The premise is a one-sentence controlling idea — value + cause, e.g. "justice triumphs because the hero outsmarts the system". The counter-premise is the antagonist's embodied argument: the story's opposing value, stated as the antagonist would believe it. Draft both early, alongside the synopsis, but do not force theme — a working premise is a guess to be audited, not a conclusion to be imposed. Revisit it during revision: the revision-continuity theme audit pass (see the theme-craft skill for the deep pass) checks whether the ending actually dramatizes the premise through consequence. If the draft argues a different premise, update the premise, not the draft.

  1. Populate each _index.md with an empty registry:

`characters/_index.md`:

markdown
---
type: character-registry
story: {story-title-kebab}
---

# Characters

## Registry

| Name | Role | Status | File |
|------|------|--------|------|
| *No characters yet* | | | |

## Relationship Map

*No relationships defined yet.*

## Family Trees

*No family trees defined yet.*

`worldbuilding/_index.md`:

markdown
---
type: world-registry
story: {story-title-kebab}
---

# Worldbuilding

## World Overview

*Describe the world at a high level here.*

## Locations

| Name | Type | Region | File |
|------|------|--------|------|
| *No locations yet* | | | |

## Systems

| Name | Type | File |
|------|------|------|
| *No systems yet* | | |

## Factions

| Name | Type | Status | File |
|------|------|--------|------|
| *No factions yet* | | | |

## Artifacts

| Name | Type | Status | File |
|------|------|--------|------|
| *No artifacts yet* | | | |

`plot/_index.md`:

markdown
---
type: plot-registry
story: {story-title-kebab}
structure: three-act
---

# Plot Structure

## Story Structure

**Model:** Three-Act Structure (adjust as needed)

## Arcs

| Name | Type | Status | File |
|------|------|--------|------|
| *No arcs yet* | | | |

## Theme Tracking

| Theme | Arcs | Chapters |
|-------|------|----------|
| *No themes tracked yet* | | |

`plot/timeline.md`:

markdown
---
type: timeline
story: {story-title-kebab}
---

# Story Timeline

| When | Event | Arc | Chapter |
|------|-------|-----|---------|
| *No events yet* | | | |

`chapters/_index.md`:

markdown
---
type: chapter-registry
story: {story-title-kebab}
---

# Chapters

## Registry

| # | Title | POV | Status | Word Count | File |
|---|-------|-----|--------|------------|------|
| *No chapters yet* | | | | | |

## Total Word Count: 0

Also create the v2 support files. Every registry and continuity/state.md needs story: {story-title-kebab} in addition to its type, or story validate reports a missing story field:

  • scenes/_index.md with frontmatter type: scene-registry and story: {story-title-kebab}
  • continuity/state.md with frontmatter type: continuity-state, story: {story-title-kebab}, current-chapter: 0, and empty character-state, object-state, and knowledge-state lists
  • continuity/questions/_index.md with frontmatter type: question-registry and story: {story-title-kebab}
  • continuity/promises/_index.md with frontmatter type: promise-registry and story: {story-title-kebab}
  • continuity/clues/_index.md with frontmatter type: clue-registry and story: {story-title-kebab}
  • glossary/_index.md with frontmatter type: glossary-registry and story: {story-title-kebab}
  • style-sheet.md (optional) with frontmatter type: style-sheet, dialect: unspecified, and empty preferred, watch-words, and allow-words lists, plus the body sections described in the voice-style skill

If manual initialization gets tedious, stop and ask the user to install or run the Story CLI rather than inventing a different project shape.

  1. Present a summary of what was created and suggest next steps:
  • "Workshop the premise" (triggers premise-workshop skill) if the premise is still a guess
  • "Add your first character" (triggers character-management skill)
  • "Start worldbuilding" (triggers worldbuilding skill)
  • "Define your plot structure" (triggers plot-structure skill)
  • "Set up the style sheet" (triggers voice-style skill) once there is a writing sample
  • "Run story next ." to show deterministic next actions
  1. When CLI access is available, run a final maintenance check:
shell
story validate {story-title-kebab}

If story is not installed, use bun run story -- from the Story Skills repository checkout or the bundled fallback node ../story-maintenance/scripts/story.js with the same arguments, resolving the path relative to this skill folder.

Reference Files

  • `references/title-logline.md` - Title craft (comps, hook phrasing, title as promise) and the logline recipe

Conventions

These conventions apply across ALL story skills:

  • Kebab-case filenames for all entity files (e.g., sera-voss.md, ashen-citadel.md)
  • YAML frontmatter on every file for structured metadata
  • Schema version - story.md frontmatter includes schema-version: 2
  • `_index.md` files are authoritative registries for each domain
  • `story.md` is the top-level bible read by all skills for context
  • `style-sheet.md` records voice and house style; skills that write or revise prose read it
  • Bidirectional cross-links - when referencing another entity, update both files
  • Character identifiers use the kebab-case filename without extension (e.g., sera-voss)
  • Death tracking - when a character dies on the page, set status: deceased and died-in: chapter-{NN} so story continuity can flag posthumous appearances
  • `mentions` vs `characters` - chapter and scene frontmatter lists characters present in-scene under characters; characters who are only referenced, remembered, recorded, or seen in flashback go under mentions
  • Scene identifiers use chapter-{NN}-scene-{NN} and live in scenes/
  • Continuity state lives in continuity/state.md, with open questions, promises, and clues tracked under continuity/questions/, continuity/promises/, and continuity/clues/
  • Markdown-first artifacts - create and edit story content directly in the target .md files. Do not create project-local build scripts, generator scripts, or bulk writer scripts (for example build-*.js) to emit story files.
  • CLI helpers stay external - the only JavaScript helper agents should run is the installed or bundled Story CLI (story, bun run story --, or story-maintenance/scripts/story.js) for deterministic maintenance. Do not copy it into the user's story project, and remove any unavoidable scratch helper before finishing.
du même dépôt

Autres Skills

Tous les Skills
danjdewhurst
Communauté

discovery-drafting

This skill should be used when the user asks about "pantsing", "discovery write", "write without an outline", "discovery draft", "write into the dark", "story kernel", "reconcile a chapter", "dead end", "drafting sprint", "writing cadence", or wants to draft a story by discovery with retrospective bible reconciliation. NOT for outline-first drafting, or mysteries and other clue-dependent genres where setup must come before payoff (use chapter-writing), or a reverse outline of an existing linear

installations
1
GitHub Stars
313
Mis à jour
14 oct.
danjdewhurst
Communauté

editorial-review

This skill should be used when the user asks for a "sensitivity reader", "authenticity reader", "cultural review", "is this portrayal okay", "real people in my novel", "defamation", "can I use song lyrics", "epigraph permission", "permissions", "quote permission", "fair use", "AI disclosure", "do I need to disclose AI", "send to my editor", "editorial round", "Word file for my editor", "editor review copy", "co-author", "collaborate on a book", "shared world", "back up my book", "does this echo

installations
1
GitHub Stars
313
Mis à jour
14 oct.
danjdewhurst
Communauté

story-maintenance

This skill should be used when the user asks to "validate", "reindex", "repair registries", "check links", "run the continuity, pacing, clue, voice, or name checks", "count words", "summarize a story project", "import an existing manuscript", "export a manuscript", "run a build", "generate a diagram", "record revision-pass status with story passes", "run the story CLI", or wants deterministic maintenance on a Story Skills markdown project. It runs the CLI and reads its output; NOT for judging a

installations
1
GitHub Stars
313
Mis à jour
14 oct.
danjdewhurst
Communauté

submission

This skill should be used when the user asks to "write a query letter", "query", "querying", "pitch", "blurb", "back cover copy", "jacket copy", "comp titles", "comparable titles", "synopsis for agents", "submit to agents", "submission tracker", "self-publishing description", "retailer description", "ready to query", "submission readiness check", "submit a short story", "magazine submission", "short-fiction markets", "simultaneous submission", "reprint rights", "order a short story collection",

installations
1
GitHub Stars
313
Mis à jour
14 oct.