GitHub tokens stay with gh
Ensemblr stores none. No token field in settings, no OAuth screen, no second place one can leak from — it shells out to the CLI you already authenticated.
Ensemblr™ is a macOS 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. There is no Ensemblr backend in the path, and the app ships no agent binary of its own.
Version v0.1.0-beta.17Channel: betaArchitecture: Apple siliconPublished 27 Aug 2026
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 control surface lets an agent drive the app itself — spawn sub-agents into their own tabs and block until they report, launch a harness, run a script, read the diff and leave review comments on it, ask you a multiple-choice question, move the workspace across the board. Pi reaches it through a shipped extension, Claude Code through an embedded MCP server, and a parity test keeps the two tool lists from drifting apart.
audit the reducer
port the tests
sweep the i18n keys
The worktree manager underneath Control. A workspace is a real git worktree, not a branch you keep switching between, so a fan-out of agents cannot collide — two of them rewrite the same file at the same time and never see each other.
Pi runs as a CLI over RPC; Claude Code runs in-process through the Agent SDK against the binary you already have on PATH. The wiring differs, the surface does not — both land on the same timeline with the same tools, approvals and checkpoints, and a chat tab keeps the runtime it was opened with.
The review panel sits beside the conversation that produced the change, so reading the diff never means leaving the agent that wrote it.
A repository declares its scripts once in .ensemblr/settings.toml and every workspace gets them, pointed at its own copy of the tree.
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 into the workspace that needs it.
Opened a root orchestrator in Linear issue sync
Created Dock port detection
Both are running. Where they stand is in artifacts/where-the-work-stands.md
Its context does not survive a clear. Its files do — and it writes only what no tool call could answer back.
A peer that owns the task, with the write access the Concierge deliberately does not have.
Refused per tool call at the control channel, not asked for in the prompt.
The parts that do not need a diagram, but are the reason the app is usable all day.
Ensemblr is an orchestrator, not a service. There is no account to create, 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 — it shells out to the CLI you already authenticated.
Linear’s OAuth tokens go straight to the macOS Keychain, keyed per account — never a file, never an environment variable. Infisical secrets are not stored at all: they resolve live at every launch.
Your pi and claude installs, your credentials, your models, your config. The ~260 MB the Claude Agent SDK would bundle is deliberately left out.
Ensemblr talks to GitHub, Linear, Infisical and your agent CLIs directly — no backend in the path, no telemetry. State is a local SQLite database beside your worktrees.
Ensemblr is at 0.1.0-beta.17 and still pre-1.0. The core loop — isolated workspaces, agent sessions, review, PR — is wired to real services and used daily. Expect rough edges, and file them. Once installed it keeps up on its own: newer builds download in the background, and it offers to restart into one when you say so.
Version v0.1.0-beta.17Channel: betaArchitecture: Apple siliconPublished 27 Aug 2026
Signed with an Apple Developer ID and notarised by Apple. Hardened runtime, and the notarisation ticket is stapled to both the .app and the disk image it arrives in — so macOS validates each of them offline, on first open. No Gatekeeper override, no right-click → Open, no quarantine flag to strip.
Check it before you open it:
shasum -a 256 ~/Downloads/Ensemblr-0.1.0-beta.17-arm64.dmg
ff50d000a236b54a4439daa1373b7e19a3614d965b5d6f955383c9a038cfdfafOr install it with Homebrew:
The cask declares Apple silicon and macOS 12, so brew refuses on a machine that cannot open the app rather than installing it anyway. It is marked auto_updates because Ensemblr updates itself, so a plain brew upgrade leaves the bundle alone — two updaters writing one app is how an install gets corrupted. To hand the job to Homebrew instead, turn Settings → General → Update Ensemblr automatically off and upgrade explicitly:
Prefer a zip? Apple silicon .zip · 151 MB
Nightly · canary
An untested build of master. Rebuilt at 04:00 UTC on the nights the branch moved, signed and notarised exactly like a release, and shipped on its own channel: it installs as “Ensemblr Canary” alongside a release rather than over it, so keeping both is the normal case.
No SHA-256 here. The file behind this link is rebuilt and replaced most nights, so a digest printed on this page would be wrong by morning — the nightly release names the commit it was built from.