### Pipeline Setup Phase Source: https://github.com/nousresearch/autonovel/blob/master/PIPELINE.md Commands and requirements for initializing the pipeline environment. ```text INPUT: seed.txt (user-provided or generated via seed.py) OUTPUT: branch created, .env configured 1. git checkout -b autonovel/ 2. Verify .env has ANTHROPIC_API_KEY 3. Verify seed.txt exists and is specific enough (world-differentiator, central tension, cost/constraint, sensory hook) ``` -------------------------------- ### Initialize and Run the Autonovel Pipeline Source: https://github.com/nousresearch/autonovel/blob/master/README.md Commands to clone the repository, configure environment variables, install dependencies, and execute the full generation pipeline. ```bash # Clone and setup git clone && cd autonovel cp .env.example .env # Add your API keys # Install dependencies uv sync # Generate a seed concept (or write your own in seed.txt) uv run python seed.py # Run the full pipeline uv run python run_pipeline.py --from-scratch ``` -------------------------------- ### Quick Start: Full Autonovel Pipeline Source: https://github.com/nousresearch/autonovel/blob/master/WORKFLOW.md Sets up the environment, generates a seed concept, creates a new branch, and runs the complete novel generation pipeline from scratch. Ensure your Anthropic API key is configured in the .env file. ```bash cd ~/autonovel cp .env.example .env # Add your Anthropic API key uv run python seed.py git checkout -b autonovel/my-novel uv run python run_pipeline.py --from-scratch ``` -------------------------------- ### Build LaTeX Typesetting with build_tex.py Source: https://context7.com/nousresearch/autonovel/llms.txt Converts markdown chapters into formatted LaTeX files. ```bash # Build LaTeX content from chapters python typeset/build_tex.py ``` -------------------------------- ### Generate Revision Briefs with gen_brief.py Source: https://context7.com/nousresearch/autonovel/llms.txt Use these commands to generate actionable revision instructions from various feedback sources. ```bash # Generate brief from reader panel feedback python gen_brief.py --panel 12 # Generate brief from evaluation callouts python gen_brief.py --eval 12 # Generate brief from adversarial cuts python gen_brief.py --cuts 12 # Auto-detect weakest chapter and generate combined brief python gen_brief.py --auto ``` -------------------------------- ### Configure Environment Variables Source: https://context7.com/nousresearch/autonovel/llms.txt Required API keys and model configuration for the AutoNovel pipeline. ```bash # Required: Core writing and evaluation ANTHROPIC_API_KEY=sk-ant-... # Optional: Cover art and ornament generation FAL_KEY=... # Optional: Multi-voice audiobook generation ELEVENLABS_API_KEY=... # Model overrides (defaults shown) AUTONOVEL_WRITER_MODEL=claude-sonnet-4-6 AUTONOVEL_JUDGE_MODEL=claude-opus-4-6 AUTONOVEL_REVIEW_MODEL=claude-opus-4-6 AUTONOVEL_API_BASE_URL=https://api.anthropic.com ``` -------------------------------- ### Framework Directory Structure Source: https://github.com/nousresearch/autonovel/blob/master/PIPELINE.md Displays the organization of the reusable framework components, including tools, templates, and configuration files. ```text FRAMEWORK (reusable, never edited by the pipeline): README.md -- project overview WORKFLOW.md -- step-by-step human guide PIPELINE.md -- this file (automation spec) program.md -- agent instructions per phase CRAFT.md -- craft education (plot, character, world, prose) ANTI-SLOP.md -- word-level AI tell detection ANTI-PATTERNS.md -- structural AI pattern detection TEMPLATES (empty shells, filled per-novel on branch): voice.md -- Part 1 (guardrails) permanent; Part 2 blank world.md -- section headers only characters.md -- structure template only outline.md -- structure template only canon.md -- empty with instructions MYSTERY.md -- blank template state.json -- {phase: "foundation", iteration: 0, debts: []} TOOLS (the pipeline machinery): Foundation: seed.py -- generate 10 seed concepts gen_world.py -- seed → world.md gen_characters.py -- seed + world → characters.md gen_outline.py -- seed + world + chars → outline.md (part 1) gen_outline_part2.py -- outline + chars → foreshadowing ledger gen_canon.py -- world + chars → canon.md (hard facts) voice_fingerprint.py -- trial passages → voice.md Part 2 Drafting: draft_chapter.py -- write a single chapter with anti-pattern rules run_drafts.py -- batch sequential chapter drafter Evaluation: evaluate.py -- mechanical slop scorer + LLM judge modes: --phase=foundation, --chapter=N, --full Revision: adversarial_edit.py -- "cut 500 words" judge → classified cut list compare_chapters.py -- head-to-head Elo tournament reader_panel.py -- 4-persona novel-level evaluation gen_revision.py -- rewrite chapter from a revision brief build_arc_summary.py -- regenerate arc_summary.md from chapters build_outline.py -- regenerate outline.md from chapters Export: typeset/novel.tex -- LaTeX template (EB Garamond, trade paperback) typeset/build_tex.py -- chapters/*.md → chapters_content.tex Orchestrator: run_pipeline.py -- NEW: fully automated pipeline runner CONFIG: .env.example -- API key template pyproject.toml -- Python dependencies (httpx, dotenv) .python-version .gitignore ``` -------------------------------- ### Autonovel Audiobook Generation Tools Source: https://github.com/nousresearch/autonovel/blob/master/WORKFLOW.md Tools for generating an audiobook from the novel's text. Includes parsing chapters, browsing available voices, testing specific chapters, and assembling the final audiobook. Requires ELEVENLABS_API_KEY. ```bash uv run python gen_audiobook_script.py # Parse all chapters uv run python gen_audiobook.py --list-voices # Browse voices uv run python gen_audiobook.py --test 1 # Test chapter 1 uv run python gen_audiobook.py # Generate all uv run python gen_audiobook.py --assemble # Concatenate ``` -------------------------------- ### Evaluate Novel Phases and Chapters Source: https://context7.com/nousresearch/autonovel/llms.txt Run evaluation scripts for foundation documents, specific chapters, or the full novel. Includes mechanical slop detection constants. ```python # Evaluate planning documents (foundation phase) python evaluate.py --phase=foundation # Scores: magic_system, world_history, geography_and_culture, # character_depth, outline_completeness, foreshadowing_balance # Evaluate a single chapter python evaluate.py --chapter=5 # Scores: voice_adherence, beat_coverage, character_voice, # plants_seeded, prose_quality, continuity, canon_compliance # Evaluate the entire novel python evaluate.py --full # Scores: arc_completion, pacing_curve, theme_coherence, # foreshadowing_resolution, overall_engagement # Mechanical slop detection (built-in, no LLM): TIER1_BANNED = ["delve", "utilize", "leverage", "tapestry", "myriad", ...] TIER2_SUSPICIOUS = ["robust", "comprehensive", "seamless", "pivotal", ...] FICTION_AI_TELLS = [ r"a sense of \w+", r"couldn't help but feel", r"eyes widened", r"heart pounded in (?:his|her|their) chest", ] # Slop penalty: 0-10 deduction applied to LLM judge score ``` -------------------------------- ### Generate Novel Art with gen_art.py Source: https://context7.com/nousresearch/autonovel/llms.txt A multi-step pipeline for generating and curating cover art and chapter ornaments. ```bash # Step 1: Derive visual style from world + voice python gen_art.py style # Step 2: Generate cover variants for human selection python gen_art.py curate cover --n=4 # Step 3: Pick the best variant python gen_art.py pick cover 2 # Step 4: Generate ornament style variants python gen_art.py curate ornament --n=4 python gen_art.py pick ornament 3 # Step 5: Generate all chapter ornaments using picked reference python gen_art.py ornaments-all # Step 6: Generate scene break decoration python gen_art.py scene-break # Step 7: Convert raster ornaments to vector SVG python gen_art.py vectorize # Full pipeline with human curation points python gen_art.py all ``` ```json { "art_style": "linocut woodblock illustration", "color_palette": "sepia, burnt umber, cream, charcoal", "texture": "hand-carved wood grain visible", "cover_concept": "A bronze bell suspended in darkness...", "ornament_concept": "small symbolic motifs from the craft world" } ``` -------------------------------- ### Generate Audiobooks with gen_audiobook.py Source: https://context7.com/nousresearch/autonovel/llms.txt Commands for managing the audiobook generation process, including voice mapping and assembly. ```bash # First, parse chapters into speaker-attributed scripts python gen_audiobook_script.py # List available ElevenLabs voices python gen_audiobook.py --list-voices # Test mode: generate first 10 segments of chapter 1 python gen_audiobook.py --test 1 # Generate single chapter python gen_audiobook.py 1 # Generate chapter range python gen_audiobook.py 1 5 # Generate all chapters and assemble python gen_audiobook.py # Check generation status python gen_audiobook.py --status # Assemble chapters into full audiobook python gen_audiobook.py --assemble ``` ```json { "NARRATOR": {"voice_id": "abc123", "description": "warm baritone"}, "CASS": {"voice_id": "def456", "description": "young male, uncertain"}, "EDDAN": {"voice_id": "ghi789", "description": "older male, gravelly"}, "MINOR": {"voice_id": "jkl012", "description": "default for minor characters"} } ``` -------------------------------- ### Foundation Phase Workflow Source: https://github.com/nousresearch/autonovel/blob/master/PIPELINE.md The foundation phase involves iterative generation of world-building, character, and outline documents, followed by evaluation and canon verification. ```text INPUT: seed.txt OUTPUT: world.md, characters.md, outline.md, voice.md, canon.md, MYSTERY.md EXIT: foundation_score > 7.5 AND lore_score > 7.0 Loop: 1. gen_world.py → world.md (lore, magic system, geography, factions) 2. gen_characters.py → characters.md (wound/want/need/lie, speech, sliders) 3. gen_outline.py → outline.md part 1 (beats, chapter structure) 4. gen_outline_part2.py → outline.md part 2 (foreshadowing ledger) 5. Voice discovery: write 5 trial passages in different registers, select best, fill voice.md Part 2 with exemplars + anti-exemplars 6. Define MYSTERY.md (the central secret the reader discovers) 7. gen_canon.py → canon.md (cross-reference all hard facts) 8. evaluate.py --phase=foundation 9. If score improved → git commit. If worse → git reset --hard HEAD~1. 10. Identify weakest dimension → target next iteration at it. ``` -------------------------------- ### Autonovel Art Generation Tools Source: https://github.com/nousresearch/autonovel/blob/master/WORKFLOW.md Generate visual assets for the novel, including deriving style, creating cover variants, and producing chapter ornaments. Requires FAL_KEY environment variable. ```bash uv run python gen_art.py style # Derive visual style uv run python gen_art.py curate cover --n=6 # Generate cover variants uv run python gen_art.py pick cover 3 # Select variant #3 uv run python gen_art.py ornaments-all # Generate chapter ornaments uv run python gen_art.py vectorize # Convert to SVG → PDF uv run python gen_cover_print.py art/cover.png --canvas-width 11.889 --canvas-height 8.75 --spine-width 0.639 ``` -------------------------------- ### Autonovel Export Tools Source: https://github.com/nousresearch/autonovel/blob/master/WORKFLOW.md Commands for rebuilding structural elements like the outline and summaries, and for generating a PDF version of the novel using LaTeX and Tectonic. ```bash # Rebuild outline uv run python build_outline.py # Rebuild summaries uv run python build_arc_summary.py # PDF generation python3 typeset/build_tex.py && cd typeset && tectonic novel.tex ``` -------------------------------- ### Run Autonovel Pipeline by Phase Source: https://github.com/nousresearch/autonovel/blob/master/WORKFLOW.md Execute specific phases of the Autonovel pipeline independently. Use `--phase` to specify 'foundation', 'drafting', 'revision', or 'export'. The revision phase allows setting a maximum cycle limit. ```bash # Foundation only uv run python run_pipeline.py --phase foundation # Drafting only uv run python run_pipeline.py --phase drafting # Revision only (with max cycle limit) uv run python run_pipeline.py --phase revision --max-cycles 5 # Export only uv run python run_pipeline.py --phase export ``` -------------------------------- ### Autonovel Evaluation Tools Source: https://github.com/nousresearch/autonovel/blob/master/WORKFLOW.md Tools for scoring different aspects of the novel generation process. Use `--phase` for planning documents, `--chapter` for specific chapters, or `--full` for the entire novel. ```bash uv run python evaluate.py --phase=foundation # Score planning docs uv run python evaluate.py --chapter=5 # Score a chapter uv run python evaluate.py --full # Score the whole novel ``` -------------------------------- ### Orchestrate Full Novel Generation Pipeline Source: https://github.com/nousresearch/autonovel/blob/master/PIPELINE.md Pseudocode for the fully automated pipeline, covering foundation generation, drafting, revision cycles, and export. Includes logic for score-based progression and plateau detection. ```python def run_pipeline(seed_path, tag="run1"): setup(tag, seed_path) # Phase 1 while state.foundation_score < 7.5 or state.lore_score < 7.0: weakest = evaluate_foundation() improve_layer(weakest) score = evaluate_foundation() if score > state.foundation_score: commit(f"foundation: improve {weakest}") state.foundation_score = score else: reset() state.phase = "drafting" # Phase 2 for ch in range(1, state.chapters_total + 1): for attempt in range(5): draft_chapter(ch) score = evaluate_chapter(ch) if score > 6.0: commit(f"drafting: ch {ch} score {score}") break else: reset() mechanical_slop_pass(ch) state.phase = "revision" # Phase 3 prev_score = 0 for cycle in range(1, 7): # Diagnosis cuts = adversarial_edit_all() apply_top_cuts(cuts, types=["OVER-EXPLAIN", "REDUNDANT"]) panel = run_reader_panel() # Structural fixes for item in panel.consensus_items(): brief = generate_brief(item, panel, cuts) revise_chapter(item.chapter, brief) if evaluate_chapter(item.chapter) > previous: commit(f"cycle {cycle}: {item.type}") else: reset() # Full evaluation score = evaluate_full() if abs(score - prev_score) < 0.5 and cycle >= 3: break # plateau prev_score = score # Targeted fixes from eval fix_eval_callouts(score.top_suggestion) slop_pass(rewritten_chapters) commit(f"Cycle {cycle} complete: score {score}") # Phase 4 rebuild_docs() typeset() export() ``` -------------------------------- ### CSS Layout and Typography Styles Source: https://github.com/nousresearch/autonovel/blob/master/landing/index.html Defines the global styles, grid layout, and responsive behavior for the landing page. ```css @import url('https://fonts.googleapis.com/css2?family=Bebas+Neue&family=EB+Garamond:ital,wght@0,400;0,700;1,400&display=swap'); * { margin: 0; padding: 0; box-sizing: border-box; } body { background: #0a0a08; color: #e8e4db; font-family: 'EB Garamond', Georgia, serif; min-height: 100vh; overflow-x: hidden; } /* Background art — fixed, covers the viewport */ .bg-art { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: url('cover_bg.png') center center / cover no-repeat; opacity: 0.15; z-index: 0; } /* Main layout — CSS grid, two columns, centered in viewport */ .main-layout { position: relative; z-index: 1; height: 100vh; display: flex; align-items: center; justify-content: center; } .main-inner { display: grid; grid-template-columns: 1fr 1fr; grid-template-rows: 1fr auto; align-items: end; width: 100%; max-width: 1400px; } /* Hero section (left column) */ .hero { grid-column: 1; grid-row: 1; display: flex; flex-direction: column; justify-content: flex-end; padding: 0 4rem 0 6rem; gap: 2rem; } .hero-title { max-width: 420px; } .hero-title .the { font-family: 'Bebas Neue', sans-serif; font-size: 1.4rem; color: #b8943e; letter-spacing: 0.3em; text-transform: uppercase; } .hero-title .title-main { font-family: 'Bebas Neue', sans-serif; font-size: 4.5rem; line-height: 1.0; color: #daa548; text-transform: uppercase; margin: 0.1em 0; } .hero-title .of-the { font-family: 'Bebas Neue', sans-serif; font-size: 1.4rem; color: #b8943e; letter-spacing: 0.3em; text-transform: uppercase; } .hero-title .author { font-family: 'Bebas Neue', sans-serif; font-size: 1.6rem; color: #daa548; letter-spacing: 0.2em; margin-top: 2rem; text-transform: uppercase; } .hero-title .divider { width: 80px; height: 2px; background: #daa548; margin: 1.5rem 0; } .hero-content { flex: 1; max-width: 520px; } .hero-content .tagline { font-size: 1.3rem; font-style: italic; color: #c8c0b0; line-height: 1.6; margin-bottom: 2rem; } .hero-content .created-by { font-size: 1.05rem; color: #999080; margin-bottom: 2.5rem; } .hero-content .created-by strong { color: #c8c0b0; } .download-buttons { display: flex; gap: 1rem; flex-wrap: wrap; } .btn { display: inline-block; padding: 0.8rem 1.8rem; font-family: 'Bebas Neue', sans-serif; font-size: 1.1rem; letter-spacing: 0.15em; text-decoration: none; text-transform: uppercase; border: 2px solid #daa548; color: #daa548; background: transparent; transition: all 0.2s ease; cursor: pointer; } .btn:hover { background: #daa548; color: #0a0a08; } .btn-primary { background: #daa548; color: #0a0a08; } .btn-primary:hover { background: #c8941e; border-color: #c8941e; } /* Explainer section (right column) */ .explainer { grid-column: 2; grid-row: 1; display: flex; flex-direction: column; justify-content: flex-end; padding: 0 6rem 0 4rem; border-left: 1px solid #2a2820; } /* Shared button row — both columns have buttons at the same height */ .button-row { grid-column: 1 / -1; grid-row: 2; display: grid; grid-template-columns: 1fr 1fr; padding: 2.5rem 0 0 0; } .button-row .left-buttons { padding-left: 6rem; } .button-row .right-buttons { padding-left: 4rem; } .explainer-inner { max-width: 520px; } .explainer h2 { font-family: 'Bebas Neue', sans-serif; font-size: 2.2rem; color: #daa548; letter-spacing: 0.1em; margin-bottom: 1.5rem; } .explainer p { font-size: 1.15rem; line-height: 1.8; color: #b0a898; margin-bottom: 1.5rem; } .explainer p strong { color: #e8e4db; } .explainer .cta-buttons { display: flex; gap: 1rem; margin-top: 2rem; flex-wrap: wrap; } /* Responsive */ @media (max-width: 1100px) { .main-layout { height: auto; min-height: 100vh; align-items: flex-start; } .main-inner { display: flex; flex-direction: column; } .hero { padding: 3rem 2rem; text-align: center; } .hero-title { max-width: 100%; } .hero-title .title-main { font-size: 3rem; } .hero-title .divider { margin: 1.5rem auto; } .hero-content { max-width: 100%; } .explainer { padding: 4rem 2rem; border-left: none; border-top: 1px solid #2a2820; } .explainer-inner { max-width: 100%; } .button-row { display: flex; flex-direction: column; gap: 2rem; padding: 2rem; text-align: center; } .button-row .left-buttons, .button-row .right-buttons { padding-left: 0; } .download-buttons { justify-content: center; } .cta-buttons { justify-content: center; } } ``` -------------------------------- ### Per-Novel Branch Directory Structure Source: https://github.com/nousresearch/autonovel/blob/master/PIPELINE.md Displays the files generated automatically on a per-novel branch. ```text seed.txt -- chosen seed concept world.md -- filled world bible characters.md -- filled character registry outline.md -- filled chapter outline + foreshadowing ledger voice.md Part 2 -- discovered voice identity canon.md -- accumulated hard facts MYSTERY.md -- central mystery (author-only) chapters/ch_*.md -- the prose state.json -- current phase, scores, debts results.tsv -- experiment log (every keep/discard) arc_summary.md -- chapter summaries for panel evaluation edit_logs/*.json -- adversarial cuts, panel results, tournament eval_logs/*.json -- full evaluation results briefs/*.md -- revision briefs (input to gen_revision.py) typeset/novel.pdf -- typeset PDF ``` -------------------------------- ### Layer Stack Configuration Source: https://github.com/nousresearch/autonovel/blob/master/program.md Defines the hierarchical structure of the novel writing pipeline, mapping specific files to their respective roles in the creation process. ```text Layer 5: voice.md -- HOW we write (style, tone, vocabulary) Layer 4: world.md -- WHAT exists (lore, magic, geography, history) Layer 3: characters.md -- WHO acts (registry, arcs, relationships) Layer 2: outline.md -- WHAT HAPPENS (beats, foreshadowing map) Layer 1: chapters/ch_NN.md -- THE ACTUAL PROSE (one file per chapter) Cross-cutting: canon.md -- WHAT IS TRUE (hard facts, consistency DB) ``` -------------------------------- ### Draft Novel Chapters Source: https://context7.com/nousresearch/autonovel/llms.txt Generate a single chapter based on context files like the world bible and outline. ```python # Draft chapter 5 python draft_chapter.py 5 # The prompt includes anti-pattern rules: # - No triadic sensory lists (X. Y. Z.) # - No "He did not [verb]" more than once per chapter # - No over-explaining after showing # - Max 2 section breaks (---) per chapter # - 70%+ in-scene (dialogue/action), not summary # - Dialogue should sound like speech, not prose # - Include at least one surprising moment # Output: chapters/ch_05.md # Target: ~3,200 words per chapter ``` -------------------------------- ### Generate World Bible Source: https://context7.com/nousresearch/autonovel/llms.txt Creates a comprehensive world bible from a seed concept, outputting structured lore including cosmology, history, magic system rules and costs, societal implications, geography, factions, and cultural details. Redirect output to a markdown file. ```bash python gen_world.py > world.md ``` -------------------------------- ### Run Multi-Persona Reader Panel Source: https://context7.com/nousresearch/autonovel/llms.txt Evaluate the novel using four distinct personas to identify narrative weaknesses and disagreements. ```python # Run the reader panel (requires arc_summary.md) python reader_panel.py # Four personas evaluate: # - The Editor: prose texture, subtext, sentence-level craft # - The Genre Reader: pacing, worldbuilding payoff, page-turning momentum # - The Writer: structure, foreshadowing, technique vs story # - The First Reader: emotional response, not analytical # Questions asked: # - momentum_loss: where does the story drag? # - earned_ending: does the ending feel earned? # - cut_candidate: what to cut for 10% shorter? # - missing_scene: what scene is needed but absent? # - thinnest_character: who needs more depth? # - best_scene / worst_scene: with quotes # Disagreements are automatically identified: # "Ch 12 - momentum_loss: flagged by editor, genre_reader; not flagged by writer, first_reader" # Output: edit_logs/reader_panel.json ``` -------------------------------- ### Run Autonovel Pipeline Orchestrator Source: https://context7.com/nousresearch/autonovel/llms.txt Orchestrates the complete Autonovel pipeline from concept to finished novel. Manages state, version control, retries, and tool coordination. Requires a seed concept and API keys. ```bash python run_pipeline.py --from-scratch ``` ```bash python run_pipeline.py ``` ```bash python run_pipeline.py --phase foundation ``` ```bash python run_pipeline.py --phase drafting ``` ```bash python run_pipeline.py --phase revision ``` ```bash python run_pipeline.py --phase export ``` ```bash python run_pipeline.py --max-cycles 4 ``` -------------------------------- ### Log Debt in state.json Source: https://github.com/nousresearch/autonovel/blob/master/program.md When writing reveals upstream issues, log a debt in state.json. This JSON object specifies the trigger for the debt, affected files, and its current status. ```json { "trigger": "ch_07: magic system needs teleportation rules", "affected": ["world.md", "ch_03.md"], "status": "pending" } ``` -------------------------------- ### Generate Character Registry Source: https://context7.com/nousresearch/autonovel/llms.txt Builds a complete character registry from seed and world concepts. Includes wound/want/need/lie chains, three-slider profiles, speech patterns, secrets, and relationships. Redirect output to a markdown file. ```bash python gen_characters.py > characters.md ``` -------------------------------- ### Foundation Phase Evaluation Loop Source: https://github.com/nousresearch/autonovel/blob/master/program.md Iterative process for establishing the novel's foundation, requiring specific score thresholds before proceeding to the drafting phase. ```text LOOP until foundation_score > 7.5 AND lore_score > 7.0: 1. Run `python evaluate.py --phase=foundation` 2. Identify the weakest layer/dimension from the eval output 3. Expand or revise that layer's document 4. When adding facts to world.md or characters.md, ALSO log them in canon.md as canonical entries 5. git commit with description of what changed 6. Re-evaluate 7. If score improved -> keep. If worse -> git reset --hard HEAD~1, discard. 8. Log to results.tsv ``` -------------------------------- ### First Draft Sequential Writing Loop Source: https://github.com/nousresearch/autonovel/blob/master/program.md Process for writing chapters sequentially, incorporating context from previous chapters and maintaining consistency through canon updates. ```text FOR each chapter in outline order: LOOP until chapter_score > 6.0 or attempts > 5: 1. Load context: voice.md + world.md + characters.md + this chapter's outline entry + previous chapter's last ~1000 words + next chapter's outline (for continuity) 2. Write chapters/ch_NN.md 3. Run `python evaluate.py --chapter=NN` 4. Keep/discard based on score 5. If writing reveals a lore gap or inconsistency, log a debt in state.json 6. After evaluation, check new_canon_entries in the eval output. Add any new facts established in the chapter to canon.md. 7. Log to results.tsv 8. git commit ``` -------------------------------- ### Autonovel Revision Tools Source: https://github.com/nousresearch/autonovel/blob/master/WORKFLOW.md Commands for managing and applying revisions to the novel. Includes finding cuts, applying specific types of edits, and initiating review processes. ```bash uv run python adversarial_edit.py all # Find cuts in all chapters uv run python apply_cuts.py all --types OVER-EXPLAIN REDUNDANT uv run python reader_panel.py # 4-persona evaluation uv run python review.py # Opus dual-persona review uv run python gen_brief.py --auto # Auto-generate revision brief uv run python gen_revision.py 5 briefs/ch05.md # Rewrite chapter from brief ```