Docs
Windows 10/11, 64-bit. macOS and Linux aren't built yet.
Install
Two ways, same result. Lux installs per-user into %LOCALAPPDATA%, so nothing asks for admin.
From a terminal:
irm https://flint-83v.pages.dev/install.ps1 | iex
That resolves the newest release, downloads the installer, runs it silently
and launches Lux. Or download the .exe
and double-click it.
Sign in
Lux uses a device-code flow, the same shape as the GitHub CLI. The app shows you a code, opens your browser, and waits:
- Lux displays a code like
KTPD-3M8Rand opens/activate. - You enter your email there and get a 6-digit code back.
- Enter it, and the app picks up its token on its own. Nothing to paste.
The token lives in account.json under the app's user-data folder.
You can see it and your spend any time on your account page.
Signing in is optional. It exists so you don't have to hold a provider key. If you'd rather use your own, skip it entirely and see bring your own key.
Your first task
Open a project folder and describe the outcome, not the steps. Lux reads files, runs commands and reports what it did:
› read the failing test and fix it
▸ reading src/queue.test.ts
▸ running npm test -- queue
1 failing: retry() resolves before the backoff elapses
▸ editing src/queue.ts
▸ running npm test -- queue
4 passing
It works best when it can check itself. A task with a test, a build or a linter attached to it comes back verified rather than merely plausible.
Browser control
Lux can drive the Chrome you already have, signed in and carrying your real session, rather than a headless browser that knows nothing about you. It's opt-in and takes one minute:
- Open
chrome://extensions. - Turn on Developer mode (top right).
- Load unpacked → pick the
extensionfolder in Lux's install directory.
The app hosts a small HTTP bridge on 127.0.0.1:8790; the
extension long-polls it and runs commands in your active tab. Supported
commands are navigate, read, click
and type.
curl -s -X POST http://127.0.0.1:8790/cmd \
-H "content-type: application/json" \
-d '{"command":"read"}'
The bridge is loopback only. It binds to 127.0.0.1,
so a web page you visit cannot reach it. Only software already running on
your machine can.
Bring your own key
Signed out, Lux talks to your provider directly and we're not in the
path at all. Nothing is metered, nothing is logged by us, and there's no
allowance to run out of. Put the credentials in .env:
DEEPSEEK_API_KEY=sk-...
DEEPSEEK_BASE_URL=https://api.deepseek.com
Any OpenAI-compatible endpoint works: OpenRouter, a local
llama.cpp server, your own gateway. Point
DEEPSEEK_BASE_URL at it.
Signing in wins. When you're signed in, Lux's credentials
override the ones in .env, so calls go through the Lux API
and count against your allowance. Sign out to go back to your own key.
Models
Three tiers. Lux's name is what you pick in the app; the model under it is what you type if you are running the engine with your own key.
- Streak,
deepseek-v4-flash. Fast and efficient. The default, and right for most work. - Radiant,
deepseek-v4-pro. Strong and balanced. Slower, and better on gnarly reasoning. - Lux,
deepseek-v4-pro-0813. The flagship, and the highest intelligence on offer.
Two variants sit alongside Streak rather than in the ladder:
- Streak (0731),
deepseek-v4-flash-0731. A pinned older build, for when a newer one changes behaviour under you. - Streak Vision,
deepseek-v4-flash-vision-exp. Reads images.
Change model in the app's settings. Rates for each are on the pricing page.
Settings are written to ~/.dsh/settings.yaml when you change
them. Don't hand-edit that file while Lux is running, because it gets
rewritten underneath you. Use the settings UI.
Usage & billing
Lux bills per token at the model's rate plus 25%. There's no subscription and no seat count; a month you don't use costs nothing.
- $0.50 of usage is free each month, resetting on the 1st.
- The allowance is a hard cap. At the limit, calls return a quota error rather than quietly charging you.
- Your spend is on your account page, updated as tasks finish.
The reason the proxy exists at all: the provider key stays on our server and never ships inside the app. Your Lux token is stored as a SHA-256 hash, so a database leak yields nothing usable, and a leaked token costs you an allowance rather than exposing a key.
Updates
Two separate channels, deliberately:
- The app updates itself in the background and applies on restart.
- The engine, the DeepSeek Harness underneath, is offered, never forced. It's developer-preview software that ships breaking changes, so Lux tells you one is available and lets you pick the moment. Nothing swaps underneath you mid-task.
Troubleshooting
Stuck on "Warming up"
The engine didn't start. It runs on your system Node, not the one inside
the app, and it needs Node 22.6 or newer. Check with
node -v; if it's older, or missing, install a current Node and
restart Lux.
Browser commands do nothing
The extension only talks to a running Lux. Confirm the bridge is up:
curl -s http://127.0.0.1:8790/ should list the commands. If it
refuses the connection, Lux isn't running. If the extension is loaded but
idle, reload it from chrome://extensions after starting Lux.
"quota_exceeded" on every message
You've spent this month's allowance. It resets on the 1st. Until then, use
your own key: sign out and set
DEEPSEEK_API_KEY.
The sign-in email never arrives
Email delivery is still being set up, and codes currently don't reach every address. If yours doesn't arrive, the activation page shows the code on screen instead so you can finish signing in.