|
Some checks failed
Create Release / Check if Version Bump PR Merged (push) Has been cancelled
Post-Merge Version Bump / Check if Version Bump Needed (push) Has been cancelled
Create Release / Create Git Tag and GitHub Release (push) Has been cancelled
Post-Merge Version Bump / Create Version Bump PR (push) Has been cancelled
The pack had a premise (a few sentences), per-book summaries and a weekly timeline, but no single spine saying what the main line is and which threads are side stories. plot.md is the one prose file in DATA/: the author's telling, split into backbone beats, an explicit side-story register, the verbatim transcription (spoken tellings are expected - dictating into a note app is often the easiest way to produce a baseline), deviations once the novel departs from it, and open threads. The hierarchy is written into the file so it cannot drift: plot.md is INTENT, the manuscript is REALISED, the wiki is DETAIL; on conflict the agent reports instead of silently picking. Side stories are first-class - an unregistered thread is invisible to the agent. Wired in: SCHEMA (tree, naming table, new 5.4), templates/DATA/plot.md, OpenNovelAgent load list + read-both-backbone-and-side-stories rule, /init asks for a spoken telling and scaffolds the file, Importer maps fragments into it, StoryReviewer measures chapters against it. |
||
|---|---|---|
| .. | ||
| .opencode | ||
| docs | ||
| templates | ||
| LICENSE | ||
| PACK-NOTES.md | ||
| README.md | ||
| start.sh | ||
| sync-to-vault.sh | ||
OpenNovelWriter
Your AI co-author for novels — not your developer.
You tell the story. OpenNovelWriter writes the chapters in your voice.
✍️ Co-author, not a generator — chapters are built around your direction 🧠 World memory — world wiki, timeline, and glossary as YAML 🎭 Your voice — learns your writing style from sample chapters 🌍 Multilingual — write in one language, publish in many 📝 Obsidian-native — everything is Markdown, editable in your editor
What is OpenNovelWriter?
A co-author agent for OpenCode that writes around the author rather than for them. You say "next chapter: Elena finds the letter" — OpenNovelWriter loads your world wiki, your writing style, and the story so far, and writes the chapter in your voice.
Unlike a code agent, OpenNovelWriter doesn't generate files from specs — it generates prose from a living world.
Quick Start
# 1. Create and name a vault/workspace for your book (in Obsidian), then open
# that folder in opencode.
# 2. Initialize it (interactive wizard) — runs INSIDE the folder
opencode --agent OpenNovelAgent
> /init
# 3. Build the world, or start writing
> "Let's build the world wiki with the main characters"
> "Write Chapter 001: [what should happen]"
# 4. Translate
> "Translate chapters 1-5 into English"
The Core Concept: workspace = book
One book = one workspace = one folder. You create and name a vault for each
book (e.g. "Die Kessler Zwillinge", "Scruffy"), open it in opencode, and run
/init there. The folder's name is the project name.
Writing several books in parallel? Create one workspace per book and switch
between them. The agent is the same in every workspace — what makes each one
that book is its own AGENTS.md + DATA/ (world wiki, timeline, glossary, style).
The Core Loop
Author: "next chapter — this should happen"
↓
Agent loads: AGENTS.md + world wiki + timeline + writing style
↓
Agent proposes a chapter draft → author approves
↓
Agent writes the chapter → author edits in Obsidian
↓
Agent harvests new facts → updates wiki & timeline
Project Structure
My Series/
├── 01/ # book 1
│ ├── DE/ # Kapitel 001.md, Kapitel 002.md, …
│ └── EN/ # Chapter 001.md, …
├── DATA/ # world wiki, timeline, glossary, writing style
├── AGENTS.md # project rules
└── README.md
See docs/SCHEMA.md for the complete conventions.
What's Included
OpenNovelAgent— the primary co-author/init— interactive project wizard (language first, then everything in that language)DATA/schemas — world wiki, timeline, glossary (YAML in Markdown)languages.yaml— extensible language registry
For the Community
OpenNovelWriter is designed to be multilingual. The /init wizard's first
question is the writing language; all further questions and content follow that
language. New languages are added as a single entry in .opencode/languages.yaml.
Attribution
OpenNovelWriter builds on the exceptional work of Darren Hinde and the OpenAgentsControl project. Without that foundation — the agent concept, the context system, and the plan-and-approve workflow — this project would not exist. Thank you, Darren.
License
MIT — Copyright (c) 2025 Darren Hinde (OpenAgentsControl) and Copyright (c) 2026 OpenNovelWriter Contributors. Darren Hinde's original work remains under the MIT license.