GitHub tokens stay with gh
Ensemblr stores none. No token field in settings, no OAuth screen, no second place one can leak from.
Ensemblr™ is a desktop orchestrator for the Pi agent harness or the Claude Code CLI you already have installed. Every stream of work gets its own git worktree, and the agent inside it can delegate from root to manager to leaf, wait, verify and integrate — then open the diff, run the scripts and file the PR.
No account, no sign-in, no cloud sync, no telemetry. No Ensemblr backend in the path, and no agent binary of its own.
Move the appearance tokens onto the shared palette and keep the terminal readable.
Done. Palette resolves through one pair of light/dark cuts, and the terminal picks the change up on a live config reload.
Two things to know: the adapter reads computed values, not the variables themselves.
--ensemblr-canvas had two definitions. The one in index.css won on every build, so the second was already dead.applyTheme() now runs on the config event rather than on mount.A root agent can hand a workstream to a manager, which may split it once more into leaves. Each conversation keeps its own context, while the Agents panel shows the whole tree, live tool activity and context use.
audit the reducer
port the tests
sweep the i18n keys
A workspace is a real git worktree, not a branch you keep switching between. Two agents can rewrite the same file at once and never see each other.
Pi runs as a CLI over RPC; Claude Code runs through the Agent SDK against the binary you already have. The wiring differs, the surface does not.
The review panel sits beside the conversation that produced the change. Reading the diff never means leaving the agent that wrote it.
Where does everything stand? Start the Linear sync work.
Both are running. Where they stand is in artifacts/where-the-work-stands.md.
A panel that belongs to the app rather than to a workspace. It reads everywhere and changes nothing by hand: real work goes to an orchestrator it spawns.
Ensemblr is an orchestrator, not a service. Nothing to sign in to and nothing synced off your machine, because there is no our side.
Ensemblr stores none. No token field in settings, no OAuth screen, no second place one can leak from.
Linear’s OAuth tokens go to the macOS Keychain, or gnome-keyring or KWallet on Linux — never a file, never an environment variable. Infisical secrets are not stored at all: they resolve live at launch.
Your pi and claude installs, your credentials, your models. The ~260 MB the Claude Agent SDK would bundle is left out.
Ensemblr talks to GitHub, Linear, Infisical and your CLIs directly — no backend in the path, no telemetry. State is a local SQLite database.
Ensemblr is at 0.1.22 and still pre-1.0. The core loop is wired to real services and used daily; expect rough edges, and file them.
Signed with an Apple Developer ID and notarised by Apple. Hardened runtime, and the ticket is stapled to both the .app and the disk image, so macOS validates each offline on first open. No Gatekeeper override, no quarantine flag to strip.
Check it before you open it (Apple silicon .dmg):
shasum -a 256 ~/Downloads/Ensemblr-0.1.22-arm64.dmg
9bfb01be6f22b3efa2fc986d10eb9de2c4809456e1d4a971f7808b8e5b4ecb63Check it before you open it (Intel Mac .dmg):
shasum -a 256 ~/Downloads/Ensemblr-0.1.22-x64.dmg
85d8a63490ae19b1798c0cc1ec9f367491215d8dd27f8a013f07a5a7c2af0a37Or install it with Homebrew:macOS only.
The cask picks the Apple silicon or Intel disk image to match the Mac and needs macOS 13, so brew refuses where the app cannot open. It pulls in gh too; gh auth login stays yours to run.
It is marked auto_updates, so brew upgrade leaves the bundle to Ensemblr’s own updater. To hand it to Homebrew instead, turn Settings → General → Update Ensemblr automatically off and upgrade explicitly:
Prefer a zip? Apple silicon .zip · 155 MBIntel Mac .zip · 161 MB
Version v0.1.22Architecture: x86-64Published 24 Sept 2026
Unsigned. Linux has no notarisation to pass. Nothing on Linux issues the equivalent of a Developer ID, and a self-signed binary would prove nothing. The SHA-256 below is the check, and install.sh refuses on a mismatch.
Check it before you open it:
sha256sum ~/Downloads/Ensemblr-0.1.22-x64.AppImage
89ecd3aad7e9f289e6ffc740286a5b837c36c4cfa7f46a07334a3d9e85947ab1Or install it with the script:
It verifies the SHA-256 first, puts the AppImage under ~/.local, and unpacks the launcher entry and icons the bundle already carries. Read it first: nothing in it needs root or writes outside your home directory.
From somewhere it can write — which is where the script puts it — Ensemblr updates itself: same digest check, then the AppImage is swapped in on restart. Where it cannot write its own file it reports the newer version and links the release page instead, and this is the other end of that:
Nightly · canary
An untested build of master. Rebuilt at 04:00 UTC on the nights the branch moved. It installs as “Ensemblr Canary” alongside a release rather than over it.
macOS · Apple siliconsigned and notarised exactly like a release
Ensemblr-Canary-arm64.dmgLinuxunsigned, like the release AppImage
Ensemblr-Canary-x86_64.AppImageNo SHA-256 here: the bytes behind these links are replaced most nights, so one printed here would be wrong by morning. The nightly release names the commit it was built from.