The path map shows one row per part, sibling takes as circles, and word counts at right; the arrow keys move its cursor.
Press ? to open the complete keyboard reference, then use Page Down to read the remaining commands.
You move through a manuscript, and the model writes a paragraph when you ask it to. Then it stops and waits for you.
Ask for another version of a paragraph and the one you were reading stays where it is. The new take sits beside it, and ← and → flip between them. Every take you generate stays on the tree, and d is the only thing that removes one.
A story is a tree of parts and takes. The story line is the path you have selected through it. Branches you walked away from are still there, and still yours to come back to.
Stories sit in a directory you chose. Export writes Markdown next to them. There is no server to sign in to and nothing to migrate off later.
Ask for another take and the one you were reading does not go anywhere. It becomes a sibling. Press m and the shape of the whole thing opens up: the line you are on, the forks you made, and the paragraphs you wrote once and walked away from.
Three views, cycled with the same key. Nothing is archived, nothing is pruned on your behalf, and d is the only thing that removes a take.
Path map for “The lantern keeper.” Depth 1 through 13; 23 parts across 4 story lines. One row represents each selected story part. Circles beside rows 3, 5, 8, 11, and 12 show sibling takes. Part 12 is selected at take 3 of 5; part 13 carries the canon-storm tag. The clip moves to adjacent parts, returns to part 12, compares its sibling takes, then returns to take 3. Controls: Up and Down move by depth; Left and Right change take; Escape closes.
1667 · mapmap · tree

⟷ drag or use arrow keys to pan
Tree map for “The lantern keeper.” The story contains 4 lines, 23 parts, and 5 forks. The visible trunk shows six passage rows, three folded cold single-line branches, and seven revealed sketches. The cursor begins on the sketch “Ashe offered her the compass without…” beneath “Maren counted the lanterns twice.” The clip moves up two visible rows, then down two rows to return to that sketch. Controls: Up and Down move by row; L follows a line; M opens mass; Escape closes.
1667 · mapmap · mass

⟷ drag or use arrow keys to pan
Mass map for “The lantern keeper.” The story contains 477 words across 4 lines. Horizontal bars compare canon-storm, alt-quiet-inn, burned, draft-ledger, seven sketches, and the cold single-paragraph branches by word count. The clip moves between lines, then cycles the largest, recent, deepest, and alphabetical sorts before returning to largest. Controls: Up and Down move by row; S changes sort; L opens a line; M returns to path; Escape closes.
No tracking. At all.
Every line below describes code that does not exist. Go and check.
Every request the program makes goes to the endpoint you configured. Nothing comes to us, because there is no server of ours to send it to.
One exception: an optional update check, which ships off. Turned on, it reads a version number and tells you. It downloads nothing and replaces nothing.
1667 generation settings
Theme: lantern Compose focus: off Provider: dry-run Base URL: not set Insecure HTTP to a machine you own: off Stored key: not set Profile: Default Model: not set Temperature: 0.7 Maximum tokens: 2,048 Sampling: default Context window: 32,768 Effort: default Cache policy: off; no controls; no time to live Alternate token-probability count: off Default route: Default profile Prose route: same as default
Controls: Up and Down move; Left and Right choose; Enter advances; S saves;
C checks; Escape closes.
Every destination the program knows about is on this panel, and you put it there. Captured in demo mode, so the connection reads dry-run.
1667 includes no model and rents you nothing. Point it at a provider you already pay, or at a model running on your own computer. The request goes straight there.
Your stories stay in plain text files on your computer. Your key goes in a private file that only you can read, never into the story folder.
These eight cover a whole writing session. There are about 40 in total and ? shows you the rest, but nothing below this line is needed to finish a chapter.
1667 key reference
MOVE — read and navigate ↑ ↓: previous or next row ← →: flip between takes Shift+↑ Shift+↓: nudge the page a line Page Up or Control+U: page up Page Down or Control+D: page down G or Shift+G: first or last part [ ]: previous or next chapter U: undo a chapter break addition or removal
WRITE — make the next part Space: continue this part Enter or I: type what happens next R: retake with the same prompt Shift+R: retake and edit the prompt W: write a take yourself E: edit prose and prompt Y or Shift+Y: copy the part or whole line Control+↑ Control+↓: previous prompts in Direct N: start a new story
OPEN — panels and views M: map of the whole story F: facts kept for context O: switch story or open the library Colon or Control+P: command palette Comma: generation settings Control+G: wide context details Question mark: this key reference Escape: close what is open Q: quit 1667
SHAPE — arrange what exists D: delete this take and everything below it on the current line T: tag the line here C or Shift+C: chapters or end one here X: actions for this part P: show or hide directions Z: typewriter mode Shift+F: facts rail, automatic or off
MAP — while the map is open M: cycle path, tree, and mass A: all takes or sketches Enter: reroute a node or sketch L: follow a tree line or open a mass line S: tree to mass, or cycle mass sorts D or T: prune, tag, or change the path
Chapter rows differ; the line below the story explains the active row. Drag selects, Control+C copies, and Escape closes.
What we didn’t build
Each of these was considered and turned down.
No analytics, no crash reporter, no install id. There is no such code.
No sync, no server of ours. Stories never leave the folder they are in.
Nothing is generated until you press a key that asks for it.
Type an instruction, get a paragraph. There is no thread to scroll back.
No. It writes a paragraph when you ask for one, in the direction you gave it, and then it stops and waits. You choose the take, you cut the line, you decide what the chapter is. The judgement stays yours.
They stay. Every take is written to the tree the moment it exists, and moving to another one changes nothing about it. The map shows you all of them, including the lines you abandoned after a single paragraph. Only d removes a take.
No. There is no analytics code, no telemetry, no crash reporter and no install id in the source. Every request the program makes goes to the endpoint you configured, with one exception: an optional update check, which ships off. Turned on, it reads a version number and tells you. It downloads nothing.
1,667 words a day for thirty days is fifty thousand, which is the pace that finishes a first draft. The number names that pace. Nothing in the program tracks whether you hit it.
In a folder you chose. Run 1667 init in ~/book and that is your project. Export writes the selected story line to Markdown in the same place. Back it up like any other directory. There is no export step to be trapped behind.
Anything behind an OpenAI or Anthropic compatible endpoint. Presets ship for OpenAI, Anthropic, OpenRouter, Ollama, LM Studio, llama.cpp, KoboldCpp, and a custom endpoint. Keys are stored in a private file on your machine and sent only to the provider they belong to. A model running locally needs no key at all.