Story Initialization
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.
How to use it
Claude Code
- Run the line below. It pulls the whole folder into
~/.claude/skills/story-init, including the files SKILL.md points to. - Describe your job in plain words. Claude Code follows the skill from there.
npx degit danjdewhurst/story-skills/skills/story-init#main ~/.claude/skills/story-initFor one project only, change the path to .claude/skills/story-init. This skill also uses story.md, style-sheet.md, _index.md, timeline.md, state.md, sera-voss.md — copying SKILL.md alone won't be enough. See the folder on GitHub.
Claude (web or desktop app)
- On this page open ⋯ → Download .md.
- Save it as SKILL.md in a folder, zip the folder, then Customize → Skills → + → Create skill → Upload a skill.
- Pick the file and Save. Claude shows the name and description and runs a security scan.
- Check the skill is switched on.
- Start a new chat and describe your job in plain words. The AI follows the skill from there.
ChatGPT or another app
- ChatGPT: make a Project and paste it into Instructions.
- Neither? Paste it at the top of a new chat — it works for that chat.
Not working?
- Check which app you pasted it into — the steps above name the right one.
- Some skills need the paid tier of Claude or ChatGPT.
Paste into Claude, ChatGPT or Cursor.
Source of Story Initialization
Show the full text283 lines
| name | description |
|---|---|
| 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. |
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 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
Workflow
- Ask for basic story information:
- Title
- 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)
If the Story CLI is available, prefer using it to create the starter project, then inspect and refine the generated files as needed:
story init "{Title}" --genre "{genre}" --sub-genre "{sub-genre}" --setting-era "{era}" --pov "{pov-style}" --tense "{tense}" --synopsis "{synopsis}" --theme "{theme-1}" --theme "{theme-2}"
The title must contain ASCII letters or digits, because the story id recorded in every registry is derived from it (--dir sets only the directory). 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.
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:
node ../story-maintenance/scripts/story.js init "{Title}"
If neither command is available, create the files manually using the steps below.
- Create the folder structure at the current working directory:
{story-title-kebab}/
├── 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
- Populate
story.mdwith the story bible:
---
title: "{Title}"
schema-version: 2
genre: {genre}
sub-genre: {sub-genre}
setting-era: {era}
status: planning
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}
---
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
- 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.
- Populate each
_index.mdwith an empty registry:
characters/_index.md:
---
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:
---
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:
---
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:
---
type: timeline
story: {story-title-kebab}
---
# Story Timeline
| When | Event | Arc | Chapter |
|------|-------|-----|---------|
| *No events yet* | | | |
chapters/_index.md:
---
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.mdwith frontmattertype: scene-registryandstory: {story-title-kebab}continuity/state.mdwith frontmattertype: continuity-state,story: {story-title-kebab},current-chapter: 0, and emptycharacter-state,object-state, andknowledge-statelistscontinuity/questions/_index.mdwith frontmattertype: question-registryandstory: {story-title-kebab}continuity/promises/_index.mdwith frontmattertype: promise-registryandstory: {story-title-kebab}continuity/clues/_index.mdwith frontmattertype: clue-registryandstory: {story-title-kebab}glossary/_index.mdwith frontmattertype: glossary-registryandstory: {story-title-kebab}style-sheet.md(optional) with frontmattertype: style-sheet,dialect: unspecified, and emptypreferred,watch-words, andallow-wordslists, plus the body sections described in thevoice-styleskill
If manual initialization gets tedious, stop and ask the user to install or run the Story CLI rather than inventing a different project shape.
Present a summary of what was created and suggest next steps:
- "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
When CLI access is available, run a final maintenance check:
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.mdfrontmatter includesschema-version: 2 _index.mdfiles are authoritative registries for each domainstory.mdis the top-level bible read by all skills for contextstyle-sheet.mdrecords 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: deceasedanddied-in: chapter-{NN}sostory continuitycan flag posthumous appearances mentionsvscharacters- chapter and scene frontmatter lists characters present in-scene undercharacters; characters who are only referenced, remembered, recorded, or seen in flashback go undermentions- Scene identifiers use
chapter-{NN}-scene-{NN}and live inscenes/ - Continuity state lives in
continuity/state.md, with open questions, promises, and clues tracked undercontinuity/questions/,continuity/promises/, andcontinuity/clues/ - Markdown-first artifacts - create and edit story content directly in the target
.mdfiles. Do not create project-local build scripts, generator scripts, or bulk writer scripts (for examplebuild-*.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 --, orstory-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.
| 1 | |
| 2 | name story-init |
| 3 | description 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. |
| 4 | |
| 5 | |
| 6 | # Story Initialization |
| 7 | |
| 8 | ## Overview |
| 9 | |
| 10 | 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. |
| 11 | |
| 12 | ## When to Use |
| 13 | |
| 14 | Starting a new story, book, or fiction project |
| 15 | Setting up the folder structure for an existing story idea |
| 16 | NOT for adding to an existing story project (use the domain-specific skills instead) |
| 17 | NOT for a sequel, prequel, or companion to an existing book: use `series-continuity`, which links the projects and carries canon across |
| 18 | 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 |
| 19 | |
| 20 | ## Workflow |
| 21 | |
| 22 | Ask for basic story information: |
| 23 | Title |
| 24 | Genre and sub-genre |
| 25 | Brief synopsis (2-3 sentences) |
| 26 | Setting era/time period |
| 27 | Key themes (2-4) |
| 28 | POV style (first-person, third-person-limited, third-person-omniscient) |
| 29 | Tense (past, present, future, mixed) |
| 30 | |
| 31 | If the Story CLI is available, prefer using it to create the starter project, then inspect and refine the generated files as needed: |
| 32 | |
| 33 | |
| 34 | story init "{Title}" --genre "{genre}" --sub-genre "{sub-genre}" --setting-era "{era}" --pov "{pov-style}" --tense "{tense}" --synopsis "{synopsis}" --theme "{theme-1}" --theme "{theme-2}" |
| 35 | |
| 36 | |
| 37 | The title must contain ASCII letters or digits, because the story id recorded in every registry is derived from it (`--dir` sets only the directory). `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`. |
| 38 | |
| 39 | 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: |
| 40 | |
| 41 | |
| 42 | node ../story-maintenance/scripts/story.js init "{Title}" |
| 43 | |
| 44 | |
| 45 | If neither command is available, create the files manually using the steps below. |
| 46 | |
| 47 | Create the folder structure at the current working directory: |
| 48 | |
| 49 | |
| 50 | {story-title-kebab}/ |
| 51 | ├── story.md |
| 52 | ├── style-sheet.md |
| 53 | ├── characters/ |
| 54 | │ └── _index.md |
| 55 | ├── worldbuilding/ |
| 56 | │ ├── _index.md |
| 57 | │ ├── locations/ |
| 58 | │ ├── systems/ |
| 59 | │ ├── factions/ |
| 60 | │ └── artifacts/ |
| 61 | ├── plot/ |
| 62 | │ ├── _index.md |
| 63 | │ ├── arcs/ |
| 64 | │ └── timeline.md |
| 65 | ├── scenes/ |
| 66 | │ └── _index.md |
| 67 | ├── continuity/ |
| 68 | │ ├── state.md |
| 69 | │ ├── questions/ |
| 70 | │ │ └── _index.md |
| 71 | │ ├── promises/ |
| 72 | │ │ └── _index.md |
| 73 | │ └── clues/ |
| 74 | │ └── _index.md |
| 75 | ├── glossary/ |
| 76 | │ ├── _index.md |
| 77 | │ └── terms/ |
| 78 | └── chapters/ |
| 79 | └── _index.md |
| 80 | |
| 81 | |
| 82 | Populate `story.md` with the story bible: |
| 83 | |
| 84 | |
| 85 | |
| 86 | title: "{Title}" |
| 87 | schema-version: 2 |
| 88 | genre: {genre} |
| 89 | sub-genre: {sub-genre} |
| 90 | setting-era: {era} |
| 91 | status: planning |
| 92 | themes: |
| 93 | - {theme-1} |
| 94 | - {theme-2} |
| 95 | premise: "{One-sentence controlling idea: value + cause, e.g. justice triumphs because the hero outsmarts the system}" |
| 96 | counter-premise: "{The antagonist's embodied argument}" |
| 97 | pov: {pov-style} |
| 98 | tense: {tense} |
| 99 | |
| 100 | |
| 101 | |
| 102 | Below the frontmatter, include sections: |
| 103 | **Synopsis** - the 2-3 sentence synopsis provided |
| 104 | **Tone & Style** - brief notes on the story's voice (derive from genre/themes) |
| 105 | **Notes** - empty section for the user to fill in |
| 106 | |
| 107 | Draft a working premise: |
| 108 | |
| 109 | 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. |
| 110 | |
| 111 | Populate each `_index.md` with an empty registry: |
| 112 | |
| 113 | **`characters/_index.md`:** |
| 114 | |
| 115 | |
| 116 | type: character-registry |
| 117 | story: {story-title-kebab} |
| 118 | |
| 119 | |
| 120 | # Characters |
| 121 | |
| 122 | ## Registry |
| 123 | |
| 124 | | Name | Role | Status | File | |
| 125 | |------|------|--------|------| |
| 126 | | *No characters yet* | | | | |
| 127 | |
| 128 | ## Relationship Map |
| 129 | |
| 130 | *No relationships defined yet.* |
| 131 | |
| 132 | ## Family Trees |
| 133 | |
| 134 | *No family trees defined yet.* |
| 135 | |
| 136 | |
| 137 | **`worldbuilding/_index.md`:** |
| 138 | |
| 139 | |
| 140 | type: world-registry |
| 141 | story: {story-title-kebab} |
| 142 | |
| 143 | |
| 144 | # Worldbuilding |
| 145 | |
| 146 | ## World Overview |
| 147 | |
| 148 | *Describe the world at a high level here.* |
| 149 | |
| 150 | ## Locations |
| 151 | |
| 152 | | Name | Type | Region | File | |
| 153 | |------|------|--------|------| |
| 154 | | *No locations yet* | | | | |
| 155 | |
| 156 | ## Systems |
| 157 | |
| 158 | | Name | Type | File | |
| 159 | |------|------|------| |
| 160 | | *No systems yet* | | | |
| 161 | |
| 162 | ## Factions |
| 163 | |
| 164 | | Name | Type | Status | File | |
| 165 | |------|------|--------|------| |
| 166 | | *No factions yet* | | | | |
| 167 | |
| 168 | ## Artifacts |
| 169 | |
| 170 | | Name | Type | Status | File | |
| 171 | |------|------|--------|------| |
| 172 | | *No artifacts yet* | | | | |
| 173 | |
| 174 | |
| 175 | **`plot/_index.md`:** |
| 176 | |
| 177 | |
| 178 | type: plot-registry |
| 179 | story: {story-title-kebab} |
| 180 | structure: three-act |
| 181 | |
| 182 | |
| 183 | # Plot Structure |
| 184 | |
| 185 | ## Story Structure |
| 186 | |
| 187 | **Model:** Three-Act Structure (adjust as needed) |
| 188 | |
| 189 | ## Arcs |
| 190 | |
| 191 | | Name | Type | Status | File | |
| 192 | |------|------|--------|------| |
| 193 | | *No arcs yet* | | | | |
| 194 | |
| 195 | ## Theme Tracking |
| 196 | |
| 197 | | Theme | Arcs | Chapters | |
| 198 | |-------|------|----------| |
| 199 | | *No themes tracked yet* | | | |
| 200 | |
| 201 | |
| 202 | **`plot/timeline.md`:** |
| 203 | |
| 204 | |
| 205 | type: timeline |
| 206 | story: {story-title-kebab} |
| 207 | |
| 208 | |
| 209 | # Story Timeline |
| 210 | |
| 211 | | When | Event | Arc | Chapter | |
| 212 | |------|-------|-----|---------| |
| 213 | | *No events yet* | | | | |
| 214 | |
| 215 | |
| 216 | **`chapters/_index.md`:** |
| 217 | |
| 218 | |
| 219 | type: chapter-registry |
| 220 | story: {story-title-kebab} |
| 221 | |
| 222 | |
| 223 | # Chapters |
| 224 | |
| 225 | ## Registry |
| 226 | |
| 227 | | # | Title | POV | Status | Word Count | File | |
| 228 | |---|-------|-----|--------|------------|------| |
| 229 | | *No chapters yet* | | | | | | |
| 230 | |
| 231 | ## Total Word Count: 0 |
| 232 | |
| 233 | |
| 234 | 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: |
| 235 | |
| 236 | `scenes/_index.md` with frontmatter `type: scene-registry` and `story: {story-title-kebab}` |
| 237 | `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 |
| 238 | `continuity/questions/_index.md` with frontmatter `type: question-registry` and `story: {story-title-kebab}` |
| 239 | `continuity/promises/_index.md` with frontmatter `type: promise-registry` and `story: {story-title-kebab}` |
| 240 | `continuity/clues/_index.md` with frontmatter `type: clue-registry` and `story: {story-title-kebab}` |
| 241 | `glossary/_index.md` with frontmatter `type: glossary-registry` and `story: {story-title-kebab}` |
| 242 | `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 |
| 243 | |
| 244 | If manual initialization gets tedious, stop and ask the user to install or run the Story CLI rather than inventing a different project shape. |
| 245 | |
| 246 | Present a summary of what was created and suggest next steps: |
| 247 | "Add your first character" (triggers character-management skill) |
| 248 | "Start worldbuilding" (triggers worldbuilding skill) |
| 249 | "Define your plot structure" (triggers plot-structure skill) |
| 250 | "Set up the style sheet" (triggers voice-style skill) once there is a writing sample |
| 251 | "Run `story next .`" to show deterministic next actions |
| 252 | |
| 253 | When CLI access is available, run a final maintenance check: |
| 254 | |
| 255 | |
| 256 | story validate {story-title-kebab} |
| 257 | |
| 258 | |
| 259 | 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. |
| 260 | |
| 261 | ## Reference Files |
| 262 | |
| 263 | **`references/title-logline.md`** - Title craft (comps, hook phrasing, title as promise) and the logline recipe |
| 264 | |
| 265 | ## Conventions |
| 266 | |
| 267 | These conventions apply across ALL story skills: |
| 268 | |
| 269 | **Kebab-case filenames** for all entity files (e.g., `sera-voss.md`, `ashen-citadel.md`) |
| 270 | **YAML frontmatter** on every file for structured metadata |
| 271 | **Schema version** - `story.md` frontmatter includes `schema-version: 2` |
| 272 | **`_index.md`** files are authoritative registries for each domain |
| 273 | **`story.md`** is the top-level bible read by all skills for context |
| 274 | **`style-sheet.md`** records voice and house style; skills that write or revise prose read it |
| 275 | **Bidirectional cross-links** - when referencing another entity, update both files |
| 276 | **Character identifiers** use the kebab-case filename without extension (e.g., `sera-voss`) |
| 277 | **Death tracking** - when a character dies on the page, set `status: deceased` and `died-in: chapter-{NN}` so `story continuity` can flag posthumous appearances |
| 278 | **`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` |
| 279 | **Scene identifiers** use `chapter-{NN}-scene-{NN}` and live in `scenes/` |
| 280 | **Continuity state** lives in `continuity/state.md`, with open questions, promises, and clues tracked under `continuity/questions/`, `continuity/promises/`, and `continuity/clues/` |
| 281 | **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. |
| 282 | **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. |
| 283 |
Discussion
Browse more free Claude skills.