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 spawn sub-agents, delegate, wait 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 permission-gated surface lets an agent drive the app itself, not just the code in it. Pi reaches it through a shipped extension and Claude Code through an embedded MCP server, and a parity test keeps the two tool lists from drifting.
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.4 and still pre-1.0. The core loop is wired to real services and used daily; expect rough edges, and file them.
Version v0.1.4Architecture: Apple siliconPublished 6 Sept 2026
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:
shasum -a 256 ~/Downloads/Ensemblr-0.1.4-arm64.dmg
43a188fdc27a69eea452cf3b10565ae6f7bc5f0d76389cc336efd3f77c7972ebOr install it with Homebrew:macOS only.
The cask declares Apple silicon and 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 · 159 MB
Version v0.1.4Architecture: x86-64Published 6 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.4-x64.AppImage
87759e1422353215e7046ce74bb8d68dd37befd06c9de4f661c2236874d6f85fOr 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.
Ensemblr does not update itself on Linux — an AppImage is a file you placed yourself, often somewhere it cannot be written back to. It reports a newer version instead; 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.
macOSsigned 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.