A file-based studio for novel projects that fuses your own drafting with AI refinement. Built on Andrej Karpathy's LLM Wiki pattern, adapted for fiction.
Genre-neutral, writer-neutral, and designed to be calibrated to you rather than used as-is.
What you need: a paid Claude Pro or Max subscription (Claude Code isn't on the free tier), and about 20-30 minutes to install. No coding required. Obsidian is optional — it's the reading window, not the engine. Full walkthrough in SETUP.md.
Two worked example projects ship with the repo, so every operation does something real before
you've written a word into it. Install, open a terminal in this folder, run claude, and try
these in order:
/query example-lanterns what do we know about the fog
A cited answer, read from the wiki rather than from the manuscript. The citations are the point.
/lint example-lanterns
Two real continuity findings. They're planted on purpose. Note that lint reports and
changes nothing, and that it flags contradictions rather than resolving them — canon calls are
yours. The answer key is in projects/example-lanterns/wiki/sources/chapter-map.md; read it
after.
/refine example-lanterns ch4-wip.md
There's a deliberately bad draft in there. Watch what it catches, and how it hands you findings in approvable batches instead of just rewriting your prose.
That's the system. Everything after this is your material going through it — GETTING-STARTED.md takes you from here to your own manuscript in about an hour.
The two examples are deliberately nothing alike.
projects/example-lanterns/is a three-chapter novel in progress: quiet literary register, a real wiki, a full writers'-room cast, two planted continuity errors, a bad draft.projects/example-tutorial-zone/is a finished short story in comedic LitRPG, with numbered sections instead of chapters and System windows instead of prose. Between them, nothing in the system gets to assume there's only one shape of book. Delete both when they've served their purpose.
Ask one model to write a scene with five characters and you get five characters who sound like the same person doing different jobs. Not because it can't do voices — because it's holding one prose voice, one plot obligation, and five registers at once, and the registers are the cheapest thing to drop.
So don't ask it to. Give every character their own agent. Each one holds a single register, has read only its own character sheet, and — this is the part that matters — has no obligation to make your scene work.
1. BRIEF your beats, in plain language
│
2. SKELETON scene-builder → setting, cast, blocking, beats, the turn
│ ⛔ GREENLIGHT GATE
3. PERFORMANCES all performers in parallel, from the same approved skeleton
│ (+ embedded-voice agent, + side-cast)
4. WEAVE the room-runner composes the prose, in one voice
4.5 LINT composition lint on its own draft
│
5. DELIVER draft to drafts/, header carries pushback + proposed canon
│ ⛔ nothing graduates without you
One rule holds it together: performers act, only the weaver writes prose. A performer returns dialogue, physical business, and intent — never narration, never finished sentences. Break that and you get five competing narrators and a draft that reads like a committee, because it is one.
The second-most valuable thing it produces is refusal. Every performer is instructed to push back on beats that bend their character out of shape. An agent that has read one character sheet and nothing else is a genuinely useful check on your outline — and when four of them independently object to the same beat, the beat is wrong. That's information no single-pass draft will ever give you.
Read one run, start to finish → — a real
/sceneon the example project, including the performer who refused a beat and the author who took the refusal. It's the fastest way to understand what this is for.The cast ships with the repo, so
/scene example-lanterns <your beats>works on a fresh install without building anything. How to build your own →
The room is not the default loop, and it is not cheap. A full room is eight or nine agent invocations — each performer is a separate agent with its own fresh context, which is exactly why the registers hold, and exactly why it costs. Budget roughly an order of magnitude more than a single-pass draft, spent in a burst. On a Pro or Max plan the thing that bites isn't a bill, it's hitting your usage limit mid-book.
Use it when a scene is dialogue-dense with three or more distinct voices, or when you're not sure
your outline works. For everything else, write it yourself and run /refine — which is the
system's actual daily rhythm. The full cost breakdown and how to control it →
Your manuscript is the source of truth. The wiki — characters, concepts, lexicon — is
derived from it and cites it. The agent does the bookkeeping while you write and make the
calls. Your own voice, in raw/voice-samples/, plus the craft rules drive every refine pass,
so the output is you, sharpened — not a generic AI register.
Three layers, strict ownership:
| Layer | Who owns it | The rule |
|---|---|---|
raw/ |
You | Immutable. The agent reads it and never writes to it. |
wiki/ |
Agent proposes, you approve | Derived. Every claim cites a source in raw/. |
CLAUDE.md + wiki/locked/ |
You | The rules and your authored intent. Enforced, never rewritten. |
Talk to the agent in plain English, or use the slash commands.
/new-novel |
Start here on a cold start. Scaffolds a project, calibrates it, seeds the wiki. |
/chart |
Plan a stretch you can't yet see the way through — one question per session. |
/refine |
Sharpen a draft against your voice + craft rules. The core loop. |
/scene |
Run the writers' room. |
/ingest |
Integrate new canon; update the wiki. |
/query |
Ask the wiki a canon question; get cited answers. |
/lint |
Audit for contradictions, orphans, drift, and who-knows-what-when. |
/table-read |
A blind reader's experience of a chapter — sags, hooks, predictions. |
/expand-chapter |
Grow underfed chapters where the growth is earned. |
/calibrate |
Tune the whole system to your genre and voice. |
/setup-obsidian |
Walk through installing and wiring the optional dashboard plugins. |
/start-fresh |
Strip the example projects and hand back a bare workbench. |
/inbox-sweep |
Triage whatever you dropped in _inbox/ away from your desk. |
/close-session |
Append to log.md and commit. Run it at the end of a session. |
Fourteen commands, four operations — CLAUDE.md §3 maps every command onto the operation it
serves. Everything is findings-first and greenlight-gated: proposals with before/after and
rationale, nothing applied until you approve the batch.
- SETUP.md — get Claude Code running (~20 min, no coding required).
- GETTING-STARTED.md — your manuscript into the system in an hour.
- CLAUDE.md — the master rules the agent reads first, every session.
writing-system/
├── CLAUDE.md ← master schema (the rules)
├── craft/ ← SHARED, genre-neutral
│ ├── voice-and-prose.md the de-AI kill list
│ ├── structure-and-scene.md the turn, want/obstacle/cost, information economy
│ ├── tone-and-calibration.md the dial, voice separation
│ ├── technique-library.md how to derive craft moves from your comps
│ └── lanes/ ← THE GENRE LAYER. one file per project
├── author/ ← SHARED: go-to-market, platform, readership
├── docs/ ← the writers' room, adapting the system, dashboards
├── .claude/ ← slash commands + your cast of agents
└── projects/<your-book>/
├── CLAUDE.md ← this book's voice + locks
├── raw/ ← source of truth — never edited by the agent
├── wiki/ ← derived bible (entities, concepts, locked, sources)
├── planning/ ← pre-canon: open story questions (/chart)
├── drafts/ ← fusion-loop workspace
└── outputs/ ← reports + exports
raw/is never edited by the agent. Work on copies; preserve originals.wiki/locked/— protected beats and refrains — is enforced, never rewritten.raw/voice-samples/is calibration only. Never copied or adapted into prose.
The first two aren't only instructions: .claude/settings.json denies the
agent's editing tools any path under raw/ or wiki/locked/ outright, and the shell isn't
pre-approved, so anything trying to reach around that has to stop and ask you.
Run /calibrate <project>. It interviews you about genre, comps, POV, tone, and what's
protected, then writes your lane file and project schema together.
Everything genre-specific lives in craft/lanes/ and projects/<p>/. The rest of craft/ is
structural and shouldn't need editing when you change genres — see
docs/adapting-the-system.md.
The two lane files in craft/lanes/ ship as examples, not defaults, in deliberately opposite
genres. Delete both once you've written your own.
If you'd rather skip the examples entirely, /start-fresh strips them and hands back a bare
workbench.
A standalone HTML dashboard, in progress on feature/html-dashboard. The Obsidian dashboards are
the supported path in v1.
MIT — see LICENSE. The license covers the template. Anything you write inside your copy is yours, unencumbered; you don't have to open-source your novel because you used an open-source template to write it. Credits and third-party licenses in THIRD-PARTY.md.