Your server, your story
Write long-form fiction on your own model server.
1667 is a full-screen terminal environment for fiction. Each story part keeps its alternative takes in a tree. You select one path as the story line.
- Model endpoint
- the server you configure
- 1667 account
- none
- Story files
- your project folder
00 · install
Install 1667
Install the client. Keep your model server running.
curl -fsSL https://1667.ai/install.sh | shpowershell -ExecutionPolicy Bypass -c "irm https://1667.ai/install.ps1 | iex"npm install --global @1667-ai/cli@latestgit clone https://github.com/1667-ai/1667.gitcd 1667 && npm cicd tui && bun install --frozen-lockfile && bun startInstalls 1667 0.10.2. Supports macOS arm64/x64 and glibc 2.17+ Linux arm64/x64. Run 1667 upgrade for later managed releases.
Installs 1667 0.10.2 on Windows x64. Exit 1667 and run this command again to install a later release.
Needs Node 22. npm manages this installation. Use npm to install later releases.
Needs 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.2 before it runs the local file.
d=$(mktemp -d) && (trap 'rm -rf "$d"' EXIT && cd "$d" && gh release download v0.10.2 --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.2 --source-digest 75006abd19884944df48b16bc2f1b4869d9f3c8a --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.2 --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.2 --source-digest 75006abd19884944df48b16bc2f1b4869d9f3c8a --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 }01 · compatibility
Your server, exactly
Choose the row that matches the protocol you want. A server can offer more than one route.
Scroll sideways to read the full table.
| Server | Provider choice | Generation route | Token count |
|---|---|---|---|
| llama.cpp | llama.cppllama.cpp text | Chat, or native POST /completion | Near-exact from POST /tokenize |
| KoboldCpp | KoboldCppKoboldCpp text | Chat, or native POST /api/extra/generate/stream | Near-exact from POST /api/extra/tokencount |
| Ollama | Ollama | Chat | Estimate |
| LM Studio | LM Studio | Chat | Estimate |
| Any OpenAI-compatible server | OpenAI-compatibleOpenAI-compatible text | Chat, or POST /v1/completions | Estimate |
Hosted providers are also supported. See the full provider list.
02 · protocol
Text Completions is a first-class route
Use a chat route, a standard POST /v1/completions route, or the native text route for llama.cpp or KoboldCpp.
Prompt format
rawjoins message content with one blank linechatmladds minimal ChatML markersserver-templateasks llama.cpp to use the loaded model template
1667 does not infer a prompt format from a model name. You select the format that the model requires.
03 · context meter
The count shows its accuracy
Long stories press against the context window. The mark tells you where each number came from.
8.1k
Exact
A bundled tokenizer or exact count endpoint counts the next request.
≈8.1k
Model server
A local tokenize route gives a near-exact count before generation.
~8.1k
Estimate
1667 estimates one token for every four characters.
A local count carries ≈ because it comes from a second request to the model server. 1667 does not label that separate count as exact.
04 · inspection
See the request before it leaves
Open the next request plan with Ctrl+R. The plan has no credential, so the viewer cannot show one.
Request viewer
Review the routed model, context window, messages, and token grades.
Generation Record
Each model request that creates or changes a take adds a record to that take. The record keeps the provider, model, effective settings, and request pipeline.
Token probabilities
Inspect alternative tokens when the route supports them. Choose the count in Settings. The feature starts off.
05 · network boundary
What leaves the machine
A provider request goes to the endpoint you configured. With a local endpoint, it reaches that model server. 1667 has no account, cloud service, analytics, telemetry, or crash reporter.
- 011667builds the request
- 02Your endpointreceives the request
- 03Your modelstreams the take
Update check
The background update check reads public package metadata from registry.npmjs.org. It sends no story, prompt, account, or settings data. You can turn it off in Settings.
Local connection checks
On Linux, keyless loopback HTTP needs proof that your account owns the exact socket. On macOS and Windows, turn on insecure HTTP (LAN) for a plain HTTP loopback URL. The same opt-in covers private network HTTP. 1667 resolves a private host once and pins the verified address.
06 · no server needed
Try the full interface first
Demo mode uses fixed data in memory. It contacts no provider and makes no network request.
1667 --demo07 · limits
Current limits
These limits apply before you choose a server or model.
- 01
You run the model
1667 is a client. It connects to a server that you already started.
- 02
Token rules vary
Phrase bias needs tokenizer support. Banned strings also need it, except KoboldCpp sends their literal text to its own field.
- 03
Text routes have no reasoning view
Reasoning controls and reasoning records apply to supported chat routes only.
- 04
One writer per project
A project lock prevents two 1667 processes from writing to the same project at once.
- 05
The format can change
1667 is pre-1.0. Read the release notes before you update an important project.
One useful question