Releases: lcsmas/orchestra
Release list
v0.5.187
What's new — the Orca-parity batch
Seven features adopted from studying Orca (the closest competitor), plus a chrome refresh in its visual language. Every feature was verified by an independent verifier agent before merging.
See what every agent is doing
- Status notes — agents narrate themselves:
orchestra status "<one-liner>"renders a muted line under the sidebar row and anotecolumn inorchestra peers.--clearis the only CLI clear path (whitespace is rejected, deliberately). - Needs-You inbox — a header tray with a badge counting workspaces that need you (waiting/error + bookmarks); the popover triages them and clicking a row jumps + clears.
- Jump Palette —
Ctrl+Jfuzzy-jumps across workspaces (recents-first, branch + repo matching).Ctrl+Shift+Jworks from inside a terminal. - CI badge — failing GitHub Actions show a red
CI ✗pill (repo-wide REST polling, rate-limit-safe by construction); clicking hands the failing run's logs to that workspace's agent to fix.
Review agent work without leaving the app
- Diff review pane — a new Diff tab (lightweight DOM, no Monaco): unified diffs in two scopes (uncommitted / vs base, three-dot), per-hunk selective staging (visual
git add -p, proven against git-on-disk state), line-pinned annotations batched into one "Send to agent" revision prompt, and correct Unstage gating on the actually-staged subset.
Point at UI, get context
- Design Mode — a crosshair in the browser pane: hover highlights elements, click captures outer HTML + a 12-property computed-style subset + a cropped screenshot, bundled straight into the agent composer. Escape cancels. Selector paths drop hashed framework classes.
Reclaim memory from idle agents
- Session hibernation — idle, unfocused, done agents get their process stopped after 30 min (env-tunable:
ORCHESTRA_HIBERNATE_AFTER_MS,ORCHESTRA_HIBERNATE_SWEEP_MS); a quiet zZ chip marks them and they restore on click. Waiting/error/active/sandbox workspaces are never touched; the killed pid is logged.
Chrome
- Orca-inspired polish — a deeper, neutral near-black surface ladder and the signature inverted active-tab pill (light fill, dark ink). Verified boot-to-paint with the pill inversion measured, not eyeballed.
Fixes along the way
- Two literal-NUL bugs fixed (one made a source file binary-to-git and un-reviewable, one made it binary-to-grep and silently truncated searches).
- The CLI now fails loudly instead of printing a false
Delivered (ok).on unknown message targets. - The events-spool test flake was root-caused (flock timeout under multi-agent machine load — not a product bug) and documented.
Full Changelog: v0.5.186...v0.5.187
v0.5.186
What's new
- Disabled browser nav buttons no longer light up on hover. Back/Forward
showed a hover highlight even when there was nowhere to go, making a dead
control look clickable. They now stay inert; enabled buttons still highlight
as before.
Full Changelog: v0.5.185...v0.5.186
v0.5.185
What's new
- Bigger, clearer browser pane toolbar. The embedded browser's back/forward/reload
buttons were noticeably smaller than the rest of the app's chrome. They're now 34×34
with 18px icons, and the URL bar matches at 34px tall with slightly larger text. - Fixed squashed nav icons. The toolbar glyphs were being horizontally compressed
(rendering 10px wide instead of their intended size) because they inherited flex
shrinking from the button. They now keep their proper square shape.
Full Changelog: v0.5.184...v0.5.185
v0.5.184
What's new
-
orchestra linear add --spawnnow nests the new workspace under the calling agent.
It previously hardcodeddetached: true, so a ticket spawned by an agent always
landed top-level in the sidebar with no way to override it — even from a promoted
orchestrator, where nesting is the entire point. The caller's workspace id was
already being sent and used to inherit the repo, then discarded before the spawn.
It's now threaded through, matchingorchestra spawn's behaviour.The Tickets sidebar's "spawn from ticket" button is deliberately unchanged and
still creates a top-level workspace: a user clicked it, so there is no calling
agent to nest under.
Full Changelog: v0.5.183...v0.5.184
v0.5.183
What's new
-
Fixed: the skills dropdown never appeared. Typing
/in the agent
composer silently did nothing. The skills were being found and the popover
was being rendered correctly — a CSS rule on the composer card was clipping
it out of existence and anchoring it to the wrong element./now shows
your project and user skills again, plus the built-in commands. -
Skills and bash prefixes are now highlighted as you type, matching the
Claude Code desktop app: a leading/skillrenders in blue and a leading
!bash prefix in purple, so you can see at a glance how your message will
be dispatched. Ordinary text — and things that only look like commands, such
as/etc/hostsorand/or— stay unstyled.
Full Changelog: v0.5.182...v0.5.183
v0.5.182
What's new
-
Spawned agents now default to Opus 5. The orchestrator brief and the
orchestra-spawnskill previously told agents to "leave implementation on a
cheaper tier" to conserve swarm tokens, so spawning agents routinely pinned
workers to Sonnet on their own initiative. Both now direct spawns to pass
--model opusunless you explicitly ask for a cheaper tier — the
cost/capability trade is yours to make, not the spawning agent's.(No code ever hardcoded Sonnet: an unset model inherits your login default.
It was the guidance that steered agents to override it.)
Full Changelog: v0.5.181...v0.5.182
v0.5.181
What's new
Fixed: archiving the workspace you were viewing turned the app black.
The whole window went black and only restarting Orchestra brought it back. The
diagnostic logging added in 0.5.179 finally captured the cause: React error
#185 — "Maximum update depth exceeded", an infinite render loop in the
structured agent view. Not a graphics/GPU fault, which is what it looked like.
The transcript measures each row after it renders to size its virtualized list.
That measurement re-triggers a render, which terminates only once heights stop
changing — but a pane resize can make a row's height oscillate between two
values, so it never settles and the loop runs until React gives up and the UI
dies.
Archiving the active workspace is the reliable trigger: it switches to a
freshly-mounted transcript whose rows all measure for the first time, exactly
while the pane is being resized by the sidebar row disappearing. (Archiving a
background workspace never did it — the view doesn't change.)
The measure loop is now bounded: after a dozen back-to-back passes without a
frame being painted, it falls back to the coalesced path that yields to the
browser and cannot recurse. Normal streaming is unaffected, and if the guard
ever trips it now says so in the log instead of failing silently.
Full Changelog: v0.5.180...v0.5.181
v0.5.180
What's new
The send button no longer looks broken when the composer is empty. The
disabled state applied both opacity: 0.3 and a saturate(0.4) filter —
carried over from the old wide "Send" pill, which could afford to grey out hard
because it had a text label. On the new bare icon circle the arrow is the only
thing there, so the double treatment washed it into grey mush that read as a
dead control rather than one waiting for input.
It now dims to opacity: 0.45 with no desaturation, so the empty state keeps
the accent blue and crisp edges. Measured on the rendered pixels: disc
saturation up from 0.30 to 0.53, arrow contrast up from 46 to 71.
The arrow's shape is unchanged — it was always identical to the design.
Full Changelog: v0.5.179...v0.5.180
v0.5.179
What's new
Richer diagnostic logging — catch bugs that previously left no trace.
Orchestra had ~163 log lines across 39k LOC, no persistent renderer logging at
all, and 53 silent catch {} sites. The hardest bugs to diagnose were exactly
the ones leaving zero evidence behind. This release instruments them.
Turn it up when you need it
ORCHESTRA_LOG_LEVEL=trace # or debug — no rebuild neededFive levels (trace|debug|info|warn|error), default info, so normal runs stay
quiet. The startup banner names the active level — an absent line now means
"not recorded at this level" rather than "it never happened".
Greppable by subsystem
Every line carries a scope tag — [pty] [spool] [store] [git] [sdk] [ipc] [activity], plus [renderer] for UI-side lines:
grep '\[spool\]' orchestra.log # one subsystem's story
grep 'SLOW' orchestra.log # IPC calls over 250msThe renderer now logs at all
Previously nothing in the UI reached the log file — React errors and failed IPC
calls died with the window. Now renderer lines land in the same file as
main-process lines, interleaved in causal order. Unhandled errors and promise
rejections are captured automatically, and a new error boundary records the
React component stack and shows a readable message instead of the blank
window a render throw used to produce.
Silent failures that now speak up
- A corrupt
store.jsonused to silently reset all workspaces, repos and
accounts to defaults. It now logs an error and preserves the file as
store.json.corrupt-<timestamp>so the data is recoverable. - Terminal output dropped when the renderer can't receive it (the cause of
"scattered word" garble) — previously invisible. - Spool read/parse failures and unhandled agent events, both of which surface as
a stuck status dot with no other clue. - The events-dir startup wipe, whose file count is the fingerprint of the
multi-instance stuck-dot bug. - Git fallbacks that manufacture confident-looking neutral answers (no merge
pill, empty branch list) out of real failures. - Startup fetches in the UI that render a failed backend call as a
legitimately-empty section.
Errors now also carry the detail that .stack omits: errno fields
(code/syscall/path) and cause chains.
Full Changelog: v0.5.178...v0.5.179
v0.5.178
What's new
Composer chips are properly flat. The unified composer card shipped in
0.5.176 still had two chips wearing the old raised-button look — a border and
fill on Interrupt, and a drop shadow on every dropdown (Opus 5, High, Bypass
permissions, Remote control). The shadow came from the app's global button
element rule leaking through, since the chip style zeroed border and background
but never reset box-shadow.
Both are fixed: the whole control row now reads as one flat language, matching
the rest of the card. Interrupt keeps its red — just the colour, not the box.
Full Changelog: v0.5.177...v0.5.178