Writing long-form fiction books with Spec Kit preset "Fiction Book Writing" #2211
adaumann
started this conversation in
Show and tell
Replies: 1 comment
-
|
Very exciting to see! |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Dear all,
I would like to present a community-preset I wrote for Spec Kit. It uses Spec Kit for fictional book writing, utilizing best practices story telling elements. Spec Kit helps you to build a long-form fiction book with a full plot structure, character voices, world buiding. It solves the most structural problems writing a long-form book. You can even plan for full book series and have single POV and multi POV elements.
At the end you can let AI write your prose or just make a outline to start writing on yourself.
The preset is now available as community-preset: specify init --preset fiction-book-writing
Documentation: https://github.com/adaumann/speckit-preset-fiction-book-writing/blob/main/fiction-book-writing/README.md
It would me nice to share your ideas, there already some addressed for the next version:
For this I'm think I need to write a extension.
Please let me know if you have further ideas...
Here are some technical details:
1. The Core Mapping: SDD --> Fiction Craft
The preset does not bolt creative writing onto Spec Kit. It remaps the full SDD vocabulary:
.specify/memory/constitution.md.specify/features/<story-slug>/spec.mdplan.mdtasks.mdchecklists/<ID>-checklist.mdKey insight for authors: every rule that governs when
speckit.implementmay proceed, whenspeckit.revisecan change something, and whatspeckit.continuityflags as CRITICAL derives from a single versioned document —constitution.md. The constitution is not advisory. It is a hard constraint enforced at command level.2. Architecture Overview: The Gate System
The pipeline enforces two classes of gates that advanced users need to understand before pushing into large projects:
2a. Checklist Gate (Quality)
speckit.implementscanschecklists/before every drafting run. If any checklist file contains incomplete items (- [ ]), it stops with a table showing all incomplete gates. The user must explicitly say "proceed despite incomplete checklists" to override. This mirrors a failing CI pipeline — you cannot merge into draft without passing quality gates.2b. Outline Gate (Authorial Control)
For each chapter,
speckit.implementchecks for a matching file atoutlines/<CHAPTER_ID>_<Title>-outline.mdand reads itsstatusfield:This gives authors a per-scene switch between AI-written and author-written prose without forking the workflow.
3. The Constitution: Versioned Governing Authority
constitution.mdis semantically versioned and governs every downstream command.Version increment rules
Why this matters
Every drafted chapter embeds a
constitution_versionin its YAML frontmatter. Whenspeckit.continuityruns, it cross-references each draft's version against the current constitution and flags any draft with a stale version asSTALE CONSTITUTION. It then reads the## Change Logand runs targeted violation checks on those specific passages — not a full re-read.Sync Impact Report
Every constitution update writes an HTML comment at the top of the file:
This is the equivalent of a breaking-change migration note in a software library.
4. The Planning Pipeline: Strict Dependency Chain
Each step is write-blocked by the previous one's output. The key non-obvious aspects:
speckit.clarify — the most skipped, the most important
Scans
spec.mdfor[NEEDS CLARIFICATION]markers across:It writes resolutions directly back into
spec.md. Ambiguities not resolved here become structural holes inplan.mdand orphan tasks intasks.md.speckit.tasks — blocked tasks as first-class citizens
tasks.mdis generated with[BLOCKED]markers on any task whose prerequisite supporting document (characters/[name].md,world-building.md,research.md) does not yet exist. Tasks remain blocked until the author creates those documents. This prevents drafting scenes where character voice or world rules have not been committed.speckit.outline — the bridge between structure and prose
Each outline file is the last author checkpoint before AI prose is generated. It contains:
locations.mdLOC-blocksThe outline file is the author's editorial authority over the AI draft.
5. The POV Architecture Layer
speckit.povis a full sub-system sitting betweenspeckit.planandspeckit.tasks. It is optional for single-POV and mandatory for multi-POV projects.POV Modes Supported (9)
Alternating · Dual · Braided · Ensemble · Mosaic · Frame + Embedded · Chorus · First-Person Multiple · Single
What pov-structure.md contains
Sub-commands for advanced audit work
Any free-text question to
speckit.povis answered without modifying files — useful for design-time decisions:6. Pre-Draft vs. Post-Draft Analysis: Two Distinct Commands
This is the most architecturally important distinction in the preset. They are not interchangeable.
speckit.analyze — pre-draft, strictly read-only
Runs after
speckit.tasks, beforespeckit.implement. Verifies structural consistency acrossspec.md → plan.md → tasks.md:Does not read draft files. Structural problems caught here cost nothing to fix. The same problem caught post-draft costs a full rewrite.
speckit.continuity — post-draft, strictly read-only
Runs after
speckit.implement. Verifies drafted prose against the story bible and supporting documents:locations.mdsays a location changed at beat X, all drafts set there after X must reflect that change7. The Quality Loop: Precision, Not Improvement
The three commands forming the per-chapter quality loop enforce a surgical scope model — each tool does exactly one thing and refuses to do the others'.
speckit.checklist — weighted scoring
Five sections, each scored 1–10, with weights producing a composite score. Gate rules:
speckit.revise — surgical scope enforcement
Core operating constraint: only rewrites prose that directly causes a flagged failure. Passing content is untouched. If a revision cannot fix the failure without violating the story bible, it stops and reports the conflict rather than silently violating the bible.
The failure scope is fixed at load time and cannot expand during revision. This is the equivalent of a targeted hotfix that must not change unrelated behaviour.
Produces a versioned output file (
_v2.md,_v3.md) plus a diff summary.speckit.polish — linter, not editor
Polish is a surface-level linter. It applies rules mechanically:
she noticed,he felt,she saw,he heard)Polish must never be used to fix story bible violations, triple purpose failures, or structural issues. That is
speckit.revise's domain. The tool boundary is enforced by the command prompts themselves.8. Style Modes: Two Architecturally Different Paths
author-sample
Prompts for 500–2,000 words of prose. Extracts 8 voice markers into the constitution:
All downstream drafting targets these extracted markers. The Anti-AI filter is populated from the sample, not from a generic wordlist.
humanized-ai: Universal Principles + Prose Profiles
Seven universal principles that cannot be disabled in any profile:
she noticed,he felt,she saw,he heardFive Prose Profiles tune how those principles are weighted — they do not relax them:
commercialliterarythrilleratmosphericdark-realistEach profile also adds its own set of Anti-AI filter entries beyond the universal list.
9. Advanced Document Layer
These documents are optional but unlock deeper automated checking in
speckit.analyzeandspeckit.continuity:subplots.md
Resolved: Norow → CRITICAL inspeckit.analyzelocations.md
speckit.continuityenforces that all subsequent scenes reflect that state change.glossary.md
speckit.continuityandspeckit.polishappend violations automatically with date, chapter ID, and correct formseries-bible.md
speckit.analyzeagainst character profiles10. Extension Hook System
The preset checks for
.specify/extensions.ymlat the start of every command. The hook schema:Hook types:
This allows teams or multi-author projects to enforce custom pre-flight rules project-by-project without modifying the preset commands themselves.
11. The Export Pipeline
speckit.exportcalls a Python/pandoc script (scripts/python/export.py) that:draft/for all chapter files_polished.md→ highest_vN.md→ base draftchapter_idfrom YAML frontmatter (not filename sort)Supported output formats:
12. Demo Walkthrough: What to Show
The most effective demonstration sequence for an advanced audience shows the constraint system in action, not just happy-path generation.
Demo 1 — The constitution version mechanism
speckit.continuity— show the STALE CONSTITUTION flag and targeted violation searchDemo 2 — The gate system
speckit.implement— show it stopping with the gate tableDemo 3 — The outline gate with per-scene authorial control
speckit.implement— show APPROVED drafted, SKIP passed through, DRAFT blockedDemo 4 — Surgical revision vs. polish
speckit.revise A1.101 "CHR-002 STB-004"— show only the failing passage changed in the diffspeckit.polish— show surface-level mechanical changes only, structural content unchangedDemo 5 — speckit.analyze catching series constraints
speckit.analyze— show the CRITICAL series constraint violation before a single scene is drafted13. Key Design Principles to Highlight
One governing authority: everything derives from
constitution.md. No command silently overrides it — conflicts are surfaced as CRITICAL errors, not hidden.Two read-only analysis commands, strictly separated:
speckit.analyze(structural, pre-draft) andspeckit.continuity(prose, post-draft). Neither modifies files. Neither substitutes for the other.Surgical revision model:
speckit.revisehas a fixed scope set at load time. Scope creep is architecturally prohibited. This is the same isolation principle that makes a good unit test trustworthy.Version-tracked prose: every drafted file carries a
constitution_versionheader, enabling precise change-impact analysis without re-reading every chapter.Progressive document depth: the template layer (
subplots.md,locations.md,glossary.md,series-bible.md) is optional but unlocks deeper automated checking. Projects start simple and grow into full constraint coverage as the story grows.Beta Was this translation helpful? Give feedback.
All reactions