Novel OS became a studio
v0.2.0 was a multi-agent CLI with a dashboard. This release adds the writing
surface, the world model behind it, and a way to get a finished book out the
other end.
✍️ A real manuscript editor
Final is now a ProseMirror document — inline images, and comments anchored to
positions that survive edits. Agents still read a markdown projection, so not
one agent prompt changed.
Track changes ships with it: suggest mode turns typing into proposals and
deleting into struck text, with per-change or bulk accept/reject. A pending
suggestion is never exported or handed to an agent as accepted prose — the
projection is the reject-all view, enforced in storage rather than in the UI.
🧭 Three modes, not four stages
Writers move between planning, writing and revising constantly, and rarely in
order. ⌘1 ⌘2 ⌘3 re-lay out the studio around whichever you're in. The
pipeline's four stages remain, as provenance rather than a workflow.
Write mode gets out of the way: both rails collapse, continuity runs
silently, nothing volunteers itself, and there is no token meter anywhere near
the page. Select a passage and one bar offers the only four things worth doing.
🛡️ The continuity engine grew teeth
Twelve deterministic checks now, including relationship integrity,
since-anachronisms, contradictory bonds, and dead characters reappearing.
Two additions matter more than the count:
- "This is intentional." A checker cannot tell an unreliable narrator from a
mistake, so every finding can be dismissed with a reason that persists — keyed
to the fact, not the wording. The Guardian reads those exemptions too, so the
AI never re-litigates a call you've already made. - The stall detector. Sagging middles decompose into things the state already
records; three consecutive chapters that change nothing get reported as a
reactive protagonist, and the shape-of-the-book strip shows it at a glance.
No model is asked whether your book drags.
✨ Import a manuscript, keep your afternoon
Codex auto-extract proposes your cast, places and world entries from the prose
itself — deterministic, instant, and never written without confirmation. The
worst hour in this category is re-typing what's already in your draft.
📤 Compile: DOCX · EPUB · HTML · Markdown
Named styles drive the output — change what "Block Quote" means once and the
whole book follows.
Both binary formats are written directly, with no new dependencies. DOCX and
EPUB are ZIP-of-XML, so a writer who exports twice a year carries no document
library to do it.
🐛 Fixed — one of these was eating prose
- Scene breaks were destroyed on save. The house-style pass collapsed a
---
thematic break into" - "and ate the newlines around it, welding two scenes
into one paragraph. - Saving re-parsed the document's own markdown, which would have discarded
every pending track change on the first save. - Continuity checks could report on the wrong chapter — arity was chosen by
catchingTypeError, so aTypeErrorraised inside a check silently re-ran
it against the default chapter. - CORS allowed exactly one hardcoded origin; Write mode didn't collapse its rails
on a fresh load; 39 lint errors and a broken production build.
⚡ Faster
Opening a chapter no longer downloads the editor before anything paints —
593 kB → 166 kB for the chapter route.
374 Python tests · 70 TypeScript tests · production build and lint clean.
Full detail in CHANGELOG.md.
Design reasoning in the author's-workflow spec.
Full changelog: v0.2.0...v0.3.0
