First Provider and Session
Authenticate the public browser
The supervised public deployment has two independent layers:
- Authelia applies
one_factorbefore nginx proxies the browser surface. - The authority-bound native DSH cookie authenticates the browser to the index, API, and WebSocket.
Visit the bare app URL, https://deek.loca.zone/. After Authelia succeeds, nginx supplies its independent proxy proof and exactly one remote-user value to the app. Only an exact GET / with no query at the trusted public Host and Origin may bootstrap a missing DSH cookie. The app responds with the existing host-only, HttpOnly, SameSite=Strict cookie and a clean 303 / response marked no-store and no-referrer; nginx adds Secure at the HTTPS edge.
A valid existing DSH cookie remains valid and skips bootstrap. The proof and identity never authorize /index.html, /api, fetch routes, or WebSocket directly; those surfaces continue to require the native cookie. Remote-User alone is never accepted.
Independent secrets
The supervised profile sets
printUrl: falseto disable launch-token output and enablesproxyBootstrapto disable launch-token exchange. Public users never retrieve or reopen a launch URL. The proxy proof is separate from the DSH cookie-signing secret and is never placed in a URL, log, command argument, environment value, or source file. Rotate the proxy proof after an nginx or app compromise. Routine restart preserves existing cookies because the signing secret persists; rotating that secret revokes every DSH cookie.
Authelia identifies the person at the edge; the native DSH cookie authenticates the browser to the app. Keep both layers.
Authorize your subscription provider
Provider visibility and allowed use depend on the owner’s release and independent permissions. Subscription Provider Sign-in owns the 2026-10-29 pxl rc.2-r14 readback: Settings displayed 0.2.1-rc.2, not the earlier 0.2.1-alpha.2, and showed six provider cards. A visible card does not authorize sign-in, model selection, quota use, or inference. The approved onboarding scope remains DeepSeek, ChatGPT/Codex, and Claude, not every visible catalog entry.
Follow Subscription Provider Sign-in for the shared-instance no extra provider login path and the separate, historical owner-holder recovery references. Do not repeat a working login. Account selection and consent remain yours; browser SSO and a local gateway bearer do not create provider entitlement. Choose Configure later rather than provisioning a paid API key. No operator wallet is copied, and Google routes remain outside approved onboarding.
After sign-in, the owner can check identity, model listing, and refresh metadata without requesting a model. An inference test needs a separate explicit user go. A new account grant, an advertised model, and a successful model request are different observations.
The native model picker selects a configured default for new sessions; a session that has already sent a request retains its recorded model. Configuration and Data owns state and credential custody.
Select the isolated workspace
A fresh Web UI has no selected workspace.
- Select
Choose workspace. - Add
/var/lib/deek/workspace. - Select that directory.
- Create a new session.
The invoking directory is upstream’s default filesystem location, but the loca unit pins it to the dedicated workspace. Do not add /opt/deek/app, /var/lib/deek, /home, the operator checkout, or any credential directory to the picker.
New base-backed sessions default upstream to workspace-write. Mutations are restricted to the selected workspace and platform temporary roots, but reads and network access are not confined. Treat every file and network destination visible to the process as reachable.
Run a Web task
A session can read and edit workspace files, execute commands, delegate, and maintain a plan. Approval prompts appear when the active permission policy requires them.
Start with a bounded task against disposable content, inspect every proposed action, and verify the resulting files before increasing scope. Stored General permission changes affect later Web sessions, not a session that is already open.
Use CLI modes from source
The Node application has one supported launcher: dsh. From the repository root, use the pnpm wrapper:
pnpm dsh web --host 127.0.0.1 --port 52320 --no-open
pnpm dsh --profile headless "Summarize this repository"
pnpm dsh --profile acp
pnpm dsh --profile sdk
pnpm dsh --profile sdk-minimal| Mode | Behavior |
|---|---|
web | Browser application. The exact local launch remains loopback-only on port 52320 with --no-open. |
headless | Runs one fresh persisted session, prints the final answer, and exits. |
acp | Serves an ACP automation client over stdio until disconnect. |
sdk | Serves SDK clients over JSON-RPC stdio. |
sdk-minimal | Serves the smaller standalone SDK tree over JSON-RPC stdio. |
The stdio and one-shot modes do not accept Web host, port, or browser flags. They are not exposed by deek.service and must run only in an appropriately isolated local environment.