Show HN: 1667, a terminal UI for writing fiction with language models

Aug 17, 2026 08:35 PM - 1 hour ago 1

newthe tree: each return you wrote, still there

1667 asks a exemplary for the adjacent paragraph, past keeps each return it gives you broadside by broadside connected a character you tin locomotion backmost through. Your keys, your endpoint, your files connected your disk. No analytics, nary telemetry, nary relationship anyplace successful the source.

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

Installs 1667 0.9.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 way needs GitHub CLI. It verifies type 0.9.8 earlier it runs the section file.

d=$(mktemp -d) && (trap 'rm -rf "$d"' EXIT && cd "$d" && gh merchandise download v0.9.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.9.8 --source-digest 5548e0565fd424725d1c86493060566e01667c62 --deny-self-hosted-runners && sh install-stable.sh)$d=Join-Path ([IO.Path]::GetTempPath()) ([Guid]::NewGuid()); New-Item -ItemType Directory -Path $d | Out-Null; effort { gh merchandise download v0.9.8 --repo 1667-ai/1667 --pattern install-stable.ps1 --dir $d; if ($LASTEXITCODE -ne 0) { propulsion 'GitHub merchandise 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.9.8 --source-digest 5548e0565fd424725d1c86493060566e01667c62 --deny-self-hosted-runners; if ($LASTEXITCODE -ne 0) { propulsion 'GitHub attestation verification failed.' }; powershell -ExecutionPolicy Bypass -File (Join-Path $d 'install-stable.ps1'); if ($LASTEXITCODE -ne 0) { propulsion '1667 instal failed.' } } yet { Remove-Item -LiteralPath $d -Recurse -Force }

  • macOS · Linux · Windows
  • no account
  • no telemetry
  • Apache-2.0

1667 · demothe lantern keeper

1667 homepage demo The opening constitute position shows “The lantern keeper,” section three, parts 11 through 13. Part 12 is connected return 3 of 5: “He did not move toward the stairs. Instead he group the brass compass connected the bar between them, and its needle went astir twice, slow, for illustration a canine deciding whether to dishonesty down, and stopped pointing astatine Maren. ‘Has the cliff roadworthy ever been walked astatine nighttime without a light?’ he asked. ‘Not by anyone who came back,’ she said. The needle shivered and held.” Compose: Enter opens the composer. The guidance “let the unlit lantern answer” is typed and submitted. The generated adjacent portion reads: “The lantern occurrence bent toward the compass, though nary doorway had opened.” The programme past waits. Compare takes: Up moves backmost done communicative parts to the five-take passage. Left and Right comparison related takes without removing immoderate of them. Explore the way map: M opens 1 statement per communicative part. Circles show sibling takes, the selected return is highlighted, and connection counts beryllium astatine the right. Arrow keys move done parts and takes earlier Escape returns to the story. Every cardinal successful 1 place: Question people opens this complete reference, past Page Down shows the remaining commands: 1667 cardinal reference MOVE — publication and navigate ↑ ↓: erstwhile aliases adjacent row ← →: flip betwixt takes Shift+↑ Shift+↓: nudge the page a line Page Up aliases Control+U: page up Page Down aliases Control+D: page down G aliases Shift+G: first aliases past part [ ]: erstwhile aliases adjacent chapter U: undo a section break summation aliases removal WRITE — make the adjacent part Space: proceed this part Enter aliases I: type what happens next R: retake pinch the aforesaid prompt Shift+R: retake and edit the prompt W: constitute a return yourself E: edit prose and prompt Y aliases Shift+Y: transcript the portion aliases full line Control+↑ Control+↓: erstwhile prompts successful Direct N: commencement a caller story OPEN — panels and views M: representation of the full story F: facts kept for context O: move communicative aliases unfastened the library Colon aliases Control+P: bid palette Comma: procreation settings Control+G: wide discourse details Question mark: this cardinal reference Escape: adjacent what is open Q: discontinue 1667 SHAPE — put what exists D: delete this return and everything beneath it connected the existent line T: tag the statement here C aliases Shift+C: chapters aliases extremity 1 here X: actions for this part P: show aliases hide directions Z: typewriter mode Shift+F: facts rail, automatic aliases off MAP — while the representation is open M: rhythm path, tree, and mass A: each takes aliases sketches Enter: reroute a node aliases sketch L: travel a character statement aliases unfastened a wide line S: character to mass, aliases rhythm wide sorts D aliases T: prune, tag, aliases alteration the path Chapter rows differ; the statement beneath the communicative explains the progressive row. Drag selects, Control+C copies, and Escape closes.

how it works

Press Enter to unfastened the composer, type what happens next, and property Enter again to make the adjacent communicative part.

What it is

It drafts. You determine what stays.

You move done a manuscript, and the exemplary writes a paragraph erstwhile you inquire it to. Then it stops and waits for you.

  • Ask again, support both

    Ask for different type of a paragraph and the 1 you were reference stays wherever it is. The caller return sits beside it, and ← and → flip betwixt them. Every return you make stays connected the tree, and d is the only point that removes one.

  • The style is simply a tree

    A communicative is simply a character of parts and takes. The communicative statement is the way you person selected done it. Branches you walked distant from are still there, and still yours to travel backmost to.

  • It lives successful a folder

    Stories beryllium successful a directory you chose. Export writes Markdown adjacent to them. There is nary server to motion successful to and thing to migrate disconnected later.

The tree

Every draught you didn't keep, still there.

Ask for different return and the 1 you were reference does not spell anywhere. It becomes a sibling. Press m and the style of the full point opens up: the statement you are on, the forks you made, and the paragraphs you wrote erstwhile and walked distant from.

Three views, cycled pinch the aforesaid key. Nothing is archived, thing is pruned connected your behalf, and d is the only point that removes a take.

pathThe communicative statement arsenic it sounds now. One statement per part, related takes arsenic rings beside it, connection counts down the right.

Start a communicative →

1667 · mapmap · path

Path representation for “The lantern keeper.” Depth 1 done 13; 23 parts crossed 4 communicative lines. One statement represents each selected communicative part. Circles beside rows 3, 5, 8, 11, and 12 show related takes. Part 12 is selected astatine return 3 of 5; portion 13 carries the canon-storm tag. The clip moves to adjacent parts, returns to portion 12, compares its related takes, past returns to return 3. Controls: Up and Down move by depth; Left and Right alteration take; Escape closes.

No tracking. At all.

Nothing successful present is watching you write.

Every statement beneath describes codification that does not exist. Go and check.

  • analyticsno library, nary endpoint, nary events
  • telemetrynothing is measured and sent
  • crash reportererrors spell to a section log you tin read
  • install idnothing identifies your machine
  • accountthere is thing to motion successful to

Every petition the programme makes goes to the endpoint you configured. Nothing comes to us, because location is nary server of ours to nonstop it to.

One exception: an optional update check, which ships off. Turned on, it sounds a type number and tells you. It downloads thing and replaces nothing.

  • No account, ever. Nothing to create, thing to delete.
  • We ne'er spot your prose. It goes to the supplier you chose, and their argumentation is the 1 that governs it.
  • Apache-2.0 source. Every declare connected this page is 1 you tin check.

Read the root →

1667 · settingswhere prose goes

The 1667 settings sheet showing the dry-run provider, nary guidelines URL aliases API key, and the procreation controls.

1667 procreation settings Theme: lantern Compose focus: off Provider: dry-run Base URL: not set Insecure HTTP to a instrumentality 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; nary controls; nary clip to live Alternate token-probability count: off Default route: Default profile Prose route: aforesaid arsenic default Controls: Up and Down move; Left and Right choose; Enter advances; S saves; C checks; Escape closes.

Every destination the programme knows astir is connected this panel, and you put it there. Captured successful demo mode, truthful the relationship sounds dry-run.

Models

Your keys. Your prose style. Your machine.

1667 includes nary exemplary and rents you nothing. Point it astatine a supplier you already pay, aliases astatine a exemplary moving connected your ain computer. The petition goes consecutive there.

generation

temperature0.8

max output tokens2,048

context window32,768

cache policyoff

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

Your stories enactment successful plain matter files connected your computer. Your cardinal goes successful a backstage record that only you tin read, ne'er into the communicative folder.

Keys

Learn six. The remainder find you.

These 8 screen a full penning session. There are astir 40 successful full and ? shows you the rest, but thing beneath this statement is needed to decorativeness a chapter.

  • continueWrite the adjacent portion from here
  • directSay what happens next, past continue
  • flip takesMove betwixt siblings of this part
  • movePrevious and adjacent part
  • retakeAnother return connected the aforesaid prompt
  • writeAdd a return successful your ain words
  • editOpen the portion successful the full-screen editor
  • mapCycle path, tree, and mass

and the programme shows you the rest

1667 · keysevery key

The 1667 keyboard reference listing commands for moving, writing, opening panels, shaping the story, and utilizing the map.

1667 cardinal reference MOVE — publication and navigate ↑ ↓: erstwhile aliases adjacent row ← →: flip betwixt takes Shift+↑ Shift+↓: nudge the page a line Page Up aliases Control+U: page up Page Down aliases Control+D: page down G aliases Shift+G: first aliases past part [ ]: erstwhile aliases adjacent chapter U: undo a section break summation aliases removal WRITE — make the adjacent part Space: proceed this part Enter aliases I: type what happens next R: retake pinch the aforesaid prompt Shift+R: retake and edit the prompt W: constitute a return yourself E: edit prose and prompt Y aliases Shift+Y: transcript the portion aliases full line Control+↑ Control+↓: erstwhile prompts successful Direct N: commencement a caller story OPEN — panels and views M: representation of the full story F: facts kept for context O: move communicative aliases unfastened the library Colon aliases Control+P: bid palette Comma: procreation settings Control+G: wide discourse details Question mark: this cardinal reference Escape: adjacent what is open Q: discontinue 1667 SHAPE — put what exists D: delete this return and everything beneath it connected the existent line T: tag the statement here C aliases Shift+C: chapters aliases extremity 1 here X: actions for this part P: show aliases hide directions Z: typewriter mode Shift+F: facts rail, automatic aliases off MAP — while the representation is open M: rhythm path, tree, and mass A: each takes aliases sketches Enter: reroute a node aliases sketch L: travel a character statement aliases unfastened a wide line S: character to mass, aliases rhythm wide sorts D aliases T: prune, tag, aliases alteration the path Chapter rows differ; the statement beneath the communicative explains the progressive row. Drag selects, Control+C copies, and Escape closes.

What we didn't build

Left retired connected purpose.

Each of these was considered and turned down.

  • No telemetry

    No analytics, nary clang reporter, nary instal id. There is nary specified code.

  • No cloud

    No sync, nary server of ours. Stories ne'er time off the files they are in.

  • No shade autocomplete

    Nothing is generated until you property a cardinal that asks for it.

  • No chat sidebar

    Type an instruction, get a paragraph. There is nary thread to scroll back.

FAQ

Questions worthy answering.

Does it constitute the book for me?

No. It writes a paragraph erstwhile you inquire for one, successful the guidance you gave it, and past it stops and waits. You take the take, you trim the line, you determine what the section is. The judgement stays yours.

What happens to the takes I don't use?

They stay. Every return is written to the character the infinitesimal it exists, and moving to different 1 changes thing astir it. The representation shows you each of them, including the lines you abandoned aft a azygous paragraph. Only d removes a take.

Is thing collected astir me?

No. There is nary analytics code, nary telemetry, nary clang newsman and nary instal id successful the source. Every petition the programme makes goes to the endpoint you configured, pinch 1 exception: an optional update check, which ships off. Turned on, it sounds a type number and tells you. It downloads nothing.

Why 1667?

1,667 words a time for 30 days is 50 thousand, which is the gait that finishes a first draft. The number names that pace. Nothing successful the programme tracks whether you deed it.

Where does my penning live?

In a files you chose. Run 1667 init successful ~/book and that is your project. Export writes the selected communicative statement to Markdown successful the aforesaid place. Back it up for illustration immoderate different directory. There is nary export measurement to beryllium trapped behind.

Which models tin I use?

Anything down an OpenAI aliases Anthropic compatible endpoint. Presets vessel for OpenAI, Anthropic, OpenRouter, Ollama, LM Studio, llama.cpp, KoboldCpp, and a civilization endpoint. Keys are stored successful a backstage record connected your instrumentality and sent only to the supplier they beryllium to. A exemplary moving locally needs nary cardinal astatine all.

Do I request to beryllium bully astatine the terminal?

You request to beryllium capable to unfastened one. After that it is arrow keys to move, abstraction to continue, and ? for the rest. There is nary ammunition scripting and nary configuration record to hand-edit. Settings are a sheet down the comma key.

Can I tally it connected Windows?

Yes. The autochthonal Windows x64 merchandise uses the PowerShell Installer. Exit 1667 and tally the aforesaid bid again for a later release.

What does it cost?

Nothing. It is Apache-2.0 root pinch nary paid tier, because location is nary server to salary for. You salary immoderate your exemplary supplier charges, straight to them, aliases thing astatine each if you tally a exemplary locally.

1,667 words. Tonight.

Open a folder, tally it, and constitute the adjacent paragraph.

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

Installs 1667 0.9.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 way needs GitHub CLI. It verifies type 0.9.8 earlier it runs the section file.

d=$(mktemp -d) && (trap 'rm -rf "$d"' EXIT && cd "$d" && gh merchandise download v0.9.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.9.8 --source-digest 5548e0565fd424725d1c86493060566e01667c62 --deny-self-hosted-runners && sh install-stable.sh)$d=Join-Path ([IO.Path]::GetTempPath()) ([Guid]::NewGuid()); New-Item -ItemType Directory -Path $d | Out-Null; effort { gh merchandise download v0.9.8 --repo 1667-ai/1667 --pattern install-stable.ps1 --dir $d; if ($LASTEXITCODE -ne 0) { propulsion 'GitHub merchandise 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.9.8 --source-digest 5548e0565fd424725d1c86493060566e01667c62 --deny-self-hosted-runners; if ($LASTEXITCODE -ne 0) { propulsion 'GitHub attestation verification failed.' }; powershell -ExecutionPolicy Bypass -File (Join-Path $d 'install-stable.ps1'); if ($LASTEXITCODE -ne 0) { propulsion '1667 instal failed.' } } yet { Remove-Item -LiteralPath $d -Recurse -Force }

docssourcechangelog

More