Write in the terminal
Write a paragraph, then ask 1667 for the next one. Keep every take, compare versions with the arrow keys, and continue the story line you choose. Projects stay in folders on your computer.
curl -fsSL https://1667.ai/install.sh | shInstalls 1667 0.10.8. Supports macOS arm64/x64 and glibc 2.17+ Linux arm64/x64. Run 1667 upgrade for later managed releases.
powershell -ExecutionPolicy Bypass -c "irm https://1667.ai/install.ps1 | iex"Installs 1667 0.10.8 on Windows x64. Exit 1667 and run this command again to install a later release.
npm install --global @1667-ai/cli@latestNeeds Node 22. npm manages this installation. Use npm to install later releases.
git clone https://github.com/1667-ai/1667.gitcd 1667 && npm cicd tui && bun install --frozen-lockfile && bun startNeeds Bun 1.3.14 or later, and Node 22. Git manages this installation.
verify the installer first
This optional path needs GitHub CLI. It verifies version 0.10.8 before it runs the local file.
d=$(mktemp -d) && (trap 'rm -rf "$d"' EXIT && cd "$d" && gh release download v0.10.8 --repo github.com/1667-ai/1667 --pattern install-stable.sh && gh attestation verify install-stable.sh --hostname github.com --repo 1667-ai/1667 --signer-workflow 1667-ai/1667/.github/workflows/release-npm.yml --source-ref refs/tags/v0.10.8 --source-digest 7273e968a890a418a18def544bfee5f5feaf49e0 --deny-self-hosted-runners && sh install-stable.sh)$d=Join-Path ([IO.Path]::GetTempPath()) ([Guid]::NewGuid()); New-Item -ItemType Directory -Path $d | Out-Null; try { gh release download v0.10.8 --repo 1667-ai/1667 --pattern install-stable.ps1 --dir $d; if ($LASTEXITCODE -ne 0) { throw 'GitHub release download failed.' }; gh attestation verify (Join-Path $d 'install-stable.ps1') --hostname github.com --repo 1667-ai/1667 --signer-workflow 1667-ai/1667/.github/workflows/release-npm.yml --source-ref refs/tags/v0.10.8 --source-digest 7273e968a890a418a18def544bfee5f5feaf49e0 --deny-self-hosted-runners; if ($LASTEXITCODE -ne 0) { throw 'GitHub attestation verification failed.' }; powershell -ExecutionPolicy Bypass -File (Join-Path $d 'install-stable.ps1'); if ($LASTEXITCODE -ne 0) { throw '1667 install failed.' } } finally { Remove-Item -LiteralPath $d -Recurse -Force }drag or use arrow keys to pan
Fullscreen unavailable.Open the demo video →
1667 homepage demo The opening write view shows "The lantern keeper," chapter three, parts 11 through 13. Part 12 is on take 3 of 5: "He did not move toward the stairs. Instead he set the brass compass on the bar between them, and its needle went around twice, slow, like a dog deciding whether to lie down, and stopped pointing at Maren. 'Has the cliff road ever been walked at night without a light?' he asked. 'Not by anyone who came back,' she said. The needle shivered and held." Compose: Enter opens the composer. The direction "let the unlit lantern answer" is typed and submitted. The generated next part reads: "The lantern flame bent toward the compass, though no door had opened." The program then waits. Compare takes: Up moves back through story parts to the five-take passage. Left and Right compare sibling takes without removing any of them. Explore the path map: M opens one row per story part. Circles show sibling takes, the selected take is highlighted, and word counts sit at the right. Arrow keys move through parts and takes before Escape returns to the story. Every key in one place: Question mark opens this complete reference, then Page Down shows the remaining commands: 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 N: author's note Y or Shift+Y: copy the part or whole line Control+↑ Control+↓: previous prompts in Direct OPEN — panels and views M: map of the whole story F: facts kept for context A: aside O: switch story or open the library Colon or Control+P: command palette Slash: search the story or the vault Comma: generation settings Control+G: wide context details Control+R: inspect the next request L: how sure the model was H: past model requests Exclamation mark: everything the app said 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 Shift+T: show or hide a thought Z: typewriter mode Shift+F: facts rail, automatic or off MAP — while the map is open M: cycle path, tree, and mass F: lens one Fact in the tree A: all takes or sketches Enter: reroute a node or sketch L: follow a tree line or open a mass line ← →: in the tree, jump to the next lane Tab: hide tree lanes, or the path S: sort the mass view D or T: prune, tag, or change the path SEARCH — while search is open ↑ ↓: previous or next hit ← →: fold or open a group Tab: search this tree or the whole vault Enter: go to the hit Control+S: match case exactly Chapter rows differ; the line under the story explains the active row. Drag selects, Control+C copies, and Escape closes.
Press Enter to open the composer, type what happens next, and press Enter again to generate the next story part.
Up and down select a story part; left and right select one of its sibling takes without deleting the others.
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.
01 / Takes
Compare every version
Ask for the next paragraph when you are ready. 1667 writes one take, then waits for you to continue, revise, or try again.
Keep every take
Ask for another version of a paragraph and the new take appears beside the current one. Use ← and → to compare them. Press D only when you want to delete one.
Choose the story line
Each part can have several takes. Your selected takes form the story line. Open the map to see every branch or continue from a different take.
Keep it in your folder
Each project lives in a folder you choose. Export writes the selected story line to Markdown in the same folder.
02 / The tree
See every branch
Each new take branches from the current part. Press m to open the map and move between story lines, parts, and takes.
Press m again to cycle through path, tree, and mass views. Press d only when you want to delete the selected take.
- path
- Read the selected story line from start to finish. Each row is one part; circles show its other takes.
- tree
- See where the story branches. Choose any take and press l to follow that line.
- mass
- Compare story lines by word count. Sort them by size, date, depth, or name.
drag or use arrow keys to pan
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.
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.
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.
03 / Keys
Eight keys to get started
Use these eight keys for a complete writing session. Press ? at any time to see all 40 commands.
- continueWrite the next part from here
- directSay what happens next, then continue
- flip takesMove between siblings of this part
- movePrevious and next part
- retakeAnother take on the same prompt
- writeAdd a take in your own words
- editOpen the part in the full-screen editor
- mapCycle path, tree, and mass
shows every command
drag or use arrow keys to pan
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 N: author's note Y or Shift+Y: copy the part or whole line Control+↑ Control+↓: previous prompts in Direct OPEN — panels and views M: map of the whole story F: facts kept for context A: aside O: switch story or open the library Colon or Control+P: command palette Slash: search the story or the vault Comma: generation settings Control+G: wide context details Control+R: inspect the next request L: how sure the model was H: past model requests Exclamation mark: everything the app said 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 Shift+T: show or hide a thought Z: typewriter mode Shift+F: facts rail, automatic or off MAP — while the map is open M: cycle path, tree, and mass F: lens one Fact in the tree A: all takes or sketches Enter: reroute a node or sketch L: follow a tree line or open a mass line ← →: in the tree, jump to the next lane Tab: hide tree lanes, or the path S: sort the mass view D or T: prune, tag, or change the path SEARCH — while search is open ↑ ↓: previous or next hit ← →: fold or open a group Tab: search this tree or the whole vault Enter: go to the hit Control+S: match case exactly Chapter rows differ; the line under the story explains the active row. Drag selects, Control+C copies, and Escape closes.
04 / Privacy
No analytics or telemetry
Your stories stay in your project folder. Model requests go to the endpoint you choose.
- analyticsnot collected
- telemetrynot collected
- crash reportererrors stay in a local log
- install IDnone
- accountnot required
Your model provider receives the story text included in each request, so its privacy policy applies.
A background update check reads package information from npm. It does not include your story or settings. Turn it off in Settings if you do not want the check.
Read the source →drag or use arrow keys to pan
1667 settings App Update checks: on. Checks for a newer version. Sends no story or account data. Prompt Author brief: Continue the story in… Default Author Brief for prose… Continue: Continue the story. Default Continue direction for… Connection Provider: dry-run. Selects the service that runs t… Base URL: not set. The address used to reach the m… API key: not set. Saved on this device; never sto… Model Model: not set. Enter the model name used by th… Generation Context size: 32,768, from 1 to 1,000k. Sets how much story context the… Controls: Up and Down move; Left and Right choose; Enter advances; S saves; C checks; M opens the advanced view; Escape closes.
Configure the provider, base URL, API key, model, and generation settings here.
05 / Models
Use hosted or local models
Connect 1667 to a model provider or a server running on your own computer. Requests go directly to the endpoint you configure.
Providers
Generation
- temperature0.8
- max output tokens2,048
- context window32,768
- cache policyoff
Starting defaults. Press , to change them.
Storage and behavior
No tracking
1667 has no analytics, telemetry, crash reporter, or install ID.
Local project files
Stories stay in the project folder you choose. There is no cloud sync.
Generated on request
1667 generates text only when you ask for the next paragraph.
No chat thread
A direction guides the next paragraph without starting a separate conversation.
Your stories stay in the project folder. API keys are stored in a private file outside that folder.
Bringing an existing story? Follow the SillyTavern guide or the NovelAI guide.
06 / FAQ
Common questions
Does it write the book for me?
No. Press Space to continue, or Enter to give a direction. 1667 writes one paragraph and waits. You choose which take belongs in the story.
What happens to the takes I don't use?
They stay in the story tree. Use ← and → to compare takes, or open the map to find another branch. Only D deletes a take.
Is anything collected about me?
No. 1667 has no analytics, telemetry, crash reporter, or install ID. Model requests go to the endpoint you configure. An optional update check reads package information from npm and can be turned off in Settings.
Why 1667?
The name comes from writing 1,667 words a day for thirty days: just over 50,000 words, or the length of a short novel. 1667 does not track a daily word target.
Where does my writing live?
In a folder you choose. Run 1667 init in ~/book to create a project there. Export writes the selected story line to Markdown in the same folder. Back up the folder as you would any other writing project.
Which models can I use?
Models behind OpenAI-compatible or Anthropic-compatible endpoints. 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.
Do I need to be good at the terminal?
No. Open a terminal and run 1667. Use the arrow keys to move, Space to continue, and ? to see every command. Press comma to open Settings.
Can I run it on Windows?
Yes. The native Windows x64 release uses the PowerShell Installer. Exit 1667 and run the same command again for a later release.
What does it cost?
1667 is free and Apache-2.0 licensed. You pay your model provider directly, or pay nothing for a model running on your own computer.
07 / Docs
Documentation
Learn how stories, takes, Facts, model connections, files, and imports work in 1667.
- Start Getting startedInstall 1667, create a project, and open the starter tour.
- Concepts Parts, takes, and story linesSee how one story keeps alternatives without replacing earlier text.
- Concepts Facts and contextControl the notes and story text that enter the next model request.
- Setup Write with a local modelSet up Ollama, LM Studio, llama.cpp, KoboldCpp, or another OpenAI-compatible server.
- Writing Write without a modelWrite your own prose, keep alternative takes, choose a story line, and export Markdown.
- Migration Move from SillyTavernImport chats, swipes, group chats, character cards, Character Books, and World Info.
- Migration Move from NovelAIImport stories, scenarios, Lorebooks, presets, and retry history.
- All documentation
1,667 words. Tonight
curl -fsSL https://1667.ai/install.sh | shInstalls 1667 0.10.8. Supports macOS arm64/x64 and glibc 2.17+ Linux arm64/x64. Run 1667 upgrade for later managed releases.
powershell -ExecutionPolicy Bypass -c "irm https://1667.ai/install.ps1 | iex"Installs 1667 0.10.8 on Windows x64. Exit 1667 and run this command again to install a later release.
npm install --global @1667-ai/cli@latestNeeds Node 22. npm manages this installation. Use npm to install later releases.
git clone https://github.com/1667-ai/1667.gitcd 1667 && npm cicd tui && bun install --frozen-lockfile && bun startNeeds Bun 1.3.14 or later, and Node 22. Git manages this installation.
verify the installer first
This optional path needs GitHub CLI. It verifies version 0.10.8 before it runs the local file.
d=$(mktemp -d) && (trap 'rm -rf "$d"' EXIT && cd "$d" && gh release download v0.10.8 --repo github.com/1667-ai/1667 --pattern install-stable.sh && gh attestation verify install-stable.sh --hostname github.com --repo 1667-ai/1667 --signer-workflow 1667-ai/1667/.github/workflows/release-npm.yml --source-ref refs/tags/v0.10.8 --source-digest 7273e968a890a418a18def544bfee5f5feaf49e0 --deny-self-hosted-runners && sh install-stable.sh)$d=Join-Path ([IO.Path]::GetTempPath()) ([Guid]::NewGuid()); New-Item -ItemType Directory -Path $d | Out-Null; try { gh release download v0.10.8 --repo 1667-ai/1667 --pattern install-stable.ps1 --dir $d; if ($LASTEXITCODE -ne 0) { throw 'GitHub release download failed.' }; gh attestation verify (Join-Path $d 'install-stable.ps1') --hostname github.com --repo 1667-ai/1667 --signer-workflow 1667-ai/1667/.github/workflows/release-npm.yml --source-ref refs/tags/v0.10.8 --source-digest 7273e968a890a418a18def544bfee5f5feaf49e0 --deny-self-hosted-runners; if ($LASTEXITCODE -ne 0) { throw 'GitHub attestation verification failed.' }; powershell -ExecutionPolicy Bypass -File (Join-Path $d 'install-stable.ps1'); if ($LASTEXITCODE -ne 0) { throw '1667 install failed.' } } finally { Remove-Item -LiteralPath $d -Recurse -Force }



