Skip to content

Add a macOS desktop app around the controller UI - #224

Open
wseaton wants to merge 2 commits into
mainfrom
desktop-app
Open

wseaton wants to merge 2 commits into
mainfrom
desktop-app

Conversation

@wseaton

@wseaton wseaton commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

crucible-desktop is a Tauri 2 app that opens each configured controller profile in its own window and adds what a browser tab can't: a tray menu of running playbooks with spend and budget, a Dock badge for pack approvals and open decision requests, native notifications behind the UI's Notification API, crucible:// links, dropping a pack folder on the Dock to push and test-fire a draft, and local profiles that run just controller-local for as long as the app is open.

It is its own Cargo workspace. A new Desktop workflow runs fmt, clippy and tests on macOS only when crucible-desktop/ changes, and the release workflow now attaches a zipped Crucible.app to each tag. just desktop-check and just desktop-install do the same locally. macOS only, signed ad hoc. Only the controller's own origin gets IPC, and crucible://open?url= refuses URLs off every profile origin.

The decision-request badge reads /api/decisions from #223 and reports zero until that lands.

Changelog: Added: a macOS desktop app with per-profile windows, a tray run monitor, a Dock badge and native notifications for approvals and decision requests, and drop-to-launch for packs

crucible-desktop is a Tauri 2 app, its own Cargo workspace, that opens
each configured controller profile in its own window. It adds what a
browser tab cannot: a tray menu of running playbooks with spend and
budget, a Dock badge for approvals and open decision requests, native
notifications behind the UI's Notification API, crucible:// links,
drop-a-pack-on-the-Dock to push and test-fire a draft, and a local
profile that starts and stops `just controller-local` with the app.

Only the controller's own origin gets IPC; the identity provider and
anything else a window navigates to get none. crucible://open?url=
refuses URLs off every profile origin. The checkout a local profile
runs from is a setting, defaulting to the build checkout.

`just desktop-install` builds and installs it; `just desktop-check`
formats, lints and tests it. CI does not build it.
The Desktop workflow runs fmt, clippy and tests on macos-latest only when crucible-desktop/ or the workflow changes, since macOS minutes are billed. The release workflow builds Crucible.app on each tag, stamps the tag's version, and uploads it zipped with a sha256. It is signed ad hoc, so a downloaded copy needs Open Anyway on first launch.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant