Reading a project
The offline pass knows who shares a scene. A local model can say how: the relationships between the people in a scene, the outside references the scene is invoking, and what happens. This is the References layer of the story map, the labelled edges in its Scenes layer, and the Plot column of the plot grid.
Needs Local (Ollama) as the model, as do the threads' readings below. deepseek-r1:14b is recommended. The plot grid's readings are the one exception and run on Ollama or Claude.
Running it
From the story map panel, Read project with model reads every scene of the project. On a chapter node's card (turn on the Notes kind), Read with model reads just that note. The command Read this note with model (story map) reads the active note when run from an editor.
The status line bottom-left counts scenes as they go; press the button again to stop. Nothing is lost on stop: the result is saved after every scene.
What the model is asked
For each scene, the model gets the prose and the list of names known to be in it, and returns:
- relations —
from,to(both from the given names), a one-to-three-word label ("sister", "rival", "owes money to", "guards"), and a verbatim quote; - references — name ("Orpheus and Eurydice", "the 1755 Lisbon earthquake"), kind (myth, history, literature, scripture, other), which given name carries the echo, one sentence on the parallel, and a quote. Indirect echoes only when the parallel is specific — a descent with a rule not to look back, not "a journey";
- events — plot as it happens ("Marta confesses the theft to Ilse"), participants from the given names, a quote. At most five.
What is kept
- A relation must join two names that were on the list, and must not be self-referential. "Marta" is accepted for Marta Kovács by the same lookup the map uses.
- Every claim must quote the scene verbatim; the quote is checked. No quote, no claim.
- Duplicates (same pair, same label) collapse.
A model that invents a cousin does not get a node. This is deliberate and makes the reading conservative — a 7B model may return little; a 14B model returns more of what survives.
Incremental by design
Each reading is stored with a hash of the scene's prose. Next time, unchanged scenes are skipped ("Unchanged 2/7"), so re-reading a novel after editing one scene costs one scene. An edited scene's old edges turn dashed on the map until it is re-read. Renaming a heading counts as a new scene.
Readings are stored in Story map.md inside the project folder — see Files & sync.
Reading for intent, and for echoes
Two more readings live in the story threads view and follow the same rules — local only, on command, saved as they go, skipped where nothing changed: reading for intent, which asks what each open contradiction means, and reading for echoes, which embeds every sentence and keeps the pairs that say the same thing.
Reading the plot grid
The plot grid asks a narrower question, column by column: what is this thread doing in this scene? The answer is a reading, a note of at most twenty words with the verbatim quote that made the model think so, kept in Story map.md under a grid key and shown as a sparkle in the empty cell. It is never a stop and never a line in a chapter: you write the cell in your own words, or dismiss it. Check this column against the draft… asks, for each plan, whether it is on the page and offers the quote as the anchor; Propose columns… asks, over the events already read, which threads deserve a column. Same rules: no quote, no reading; scenes unchanged since their last reading are skipped; Ollama or Claude, Claude against the daily cap.
Reading for facts
The story threads view runs a second, separate reading with the same rules: Read project for facts asks the model, scene by scene, for the concrete facts the scene states about the names in it — Ilse · eye colour · green, with a verbatim quote. It is validated the same way (a fact about a name not in the scene is dropped, so is one whose quote is not there), cached by the same hash, and stored beside the relation readings with its own hash, so re-reading one kind never disturbs the other. Contradictions between scenes are then found by code, not by the model; see Contradictions.