Diese Dokumentation bezieht sich immer auf die aktuellste veröffentlichte Version. Für ältere Versionen siehe das CHANGELOG.
StoryForge ist ein spezialisiertes Claude Code Plugin für AI-unterstütztes Buchschreiben. Es ist kein generischer Schreibassistent — es ist ein strukturierter Workflow mit Quality Gates, Autorenprofilen und einem Prosa-Enforcement-System, das verhindert, dass fertige Bücher nach AI klingen.
Zielgruppe:
Was StoryForge nicht ist:
| Feature | Generischer AI-Assistent | StoryForge |
|---|---|---|
| Autorenstimme | Verloren im ersten Prompt | Durchgesetzt via PostToolUse-Hook nach jedem Write |
| Plot-Konsistenz | Auf Gedächtnis angewiesen | Travel Matrix + Canon Log + Timeline + Promises-Register |
| Plot-Holes | Nicht erkannt | Deterministischer + LLM-basierter analyze_plot_logic Scan |
| Genres | Generisch | 14 konfigurierbare Genres mit Conventions, Tropes, Expected Beats |
| Memoir | Nicht unterstützt | First-class: Einwilligungs-Tracking, Verleumdungs-Scan, Strukturtypen |
| Quality Gate | Keines | 28-Punkte-Kapitelreview (inkl. 5 Plot-Logic-Checks), Manuscript-Checker (16 Kategorien), Continuity-Checker |
| Writing Mode | Keiner | Outliner, Plantser, Discovery — jeder mit eigenem Workflow |
| Prosa-Enforcement | Keines | Exit-2-Hook bei Backtick-Mustern aus CLAUDE.md und Author-Vocab |
| Author-Evolution | Keine | 3-Tier-Hierarchie (Buch → Autor → Global) via harvest-author-rules |
StoryForge ist so konfiguriert, dass es Nutzerkorrekturen an der Prosa nicht blind übernimmt. Wenn du sagst "dieser Satz ist falsch", zitiert das Plugin die Textstelle, prüft den Kontext — und widerspricht, wenn du falsch liegst. Hintergrund: feine Nuancen in englischsprachiger Prosa werden von Usern oft übersehen.
Similes und Metaphern werden aktiv gezählt und auf Redundanz geprüft — sowohl innerhalb einer Szene als auch kapitelübergreifend. Das verhindert den klassischen AI-Fehlermodus "jeder Sonnenuntergang ist wie flüssiges Gold".
Die wichtigste architektonische Entscheidung in StoryForge: Validierung lebt nicht im Skill-Prompt, sondern im Toolchain-Hook. Skill-Prompts sind Wunschlisten, die das Modell unter Context-Druck herunterpriorisiert. Ein Hook mit exit 2 ist Gesetz — der Write-Output wird abgelehnt, das Modell bekommt die Fehler in stderr zurück und muss sie fixen, bevor weitergeschrieben werden kann.
Strukturierte Data Briefs ergänzen die Hook-basierte Validierung: Statt Prosa-Prereq-Listen liefert ein MCP-Tool strukturiertes JSON, das das Modell direkt konsumiert. Data > Instructions für Modelle unter Context-Druck.
Jeder Autor hat ein Profil unter ~/.storyforge/authors/{slug}/:
profile.md — Ton, POV, Satzstruktur, Stimme, Tense, Writing Discoveries (Recurring Tics / Style Principles / Don'ts)vocabulary.md — Preferred Words, Banned Words, Signature Phrases, Writing ModeDas Profil ist die Quelle der Wahrheit für alle Prosa-Entscheidungen. Der PostToolUse-Hook liest es nach jedem Write/Edit und blockt Prosa, die gegen die deklarierten ### Absolutely Forbidden-Phrasen verstößt.
Author Evolution: Findings aus einem fertigen Buch können via /storyforge:harvest-author-rules in das Autorenprofil promoted werden. Wenn dasselbe Finding in einem späteren Buch wieder auftaucht, wird ein zweiter Origin-Tag angehängt — kein Duplikat. Details: Author Evolution.
Eingebaut: Fantasy, Sci-Fi, Mystery, Thriller, Horror, Romance, Contemporary, Historical, Literary Fiction, YA, Children's, Dark Fantasy, Paranormal Romance, LGBTQ.
Eigene Genres via /storyforge:genre-creator — nimmt mehrere Base-Genres und definiert Conventions, Tropes, Expected Beats.
Jedes Genre hat ein eigenes README.md mit:
Genre-Mixing: Ein Buch kann mehrere Genres deklarieren. Jedes Genre-README wird in den Chapter-Writing-Brief geladen. Widersprüchliche Conventions werden vom Autor priorisiert.
| Mode | Für wen | Workflow |
|---|---|---|
| Outliner | Planer | Vollständiges Plot-Outline vor dem ersten Kapitel |
| Plantser | Hybrid | Minimum Viable Outline, Rolling Planner für Details |
| Discovery Writer | Pantser | Scene-by-scene ohne Outline — Timeline/Canon nachträglich aufgebaut |
Alle drei Modi nutzen dieselben Quality Gates. Discovery Writer nutzt continuity-checker zur nachträglichen Rekonstruktion.
8 eingebaute Methoden:
| Methode | Für wen geeignet |
|---------|-----------------|
| 3-Act Structure | Universell, Einstieg |
| Hero's Journey | Abenteuer, Charakter-Transformation |
| Save the Cat | Kommerzielle Fiction, Film-inspiriert |
| Snowflake Method | Outliner mit viel Planungs-Lust |
| Freytag's Pyramid | Klassisch, literarisch |
| Seven-Point Story | Punktbasiert, gut für Outliner |
| Story Circle | Dan Harmon, gut für Discovery |
| Kishōtenketsu | Literarisch, East-Asian-inspiriert, konfliktarme Plots |
Aufgeteilt in Kategorien: Core, Author, Creative, Writing, Research, Production, Series, Utility, Memoir. Siehe Skills-Detailseite.
Neuere Ergänzungen: /storyforge:backfill-promises (Promises in alten Kapitel-Drafts nachfüllen), /storyforge:harvest-author-rules (Buch-Findings ins Autorenprofil promoten), /storyforge:author-check (positive Style-Compliance, Gegenstück zum manuscript-checker), /storyforge:backfill-style-principles (Stilmuster-Extraktion aus bestehenden Analyse-Dateien), die Memoir-Varianten /storyforge:chapter-reviewer-memoir, /storyforge:chapter-writer-memoir, /storyforge:character-creator-memoir, /storyforge:manuscript-checker-memoir (Split aus manuscript-checker — Memoir-Passes wie Anonymisierungs-Lecks, Tidy-Lesson-Endings und Zeitlinien-Ambiguität leben jetzt in der eigenen Variante, manuscript-checker selbst ist Fiction-only + universelle Passes), /storyforge:chapter-fixer (chirurgische, zeilenverankerte Fixes für bereits gedraftete Kapitel aus Reviewer-/Manuscript-Checker-Findings, ohne den append-only chapter-writer erneut zu durchlaufen), /storyforge:cover-typography-mockup (HTML-Mockup-Artifact zum Kompositieren von Titel/Autor-Typografie auf ein bereits generiertes, textfreies Cover), die Utility-Skills /storyforge:rules-audit, /storyforge:promote-rule, /storyforge:report-issue, /storyforge:unblock, das DB-Migrationstool /storyforge:migrate-source-genres, sowie /storyforge:delete-author zum sicheren Entfernen eines Autorenprofils (Buch-Referenz-Check, explizite Bestätigung).
Series Lifecycle: Multi-Book-Series-Workflow — Charakter-Endstand am Buch-Ende harvesten, recurring Chars ins nächste Buch auto-kopieren, neues Buch aus Series-Tracker-Plan bootstrappen, Series-Evolution-Kontext im Chapter-Writing-Brief surfacen. Fünf neue MCP-Tools, zwei neue Skills (harvest-character-evolution, bootstrap-book-from-series), ein erweiterter Skill (new-book mit --copy-recurring-from=).
book_category: memoirpeople/-Verzeichnismemoir-ethics-checker, emotional-truth-prompt, plot-architect-memoirchapter-reviewer-memoir, manuscript-checker-memoir37+ Referenzdokumente (74.000+ Wörter) eingebaut:
reference/craft/plot-logic.md)reference/author-evolution.md)reference/craft/anti-ai-patterns.md ist auch die kanonische Quelle für die ~50 globalen AI-Tells, die der Hook als Warn-Severity surfaced.
StoryForge unterstützt Memoir als gleichwertige Buchkategorie neben Fiction. Setze book_category: memoir im Frontmatter deines Buch-README oder in der Config.
| Feature | Fiction | Memoir |
|---|---|---|
| Plot-Strukturtypen | 8 Fiction-Methoden via plot-architect |
4 Memoir-Typen via plot-architect-memoir |
| Figuren | characters/ — fiktive Profile |
people/ — reale Personen mit consent_status |
| Craft-Referenzen | Fiction-Craft-Docs | Memoir-Craft-Docs (scene-vs-summary, emotional-truth, etc.) |
| Ethics Gate | Keines | memoir-ethics-checker Pflicht vor Export |
| Emotional Truth | Nicht nötig | emotional-truth-prompt vor chapter-reviewer |
| Voice Checker | Fiction AI-Tells | Memoir AI-Tells inklusive |
| Plot-Logic-Scan | 6 Kategorien aktiv | 4 Kategorien aktiv (chekhov_gun + premise_violation skipped) |
Der character-creator Skill im Memoir-Modus erstellt Personenprofile im people/-Verzeichnis statt fiktiver Charakter-Dateien. Jedes Profil hat ein consent_status-Feld (granted / pending / not-asked / refused / not-required).
book-conceptualizer (memoir mode)
↓
plot-architect-memoir
↓
character-creator (→ people/ statt characters/)
↓
chapter-writer (→ lädt memoir-craft-docs)
↓
emotional-truth-prompt (nur Memoir, vor chapter-reviewer)
↓
chapter-reviewer
↓
sensitivity-reader (optional) → memoir-ethics-checker → voice-checker → export-engineer
people/ und scannt Kapitel-Drafts auf 4 Verleumdungsrisiko-Muster (D1–D4). Verdicts: EXPORT CLEAR / RESOLVE BEFORE EXPORT / EXPORT BLOCKED.Detailseite: Memoir-Unterstützung
Detailvergleich auf der Writing Modes Seite.
| Mode | Stärke | Schwäche |
|---|---|---|
| Outliner | Maximale Kontrolle, wenig Überraschungen | Kann kreative Spontaneität einschränken |
| Plantser | Balance zwischen Struktur und Freiheit | Braucht Disziplin beim Rolling Planner |
| Discovery | Maximale kreative Freiheit, organischer Plot | Mehr Kontinuitäts-Arbeit (continuity-checker) |
| Komponente | Version | Zweck |
|---|---|---|
| Claude Code | Latest | Plugin-Host |
| Betriebssystem | Linux, macOS, Windows | Cross-Platform-Wrapper (bin/run-server / run-server.cmd) |
| Python | 3.10+ | MCP Server Runtime |
| pandoc | 3.x | EPUB/PDF Export |
| Calibre (optional) | 6.x+ | MOBI-Export |
Kein API-Key nötig — StoryForge nutzt Claude Code's eingebauten Claude-Zugang.
git clone https://github.com/markus-michalski/storyforge \
~/.claude/plugins/storyforge
git clone https://github.com/markus-michalski/storyforge `
"$env:USERPROFILE\.claude\plugins\storyforge"
~/.claude/plugins/storyforge/Alternativ direkt über den Claude Code Plugin Marketplace (wenn verfügbar).
Wie der plattformübergreifende Wrapper den richtigen Python-Interpreter wählt:
Da das Repository direkt nach ~/.claude/plugins/storyforge geklont wurde, muss Claude Code das Verzeichnis nur noch als Plugin erkennen — über den Plugin-Manager oder einen manuellen Eintrag in ~/.claude/settings.json.
In Claude Code:
/storyforge:setup
Erstellt automatisch:
~/.storyforge/venv/~/.storyforge/config.yaml~/.storyforge/cache/~/.storyforge/authors/nano ~/.storyforge/config.yaml
Wichtigster Wert: content_root (wo deine Buchprojekte liegen sollen).
/storyforge:create-author Mein Name
Ohne Autorenprofil verweigert das Plugin das Schreiben — by design.
Konfigurationsdatei: ~/.storyforge/config.yaml
content_root: ~/projekte/book-projects # Wo Bücher/Ideen gespeichert werden
default_author: mein-autor-slug # Wird beim Buchanlegen vorbelegt
review_handle: "Markus" # Erkennungsstring für Inline-Reviews
linter_mode: strict # strict | warn (global default)
Per-Buch-Überschreibung via Frontmatter in {project}/CLAUDE.md:
---
linter_mode: warn # Nur für dieses Buch auf warn schalten
---
| Typ | Wörter | Typische Kapitelzahl |
|---|---|---|
| short-story | 1.000 - 7.500 | 1 (keine Kapitel) |
| novelette | 7.500 - 17.500 | 3-5 |
| novella | 17.500 - 40.000 | 8-15 |
| novel | 40.000 - 120.000 | 15-35 |
| epic | 120.000+ | 35+ |
| Pfad | Inhalt |
|---|---|
~/.storyforge/config.yaml |
User-Konfiguration |
~/.storyforge/cache/state.json |
State-Cache (automatisch) |
~/.storyforge/venv/ |
Python Virtual Environment |
~/.storyforge/authors/{slug}/ |
Autorenprofile |
{content_root}/projects/{book-slug}/ |
Standalone-Buchprojekte |
{content_root}/series/{series-slug}/{book-slug}/ |
Bücher in einer Serie |
{content_root}/ideas/{slug}.md |
Brainstorm-Ideen (eine Markdown-Datei pro Idee mit YAML-Frontmatter) |
1. /storyforge:create-author Mein Name
2. /storyforge:new-book
3. /storyforge:book-conceptualizer mein-buch
4. /storyforge:plot-architect mein-buch
5. /storyforge:character-creator mein-buch
6. /storyforge:world-builder mein-buch
7. /storyforge:rolling-planner mein-buch
8. /storyforge:chapter-writer mein-buch 1
9. (Optional) /storyforge:continuity-checker mein-buch
10. /storyforge:chapter-reviewer mein-buch kapitel-01
10a. /storyforge:chapter-humanizer mein-buch kapitel-01
10b. /storyforge:chapter-proofreader mein-buch kapitel-01
10c. /storyforge:manuscript-checker mein-buch
10d. /storyforge:beta-feedback mein-buch kapitel-01
11. (Optional) /storyforge:voice-checker mein-buch
12. /storyforge:export-engineer mein-buch epub
1. /storyforge:create-author Mein Name
2. /storyforge:new-book (→ book_category: memoir setzen)
3. /storyforge:book-conceptualizer mein-memoir
4. /storyforge:plot-architect-memoir mein-memoir
5. /storyforge:character-creator mein-memoir (→ people/ statt characters/)
6. /storyforge:rolling-planner mein-memoir
7. /storyforge:chapter-writer mein-memoir 1
8. (Optional) /storyforge:continuity-checker mein-memoir
9. /storyforge:emotional-truth-prompt mein-memoir kapitel-01
10. /storyforge:chapter-reviewer-memoir mein-memoir kapitel-01
10a. /storyforge:chapter-humanizer mein-memoir kapitel-01
10b. /storyforge:chapter-proofreader mein-memoir kapitel-01
10c. /storyforge:manuscript-checker-memoir mein-memoir
11. /storyforge:memoir-ethics-checker mein-memoir
12. /storyforge:export-engineer mein-memoir epub
{content_root}/
├── ideas/ # Brainstorm-Ideen (vor Buchanlage)
│ └── {idea-slug}.md
├── projects/
│ └── {book-slug}/ # Standalone-Bücher
│ ├── README.md # Buch-Metadaten (Frontmatter: title, genre, author, ...)
│ ├── CLAUDE.md # Per-Buch-Linter-Config + Rules + Callbacks
│ ├── synopsis.md # Klappentext + Langsynopse
│ ├── plot/
│ │ ├── outline.md # Akte, Beats
│ │ ├── arcs.md # Charakter-Arcs
│ │ ├── timeline.md # Story-Kalender (ein Eintrag pro Story-Tag)
│ │ ├── canon-log.md # Kanonische Fakten + CHANGED-Markierungen
│ │ └── tone.md # Tonal Rules, Non-Negotiables, Litmus-Test
│ ├── characters/
│ │ ├── INDEX.md
│ │ └── {char-slug}.md # YAML-Frontmatter mit optional tactical: und knowledge:
│ ├── people/ # Memoir only: Realpersonen mit consent_status
│ ├── world/
│ │ ├── setting.md # Travel Matrix (Pflicht) + Locations
│ │ ├── rules.md # Magiesystem / World Rules
│ │ └── history.md
│ ├── chapters/
│ │ └── {NN-slug}/
│ │ ├── README.md # Chapter-Timeline, Scene-List, Status, ## Promises
│ │ └── draft.md # Prosa-Draft (Hook greift hier)
│ ├── research/
│ │ └── notes/
│ ├── export/
│ │ ├── front-matter.md
│ │ ├── back-matter.md
│ │ ├── custom.css
│ │ └── output/ # Fertige EPUBs, PDFs
│ ├── cover/
│ │ ├── brief.md
│ │ ├── prompts.md
│ │ └── art/cover.jpg
│ └── translations/
│ └── {lang}/
└── series/
└── {series-slug}/ # Serien-Bücher liegen unter series/{slug}/{book}/
├── README.md
└── {book-slug}/
Jedes Kapitel hat einen Status im README.md-Frontmatter:
| Status | Bedeutung | Übergang zu |
|---|---|---|
Outline |
Szenen-Skelett vorhanden | Draft nach chapter-writer |
Draft |
Erste Prosa-Fassung | Review nach Selbst-Check |
Review |
chapter-reviewer gelaufen |
Final nach Fixes |
Final |
Bereit für Revision-Phase | Polished nach Revision |
Polished |
Export-fertig | Export |
export-engineer blockt, wenn nicht alle Kapitel Final oder Polished sind.
raw → explored → developed → ready → promoted (oder shelved)
Der StoryForge MCP Server (~/.storyforge/server.py) stellt 83 Tools bereit, organisiert nach den Router-Modulen des Servers:
list_books() — alle Bücher + Statusfind_book(query) — Buch per Slug oder Titel suchen (Partial Match)get_book_full(slug) — komplette Buch-Metadaten inkl. Kapitel und Charaktereget_book_progress(slug) — Kapitel-Status, Wortzahlen, Fertigstellungsgradlist_chapters(book_slug) — alle Kapitel + Statuscount_words(book_slug, chapter_slug?) — Wörter zählen (Kapitel oder ganzes Buch)get_canon_brief(book_slug, chapter_slug, pov_character?, scope_chapters?) — begrenzter, strukturierter Canon-Brief für das aktuelle Kapitelcreate_book_structure(title, author?, genres?, book_type?, book_category?, language?, target_word_count?, series_slug?) — neues Buchprojekt mit vollem Verzeichnis-Scaffoldcreate_chapter(book_slug, title, number, pov_character?, summary?) — neues Kapitelverzeichnis mit README + leerem Draftcreate_character(book_slug, name, role?, description?) — neue Charakterdatei (Fiction-Modus)get_current_story_anchor(book_slug, chapter_slug?) — Relativ-Phrasen-Mapping für das aktuelle Kapitelget_recent_chapter_timelines(book_slug, n?) — letzte N Kapitel als Intra-Day-Gridsverify_tactical_setup(book_slug, scene_outline_text, characters_present) — Walking-Order-Check für Kampf-/Reise-Szenenget_chapter_writing_brief(book_slug, chapter_slug) — architektonischer Keystone: 14 Datenquellen in einem JSON (inkl. pov_character_inventory und pov_character_state)get_review_brief(book_slug, chapter_slug) — Datenquellen für chapter-reviewerget_continuity_brief(book_slug) — voller Buch-State für continuity-checkerstart_chapter_draft(book_slug, chapter_slug) — Kapitel als aktiv gedraftet markierenregister_chapter_promises(book_slug, chapter_slug, promises) — Setup-Elemente eines Kapitels persistieren (Callbacks, Chekhov Guns, Mysteries)get_chapter_promises(book_slug, chapter_slug) — Promises eines Kapitels lesen, dient als Daten-Quelle für analyze_plot_logicinit_book_claudemd(book_slug, book_title?, pov?, tense?, genre?, writing_mode?, overwrite?) — CLAUDE.md aus Template im Buch-Projekt-Root anlegenget_book_claudemd(book_slug) — aktuelle CLAUDE.md eines Buchs lesenupdate_character_snapshot(book_slug, character_slug, snapshot_json, book_category?) — End-of-Chapter-POV-Charakter-Zustand persistierenappend_book_rule(book_slug, text, validate?) — Regel an die book_rules-DB anhängenlist_book_rules(book_slug) — alle Regeln der book_rules-DB für dieses Buchupdate_book_rule(book_slug, rule_index?, rule_match?, new_text?, delete?, validate?) — Regel im RULES-Block ersetzen oder entfernenlint_book_rules(book_slug) — jede Regel im RULES-Block gegen Scanner-Blind-Spots auditierenappend_book_workflow(book_slug, text) — Workflow-Instruktion an die book_rules-DB anhängenappend_book_callback(book_slug, text) — Callback an die book_rules-DB anhängensync_book_claudemd_from_text(book_slug, text) — Regel:/Workflow:/Callback:-Präfixe extrahieren und persistierenimport_cover_image(book_slug, source_path, is_final?) — extern generiertes Cover-Bild ins Buchprojekt kopieren (Draft/Final-Tracking)get_cover_image(book_slug) — das für den Export zu nutzende Cover-Bild ermittelnget_post_processing_config() — konfiguriertes Cover-Typografie-Tool zurückgebenAlle Checker-MCP-Tools geben ein einheitliches GateResult mit status (PASS/WARN/FAIL), reasons, findings und metadata zurück:
scan_manuscript(book_slug, min_occurrences?, write_report?, max_findings_per_category?) — Cross-Chapter-Scanvalidate_timeline_consistency(book_slug) — Cross-Chapter-Zeitdriftverify_callbacks(book_slug) — Callback-Register gegen alle gedrafteten Kapitel prüfencheck_memoir_consent(book_slug) — Einwilligungs-Status aller Personen (Memoir)analyze_plot_logic(book_slug, scope?, chapter_slug?) — Plot-Hole-Detektor: deterministisch für causality_inversion und chekhov_gun, plus Knowledge-Index den die LLM-Skills für information_leak, motivation_break, premise_violation und pov_knowledge_boundary konsumieren. Memoir-aware: chekhov_gun + premise_violation werden bei book_category: memoir automatisch übersprungen.validate_chapter(book_slug, chapter_slug) — Hook-Äquivalent als MCP-Toolvalidate_book_structure(book_slug) — Buch-Projektstruktur-Vollständigkeitrun_pre_export_gates(book_slug) — Quality Gates vor dem Export ausführenrun_quality_gates(book_slug) — alle verfügbaren Checker ausführen und aggregierencreate_idea(title, genres?, logline?, concept?, book_category?) — neue Idea-Datei mit YAML-Frontmatterlist_ideas(status?, genre?) — alle Ideen mit optionalen Filternget_idea(slug) — vollständigen Inhalt einer Idea-Datei ladenupdate_idea(slug, field, value) — einzelnes Frontmatter-Feld einer Idea aktualisierenpromote_idea(slug, book_slug) — Idea als promoted markieren und mit Buchprojekt verknüpfenlist_authors() — alle Profileget_author(slug) — vollständiges Autorenprofil ladencreate_author(name, genres?, tone?, voice?, tense?) — neues Autorenprofil-Verzeichnis mit Template-Dateiendelete_author(slug, force?) — Autorenprofil-Verzeichnis inkl. Writing Discoveries löschenharvest_book_rules(book_slug, author_slug?) — Klassifiziert Buch-CLAUDE.md-Rules in banned_phrase / style_principle / world_rule und dedupiert gegen Author-Profile + Vocabulary. Treibt das /storyforge:harvest-author-rules-Skill.write_author_discovery(author_slug, section, text, book_slug, ...) — Discovery an die author_discoveries-DB anhängenwrite_author_banned_phrase(author_slug, phrase, reason?) — verbotene Phrase anhängen (discovery_type='donts')update_discovery_metadata(author_slug, book_slug, source_genres) — source_genres für alle Discoveries eines Buchs setzenadd_vocabulary_entry(author_slug, entry_type, text, source?) — Vokabular-Eintrag direkt in der DBdelete_discovery(author_slug, discovery_type, text) — Discovery per Exact-Match entfernenupdate_author(slug, field, value) — Feld im Autorenprofil-Frontmatter aktualisierenextract_text_from_file(file_path) — Text aus PDF/EPUB/DOCX/TXT/MD für Stilanalyse extrahierenlist_genres() — alle verfügbaren Genres auflistenget_genre(name) — Genre-README ladenget_craft_reference(name) — ein Craft-Dokument laden (z.B. story-structure, dialog-craft)list_craft_references() — alle verfügbaren Craft- und Genre-Referenzdokumente auflistenadd_canon_fact(book_slug, chapter_num, subject, fact, book_num?, domain?, is_revision?, old_value?, revision_impacts?) — strukturiertes Canon-Fact in der Serien-SQLite-DB persistierencreate_person(book_slug, name, relationship, person_category, consent_status?, anonymization?, real_name?, description?) — Realpersonen-Profil in einem Memoir-Buchprojekt anlegenset_memoir_structure_type(book_slug, structure_type) — gewählten Memoir-Strukturtyp persistierencreate_scene_list(book_slug, scenes) — plot/scenes.md mit Szenenliste anlegen/überschreiben (Snowflake Step 8)update_scene(book_slug, scene_number, chapter?, pov?, summary?, est_words?, status?) — eine Szenenzeile in plot/scenes.md aktualisierencreate_series(title, genres?, planned_books?, author?) — neues Serien-Verzeichnis mit series.yamladd_book_to_series(series_slug, book_slug, number, status?) — Buch mit einer Serie verknüpfenread_character_for_harvest(book_slug, character_slug, book_category?) — Buch-Charakterdatei für das Harvest-Skill lesenlist_series_trackers_for_book(series_slug, band) — Series-Tracker auflisten, deren recurs_in das Band enthältwrite_series_evolution_section(series_slug, tracker_slug, band, kind, content, log_message, date?) — Start/Ende/geplant-Wert in einen Series-Tracker schreiben (atomar)copy_recurring_chars_to_new_book(series_slug, prev_book_slug, new_book_slug, new_band, book_category?) — 1:1-Kopie wiederkehrender Charakterdateien aus einem Vorgänger-Buchread_tracker_for_bootstrap(series_slug, tracker_slug, prev_band, new_band, prev_book_slug?) — Bootstrap-Daten pro Tracker für das D-2-Skill projizierenbootstrap_character_for_new_book(series_slug, tracker_slug, prev_book_slug, new_book_slug, prev_band, snapshot_json, log_message?, book_category?, date?) — atomares Bootstrap eines wiederkehrenden Charakters für ein neues Buchcreate_character_tracker(series_slug, name, slug, role, recurs_in, species?, tracker_type?, book_slug?) — Series-Charakter-Tracker aus dem kanonischen Template anlegenget_session() — aktuellen Session-Kontext aus der DB ladenupdate_session(last_book?, last_chapter?, last_phase?, active_author?) — Session-Kontext in der DB aktualisierenget_review_handle_config() — konfigurierten Review-Handle zurückgebenrebuild_state() — State-Cache aus dem Dateisystem neu aufbauenupdate_field(file_path, field, value) — Feld in einem Markdown-Frontmatter-Block oder einer YAML-Datei aktualisierenresolve_path(book_slug, component?, sub_path?) — Dateisystempfad für eine Buchkomponente auflösenget_book_category_dir(category) — Pfad zu book_categories/{category}/ auflösenDiese Tools können in jedem Skill-Kontext direkt als MCP-Tool-Call aufgerufen werden:
| Tool | Beschreibung |
|---|---|
list_craft_references() |
Craft- und Genre-Referenzdokumente auflisten |
validate_timeline_consistency(book_slug) |
Zeitdrift zwischen Kapiteln prüfen |
get_review_handle_config() |
Konfigurierten Review-Handle zurückgeben |
rebuild_state(book_slug) |
State-Cache aus dem Dateisystem neu aufbauen |
get_current_story_anchor(book_slug, chapter_slug) |
Story-Kalender-Anker für ein Kapitel auflösen |
get_recent_chapter_timelines(book_slug, n) |
Intra-Day-Grids der letzten N Kapitel |
count_words(book_slug, chapter_slug?) |
Wörter für ein Kapitel oder das ganze Buch zählen |
add_vocabulary_entry(author_slug, entry_type, text) |
Vokabular-Eintrag direkt in DB |
Entfernt: get_character, get_series, update_book_claudemd_facts
StoryForge nutzt drei Claude Code Hooks:
Läuft nach jedem Write/Edit/MultiEdit auf **/chapters/*/draft.md.
7 Scanner:
| Scanner | Severity | Was wird geprüft |
|---|---|---|
| Buch-CLAUDE.md Banlist | block | Backtick-Patterns aus ## Rules |
| Author-Vocabulary | block | Alle ### Absolutely Forbidden-Phrasen |
| Meta-Narrative-Detektor | block | Ch \d+, callback(s), as established, etc. |
| Story-Time-Anchor | warn | Relativ-Phrasen → impliziertes Story-Datum |
| Globale AI-Tells | warn | ~50 Patterns aus anti-ai-patterns.md |
| Sentence-Variance | warn | std_dev < 4 Wörter → AI-verdächtig |
| POV-Boundary-Checker | warn | Domain-Vokabular im Narration-Text |
Detailbeschreibung: Quality System
Läuft vor jeder Context-Komprimierung. Liest offene Callbacks, Rules und kritische Fakten aus dem Session-Kontext und schreibt sie in die Per-Book CLAUDE.md. Verhindert, dass wichtige Story-Versprechen beim Context-Reset verloren gehen.
Läuft nach Write/Edit auf **/characters/*.md und **/people/*.md.
Prüft: eindeutige Charakternamen, gültige Rollen (VALID_ROLES), series_evolution-Felder.
Wenn block-Severity auftritt, gibt der Hook Exit Code 2 zurück:
StoryForge linter blocked this write:
[BLOCK] draft.md line 12: Banned by author voice
(author-vocab (Absolutely Forbidden)): 'clocked'
[BLOCK] draft.md line 12: Banned phrase from book CLAUDE.md: 'clocked'
Plus 3 non-blocking warnings:
[WARN] draft.md line 8: phrase 'yesterday' implies Mon Dec 23 ~19:30
(chapter starts Tue Dec 24 ~19:30). Verify against plot/timeline.md.
[WARN] draft.md line 15: AI-tell 'tapestry' found (1 occurrence)
[WARN] draft.md line 47: POV BOUNDARY: 'lividity' (domain: forensics,
Theo Wilkons knowledge: none).
Fix the blocking issues and try again. Set `linter_mode: warn` in the
book's CLAUDE.md frontmatter to override.
Das Modell empfängt diesen Output in stderr und muss die block-Findings fixen, bevor der nächste Write akzeptiert wird.
CLAUDE.mdJedes Buch hat eine eigene CLAUDE.md direkt im Projekt-Root ({content_root}/projects/{slug}/CLAUDE.md). Sie enthält:
---
linter_mode: strict # oder warn
---
# Mein Buch — Book CLAUDE.md
## Book Facts
- **Author:** Mein Autorenname
- **Genre:** Mystery, Contemporary
- **Target Word Count:** 80000
## Rules
- `journey` als Metapher (Abstract noun banned)
- `clocked` (Zu slang für diese Stimme)
- `delve` max 1 per chapter
## Callbacks
- Callback: Die Silbermünze (Kap 5) muss in Kap 18 wiederkommen
- Callback: Ingas Vater wird in Kap 12 erwähnt — payoff in Kap 28
## Active Tactics
- [x] Snowflake Method — abgeschlossen in Phase 8
Der PostToolUse-Hook liest ## Rules-Bullets und unterscheidet nach Markup:
| Markup | Bedeutung | Wer reagiert |
|---|---|---|
`phrase` (Backticks) |
Hard-Block-Pattern | PostToolUse-Hook → exit 2 |
*phrase* (Italics) |
Heuristik-Marker für manuelles Review | manuscript-checker (Soft) |
"phrase" (Double-Quotes) |
Beispiele, Replacements, advisory | Nur Lese-Hilfe für Modell |
Limit-Syntax:
## Rules
- `journey` (Abstract noun — always banned)
- `kind of X that Y` max 3 per chapter (Strukturmuster — limitiert)
- `echoed` max 0-1 per chapter (Fast gebannt)
Erkannte Limit-Phrasings: max N per chapter, maximum N per chapter, limit to N per chapter, max N per kapitel.
Das Author-Vocabulary (~/.storyforge/authors/{slug}/vocabulary.md) hat mehrere Sektionen, die der Hook liest:
### Absolutely Forbidden
- delve
- tapestry
- clocked
### Forbidden Hedging Phrases
- it's worth noting
- one might say
- it goes without saying
### Forbidden Emotional Tells
- he felt
- she noticed that she felt
- they realized
### Forbidden Structural Patterns
- [Adverb]-ly [said/whispered/replied]
Inflektions-Matching: delve matched auch delved, delving, delves. Multi-Word-Phrasen werden exakt gematcht.
Der Story-Time-Anchor ist ein Mechanismus, der verhindert, dass relative Zeitphrasen (yesterday, tomorrow, an hour ago, etc.) zu zeitlichen Inkonsistenzen führen.
Wie es funktioniert:
## Chapter Timeline-Block mit **Start:** Tue Dec 24 ~19:30Write/Edit-Operation prüft Scanner 4 die Phrasen im neuen Text[WARN] draft.md line 47: phrase 'yesterday' implies Mon Dec 23 ~19:30 (chapter starts Tue Dec 24 ~19:30). Verify against plot/timeline.md.Direkte Nutzung:
mcp__storyforge-mcp__get_current_story_anchor blood-and-binary 22-the-night-before
Liefert u.a.:
{
"available_relative_phrases": {
"yesterday": "Mon Dec 23 ~19:30",
"tomorrow": "Wed Dec 25 ~19:30",
"an hour ago": "Tue Dec 24 ~18:30"
}
}
StoryForge hat kein dediziertes Subplot-Management — Subplots werden als Teil des Haupt-Plots in plot/outline.md und plot/arcs.md verwaltet. Für komplexe Serien: series-planner.
Bücher in Serien liegen unter series/{slug}/{book}/ (Standalone-Bücher weiterhin in projects/{book-slug}/).
Über plot/outline.md hinaus können Serien via /storyforge:series-planner verwaltet werden:
series/
├── README.md
├── world/
│ └── canon.md
├── characters-evolution.md
└── {book-slug}/
├── README.md
└── chapters/
Der Chapter-Writer lädt optionalen Series-Canon als zusätzlichen Prereq-Load.
Series Lifecycle: Über die reine Planung hinaus deckt StoryForge jetzt den kompletten Multi-Book-Lifecycle ab — Charakter-Endstand am Buch-Ende harvesten (/storyforge:harvest-character-evolution), recurring Chars beim nächsten Buch via new-book --copy-recurring-from= auto-kopieren, neues Buch aus Series-Tracker-Plan bootstrappen (/storyforge:bootstrap-book-from-series). Die Series-Evolution-Daten landen automatisch im Chapter-Writing-Brief des Folgebuchs.
Phasen-Hinweise:
harvest-character-evolution → Series Trackernew-book --copy-recurring-from= → bootstrap-book-from-seriesKomplettes Beispiel mit allen Phasen, Skill-Outputs und Buchabschluss-Lifecycle: Series-Workflow-Beispiel — Kargholm-Saga. Zeigt Aufbau, End-of-Book-Harvest, Onboarding des nächsten Bands und Box-Set-Produktion am Beispiel einer Trilogie.
Strukturierte Data Briefs ergänzen die Hook-basierte Validierung. Statt 16 Prosa-Prereq-Loads in chapter-writer liefert ein einziges MCP-Tool ein strukturiertes JSON mit allen relevanten Daten. Tactical Setup und POV Boundary sind neue Quality Gates auf Pre-Write- und Pre-Save-Ebene.
mcp__storyforge-mcp__get_recent_chapter_timelines(book_slug, n=3) lädt die letzten N Kapitel ab Review-Status als JSON. Filter: Rank ≥ 2 (Drafts/Outlines werden übersprungen). Jedes Grid enthält:
{
"chapters": [
{
"number": 21,
"slug": "21-i-forbid-it",
"title": "I Forbid It",
"status": "Review",
"start": {"day_of_week": "Tue", "month": "Dec", "day": 24, "time": "14:45"},
"end": {"day_of_week": "Tue", "month": "Dec", "day": 24, "time": "17:30"},
"scenes": [
{"name": "Christmas Eve", "start_time": "14:45", "end_time": "15:50"},
{"name": "The Library", "start_time": "15:50", "end_time": "16:00"},
{"name": "The Meeting", "start_time": "16:00", "end_time": "16:50"}
]
}
]
}
Warum: Kapitelübergreifender Cascade-Drift. Bis Blood & Binary Kapitel 22 hat der Writer Zeitreferenzen gegen eine Kette von erinnerten Zeiten verankert, statt drei tatsächliche Intra-Day-Grids zu lesen. Das Tool liefert harte Anker.
mcp__storyforge-mcp__verify_tactical_setup(book_slug, scene_outline_text, characters_present) prüft Kampf- und Reise-Szenen gegen die taktischen Profile der beteiligten Charaktere.
Optionaler Block im Charakter-Frontmatter:
---
name: "Theo"
tactical:
protector_role: false # actively protects others
protected_role: true # needs protection in combat
combat_skill: none # none|low|medium|high|elite|unknown
movement_lead: false # tends to take point
movement_rear: false # tends to bring up the rear
vulnerable_to: [daylight, silver]
carries: [knife]
---
Heuristik (5 Regeln):
movement_lead: true im Profil überein → warnPositions-Erkennung nutzt satzgebundene vorangehende Namens-Attribution. "Theo walked flanked by Kael at point and Viktor at the rear" → Theo=middle, Kael=lead, Viktor=rear. False Positives sind akzeptabel; False Negatives bei der benannten Vampir-Protector-Regression nicht.
Liefert immer ≥3 Fragen-für-den-Autor als Pre-Write-Checkliste:
{
"passes": false,
"warnings": [
{"severity": "warn", "message": "Theo (protected_role: true, combat_skill: none) is in rear position. Protectors (Kael, Viktor, Dom) should flank or trail."}
],
"questions_for_writer": [
"Who is closest to Theo at all times?",
"Who scouts ahead?",
"What is the formation if they need to break and run?"
],
"detected_positions": {"Theo": "rear", "Kael": "lead", "Viktor": "middle", "Dom": "middle"}
}
chapter-writer Step A2 und rolling-planner Step 4b rufen das Tool gated auf Combat/Travel-Keyword-Erkennung (is_tactical_scene) auf.
PostToolUse-Hook-Scanner #7. Verhindert Close-Third-POV-Drift, bei dem die Narration Domain-Wissen zuschreibt, das der POV-Charakter nicht hat. Beta-Feedback-Beispiel: "blood smells when it has been on the ground for a while in cold air" — geschrieben aus Theos IT-Guy-POV.
Optionaler Block im Charakter-Frontmatter:
---
name: "Theo Wilkons"
knowledge:
expert: [it, programming, networking, devops]
competent: [photography, brewing_coffee]
layperson: [psychology, history]
none: [forensics, ballistics, medicine, tactical_combat, automotive_repair]
---
5 mitgelieferte Domain-Vokabulare unter reference/craft/knowledge-domains/:
forensics.md — blood spatter, lividity, rigor mortis, blood smells when, gsr, post-mortem interval, etc.tactical_combat.md — field of fire, enfilade, breach point, fatal funnel, etc.medicine.md — subdural hematoma, ringer's lactate, pneumothorax, etc.ballistics.md — muzzle velocity, ballistic coefficient, MOA, etc.automotive_repair.md — timing belt, head gasket, MAF sensor, etc.Community-erweiterbar via PR — keine hartkodierte Master-Liste. Free-form Domain-Keys (z.B. learned_from_kael) werden als competent behandelt.
Kritisch — Word-Boundary-Match: Ein Smoke-Test hat aufgedeckt, dass "pea" (medizinische Abkürzung für pulseless electrical activity) als Substring innerhalb von "appeared", "speak", "ahead" gematcht hat → 6 False Positives in Blood & Binary Kapitel 20-22. Fix: \b{term}\b-Matching. Smoke-Test nach dem Fix: 0 Hits, also auch keine echten POV-Drift-Stellen in diesen drei Kapiteln. Als Regressionstest fixiert.
Hook-Output:
[WARN] draft.md line 47: POV BOUNDARY: 'blood smells when' (domain: forensics,
Theo Wilkons knowledge: none). Move into dialog by an expert, reframe as
lay observation, or cut.
chapter-reviewer Subpoint 20a surfaced diese Warnungen im 28-Punkte-Review.
mcp__storyforge-mcp__get_chapter_writing_brief(book_slug, chapter_slug) ist der architektonische Keystone. Bündelt 12 Datenquellen in ein einziges strukturiertes JSON, das chapter-writer via einem Tool-Call konsumiert, statt 16 separaten Prosa-Prereq-Loads.
Brief-Struktur:
{
"book_slug": "...",
"chapter_slug": "...",
"chapter": { "number": 22, "title": "...", "status": "...", "pov_character": "..." },
"pov_character": "Theo Wilkons",
"story_anchor": { /* same as get_current_story_anchor */ },
"recent_chapter_timelines": [ /* same as get_recent_chapter_timelines */ ],
"recent_chapter_endings": [
{"chapter": "21-i-forbid-it", "last_paragraph": "The snow kept falling."}
],
"characters_present": [
{
"slug": "theo-wilkons", "name": "Theo Wilkons", "role": "protagonist",
"knowledge": { "expert": [...], "none": [...] },
"tactical": { "protected_role": true, "combat_skill": "none" }
}
],
"rules_to_honor": [
{"text": "Avoid `clocked` as a verb", "severity": "block"},
{"text": "Limit `kind of X that Y` — max 3 per chapter", "severity": "block"}
],
"callbacks_in_register": ["Gary the cat — last seen Ch 9, weave back in"],
"banned_phrases": [
{"phrase": "delve", "source": "anti-ai-patterns.md", "severity": "warn"}
],
"recent_simile_count_per_chapter": {"19-seras-ghost": 4, "20-bruises": 0, "21-i-forbid-it": 6},
"tone_litmus_questions": ["Is the violence consequential?"],
"tactical_constraints": null,
"review_handle": "Markus",
"errors": []
}
Defensive Komposition: Jede Sub-Komponente ist in try/except gewrappt. Eine einzelne Fehlerquelle landet als {component, error}-Eintrag in errors, und der Brief shipped trotzdem mit Partial-Daten. Determinismus: gleicher Input → identischer Brief, inklusive errors-Reihenfolge.
Fallback für Legacy-Bücher: Ältere Blood & Binary-Kapitel kodieren POV/Titel in einer Markdown-## Overview-Tabelle statt YAML-Frontmatter. Der Brief parst beide Formate, ohne eine Migration zu erzwingen.
Detailbeschreibung: Genre-System
14 eingebaute Genres — jedes als eigenes README.md mit Conventions, Tropes, Expected Beats, Avoided Tropes.
Cross-Cutting: LGBTQ — kein eigenes Genre, sondern eine Schicht, die auf jedes andere Genre angewendet werden kann.
Eigene Genres: /storyforge:genre-creator — interaktiv, fragt nach Base-Genres, Conventions, Tropes.
Drei Ebenen — Pre-Write, Pre-Save (Hook), Post-Draft:
| Gate | Ebene | Skill / Hook |
|---|---|---|
| Chapter Writing Brief | Pre-Write (Keystone) | MCP get_chapter_writing_brief |
| Tactical Setup Verifier | Pre-Write | MCP verify_tactical_setup |
| Pre-Scene Logic Audit | Pre-Write (per Szene / Kapitel) | chapter-writer Step A1b / 2c |
| PostToolUse Validator | Pre-Save (automatisch, 7 Scanner) | validate_chapter.py |
| Voice Checker | Post-Draft | voice-checker |
| Chapter Reviewer | Post-Draft, Einzelkapitel (28 Punkte inkl. Plot-Logic) | chapter-reviewer |
| Author Check | Post-Draft, Positive Style-Compliance (style_principles) | author-check |
| First-Chapter Gate | Post-Draft, Kapitel 1 (13 Punkte) | in chapter-reviewer |
| Manuscript Checker | Post-Draft, Komplettes Buch (16 Kategorien inkl. plot_hole) |
manuscript-checker |
| Plot-Logic Analyzer | Post-Draft, Plot-Holes | MCP analyze_plot_logic |
| Continuity Checker | Post-Draft, Timeline/Travel/Canon | continuity-checker |
| Cross-Chapter Timeline | Post-Draft | MCP validate_timeline_consistency |
| Emotional Truth Pass | Post-Draft, Memoir-Kapitel | emotional-truth-prompt |
| Memoir Ethics Gate | Vor Export, nur Memoir | memoir-ethics-checker |
Alle Checker-Tools geben ein einheitliches GateResult (PASS/WARN/FAIL) zurück.
Detailbeschreibung: Quality System
Seit v2 gibt es einen deterministischen + LLM-gestützten Plot-Hole-Detektor: analyze_plot_logic. Architektur: deterministische Datenquellen + statische Detektoren leben im MCP-Tool, die LLM-Passes für die semantischen Kategorien leben in den Skills (chapter-reviewer, manuscript-checker), gefüttert durch den knowledge_index des Tools.
| Kategorie | Wie erkannt | Memoir |
|---|---|---|
causality_inversion |
Deterministisch — Cause-After-Effect-Pattern via Story-Day-Map | Aktiv |
chekhov_gun |
Deterministisch — registrierte Promises ohne Payoff | Skipped |
information_leak |
LLM-Pass mit Canon-Log-Index | Aktiv |
motivation_break |
LLM-Pass mit Character-Arc-Index | Aktiv |
premise_violation |
LLM-Pass mit synopsis.md + plot/tone.md | Skipped |
pov_knowledge_boundary |
LLM-Pass mit Character-knowledge:-Block |
Aktiv |
Persistenz für Setup-Elemente (Chekhov Guns, registrierte Mysteries, Callbacks) pro Kapitel:
register_chapter_promises schreibt eine ## Promises-Sektion in das Kapitel-README.md. Wird vom chapter-writer automatisch beim Übergang Draft → Review befüllt.get_chapter_promises liest die Promises eines Kapitels für analyze_plot_logic./storyforge:backfill-promises ist die one-shot LLM-Bridge für bereits gedraftete Bücher — geht jedes Kapitel durch und extrahiert Setup-Elemente nachträglich.Single-source-of-truth bleibt der Canon-Log — die Promises sind ein Index obenauf, kein zweiter Speicher für Character-Knowledge.
Skill-Integration:
chapter-reviewer hat 5 neue Plot-Logic-Subpoints (20b–20f), die analyze_plot_logic für ein einzelnes Kapitel aufrufen.manuscript-checker hat einen neuen plot_hole-Bucket, sortiert vor cliche.run_quality_gates aggregiert das Plot-Logic-Result in den Gesamt-Status.Seit v2 gibt es eine 3-Tier-Hierarchie für Regeln: Buch → Autor → Global. Wenn eine Regel sich in einem Buch bewährt, kann sie via /storyforge:harvest-author-rules ins Autorenprofil promoted werden — alle künftigen Bücher dieses Autors erben die Regel automatisch.
manuscript-checker und chapter-reviewer ist eine Liste von Findings vorhanden./storyforge:harvest-author-rules <book-slug> ruft harvest_book_rules auf, das jede Regel klassifiziert in:
banned_phrase — Hard-Block-Pattern (geht in Author-Vocabulary)style_principle — Stil-Regel (geht in Author-Profile ## Writing Discoveries / Style Principles)world_rule — Buch-spezifische Welt-Regel (bleibt in Buch-CLAUDE.md)_(emerged from {book}, YYYY-MM)_. Recurrence in einem späteren Buch hängt einen zweiten Origin-Tag an, statt zu duplizieren.mode=remove oder mode=annotate).Das Author-Profile-Template hat seit v2 eine ## Writing Discoveries-Sektion mit drei Sub-Buckets:
## Writing Discoveries
### Recurring Tics
- `math` als Vokabel für analytisches Denken _(emerged from firelight, 2026-04)_
### Style Principles
- POV-Filter-Words max 5 pro Kapitel _(emerged from blood-and-binary, 2026-02; firelight, 2026-04)_
### Don'ts
- Keine Therapy-Speak-Begriffe in Kindheits-Flashbacks _(emerged from firelight, 2026-04)_
chapter-writer und chapter-reviewer laden diese Sektion bei jedem Run via get_author() — promoted Findings erreichen das nächste Buch automatisch, ohne in dessen CLAUDE.md gemirrort werden zu müssen.
Konzept-Doku: reference/author-evolution.md im Plugin-Repo.
/storyforge:export-engineer generiert EPUB, PDF oder MOBI via Pandoc (und optionalem Calibre für MOBI).
Pflicht-Voraussetzungen:
Final oder Polishedexport/front-matter.md (Copyright, Widmung)export/back-matter.md (Über den Autor)cover/art/cover.jpg (bei EPUB)Pandoc-Argumente: pdf_engine, font, font_size, margin sind auf eine Allowlist beschränkt — kein direktes Passthrough von Benutzereingaben.
Output: export/output/{book-slug}.epub (bzw. pdf/mobi)
Cover-Workflow: /storyforge:cover-artist generiert Prompts für ein bewusst textfreies Cover-Bild. Das fertige Bild wird per MCP-Tool import_cover_image importiert (DB-backed Draft/Final-Tracking, keyed auf book_slug) — erst danach kann /storyforge:cover-typography-mockup ein HTML-Mockup-Artifact zum Kompositieren von Titel/Autor-Typografie erzeugen (Anleitung je nach konfiguriertem post_processing.tool: Canva, GIMP oder Photoshop). Der Pandoc-Export zieht sich das final importierte Cover-Bild automatisch.
Tiefere Dokumentation in separaten Seiten:
v3.0.0 migriert alle strukturierten Daten von Markdown zu SQLite. Die folgenden Migrations-Scripts müssen einmalig in dieser Reihenfolge ausgeführt werden. Alle Scripts unterstützen --dry-run (oder kein Flag) für eine sichere Vorschau.
Alle Scripts sind idempotent — ein erneutes Ausführen schadet nicht (INSERT OR IGNORE Semantik).
Liest <!-- RULES:START/END -->, <!-- CALLBACKS:START/END --> und <!-- WORKFLOW:START/END -->-Sektionen aus jeder Buch-CLAUDE.md und schreibt sie in die book_rules-Tabelle.
# Vorschau (kein Schreibzugriff)
python scripts/migrate_book_rules.py --dry-run
# Ausführen
python scripts/migrate_book_rules.py
# Optional: Marker-Sektionen leeren (Inhalt aus CLAUDE.md entfernen, nur leere Marker bleiben)
python scripts/migrate_book_rules.py --clear-markers
Migriert plot/canon-log.md (Fiction) und people-log.md (Memoir) in die canon_facts-Tabelle.
# Vorschau
python scripts/migrate_canon_log_to_db.py
# Ausführen
python scripts/migrate_canon_log_to_db.py --execute
Liest Writing Discoveries-Sektion aus profile.md und YAML-Frontmatter aus Charakter-Dateien → author_discoveries- und character_snapshots-Tabellen.
# Vorschau
python scripts/migrate_phase3.py --dry-run
# Ausführen
python scripts/migrate_phase3.py
Migriert ## Banned Words-Einträge aus vocabulary.md in die author_discoveries-Tabelle (discovery_type=donts). Preferred Vocabulary und andere Sektionen bleiben in der Markdown-Datei als Referenz.
# Vorschau
python scripts/migrate_vocabulary_to_db.py
# Ausführen
python scripts/migrate_vocabulary_to_db.py --execute
Füllt source_genres-Felder auf bestehenden author_discoveries-DB-Einträgen nach — relevant für Autoren, die bereits study-author vor v3.0.0 genutzt haben.
/storyforge:migrate-source-genres mein-autor-slug
Für Bücher, die in einer Serie liegen: verschiebt projects/{buch-slug}/ → series/{serien-slug}/{buch-slug}/. Das Script ist auf die eigene Serien-Struktur angepasst.
# Vorschau (Standard, keine Änderungen)
python scripts/migrate_series_layout.py
# Ausführen
python scripts/migrate_series_layout.py --execute
Das Script enthält Pfade die für die eigene Serienstruktur angepasst werden müssen. Vor dem Ausführen Pfadvariablen am Scriptanfang prüfen.
Unabhängig vom SQLite-Upgrade können diese Skills nachträglich auf bestehende Buch-Entwürfe angewendet werden:
| Skill | Zweck |
|---|---|
/storyforge:backfill-promises |
Promises-Sektionen in bereits gedrafteten Kapiteln nachfüllen |
/storyforge:backfill-style-principles |
Positive Stilmuster aus bestehenden analysis-*.md-Dateien extrahieren |
Ältere Bücher verwenden möglicherweise noch das Quote-Format ("clocked" statt `clocked`). Migration via:
# Dry-run
~/.storyforge/venv/bin/python3 -m tools.claudemd.migrate_to_backticks /pfad/zum/buch
# Anwenden
~/.storyforge/venv/bin/python3 -m tools.claudemd.migrate_to_backticks /pfad/zum/buch --apply
Check:
ls ~/.claude/plugins/storyforge/skills/
claude --version
Fix: Plugin-Verzeichnis muss in ~/.claude/settings.json unter plugins eingetragen sein.
/storyforge:setup
Symptome: Text wirkt flach, austauschbar, voller Phrasen wie "journey", "realm", "tapestry of emotions".
Ursachen:
vocabulary.md hat keine ### Absolutely Forbidden-Sektion/storyforge:study-author importiertFix:
/storyforge:create-author
# Detaillierte Parameter ausfüllen
/storyforge:study-author ~/mein-vorheriges-buch.epub
# Style-DNA aus eigenem Werk extrahieren
/storyforge:voice-checker mein-buch kapitel-01
# 7-Dimensionen-Scan zeigt konkrete Probleme
Ursache: Phrase aus Buch-CLAUDE.md oder Author-Vocab wird getriggert.
Fix:
### Absolutely Forbidden entfernenlinter_mode: warn in Buch-CLAUDE.md-FrontmatterSymptome: Hook markiert Domain-Vokabular im Narrator-Text als POV-Boundary-Verstoß, aber der Charakter kennt es plausibel.
Ursachen:
none/layperson deklariert, sollte aber competent seinreference/craft/knowledge-domains/Fixes:
forensics von none zu competent verschieben)knowledge:-Block komplett entfernen → Scan wird für diesen Charakter vollständig übersprungenreference/craft/knowledge-domains/{custom}.md anlegen — community-erweiterbarSymptome: Skills zeigen Fehler, keine MCP-Tools verfügbar.
Check:
claude plugin list | grep storyforge
ls ~/.storyforge/venv/bin/python3
~/.storyforge/venv/bin/pip list | grep mcp
Fix:
/storyforge:setup
Ursache: Microsoft-Store-App-Execution-Alias-Stub — häufig bei Intune/SCCM-verwalteten Geräten, auf denen Python per MSI/EXE ohne PATH-Eintrag installiert wurde. python3/python bricht dann mit Exit Code 49 und ohne Ausgabe ab — das ist keine "Python fehlt"-Meldung.
Fix: /storyforge:setup probiert automatisch py -3 (Python Launcher, immer unter C:\Windows\ im PATH) und bekannte Installationspfade, bevor es Python als fehlend meldet. Bei manueller Installation: "Add python.exe to PATH" während der Python-Installation aktivieren, oder direkt py -3 verwenden.
Symptome: Charaktere verhalten sich inkonsistent, Zeitangaben passen nicht zusammen, Orte werden unterschiedlich beschrieben.
Ursache: Canon Log oder Timeline nicht geladen oder veraltet.
Fix:
/storyforge:continuity-checker mein-buch
Das Skill baut Timeline und Travel Matrix aus allen bestehenden Kapiteln neu auf und listet Konflikte. Nutzt get_continuity_brief(book_slug), um kanonischen Kalender, Travel Matrix, Canon Log, Character Index und ALLE Kapitel-Timeline-Grids in einem strukturierten Call zu laden.
Symptome: Der Hook erzeugt bei jedem yesterday/tomorrow/an hour ago eine Warn-Meldung mit impliziertem Datum.
Das ist so gewollt. Die Warnung ist eine Verifikations-Checkliste, kein Block. Sie erzwingt einen kurzen Abgleich gegen plot/timeline.md. Wenn das implizierte Datum korrekt ist → ignorieren.
Wenn die Warnungen zu häufig werden, lassen sie sich nicht selektiv abschalten — das komplette Linter-Set läuft entweder in linter_mode: warn oder gar nicht. Best Practice: Warnungen einmal pro Szene prüfen, danach für den Rest ignorieren.
Symptome: list_books liefert nichts, obwohl Projekte existieren.
Fix:
/storyforge:session-start
Der Rebuild passiert automatisch aus den Markdown-Dateien.
Symptome: Nach Claude-Compaction vergisst das Plugin buchspezifische Regeln (z.B. "keine Flashbacks vor Kapitel 5").
Ursache: Regel wurde nicht mit dem Regel: / Rule:-Präfix geschrieben und ist deshalb nicht in der Per-Book-CLAUDE.md gelandet.
Fix:
User: Regel: Keine Flashbacks vor Kapitel 5.
Der PreCompact-Hook extrahiert die Regel automatisch. Verifizieren mit:
cat ~/projekte/book-projects/projects/the-lighthouse-keeper/CLAUDE.md
Symptome: export-engineer blockt mit "EXPORT BLOCKED — memoir ethics check failed"
Check:
/storyforge:memoir-ethics-checker mein-memoir
Folge dem Verdict-Report:
refused-Einwilligung → Passage überarbeiten oder Person umbenennenanalyze_plot_logic meldet chekhov_gun False-PositivesUrsache: Promises-Sektionen in Kapitel-READMEs sind unvollständig oder fehlen.
Fix: /storyforge:backfill-promises <book-slug> einmalig laufen lassen, dann analyze_plot_logic neu ausführen. Wenn der Payoff intentional in einem späteren Band einer Serie passiert, im Promises-Eintrag payoff_book: <next-book-slug> setzen.
get_chapter_writing_brief liefert Errors für einzelne KomponentenKein Crash-Fall. Der Brief shipped auch mit Partial-Daten. Check errors-Feld im JSON für Details. Häufigste Ursache: world/setting.md oder plot/timeline.md fehlen noch.
F: Schreibt StoryForge das Buch für mich?
A: Es schreibt Prosa — aber nicht das Buch. Das chapter-writer-Skill produziert Text in der definierten Autorenstimme. Aber jede kreative Entscheidung (Plot, Charaktere, Thema, Twists, Stil) liegt bei dir. Jede Szene durchläuft dein Inline-Review und deine Korrekturen. Ohne deine Reviews und Korrekturen gibt es keinen Fortschritt — das Plugin schreibt niemals blind weiter.
F: Brauche ich ein eigenes Vorwerk, um StoryForge zu nutzen?
A: Nein, aber empfohlen. Du kannst ein Autorenprofil auch manuell ausfüllen. Das study-author-Skill (PDF/EPUB-Import) beschleunigt die Erfassung der Style-DNA aber massiv.
F: Welche Sprachen werden unterstützt?
A: Die Writing-Engine ist sprachagnostisch. Standard ist Englisch, aber Deutsch, Spanisch, Französisch etc. funktionieren, solange das Autorenprofil in der Zielsprache definiert ist. Craft-Referenzen sind auf Englisch, gelten aber auch für nicht-englische Texte.
F: Kann ich eine Serie mit mehreren Büchern verwalten?
A: Ja. /storyforge:series-planner erstellt eine Serien-Ebene mit buchübergreifendem Canon, Arc-Planung und Charakter-Evolution. Bücher in einer Serie liegen unter series/{series-slug}/{book-slug}/. Der Series Lifecycle umschließt den kompletten Multi-Book-Lifecycle: /storyforge:harvest-character-evolution erfasst den Charakter-Endstand am Buchende im Series Tracker, new-book --copy-recurring-from=<previous> kopiert recurring Charaktere automatisch ins nächste Buch, und /storyforge:bootstrap-book-from-series befüllt das Frontmatter des neuen Buchs aus dem Series-Tracker-Plan.
F: Was ist mit Schreibblockaden?
A: /storyforge:unblock diagnostiziert den Blockade-Typ (Angst / Perfektionismus / Prokrastination / Ablenkung) und liefert gezielte Übungen — keine generischen Tipps.
F: Kann ich damit Sachbücher schreiben?
A: Kein generisches Sachbuch — How-to-Guides, akademische Texte und Journalismus sind out of scope. Memoir wird unterstützt als zweite Buchkategorie (book_category: memoir) — es teilt Craft-DNA mit Fiction (narrativer Bogen, Szenenarbeit, Stimme). Craft-Referenzen, Plot-Methoden und Genre-System sind auf narratives Schreiben zugeschnitten. Siehe Memoir-Unterstützung.
F: Wie gut sind die exportierten EPUBs?
A: Produktionsreif. Der Export-Engineer nutzt Pandoc mit EPUB-3-Templates, fügt Front Matter (Copyright, Widmung), Back Matter (über den Autor, weitere Bücher) hinzu und unterstützt Custom CSS. Testbar in Calibre, Apple Books und Adobe Digital Editions vor dem Upload zu Amazon KDP / Tolino / Kobo.
F: Kann ich StoryForge für Game Writing oder Drehbücher nutzen?
A: Nicht direkt. chapter-writer ist für Prosa gebaut. Für Drehbücher empfehle ich VidCraft (Script-Writing für Videos). Für Game Writing könntest du StoryForge als Plotting-Tool nutzen und die Prosa-Generierung überspringen.
F: Wie geht das Plugin mit Sensitivity-Themen um?
A: /storyforge:sensitivity-reader scannt auf problematische Darstellungen (Stereotype, Trauma-Porn, Appropriation). Bei LGBTQ-, Trauma- oder Rassismus-Themen werden zusätzliche menschliche Sensitivity-Reader empfohlen — das Skill ergänzt sie, ersetzt sie aber nicht.
F: Der Hook blockt meinen Write — wie debugge ich das?
A: Die stderr-Meldung listet Block-Severity-Findings mit Datei + Zeile + Quelle. Vier mögliche Block-Severity-Quellen:
## Rules — Backtick-Pattern. Anpassen via Edit oder Regel:-Präfix.### Absolutely Forbidden — Phrase aus der Sektion entfernen.Ch \d+, callback, etc.). Prosa umformulieren.Warn-Severity-Quellen (POV Boundary, Time Anchor, AI Tells, Sentence Variance) blocken nie — sie geben nur Hinweise.
Notfall-Override pro Buch: linter_mode: warn im Frontmatter.
F: Kann ich StoryForge fürs Memoir-Schreiben nutzen?
A: Ja — Memoir ist eine First-class-Buchkategorie. Setze book_category: memoir, und das Plugin passt sich an: 4 Memoir-Strukturtypen statt 8 Plot-Methoden, Realpersonen-Profile mit Einwilligungs-Tracking in people/, memoir-spezifische Craft-Referenzen, emotional-truth-prompt nach jedem Kapitel-Draft und ein Pflicht-Ethics-Gate vor dem Export. Siehe Memoir-Unterstützung.
StoryForge ist unter der PolyForm Noncommercial License 1.0.0 lizenziert. Persönliche, nicht-kommerzielle Nutzung ist frei. Kommerzielle Nutzung erfordert eine separate Lizenz.
CLA für Contributors: Beitragsvereinbarung