StoryForge Charakter-Anatomie
Aufbau einer StoryForge-Figurendatei: Frontmatter-Schema, Rollen, Status, empfohlene Abschnitte, Verhalten des Figuren-Hooks, Alias-Auflösung sowie Serien-Tracker und der Serien-Lebenszyklus.
StoryForge Charakter-Anatomie
Zurück zur StoryForge-Hauptseite
Überblick
Jede Figurendatei eines Buchs wird nach dem Speichern vom PostToolUse-Hook validate_character.py geprüft. Diese Seite beschreibt:
- das Frontmatter-Schema und was der Hook nach dem Speichern beanstandet
- die Rollen und die Status-Stufen einer Figur
- die empfohlenen Abschnitte und wann Nebenfiguren weniger brauchen
- die Alias-Auflösung für
characters_presentim Brief - das Verhalten des Hooks im Detail
- Serien-Tracker und den Serien-Lebenszyklus
Die Vorlage liegt im Plugin unter templates/character.md und enthält Hinweise zu jedem Abschnitt.
Speicherort
| Buchkategorie | Verzeichnis | Beispiel |
|---|---|---|
fiction |
{buch}/characters/{slug}.md |
characters/arne-kruse.md |
memoir |
{buch}/people/{slug}.md |
people/grossvater.md |
| Serie | series/{serie}/characters/{tracker-slug}.md |
characters/king-caelan.md |
Eine Datei je Figur. INDEX.md wird vom Hook übersprungen. Bei Memoir folgen die Personendateien einem anderen Schema, siehe Memoir-Unterstützung.
Frontmatter
Der Hook verlangt mindestens:
---
name: "Anzeigename"
role: protagonist
status: Concept
---
Bei Fiction-Figuren sind name, role und status Pflicht. Fehlt eines, meldet der Hook das nach dem Schreiben mit Exit-Code 2 an das Modell zurück, das es ergänzen muss. Bei Memoir-Personendateien entfällt role, siehe Abschnitt „Memoir-Personendateien" unten. Weitere Felder wie age, job, description, archetype oder pov sind freie Metadaten, die der Hook ignoriert. Die Vorlage führt zusätzlich gender (leer vorbelegt) und aliases (auskommentiert) mit.
Optional sind diese Blöcke, die Prüf-Werkzeuge auswerten:
tactical: für Kampf- und Reiseszenen, siehe Technische Detailsknowledge: für die POV-Grenze, siehe Technische Details
Zustand der POV-Figur
Inventar, Kleidung, Verletzungen, veränderte Zustände und Wahrnehmungs-Dämpfer der POV-Figur liest der Chapter Writing Brief in dieser Reihenfolge:
- die Frontmatter-Felder
current_inventory,current_clothing,current_injuries,altered_statesundenvironmental_limitersder Figurendatei, falls vorhanden - der Snapshot in der Datenbank der Serie, den
chapter-writerbeim Abschluss eines Kapitels mitupdate_character_snapshotschreibt (die Figurendatei bleibt dabei unverändert) - Heuristiken über die Kapitel-Timeline und die Entwürfe
Ein Frontmatter-Feld as_of_chapter darf in der Datei stehen, der Brief liest es aber nicht.
Wenn keine Quelle etwas liefert, steht im Brief eine Warnung, und der Skill fragt nach, statt zu erfinden. Frontmatter-Werte entstehen zum Beispiel durch das Bootstrapping aus einem Vorgängerband oder durch deine Hand.
Herkunfts-Marker series_evolution_imported_from
Befüllt /storyforge:bootstrap-book-from-series eine Figurendatei, trägt sie das Feld series_evolution_imported_from: B1. Es ist informativ und sagt, aus welchem Band die Startwerte stammen. Danach kannst du jedes Feld frei ändern.
Alias-Auflösung
scan_for_named_characters füllt characters_present im Brief, indem es das Feld name und alle Aliase im Outline sucht. Zwei Quellen werden kombiniert:
- Aus dem Namen: Jeder in Anführungszeichen stehende Teil von
namegilt als Alias. AusTheodore "Theo" WilkonswirdTheo. - Explizit:
aliases: ["S.", "Sera"]im Frontmatter.
Gesucht wird mit Wortgrenzen, Lin trifft also nicht in Linguistics, und Initialen mit Punkt funktionieren.
Gültige Rollen
| Rolle | Wann |
|---|---|
protagonist |
POV-Hauptfigur |
deuteragonist |
zweitwichtigste Figur, gleichrangig |
antagonist |
Hauptgegenspieler |
love-interest |
romantischer Anker |
mentor |
führt den Protagonisten |
foil |
Kontrastfigur |
herald |
bringt den Ruf zum Handeln |
confidant |
vertrautes Gegenüber für die innere Stimme |
supporting |
benannte, wiederkehrende Figuren |
minor |
einmalige oder Subplot-Figuren, der Hook überspringt die Abschnitts-Empfehlungen |
Eine unbekannte Rolle erzeugt eine Warnung mit der Liste der gültigen Werte.
Status-Stufen
Concept → Profile → Backstory → Arc Defined → Final
| Status | Bedeutung | Inhalt |
|---|---|---|
Concept |
Idee skizziert, Rolle bekannt | Name, Rolle, kurze Beschreibung |
Profile |
Profil ausgearbeitet | zusätzlich Aussehen, Persönlichkeit, grobe Stimme |
Backstory |
Wunde und Lüge identifiziert | zusätzlich Ghost, Want vs. Need, fataler Fehler |
Arc Defined |
Bogen von Anfang bis Ende abgebildet | zusätzlich Character Arc mit Beats |
Final |
produktionsreif | zusätzlich Stimme mit Beispieldialog, alle Beziehungen |
Der Status ist ein Signal an dich, wie reif die Datei ist. Er steuert kein Werkzeug.
Empfohlene Abschnitte
Der Hook warnt, wenn diese bei einer Figur fehlen, die nicht minor ist. Er akzeptiert Überschriften der Ebene 2 und 3.
| Abschnitt | Alternativen, die genügen |
|---|---|
## Want vs. Need |
|
## Fatal Flaw |
|
## The Ghost |
## Backstory / The Wound oder ## Backstory |
## Motivation Chain |
## GMC oder ## GMC (Goal / Motivation / Conflict) |
Want vs. Need
Das äußere Ziel gegen die innere Wahrheit. Dazu gehört die Lüge, die die Figur glaubt und die sie am Need hindert.
Beispiel: Want: beweisen, dass er mehr ist, als andere sehen. Need: akzeptieren, dass er genug ist. Lüge: „Ich bin nicht genug.“
The Ghost
Das einzelne einschneidende Ereignis oder die anhaltende Bedingung, die die Figur geprägt hat. Es ist die Wurzel der Lüge. Die Vorlage legt es als ### The Ghost unter ## Backstory an.
Fatal Flaw
Kein bloßer Schwachpunkt, sondern ein Fehler, der aktiv Probleme verursacht, mit dem Thema verbunden ist und im Ghost wurzelt.
Motivation Chain
Drei Mal „warum?“: erst das genannte Ziel, dann der emotionale Motor, dann das wundengetriebene Kern-Need.
Character Arc
Bogentyp (positiv, negativ, flach) plus Beats: Setup, Challenge, Midpoint, Crisis, Resolution. Pflicht für den Status Arc Defined.
Relationships
Die Vorlage führt den Abschnitt als ## Key Relationships, und genau diese Überschrift akzeptiert der Harvest-Reader von /storyforge:harvest-character-evolution auch — ebenso ## Relationships, ## Relationship und ## Beziehungen (mit oder ohne Zusatz „über die Bände"). Eine Umbenennung ist also nicht nötig. Bullets mit fettem Namen sind das übliche Format:
## Relationships
- **Theo:** Partner, die Beziehung, die ihn in die Familie zurückzieht.
- **Caelan:** Vater, sein am längsten ungelöster Konflikt.
Wann Figuren weniger brauchen
Nicht jede benannte Figur braucht Arc Defined. Der Hook ist hier nur ein Signal, der Maßstab hängt von der Rolle ab:
| Figur | Typischer Status | Erwartet |
|---|---|---|
| Protagonist (POV) | Arc Defined oder Final |
alle empfohlenen Abschnitte und Stimme mit Beispiel |
| Deuteragonist | Arc Defined |
alle empfohlenen Abschnitte |
| Antagonist | mindestens Backstory |
Want vs. Need, Fatal Flaw, Ghost, auch Bösewichte haben innere Logik |
| Love-Interest | Backstory, bei eigenem Bogen Arc Defined |
Want vs. Need und Ghost |
| Mentor, Herald, Foil, Confidant | Profile bis Backstory |
Stimme und der Psychologie-Ausschnitt, der ihre Funktion trägt |
| Supporting mit eigenem Bogen | Backstory |
Ghost und Arc |
| Supporting (wiederkehrend) | Profile |
Persönlichkeit, Stimme, Aussehen |
| Minor | Profile oder Concept |
gerade genug zum Darstellen |
Verhalten des Hooks
Der Hook läuft als PostToolUse nach Write, Edit und MultiEdit auf .md-Dateien in characters/ und people/. Die Datei ist zu diesem Zeitpunkt schon geschrieben. Exit-Code 2 gibt die Meldung an das Modell zurück, das den Fund beheben muss.
Was mit Exit-Code 2 gemeldet wird
| Bedingung | Meldung |
|---|---|
| kein YAML-Frontmatter | Missing YAML frontmatter |
| ungültiges YAML | Invalid YAML frontmatter: ... |
| Frontmatter ist keine Zuordnung | Frontmatter is not a YAML mapping |
| fehlendes Pflichtfeld | Missing frontmatter field: 'status' |
Was warnt (Exit-Code 0)
| Bedingung | Meldung |
|---|---|
| unbekannte Rolle | Unknown role 'wizard'. Valid: ... |
| fehlender empfohlener Abschnitt | Missing recommended section '## Want vs. Need' |
Was übersprungen wird
- Dateien außerhalb von
characters/undpeople/ INDEX.md- genau der Tracker-Pfad
series/{serie}/characters/{datei}bzw.series/{serie}/people/{datei}— die letzten vier Pfadsegmente müssen exaktseries/ Serien-Slug /charactersoderpeople/ Dateiname lauten. Figurendateien von Büchern, die unterseries/{serie}/{buch}/characters/liegen, treffen dieses Muster nicht und werden wie jede andere Figurendatei geprüft.
Memoir-Personendateien
Dateien, die am Frontmatter (person_category, consent_status oder real_name) als Memoir-Personendateien erkennbar sind, bekommen eine verkürzte Prüfung: Der Wert von role wird nicht gegen die Rollenliste abgeglichen, und die empfohlenen Abschnitte der Fiction-Figuren entfallen. role ist bei ihnen auch kein Pflichtfeld mehr — Pflicht sind nur name und status. Das Tool create_person schreibt status, aber kein role, und besteht die Prüfung damit direkt. Details: Memoir-Unterstützung.
Serien-Tracker
Serien-Projekte haben je Figur zusätzlich eine Tracker-Datei unter series/{serie}/characters/{tracker-slug}.md. Das ist eine dünne Serien-Ebene: Sie hält fest, was über alle Bände konstant ist, und führt die Entwicklung je Band.
| Dateityp | Pfad | Zweck |
|---|---|---|
| Figurendatei im Buch | projects/{buch}/characters/{slug}.md |
volles Profil: Psychologie, Bogen, Stimme. Quelle der Wahrheit für ein Buch. |
| Serien-Tracker | series/{serie}/characters/{tracker-slug}.md |
Entwicklung über die Bände, Beziehungen über die Bände |
Verknüpft sind beide über das optionale Feld book_slug im Tracker. Fehlt es, gilt der slug des Trackers als Slug der Buch-Datei:
---
name: "King Caelan"
slug: king-caelan # Slug des Trackers
book_slug: caelan # optional: Buch-Datei ist caelan.md
role: protagonist
species: vampire
status: "Profile"
recurs_in: ["B1", "B2"]
tracker_type: "thin"
---
Das Feld brauchst du nur, wenn der Tracker einen Rollen- oder Titel-Slug trägt, die Buch-Datei aber den bloßen Namen. Ohne die Verknüpfung liefert der Brief für diese Figur series_evolution: null.
tracker_type ist thin (Standard, die Buch-Datei bleibt Quelle der Wahrheit) oder full (der Tracker selbst, selten).
Aufbau eines Trackers
## Snapshot
Ein Absatz Essenz im Serien-Maßstab: Was ist über alle Bände konstant?
## Evolution per Band
### B1 Start
### B1 Ende
### B2 (geplant)
## Beziehungen über die Bände
- **Andere Figur:** B1-Dynamik → B2-Wandel → B3-Auflösung
## Updates Log
Der Parser kennt zwei Formen: Bullets je Band (### B1 Firelight mit **Start:** und **Ende:**) und getrennte H3-Überschriften (### B1 Start, ### B1 Ende). Schreibende Skills behalten die Form bei, die dein Tracker schon nutzt. Die Vorlage ist templates/series-character-tracker.md.
Serien-Lebenszyklus
So wandert eine Figur von einem Band in den nächsten:
- Während Band 1: Beim Abschluss eines Kapitels mit Status Review oder Final schlägt
chapter-writereinen Snapshot der POV-Figur vor und speichert ihn nach deiner Bestätigung in der Datenbank. Bleibt das Kapitel auf Draft, entfällt der Vorschlag. - Band 1 ist abgeschlossen: Der Buchstatus läuft über Drafting und Revision auf Proofread, sobald alle Kapitel
Finalsind. Editing, Export Ready und Published setzt du selbst. Steht das Buch auf Export Ready oder Published, läuft/storyforge:harvest-character-evolution firelightohne Rückfrage los. Bei Editing oder Proofread fragt der Skill, ob er trotzdem laufen soll, früher blockt er. Er liest den Endzustand jeder wiederkehrenden Figur und ihre Beziehungen, synthetisiert eine Zusammenfassung „B1 Ende“ und geht die Figuren einzeln mit dir durch (übernehmen, ändern, überspringen, bestehendes behalten). Bestätigtes landet im Tracker, dazu ein Eintrag im Updates Log. - Band 2 anlegen:
/storyforge:new-bookfragt selbst nach Serie und Nummer und registriert das Buch bei bekannter Nummer noch während des Anlegens peradd_book_to_series. Ist die Serie und Nummer bekannt, kopiert der Skill danach automatisch die wiederkehrenden Figurendateien (gefiltert nachrecurs_in) mitcopy_recurring_chars_to_new_book1:1 ins neue Buch, nach deiner Bestätigung. Figuren, die nur in Band 1 vorkommen, bleiben außen, neue Figuren von Band 2 legst du manuell an. Der Kopierschritt leitet das Band-Kürzel ausseries_numberab und überspringt sich, wenn die Nummer fehlt,0oder1ist. Wurde die Nummer beim Anlegen offen gelassen und trägst du sie erst später überadd_book_to_seriesnach, läuft dieser automatische Kopierschritt nicht mehr, du kopierst dann selbst. Die Reihenfolge zeigt das Series-Workflow-Beispiel. - Bootstrap:
/storyforge:bootstrap-book-from-series firelight moonriseliest je Tracker „B1 Ende“ und „B2 (geplant)“, synthetisiert einen Startzustand, geht die Figuren einzeln mit dir durch und schreibt ihn ins Frontmatter der Figurendatei im neuen Band, samtseries_evolution_imported_from. Steht der Vorgängerband noch nicht auf Export Ready oder Published, fragt der Skill, ob er trotzdem laufen soll. - Schreiben:
chapter-writerliestcharacters_present[*].series_evolution: den Endzustand im Vorgängerband (previous_book_end), den Plan für den aktuellen Band (current_book_plan) und die Beziehungsentwicklung (relationships_evolution). Das befüllt der Brief für Bücher in beiden Ablagen, flach unterprojects/{buch}und verschachtelt unterseries/{serie}/{buch}. - Von vorn: Ist Band 2 auf dieselbe Weise abgeschlossen, läuft das Harvest erneut für Band 3.
| Skill oder Tool | Wann | Liest | Schreibt |
|---|---|---|---|
chapter-writer (POV-Snapshot) |
Kapitelende bei Review oder Final | Kapitel-Timeline | Snapshot in der Datenbank |
harvest-character-evolution |
Buchende, bei Buchstatus Export Ready oder Published (Editing und Proofread mit Rückfrage) | Figurendatei, Beziehungen | Tracker B{N} Ende, Updates Log |
copy_recurring_chars_to_new_book (nach add_book_to_series) |
Anfang des Folgebands | Tracker recurs_in, Figurendateien |
Figurendateien im neuen Buch (Kopien) |
bootstrap-book-from-series |
nach dem Anlegen, vor dem Schreiben | Tracker B{prev} Ende, B{new} (geplant) |
Frontmatter der Figurendatei, Updates Log |
Chapter Writing Brief (series_evolution) |
jeder Brief in einem Serien-Buch | Tracker | schreibt nichts |
Ein komplettes Beispiel mit allen Ausgaben steht unter Series-Workflow-Beispiel.
Wann series_evolution leer bleibt
Das Feld ist im Brief immer vorhanden, damit Verbraucher auf null prüfen können. Es ist null, wenn eine dieser Bedingungen zutrifft:
- Das Buch gehört zu keiner Serie: Eigenständige Romane tragen kein
series:in der README.harvest-character-evolutionmeldet dann, dass das Buch zu keiner Serie gehört, und endet sauber.bootstrap-book-from-seriesverlangt, dass beide Bücher dieselbe Serie teilen. - Die
series_numberdes Buchs ist kleiner als 1. Ein Buch, das noch nicht mitadd_book_to_seriesnummeriert wurde, hatseries_number0 oder keine. - Es gibt keinen Tracker für den Buch-Slug der Figur, oder der Tracker enthält für den aktuellen Band weder Start-, Ende- noch Geplant-Text.
recurs_inprüft der Brief dafür nicht.