1667writing environment, terminal
contents
forkinstall
  • macOS · Linux · Windows
  • no account
  • no telemetry
  • Apache-2.0

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 | sh

Installs 1667 0.10.8. Supports macOS arm64/x64 and glibc 2.17+ Linux arm64/x64. Run 1667 upgrade for later managed releases.

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 }
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.
FIG. 1 — live replay · compose, compare takes, open the map
how it works

Press Enter to open the composer, type what happens next, and press Enter again to generate the next story part.

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.
Start a story →
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.
FIG. 2 — live replay · map · path / tree / mass

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

The 1667 keyboard reference listing commands for moving, writing, opening panels, shaping the story, and using the map.
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.
FIG. 3 — screen · keyboard reference

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 →
The 1667 settings panel showing connection and generation controls.
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.
FIG. 4 — screen · connection and generation settings

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

OpenAI
Anthropic
OpenRouter
Ollama
LM Studio
llama.cpp
KoboldCpp
Custom endpoint

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.

1,667 words. Tonight

curl -fsSL https://1667.ai/install.sh | sh

Installs 1667 0.10.8. Supports macOS arm64/x64 and glibc 2.17+ Linux arm64/x64. Run 1667 upgrade for later managed releases.

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 }