Skip to content

Releases: lucidos-dev/lucidos

v0.16.0

Choose a tag to compare

@kennethtiller kennethtiller released this 29 Jul 12:24

⚠️ macOS notarization is still pending for this release.

The .dmg below is signed with our Developer ID, but Apple has not returned
its notarization ticket yet, so macOS blocks it on first launch. We publish the
release rather than hold it back.
This asset is replaced with the notarized one as soon as the ticket arrives
— usually within a few hours. Re-download it then and none of the steps below
apply.

Two ways to install v0.16.0 with nothing extra to do:

  • Already running Lucidos? Take the in-app update. It does not go through
    Gatekeeper and is unaffected by notarization.
  • Prefer the terminal? curl -fsSL https://lucidos.dev/install.sh | sh

If you want the .dmg right now, macOS needs you to approve the app once
by hand (Sequoia removed the old Control-click shortcut):

  1. Open the .dmg and drag Lucidos to Applications.
  2. Launch it. macOS says it "could not verify" the app — click Done.
  3. Open System Settings → Privacy & Security, scroll down to Security,
    and click Open Anyway. Do this within an hour of step 2; it asks for
    your administrator password.
  4. Launch Lucidos again and click Open Anyway in the second dialog.

You only do this once. Subsequent launches are normal.

v0.16.0 — 2026-07-29

Added

  • Provider-native web searchweb_search now resolves over the configured provider set instead of a single hardcoded backend. Adds a WebSearchProvider trait, a fallback chain, and three backends (Anthropic, OpenAI, Vertex/Gemini grounding), each pinned to a model its own provider actually serves. Prompt and result formatting are shared across backends, and max_uses is decoupled from the chain. (ADR 0023)

  • Per-model context windows — every builtin model now declares a verified context window, editable in Settings, and that value drives the context-trim budget instead of a guess derived from the model id. The reported token total counts tool schemas, and truncation is surfaced honestly as trimmed. Bare Claude rows stay on the prefix map since they send no 1M beta header.

  • GPT-5.6 (Sol / Terra / Luna) — added to the chat model picker and the Codex coding-agent /model picker, with the max reasoning tier enabled for the family. Max effort is validated server-side and filtered by the selected model in the picker.

  • Claude Opus 5 — added to both the chat and Claude Code pickers and set as the default model (via cc-settings.json).

  • Built-in model-provider proxiesvertex, openai, openrouter, anthropic, and local are available as proxy targets out of the box, so an app can call a model provider without hand-registering it in apis.json. Bearer credentials get the Anthropic OAuth beta header injected automatically.

  • Packaged system-knowhowsystem-knowhow/ ships as the 7th runtime resource and is resolved at runtime via LUCIDOS_SYSTEM_KNOWHOW_DIR, so a packaged install has the same authoritative reference docs as a source checkout.

  • Codex parity work — Codex sessions stream reasoning summaries, load CLAUDE.md, validate the effort tier, surface plan-tool progress over the app-server protocol, and map slash commands to playbook files.

  • Chat threads auto-resume after a version switch — a chat or trigger thread interrupted by Switch to new version now resumes on the next boot, matching what coding-agent threads already did, instead of leaving a device-attributed abort and a manual Continue button. A dedicated boot pass handles them (the switch teardown always lands a terminal event, so the orphan sweep structurally can't see them), and the shared cause gate now requires an engine-shutdown cause so a user Stop is never mistaken for a switch.

  • Stranded-Apply visibility — a frontend Apply that can't reach the served dist is now surfaced instead of failing silently, and the engine warns once when the dist it's serving is pinned to a coding-agent worktree.

  • Zero-file Apply refusal — Apply is refused server-side on a change whose branch diff has gone empty, and such a change is reconciled (without discarding its siblings) rather than left blocking the panel.

  • Compose-clear announcements — every clear of the compose box is announced to other devices, whether it came from an ordinary send or from answering a question card.

  • App Store Connect API key notarization — the release build prefers an ASC API key over an Apple ID app-specific password when one is configured, so notarization runs cleanly headless.

  • One source of truth for the release version, enforcedRELEASE is the only place the version is written by hand; everything else derives from it (the build reads it, the release flow rewrites install.sh's baked constant, the site publisher pins the landing page's download links at publish time). A new offline suite scans the tree for a version literal nothing keeps in sync, pins both halves of the install.sh mechanism so deleting the substitution fails immediately rather than at the next bump, and flags prose that announces which release line the project is on. Historical narration stays exempt — the changelog, plans, and ADRs are correct precisely because they don't move. Phase A runs the suite against the worktree after the bump, so a stale literal fails the release instead of reaching the mirror.

  • Resumable notarization — the release build submits with --no-wait and writes a resume handle (submission id, DMG path + sha256, source commit, submit time) to disk before it starts polling, so losing the waiting process costs a poll instead of a full rebuild. A build-grade run auto-resumes when a handle matches the DMG on disk, --adopt-submission <uuid> picks up a submission that's already in flight, stapling is idempotent, and the handle is cleared once staging succeeds. Backed by a pure, offline-testable state library (scripts/lib/release_notarize.sh) with atomic writes and a checksum gate that refuses to resume against a changed DMG.

  • A re-fold on unchanged bytes no longer burns a notarization submission — one release spent 16 Apple submissions in two days, several of them on byte-identical compiled input, because any movement on main forced a rebuild + resign + resubmit. The build now fingerprints only what actually reaches the bundle — the seven compiled-input paths (crates, Cargo.lock, Cargo.toml, packages, package.json, package-lock.json, system-knowhow) — and Phase A consults that gate before rebuilding, reusing the already-notarized DMG when every hash matches. A docs-, plans-, or scripts/-only re-fold is now free. The fingerprint deliberately excludes the driver scripts themselves (a one-word comment edit in build-dmg.sh was enough to flip a coarser hash and re-break the very case this fixes); a separate recipe fingerprint tracks those, and both are recorded in the staging manifest. Also fixes a concurrent-poller miscount where a resume's own subshell was reported as a second poller.

  • Shellcheck gate on every shell scriptscripts/lint-shell.sh + make lint-shell, wired into lint so make check covers it. Discovery is git ls-files '*.sh' rather than a hand-written path list, so a script added in any directory is gated the day it's committed. Fails closed on all three ways it could be disarmed (no shellcheck on PATH, empty discovery, a silently-skipped file). The sweep that brought the tree clean fixed the findings at the source rather than suppressing them — the SC2155 masking bugs below were found by it.

  • A release no longer waits on Apple — notarization verdicts have taken anywhere from ten minutes to fourteen-plus hours, and a wedged notary used to hold the whole release. --defer-notarization stages the DMG unstapled (recorded as notarized: false in the staging manifest) and publishes with a "notarization pending" banner on the release body, so the in-app update, the headless tarball and curl … | sh — none of which touch Gatekeeper — ship immediately, while the download button deliberately stays on the previous notarized DMG. Against a submission already in flight it stages without polling at all, which rescues a Phase A stuck on a slow verdict with no rebuild. --attach-notarized then staples, swaps the published asset in place, removes the banner, and fires the clean-machine DMG gate against the published tag. (ADR 0027)

Changed

  • The release candidate is the published artifact — the rc branch is now a pre-stripped, validated tree that gets promoted to main rather than rebuilt at publish time, so the commit CI gates is byte-identical to the commit that ships. Adoption requires a parentless candidate (a candidate carrying ancestry would push every reachable object while the private-data scan only inspects the tip tree), and the promote step re-asserts that at the irreversible push. The exclusion list, the WORKSPACES.md stub, and the fail-closed private-data scan are now single-sourced. (ADR 0024)
  • bash_output(wait_secs) actually blocks — the drain now waits the full requested window (server-side) rather than returning immediately, and reports a real elapsed clock. A user message cuts the block short so their follow-up isn't stuck behind it.
  • Background tasks report their true exit status — the completion summary no longer masks a failing pipeline stage; pipefail semantics are documented (rightmost failing stage wins), 128+signum exit codes are decoded, and a trigger script killed by a signal is named as such.
  • Accent palette--accent-yellow retheming to a muted sand, with the "notable state" role split off into its own --accent-notable token. Dead --initiator-* tokens dropped.
  • Client build id — the frontend shows the client's own build id instead of the engine's frozen CalVer, and launch binaries are published per build variant rather than through cargo's shared uplift pa...
Read more

v0.15.0

Choose a tag to compare

@kennethtiller kennethtiller released this 03 Jul 15:23

v0.15.0 — 2026-07-03

Added

  • New-version / Switch flow — Apply now auto-builds the engine in the background and splits build from switch: a unified "new version available" surface, an ENGINE_BUILD_ID + /engine/version-status endpoint, cause-gated resume that preserves pending questions, and switch-as-respawn with boundary events deferred to teardown. The Apply button reads Apply* when a restart is required; the brand badge shows a "!"/spinning build icon instead of a count; version toasts defer on dismiss with a persistent update badge; a hint toast explains when a frontend-only Apply is deferred to Switch. The engine also surfaces when its source is behind the running binary and self-heals a failed background rebuild; the pending-Rebuild toast only shows when no switchable binary already exists.
  • Keyboard navigation of thread content — arrow-key scrolling and turn-by-turn traversal (Cmd+Up/Down), Enter to collapse/expand the navigated turn, a unified deep-link "navigate to element" + chevron-scroll model with perceptible deceleration, and a persistent deep-link focus marker ("focus stick").
  • Focused-pane cue — the focused pane's header segment gets a subtle lighter-blue wash (extended over the divider seams) so the active pane reads at a glance, mirrored on the mobile active-pane dot. (The earlier header focus pill was tried and dropped in favor of the wash.)
  • Animated compose height — the prompt textarea animates its height (and position) on send and on draft↔draft / draft↔blank compose-view switches, with in-flight/rapid-switch frames cancelled cleanly.
  • Thread drawer overhaul — the compose-draft tooltip becomes a ⋯ menu (Delete + Info), fully keyboard-drivable; a keyboard shortcut expands/collapses the focused thread's sub-threads; single-focus (aria-activedescendant) model.
  • Remote access & Linux installinstall.sh downloads a prebuilt cross-platform headless tarball by default and registers the gateway as a user service; opt-in TLS (--tls-cert/--tls-key) and network bind (--bind via network.toml); a user-facing scripts/run.sh entry point; build-headless.sh + CI matrix for the Linux tarball; post-extract execution smoke + runtime-dep preflights.
  • Self-skeletonizing loading system — skeleton primitives with a fill helper, tree-shaped skeletons for files/repos, self-skeletonized list rows, drawer search, and triggers; retires the generic ListSkeleton.
  • Per-thread model memory — each thread remembers its last model + reasoning effort; coding-agent threads are pinned to their first account.
  • Native dock badge & notification actions — a nudgeable dock-badge loop driven by notification SSE, an on-demand unread-total endpoint, and [Open]/[OK] action buttons on in-app notification toasts (web links in toasts are now clickable).
  • Pane-anchored toasts — each toast is pinned to and centered over the pane it appeared on.
  • --font-size-* type scale — host + app-iframe type-scale tokens, with all font-size literals migrated onto them.
  • Per-draft compose state — compose-view dropdown selections and attachments persist per draft in the DB.
  • macOS menu-bar mode — the desktop client goes menu-bar-only when its windows close.
  • Durable native device id — the packaged desktop app persists its device id natively, so reinstalls keep a single device instead of spawning duplicates.
  • Trigger last-run status — triggers surface last-run OK/failed status and a build-on-top pointer.
  • Codex key auto-detect — the engine auto-detects an OpenAI key from the Codex CLI auth file; the chat agent is nudged to emit clickable [Name](app:<id>) app links.
  • Graceful memory degradation — the engine boots with memory degraded (instead of failing) when the embedding model can't download, with an actionable error.

Changed

  • Apply/Discard — the Diff button is permanently pulled out of the split button; frontend-only Applies propagate to peer dev workspaces and re-snapshot the served frontend without a respawn.
  • App-name links — stopped auto-linking bare app-name mentions in chat/notifications in favor of the explicit [Name](app:<id>) form.
  • Plugin setup threads — setup instructions moved to knowhow with a short seed message.
  • Navigation focus marker unified across chat, settings, and plugins (drops the entrance flash, fades on any user action).
  • Lockfile determinism — builds use npm ci and cargo --locked; the lucidos CLI is bundled as a runtime resource in the packaged app.
  • Vertexeu multi-region added as a prefilled region option.
  • Spacing & type consistency — content-pane padding unified onto a --space-* scale (Files tree + cards are deliberate carve-outs); prompt/confirm modal font sizes normalized with a codified no-magic-font-size rule.

Fixed

  • Security — closes a CRITICAL CVE via wasmtime 25→36; blocks cross-origin browser-proxy requests; hardens http_request credential redirects; git2 0.20.4 + safe Rust security bumps; scrubs credentials from the packaged env.
  • Vertex Gemini 3 reasoning — uses thinkingLevel + includeThoughts so reasoning stops leaking into the answer, and never sends thinkingBudget to Gemini 3 (clamps thinkingLevel per model).
  • Coding-agent reliability — stops a Fable false stale-resume from spawning duplicate CC processes / deleting live worktrees; an external watchdog kills a wedged coding-agent subprocess on recovery; preserves genuine CC API-drop failures instead of fabricating "Unknown error"; recovery reuses a worktree only when it's on the branch being recovered; a startup lease serializes restart recovery; CLAUDE_CONFIG_DIR is pinned per session so a mid-flight provider toggle can't strand a resume; reads CC thinking_delta from the correct field.
  • Packaged runtime — packaged PATH floor + agent-binary detection (psql on the coding-agent PATH); resolves user-installed tools under the service-manager minimal PATH; boot preflights (git, PG client, embedding model, required resources) with actionable warnings; Docker entrypoint aligned to the PG18 binary path.
  • Changes/Archive — reconciles an orphaned pending change that blocked Archive; gates apply-time reconcile on Applied and advances Apply-All on discard; the Apply-All merge-conflict toast no longer dangles.
  • Streaming resilience — bounds the streaming send-header phase so a stalled LLM connection can't hang a turn; idempotent thread pin/unpin so a double-submit can't 409.
  • iOS/mobile — repaint scroll-nudge no longer cancels momentum scroll; reliable scroll-to-top; boot-splash covers the iOS safe-area strip; mobile header titles centered without overlapping leading icons.
  • Chat — repaired leaked inline tool-call XML in the agentic loop; the title model no longer executes instruction-style prompts; the agent is told its reasoning isn't shown to the user and is forbidden from claiming a repeated action without a fresh tool call; the coding agent must not ask post-work confirmations that block Apply (scoped to Apply-based prompts).
  • Cancel — releases a stuck "Canceling" state when a running-turn cancel is superseded into waiting-for-answer, and clears the awaiting-bit on cancel rollback.
  • Build lock — fails open (rather than reporting SkippedLocked) when the checkout is unresolvable; scoped to engine-triggered builds.
  • Drawer / notifications — restored the normal drawer scrollbar and dropped the right-inset selection gap; channel/error tags keep their dark-mode hairline and red outline; notifications panel toolbar padding aligned with the plugins panel.
  • Toast / focus — collapsed-pane toasts recenter over the surviving pane; toast focus/tab handling hardened for touch and overlays.

Removed

  • Retired the generic ListSkeleton component (replaced by the self-skeletonizing system) and a stale crates/lucidos-app/package-lock.json.

v0.14.0

Choose a tag to compare

@kennethtiller kennethtiller released this 29 Jun 20:28

v0.14.0 — 2026-06-29

Added

  • Network access UI — configure the engine/gateway network bind from Settings and the workspace picker; durable scope-split bind (gateway machine-global, engine per-workspace), with click-to-fill of the detected Tailscale IP.
  • Plugin Modified badge — the Plugins list now shows a per-plugin Modified state derived from the install commit, and warns before an update would overwrite local edits.
  • App-icon unread badges — native dock-icon badge with the aggregate unread total, per-workspace PWA app-icon badges, and gateway-aggregated per-workspace counts.
  • Cross-device native notification dismiss — dismissing a notification on one device removes the delivered native banner(s) on your other desktop devices.
  • Documentation site — mkdocs-material docs site with anti-drift transclusion and deploy-on-release.
  • Public-repo RC gate (CI) — clean-machine source install + signed-DMG verification on fresh macOS/Ubuntu runners before publish.

Changed

  • Vertex AI region moved into the Settings → Providers section.
  • OAuth account resolution — provider tokens now resolve to the newest connected account; the Accounts UI shows a created date per account.
  • Sleeker Network access modal; skeletons fill the full content height; notification-detail title sized to match the list row.

Fixed

  • Security hardening — engine API now defaults to a loopback bind (opt in to all-interfaces via LUCIDOS_BIND_ALL); gateway control plane is authorized against app iframes; WASM signer execution budget + credential-leak scrubbing; scoped credential-URL matching.
  • Networking — retain loopback when binding a specific address; bounded gateway boot-splash escape; route us/eu Vertex multi-region locations to the rep.googleapis.com host.
  • Workspace storage — workspace-scope all browser storage (theme, device-id) with an idempotent namespacing override and a regression guard.
  • Frontend recovery — recover gracefully from navigating into an unreachable workspace; gate the picker skeleton behind a 300ms delay to stop the fast-load flash.
  • iOS PWA — fix the blank thread body (compositor paint loss) via a scroll-nudge + forced layout flush.
  • Notifications — reliable native desktop banners with durable deeplink; the agent is now aware it's running in the Tauri desktop app.
  • Cross-platform install — OS-aware sleep/clamshell prevention so Linux source installs run clean.
  • Muted-gold light-mode warning toast.

v0.13.1

Choose a tag to compare

@kennethtiller kennethtiller released this 28 Jun 13:58

v0.13.1 — 2026-06-28

Fixed

  • Toast in light mode — toasts read gray on a light background; now use a white fill so they render cleanly.

v0.13.0

Choose a tag to compare

@kennethtiller kennethtiller released this 28 Jun 12:49

v0.13.0 — 2026-06-28

Added

  • Capability-parity manifest + grouped agent tools — a single capability manifest is the source of truth for the agent's tool surface, with Rust→TS codegen keeping the LLM tools, the lucidos CLI, and the JS SDK in sync. Many narrow tools are consolidated into grouped tools — triggers, trigger_groups, preferences, events, changes, mcp, plugins, threads, thread_queue, memory, manage_models, manage_repositories, env_vars, notifications, and an apps domain — each gaining matching CLI subcommands and SDK methods.
  • Agent-configurable settings — the agent reads and changes user preferences via get_preferences / set_preference (theme, language, timezone, push, welcome message, chat model, reasoning effort, UI scale, font, …), validated against one catalog and routed through a single write chokepoint so per-device scope and live-apply are handled automatically. The narrow set_language / set_timezone / enable_push_notifications tools fold into set_preference. A manage_models tool adds/enables/disables/removes chat models in the picker. Language + timezone also get human controls under Settings → System → Locale (with IANA timezone validation). The command guard stays human-only.
  • Dedicated Plugins panel — browse, install, and update plugins with an "Installed only" filter (default shows all), controlled-vocabulary categories, plugin updates appliable from the list, and provenance-tracked auto-registration of plugin triggers. Installed/uninstalled files are git-committed into the workspace repo.
  • Coding-agent reasoning in the timeline — streamed model reasoning is captured as CodingAgentThoughtStreamed and rendered as a live "Thinking" step with full persisted text.
  • Loading-state overhaul — a ListSkeleton primitive plus skeleton-by-default loaders, a 300/500 minimum-visible standard (retiring DelayedSpinner), and skeleton + fade-in + prefetch for the thread-open transition; loaders crossfade out via LoadingFade.
  • Settings → System → Debugging panel with a default-off perf-instrumentation toggle; thread-open render/paint timing is instrumented and flushed via a batched /internal/client-logs telemetry endpoint.
  • Thread overflow (⋯) menu with a separate pin icon — Archive and thread Info (moved out of the hover tooltip) live in the menu; Archive first, Info last.
  • SDK ui.toast + ui.prompt host-bridged components for apps.
  • Fira Code font option with programming ligatures.
  • get_backup_status tool + backups knowhow — timezone-aware backup scheduling, agent-readable/writable backup settings, and persisted run history.
  • Targetable memory entries — entry IDs surface in the [Long-term Memory] block and the Memory settings view (copyable), plus correct_memory_by_id to delete/replace one memory by id.

Changed

  • Welcome screen redesign — compact "Hi, there!" hero with a chevron suggestion carousel (one idea at a time), conversational clickable starter suggestions that prefill the prompt, and a top-right dismiss pill.
  • Toast redesign — elevated surface with a thin per-type category-colored border on a plain theme background, clean amber warning in light mode, full-width centering, per-theme tint strength, and the "New version available" toast replaced by the refreshing spinner.
  • Files panel: "Drop or click to import" pinned to the top-right of the source-switcher row; Expand/Collapse-all removed; empty repo Files toolbar no longer rendered.
  • Settings: Animation speed moved from Appearance to System → Debugging; Environment Variables indexed in search; redundant subpanel titles dropped.
  • Notifications: detail chevron navigation walks the whole inbox (not one page); detail panel uses larger body text and primary color; chevron layout refined for two-line titles and the iOS-PWA back-swipe gutter.
  • Drawer/Archive: Archive pile is a single global created-at window (gap-free, chronological); long context-name chips wrap instead of truncating; tree-style ←/→ keyboard navigation.
  • Mobile pane state persists in localStorage so a PWA close reopens where you left off.
  • "App Store" wording retired in favor of the plugin Store; English recommended in the language setup prompt and under the Language setting.
  • E2E suite runs against a release build by default.

Fixed

  • Security hardening — guard path traversal in the intent loader and browser screenshot path; floor char boundaries on OpenAI streaming token slices; scrub private/internal data from public-shipping sources, docs, system-knowhow, and test fixtures, backed by a fail-closed private-data release guard.
  • Drafts — a locally-edited draft is no longer blanked by a MessageReceived echo or a bulk SSE resync (drafts:65 value='').
  • Coding agent — worktree node_modules provisioned from the hoisted root (npm workspaces); engine restart during a resumed session no longer read as a user rejection; idle-termination and question-answer-resume races closed; run-loop flags reset on resume.
  • Gateway never respawns an alive engine, only a dead one.
  • Apply — an already-merged branch is marked applied (instead of stranded as failed) and pushes main on a no-op.
  • Chat: no spurious "No changes" flash in Changes-mode; no open-jump on change-applied threads; pending messages survive a transient safety-refetch failure; iOS open-path repaint hardened.
  • macOS app menu derived from the system default so arrow keys move the cursor; About item labeled "About Lucidos".
  • Numerous UI fixes: dark-mode green confirm buttons, boot-splash label/sizing aligned to the gateway, header divider/tooltip behavior, and welcome carousel chevron/height stability.

Removed

  • Retired flat/narrow agent tools now superseded by grouped tools; dead components (DelayedSpinner, StoreTab, ExportThreadButton, CopyThreadRefButton).

v0.12.5

Choose a tag to compare

@kennethtiller kennethtiller released this 25 Jun 15:08

v0.12.5 — 2026-06-25

Added

  • Welcome screen redesign — compact "Hi, there!" hero with a chevron suggestion carousel (one idea at a time), conversational de-quoted starter ideas, and a top-right dismiss pill. New starter suggestions: app store, mobile-access setup, daily scraper, weekday email summary.
  • Targetable memory entries — memory entry IDs now surface in the [Long-term Memory] block and the Memory settings view (copyable), plus a new correct_memory_by_id tool to delete/replace one specific memory by id.
  • Thread Queue moved into Settings → System.
  • Files import hint relabeled to "Drop or click to import" in a dashed drop box.

Changed

  • Gateway boot-splash phase renamed to "Downloading memory model".
  • Settings: Environment Variables now indexed in search; redundant subpanel titles dropped.
  • Notifications: a trayed/unfocused Tauri window now counts as not-in-use, so push is delivered when the window isn't actually visible (device-presence re-sync deduped on native focus change).

Fixed

  • macOS app menu derived from the system default so arrow keys move the cursor; About item labeled "About Lucidos".
  • Tauri: nav-history popover renders above the internal browser; app menu placed below the header strip; window drag and thread-toggle no longer steal the focused pane.
  • Settings: API URL renders at normal row size (not page-base); system subpanel tabs render on the Environment Variables view.
  • Threads: thread-link hover shows the real destination; cross-workspace thread links route through the gateway; stopped peers aren't lazy-started just to read a title.
  • Update badge + toast unified on the build-id check; switcher reload icon badged.
  • Welcome surface shows until dismissed and no longer clips the empty compose box.

v0.12.4

Choose a tag to compare

@kennethtiller kennethtiller released this 25 Jun 11:44

v0.12.4 — 2026-06-25

Fixed

  • Desktop window state persists across launches — Tauri window size, position, and screen are restored on relaunch, and the window-state save is marshalled onto the main thread.
  • Welcome message now shows until dismissed and no longer clips the empty compose box; added top padding and dropped the tagline.
  • App menu "About" item is labelled "About Lucidos" instead of "Lucidos".

v0.12.3

Choose a tag to compare

@kennethtiller kennethtiller released this 25 Jun 11:06

v0.12.3 — 2026-06-25

Added

  • "See all statuses" shortcut — empty status-filter views in the thread drawer now offer a one-click way to clear the filter and see every thread.

Changed

  • macOS menu-bar tray icon rendered as a proper monochrome template glyph that fills the canvas (correct light/dark menu-bar appearance, no padding frame).
  • Window dragging works from the whole header strip, with maximize-on-strip and a focused-pane accent line under the header.
  • Focused-pane marker tuned to a full-width underline, muted in dark mode; navigating now activates the focused pane group.
  • Quit menu item renamed, and the app confirms before stopping the background service.
  • Chat agent now anchors on the currently open app/file for UI/copy requests.
  • README tagline sentence-cased ("If you can describe it, it exists").

Fixed

  • Packaged builds no longer register the workspace as a "Lucidos source" repository.
  • Repo HTML shows as source (not a live render) in the file/diff preview.

v0.12.2

Choose a tag to compare

@kennethtiller kennethtiller released this 25 Jun 08:35

v0.12.2 — 2026-06-25

Added

  • Menu-bar tray model (macOS) — the always-on service now survives closing the client window; the engine keeps running in the menu bar.
  • In-app "Uninstall Lucidos" command (macOS) — clears WKWebView web storage and hides client windows on confirm, with a keep-vs-delete data choice, so a reinstall is clean.
  • First run shows the workspace picker — no more silently auto-created default workspace; offers personal/work name suggestions.
  • view_image chat tool — reprocess images posted earlier in a thread back into the agent's vision.
  • macOS title-bar tinting — the native title-bar strip is reclaimed as a blue drag-band matching the app header.
  • Gateway boot-phase progress — the workspace boot splash now renders engine-reported boot phases instead of a blank wait.
  • Keyboard pane navigation — focus the Conversation drawer (Cmd+Shift+1) and maximize the focused pane group (Cmd+Shift+Enter).
  • .gs (Google Apps Script) files highlighted as JavaScript in the file preview.
  • Unattended trigger-spawned coding agents — trigger-spawned sessions inherit the side-effect grant and auto-resolve permission prompts.
  • Two-phase release pipelinerelease.sh --verify-build / --publish-verified and an --attach-staged path that builds once and verifies before publishing.

Changed

  • Security: permissive CORS disabled by default, and the gateway default bind address secured (no longer binds broadly out of the box).
  • Resolved npm-audit vulnerabilities — vite 6.4.2→6.4.3, @babel/core 7.29.0→7.29.7.
  • Packaged update now restarts the whole service and surfaces inside the workspace; the dev-only gateway reload is hidden on packaged builds.
  • JSON API responses are gzip/brotli-compressed via tower-http.
  • Deterministic root-commit repository identity, with orphaned-thread backfill.
  • Per-parent child-thread fan-out cap raised 3 to 10.
  • Single-file changes open directly into their diff; added files render as the whole file.
  • User-facing thread "Saved" renamed to "Pinned".
  • Cron fires coalesce so a trigger holds at most one queue entry (idempotent recovery).
  • "Lucidos source" coding target hidden on packaged builds; capture-context debug toggle defaults off.
  • Unified focus ring across buttons/dropdowns via a --focus-ring token (collapsed to a single soft band).
  • Perf: windowed thread render, faster exchange sort + incremental pending-message fold, memoized drawer categorization — fixes dev-workspace input lag.

Fixed

  • Engine no longer culls alive-but-busy engines (gateway respawn-storm fix).
  • Graceful coding-agent process-group teardown so Playwright reaps its browsers.
  • Concurrent worktree spawns no longer collide on .git/config.lock; backoff sleep skipped on the final retry.
  • Attached images stay visible to the agent for the whole turn; image message protected from context pass 2.
  • Avoid a UTF-8 panic when truncating memory context.
  • Coding agent treats relative .. targets as out-of-workspace; unwraps shell -c before classifying Codex commands.
  • Globally disable browser autofill on host-app text inputs.
  • Render binary images in the repo file viewer.
  • Archive drawer ordered by created_at; inbox threads excluded from the archive pagination cursor.
  • Hard-exit after uninstall so the window-state plugin can't re-create the deleted data dir.
  • Various: picker boot-splash text, "Manage workspaces" link on a direct engine port, app-thread change-row Diff, legacy workspace switcher list, per-pane Tab trap, thread-row "Waiting" tooltip.

v0.12.1

Choose a tag to compare

@kennethtiller kennethtiller released this 23 Jun 18:38

v0.12.1 — 2026-06-23

Added

  • Hot-swap LLM provider on credential change — adding or changing a provider key takes effect on the next chat, no restart required.
  • Provider-aware first-run onboarding — a fresh workspace with no LLM provider configured guides you to Settings → Models → Providers instead of silently serving mock output; the engine reports llm_configured via /health.
  • Vertex AI in packaged builds — Application Default Credentials (ADC) auto-read; the model list is filtered to only configured providers.
  • Workspace-picker boot recovery — a wedged boot splash now reveals an escape link to the picker; health-gated auto-open and first-run workspace naming.
  • Notification detail in the content panel instead of a modal.
  • Action-toast keyboard support — focus, Tab cycling, and a visible focus ring.

Changed

  • Prompt answer/follow-up SplitButton unified into one frosted, same-width frame.
  • History-navigation arrow defaults swapped: Forward = Up, Back = Down.
  • Setup copy corrected to Settings → Models → Providers; stale "restart" wording dropped.

Fixed

  • Bundled engine is now self-contained — OpenSSL is statically vendored, so the packaged build no longer depends on Homebrew OpenSSL (the crash-loop that blocked packaged startup).
  • Self-healing embedded Postgres lifecycle — stops on shutdown, adopts a healthy running instance, version-guarded.
  • Never serve mock LLM output on a no-provider boot.
  • Toast button focus ring no longer shows on mobile/touch.
  • Laggy repeat-tap can no longer cancel a just-sent turn.
  • Question/permission divider no longer mislabels system aborts as "Canceled".
  • Diff view resets to hunks on each new diff.
  • Stranded "Apply Now" toast is cleared on resume.
  • Workspace selector renders above toasts.
  • In-body notification app links open via openAppById, so disk-backed apps no longer falsely report as missing.
  • Keyboard-shortcuts label font size normalized.