Status: Implementation IMPLEMENTED × Exposure PUBLIC (macOS builds). Windows and Linux targets exist in the electron-builder config but macOS is the shipped target.
Overview
allternit-desktop (@allternit/desktop, in surfaces/allternit-desktop) is the Electron shell that bundles the whole stack so it runs locally out of the box: the workspace web UI, the Rust allternit-api server, gizzi-code, and supporting services (mux, voice, connector sidecar, office engine, computer-use driver). You can also point it at your own Allternit instance. See BYOC overview.
The workspace UI is a Vite + React app built from the separate allternit-ai repository. scripts/prepare-platform-static.cjs packages its static export into the app; set ALLTERNIT_AI_PATH to build against a specific checkout.
Local ports
Defaults fromsrc/main/config.ts:
Global hotkeys
The Quick Chat window loads the workspace UI with
/?mini=1.
Local development
Build and package
build:electron runs prepare:* steps first (platform static, computer-use driver, ACU gateway, Lima, Lume, mux, mesh node, office engine, API binary, connector catalog and sidecar) and verify:packaged-resources.
Layout
IPC channels (Quick Chat)
The main process registers many other channels (for example
miniApps:*); see src/main/unified-main.ts.
Allternit Factory views
Shipping with the Allternit Factory build. These views are the approved design and are not live yet.
The views draw the same picture for the same input (no random layout), show ”—” when empty, and take counts from the judge, never from narrative. Desktop ships
allternit-factory and gizzi in resources/bin and puts gizzi on your PATH at first run.
How this relates to the Agency Kernel
Desktop hosts the Allternit API and Gizzi runtime locally. It is not part of the Agency Kernel; the kernel’s Agency API is a Cloud API surface. See Architecture.Prompt-cache countdown
After a cache-bearing response, Gizzi Code shows a separate cache row under its model/context footer. Desktop and the web/phone/PWA workspace show the same indicator inside the latest reply’s post-run orb telemetry, alongside time, tokens, and cost. Clicking the telemetry also includes a Cache row in the details. Existing custom status-line commands are preserved. The row updates every 30 seconds without sending a model request. Green means warm, amber means less than 20% of the TTL remains, and red means the estimated TTL has elapsed. The block bar shows time remaining.last hit is the share
of the latest request’s input read from cache, not a session-wide hit rate.
When cold, may re-cache shows the latest reported input footprint.
Expiry is an estimate from the request TTL, not a guarantee that the provider
still holds the cache. Changes to model, tools, or context may invalidate it
earlier. Unknown provider TTLs have no countdown. Native requests with a known TTL
currently use five-minute ephemeral markers; Gizzi’s interactive cache path
uses its configured five-minute or one-hour TTL. No keepalive requests
are sent. Miss counts and causes are omitted when not reported.