story-maintenance

This skill should be used when the user asks to validate, reindex, repair registries, check links, check continuity, count words, summarize a story project, import an existing manuscript, export a manuscript, run the story CLI, or perform deterministic maintenance on a Story Skills markdown project.

By danjdewhurst · 411 installs

npx skills add danjdewhurst/story-skills --skill story-maintenance

Source repository · Upstream listing

Story Maintenance Overview Run deterministic maintenance for Story Skills projects. Use the CLI for structure validation, registry rebuilds, word counts, link checks, continuity checks, project reports, next action reports, pacing, clue, voice, and name checks, revision pass tracking, Mermaid diagrams, schema migration, entity helpers, manuscript import, and manuscript export and builds. The creative skills still own story decisions; this skill handles mechanical consistency. It runs a check and reports what it found, and fixes mechanical problems such as broken references and stale registries; deciding what a finding means for the story, and revising the story to fix it, belongs to revision continuity, plot structure, voice style, or genre craft. CLI Access Prefer the first available command: 1. story <command when the package bin is installed 2. node scripts/story.js <command bundled fallback, resolving scripts/story.js relative to this skill folder 3. node <checkout /bin/story.js <command only when the user names a Story Skills repository checkout or you are working in one, where <checkout is its path Write the script in forms 2 and 3 as an absolute path and run the command from the folder you would run story from, so . and other relative paths keep their meaning. Use Node, not Bun or the story script in the checkout's package.json : Bun would load that folder's bunfig.toml (which can run code) and .env , and a package script runs from the checkout's root, so . would be the checkout, not the story project. If none of these are available, perform the requested maintenance manually using the shared conventions in references/conventions.md . Run the installed or bundled CLI in place. Do not copy scripts/story.js into the user's story project, and do not create project local build scripts, generator scripts, or bulk writer scripts to generate story content. Story projects should remain markdown first, plus explicitly requested exports such as dist/manuscript.md . Commands Run commands from the story project root, or pass the story path explicitly. After any change to story files, run the maintenance block, in this order: reindex rebuilds the registries, wordcount write updates chapter counts (and reindexes again), and check then runs validate , links , and continuity over the settled files. check exits 1 only on errors; warnings print but do not fail it ( strict makes them fail). Every skill ends its edits with this block, followed by any skill specific checks such as story clues . or story pacing . . For the full command set, run story help (every command) or story <command help (its flags), or read references/commands.md , which gives an example of each. The check commands' detailed rules live in references/continuity checks.md , one section per command. Read the matching section before explaining or acting on a finding. The editing commands' detail ( add , rename , move , remove , split , merge , import ) lives in references/editing commands.md , and each build format's in references/builds.md . Use: check at the end of an editing session, after reindex and wordcount write , and before reporting the project clean: it runs validate , links , and continuity over one scan, lists each finding once, and exits 1 if any of them has an error ( strict also fails on warnings). Run the three separately when you want one check's findings validate after initialization and at the end of any multi file edit reindex after adding, removing, renaming, or moving any entity file. It rebuilds the character, location, system, faction, artifact, arc, chapter, scene, question, promise, clue, and glossary registries. story add reindexes itself; a hand written file does not wordcount write after writing or revising chapters links after changing character relationships, notable locations, arc participants, or chapter references continuity after drafting or revising a chapter, and whenever the user asks about contradictions, dead characters appearing, unfired setups, or stale state. It checks deaths and revivals, promise, question, and clue ordering, Chekhov gaps, casts and status: cut characters, continuity/state.md , prop custody, and clock and route plausibility; intentional exceptions go in continuity/exemptions.md . In a book whose chapters carry choices , read Branching books there too. Rules: references/continuity checks.md (continuity). compare after a revision pass, or when the user asks what changed since a draft: it needs exactly one of ref (a git ref), against (another copy of the project), or snapshot (a snapshot saved with story snapshot <name , for a project without git; list shows them), and anchor <label maps review copy paragraph labels to the current text. Rules: references/continuity checks.md (compare). snapshot restore <name only when the user asks to go back to a snapshot. It deletes every project markdown file the snapshot lacks, and removes ( rmdir ) the folders that leaves empty, so show them the dry run first and restore only with their approval. It saves the project as before restore <id <n before changing anything and reindexes after; pass on the undo command it prints, then run story validate . similarity when the user asks whether a passage echoes another text too closely; it is advisory, so report what it found, never a verdict. against takes a file, folder, or git ref, and snapshot a saved snapshot. Rules: references/continuity checks.md (similarity). progress when the user asks how far along the book is, whether they will make a deadline, or after a writing session: it reports words against story.md target words , days left to deadline and words a day needed, chapter target words , pace from progress.md , and, once a session is logged, today's words against daily target words , the current and longest streak (days outside writing days never break it), and the words of the last four weeks ( weeks <n , 1 to 52, for a longer or shorter history). For a serial with release every (days, or months such as 1 month ) and release start in story.md (or a chapter release date ), progress and next print the next episode due, and warn release undrafted when an episode due within release warn days days (default three), or past due, has no prose or no chapter yet; draft that episode first. Once story.md has status: complete , the cadence stops at the last chapter, so no episode past it is scheduled or warned about. log records today's total there ( date YYYY MM DD to backfill); only log when the user keeps a log (the project has a progress.md ) or asks for it pacing when the user asks about pacing, sagging middles, or chapter endings, and after drafting or restructuring chapters: per chapter words, scene outcomes, sequels, and hooks, with warnings for runs and outliers. Rules: references/continuity checks.md (pacing). clues for mysteries and any story with a clue ledger: a clue by chapter matrix with fair play warnings. Rules: references/continuity checks.md (clues). voices when dialogue voices may blur or during a line pass: per character dialogue fingerprints, with warnings for look alike voices and voice avoid / voice words misses. Rules: references/continuity checks.md (voices). list <kind when you need the files that match some frontmatter (the draft chapters, the scenes a character is in, the open questions) instead of reading every file: story list chapters where status=draft where pov=ilse path '<project ' . key=value also matches a list that contains the value, key!=value is the opposite, key means set, and '!key' unset; repeated filters must all match. story list query '<name ' path '<project ' runs a query saved in story.md queries (a name , a kind , and where: [status=draft, pov=ilse] ), and any where adds to its filters. Add json and read data.items[].file json when you need to read a result rather than show it to the user: validate , links , continuity , check , series , report , next , doctor , knowledge , context , list , progress , timeline , prose , pacing , clues , voices , similarity , names , mentions , compare , passes , diagram , synopsis , export , build , init , import , and the commands that change the project then print one JSON object on stdout ( apiVersion , command , ok , data , diagnostics , writes ). ok is true exactly when the exit code is 0; each diagnostic has severity , file , message , code (the finding's rule, such as stale word count , the name a story.md severity entry takes), and check (the check that raised it). report , next , and doctor always have ok: true , so read their data.checks or error diagnostics instead ( doctor fix is the exception: its ok is false while a check still has an error, and data.fix lists the repairs it made). writes lists the files a command wrote, such as the file build made, whose path is also data.outFile passes to track named revision passes in story.md revision passes : init writes the default ladder, start / done <pass update one, and no flag prints the checklist. Rules: references/continuity checks.md (passes). names before naming a character, place, faction, artifact, system, or glossary term: story names '<name ' ... reports exact clashes as errors and look alikes as warnings. Rules: references/continuity checks.md (names). mentions before removing an entity or renaming it without prose , since neither changes prose: story mentions <kind <id path '<project ' lists each place the chapter prose names it, with file and line, so you can update the text. With no entity it warns named not listed (prose names a character the chapter's pov , characters , and mentions leave out; continuity reports this too) and mention not named (a mentions entry the prose never names). Fix a true omission in the chapter frontmatter; when the chapter uses a name the bible lacks, add it to the entity's aliases ; ask the user before dropping a mention. Rules: references/continuity checks.md (mentions). diagram when the user wants a picture of the story's structure: story diagram <kind prints Mermaid source generated from frontmatter, or writes it with out <file ( path <project sets the project). Kinds: relationships (character graph, family edges styled distinctly: the family tree), locations (map graph from location routes , edges labelled with hours), timeline (dated scenes and chapters in story time order), clues (clue plant to reveal flow per chapter), and arcs (arcs to the chapters that advance them). GitHub, many editors, and mermaid.live render it; regenerate rather than hand edit timeline when the user asks what happens when, how flashbacks sit against the main line, whose POV dominates, or where a character drops out. It is read only; continuity owns clock errors. Rules: references/continuity checks.md (timeline). prose when the user asks for a prose check or before sharing a draft: advisory per chapter and manuscript wide prose metrics against style sheet.md . Rules: references/continuity checks.md (prose). series when story.md has follows or precedes links to other books; it orders the linked sequels and prequels by chronology and checks shared canon. Use init follows <path or init precedes <path to start a linked book, and see the series continuity skill for carrying canon across. Rules: references/continuity checks.md (series). import when the user has an existing manuscript or chapter drafts and wants a Story Skills project built from them. import force deletes every chapter NN.md in chapters/ first, so confirm with the user before forcing an import over drafted chapters. The im