Check the Mac app
A hand test for a desktop build on a Mac (DESKTOP). Automated tests do not cover Touch ID, OS notifications, Gatekeeper or installer removal.
Build the disk image on the Mac, from the repo root:
pnpm desktop:dmg
The script prints the path to the unsigned .dmg. The app and its Node/Prisma sidecar are built for this Mac's chip; use the Apple silicon installer on M-series Macs and the Intel one on Intel Macs.
Install and run
-
[ ] Install and open. Drag Ensemble to Applications. The first double-click may be blocked. macOS 14 and earlier: right-click the app, Open, then Open again. macOS 15 and later: double-click once, then System Settings → Privacy & Security → Open Anyway.
-
[ ] Window and icon. The window opens. The Dock icon is the Satin Gold Woven Chorus mark on its Deep Petrol tile.
-
[ ] First run. With no
~/Library/Application Support/com.ensemblework.desktop/mode.json, the start page asks With your Ensemble account or Only on this computer. For the local-only checks below choose Only on this computer; the bundled Hub opens, and Settings → Account offers Move to your Ensemble account. -
[ ] With an account. On a second user account (or after deleting the data folder), choose With your Ensemble account. The browser opens
/linkwith a code that matches the app; approve. The window opens Today on the account, and Settings → Connections → Connected computers lists this Mac once. Sign out in the window: the login page shows Continue in your browser, which signs it in again without pairing a second computer. -
[ ] Move to an account. In local-only mode, add a task and a page, then Settings → Account → Move to your Ensemble account → Continue in your browser, approve with Move this computer's local-only data ticked. The window opens the account, which now has the task and the page; quitting and reopening opens the account, not the local Hub.
-
[ ] Model key and a simple task. Settings → Assistant → Models → Manage API keys → Google Gemini; paste a key from Google AI Studio. Workspace → Assign task → Research & writing; ask for one sentence. The task finishes in the window.
-
[ ] Folder picker. Assign task → Code on your computer → Where it works: A folder on this computer → Choose…. The macOS folder dialog opens and the chosen path fills the field.
-
[ ] Sandbox. Assign a code task in a trusted folder and ask it to write outside that folder (for example
~/Desktop/ensemble-sandbox-probe.txt). The file is not created; commands run in the macOS sandbox. -
[ ] Plots export. Plots → Export → PNG. This uses the Mac's own
python3with matplotlib. If either is missing the app says: "Plots need Python 3 with matplotlib on this computer. Install it, then try again." Afterpython3 -m pip install matplotlib, the export downloads.
Pairing
These steps pair an app kept local only from an earlier version; an app with an account pairs when it signs in (above).
-
[ ] Pair with the web app on localhost and run an assigned task. In another terminal at the repo root, run
pnpm dev(sitehttp://localhost:3000, APIhttp://127.0.0.1:4000). In the browser: Settings → Connections → Connected computers → Connect a computer → Create connection code (8 characters, valid 10 minutes). In the desktop app: Settings → Account → This Mac. Addresshttp://127.0.0.1:4000, paste the code, Pair, then turn on Allow remote tasks. (ENSEMBLE_SITE_URLonly chooses the site the window loads; the address here is the remote-tasks API.) In the browser, assign a small task with Run on set to this Mac. It runs on the Mac. -
[ ] Rename. Rename the Mac under Connected computers; the name survives the next heartbeat.
-
[ ] Revoke. In the browser: Connected computers → Revoke on that Mac. Within seconds the desktop shows: "Removed from Ensemble on the web. Pair again to keep running remote tasks."
-
[ ] Removal. Signing out or
ensemble runner uninstallends remote access. With a packaged app, deleting its executable is noticed by a surviving runtime on its next heartbeat.
Settings
- [ ] Code folders. Settings → Agents → Terminal and commits → Choose folder…: the Tauri dialog opens; the folder's git checkout appears in Code and can be reviewed.
- [ ] Notifications. Settings → Notifications → App notifications: grant macOS permission and send a test. Denying leaves the setting off; Focus modes still apply.
- [ ] Passkeys. On the hosted Settings → Agents → Terminal and commits, unlock passkey management and remove a disposable passkey. Removal while locked is refused.
- [ ] Files and data. In a disposable space: attach an existing file from the assistant and confirm it becomes an
@file:mention without a connector search. Check the board toolbar and the Metrics provider and date filters. Use Settings → Data → Danger zone (typed phrase, no paste or drop, then a final confirmation): deleting everything clears local usage details but not the account's credit consumption.
Release
- [ ] Settings → Account → About Ensemble matches root
release.json, and the CLI shows the same version. - [ ] The installer matches the Mac's chip.
- [ ] About can check for updates; an active task blocks installing one. Installs older than 0.4.0 need the current installer once.
- [ ] An Intel image opens with the app and an Applications link, and the bundle's version matches the release.
- [ ] Brand:
pnpm brand:checkandnode scripts/check-icons.mjspass. Check the startup mark, Finder and Dock icons, light and dark Hub, the minimized assistant while it works, and OS reduced motion.