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:

  1. Lux displays a code like KTPD-3M8R and opens /activate.
  2. You enter your email there and get a 6-digit code back.
  3. 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:

  1. Open chrome://extensions.
  2. Turn on Developer mode (top right).
  3. Load unpacked → pick the extension folder 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.

Two variants sit alongside Streak rather than in the ladder:

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.

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:

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.