Releases: Chorus-AIDLC/Chorus
Releases · Chorus-AIDLC/Chorus
Release list
v0.14.2
Added
- Sidebar project quick-access (recent + pinned): The left sidebar gains a project quick-access region — one merged list of pinned projects (unlimited, pin-time order) followed by up to 5 recently visited, each row showing its project-group sub-line and the same hash-computed color+initials icon as the /projects list. Pin/unpin works from both sidebar rows and /projects cards via a shared client provider (reflects across surfaces with no reload). Recent (unpinned) rows get a ⋯ overflow menu with Pin / Remove-from-recent; remove is a soft-remove (returns on next visit). Backed by an account-level, cross-device
ProjectVisitmodel (per user × project,lastVisitedAt+ nullablepinnedAt) under user-only/api/project-visits. (#438, #440)
Changed
- Unified daemon presence into one bottom-right entry: The two disjoint bottom-corner daemon affordances — the bottom-left sidebar presence pill and the bottom-right pixel-canvas widget — are merged into a single bottom-right floating entry. One click opens a slim online-agent roster with a prominent "Open chat" action (collapsing the old pill → popover → "View all" → modal chain); the pixel-canvas view is retained as a project-scoped "Open pixel workspace" secondary. Global Settings also moved from the project-conditional global nav into the resident sidebar footer. Frontend-only refactor over the existing presence spine. (#437)
- Slimmer MCP tool surface for long-context stability: Compressed 7 over-long MCP tool descriptions to ≤2 sentences and converted 6 filter/type params from free-form strings to strict enums, cutting every-turn
tools/listcost that drives long-context tool-call degradation (top-level descriptions −71%). Enums use verified current stored domains; behavior red-lines relocated to per-param.describe(). (#436)
Fixed
- Daemon session running indicator disagreed with Interrupt: The conversation-list running dot read only the origin-connection execution slice while Interrupt searched all slices, so after a cwd/agent switch or session re-point the dot could read idle while Interrupt still worked — now both derive from the same matched set via
sessionExecStatusForRow. Also emits a visible warn on the "non-null root idea, nulldirectIdeaUuid" lineage gap (a pre-directIdeaUuidserver fingerprint that breaks child-wake matching). (#439)
Plugin
- Plugin & skill versions → 0.14.2: Claude Code, Codex, OpenClaw, and Kiro plugins plus the standalone skill bumped to 0.14.2. (#441)
- SessionStart nudges OpenSpec setup when off: When OpenSpec mode is inactive because it isn't set up, the SessionStart banner now shows
(OpenSpec off — run/chorus enable openspecto set it up)($choruson Codex), while an explicit opt-out still shows a neutral(OpenSpec off). A new "Enable OpenSpec Mode (Optional)" skill section on all four plugin surfaces instructs the agent to run the install/init for the user. (#442)
v0.14.1
Added
- Amazon Kiro CLI integration (4th plugin surface): A Chorus plugin for Amazon Kiro CLI — installed via a one-shot
install-kiro.shthat merges loose.kiro/{agents,skills,steering,settings}templates (the Chorus MCP server, eightchorus-*workflow skills, achorusmain agent with session-lifecycle hooks, and three read-only reviewer subagents) into your Kiro config, global or--workspace-local. Paired with a--agent kirodaemon backend (wake / resume / interrupt / transcript) so a remote dispatch can drive a local Kiro headlessly. Targets Kiro CLI v2. Documented indocs/CONNECT_KIRO.md, linked from every README locale. (#425, #427) - Pin a cwd before waking a daemon: Waking a daemon-hosted agent now prompts for the target working directory instead of defaulting to the first daemon — a cwd picker on wake, non-waking reassign, HARD pins that stick, and
@mentioninheriting the idea's pin. (#431) - Persist project-group expand/collapse state: The project-list group open/closed state is now remembered across visits via
localStorage. (#424)
Changed
- External-reference attachment is now an agent reflex: The idea/skill workflow nudges agents to attach reference artifacts (a
### Referencesstep + wake-prompt nudge), and referencenotesare clamped to 2 lines in the UI with a hover tooltip + tap-to-expand; the MCP docs nudge concise notes. (#423, #432) - Offline hint on stage-advance buttons moved into a tooltip: The Start Development / Yolo buttons show their offline hint as a tooltip rather than inline text. (#422)
Fixed
chorus daemon installdrops credentials under systemd: The install path now persists + validatesCHORUS_URL/CHORUS_API_KEYintodaemon.jsonfor the boot service (systemd--userclean-env stripped them), plus an interactive multi-cwd setup wizard. (#430)- Daemon conversation forks on cwd/agent switch: Switching an idea's cwd or agent re-points the existing conversation instead of forking a residual chat, and interrupt is now reachable from any thread. (#429)
- Child-idea wake lit the parent chat: Child-idea wake is now anchored to the child conversation, and the approve note is delivered inline. (#428)
Plugin
- Plugin & skill versions → 0.14.1: Claude Code, Codex, and OpenClaw plugins plus the standalone skill are bumped to 0.14.1, with the new Kiro plugin surface added. (#423)
v0.14.0
Added
- Dark mode across the entire app: A light/dark/system theme (next-themes,
.darkclass on<html>, default = system, per-devicechorus-theme, FOUC-safe), with a combined language/theme control in the sidebar footer. ~2000 hardcoded hex utility classes were migrated to semantic design tokens (byte-identical in light) with hue-matcheddark:variants for status colors; the three surfacesdark:can't reach were handled explicitly — inline-style colors (CSS-var + scoped.darkrule), the project graph<canvas>(live.darkread + MutationObserver repaint), and @xyflow/react's unlayered chrome (colorModeprop). Shiki code blocks are theme-aware. (#414) - Korean (ko) locale: Full Korean translation of the app (1482 keys at parity with en/zh), registered as a first-class locale with automatic browser detection. (#411, #419)
- Japanese (ja) locale: Full Japanese translation (1482 keys at parity), kanji/wago-first glossary (着想/課題/提案/文書), です・ます polite form, auto-detected for ja/ja-JP. (#420)
- First-class research/reference artifacts: A new
ReferenceArtifactentity so external evidence (docs, reference repos, issue/PR threads, papers/blogs) can be attached to ideas, proposals, and tasks and read back inline. RESTGET/POST /api/references+GET/PATCH/DELETE /api/references/[uuid](gated ondocument:read/document:write, no new permission bit), MCPchorus_add_reference/update_reference/remove_referenceplus inlinereferences[]on get/create tools, and read-only References sections on idea/proposal/task detail with a batched per-idea reference count in the tracker. (#399, #418) - Top-of-page navigation progress bar: A slim NProgress-style loading bar pinned to the viewport top during App Router client navigations, themed via the
--primarytoken (adapts to light/dark with zero per-theme JS). Programmatic navigation is covered via a shareduse-progress-routerhook. (#416)
Plugin
- Plugin & skill versions → 0.14.0: Claude Code plugin, Codex plugin, OpenClaw plugin, and standalone skill versions bumped to 0.14.0. The reference MCP tools (
chorus_add_reference/update_reference/remove_reference) are documented in the skill tool rows. (#418)
v0.13.2
Added
- Theme (container) ideas: A new
Idea.isContainer"theme" — a parent idea that groups related child ideas under a shared direction. A theme can elaborate but cannot create a proposal; to deliver, derive a child idea and write the proposal there. The flag is orthogonal to lineage, freely reversible, and guarded at the singlecreateProposalchoke point (company-scoped, no bypass across action/REST/MCP). Full UI chain: one-step empty-theme creation in the new-idea dialog, a THEME-vs-IDEA type-eyebrow across tracker rows and the detail panel, a Linear-style x/y progress ring rolling a theme's status up from its children (no N+1), and a daemon-assisted "decompose into child ideas" flow that reuses the conversational-idea entry + elaboration re-wake (no new wake action or plugin ports). (#409) - Trackpad zoom & pan gestures for project graph views: A Figma/Miro-style trackpad model across both graph surfaces — two-finger swipe pans, pinch zooms — while keeping mouse users supported. The canvas mind-map gains an on-screen +/- / fit control cluster; the ReactFlow task DAG gets a shared pan/zoom prop set (pinch + Ctrl/Cmd + Controls zoom), with the readonly dashboard preview excluded. (#408)
Changed
- Idea panel reassign moves onto the assignee block: The dashboard idea-tracker detail panel drops its icon-only footer reassign button; reassign now triggers from the assignee block shown in the elaboration tab (same
status !== "elaborated"gate). The shared Yolo button is restored to a full rocket icon + "Yolo" label (purple styling and confirm dialog kept). The/ideaspanel keeps its own footer reassign button. (#410)
Fixed
- Slow/high-resolution mouse wheel intermittently panned instead of zoomed on graphs: The #408 trackpad gestures introduced a mouse-vs-trackpad device classifier that misfired — a smooth-scroll mouse is indistinguishable from a trackpad on the wheel event stream. Settled on a deterministic model: a plain wheel always zooms around the cursor at any speed, pinch zooms, and drag pans. The classifier (
wheel-gesture.ts,dag-wheel-nav.tsx) is removed and the task DAG returns to ReactFlow default scroll/pinch zoom, converging with the readonly preview. (#412)
Plugin
- Plugin & skill versions → 0.13.2: Claude Code plugin, standalone skill, and OpenClaw plugin versions bumped to 0.13.2. The "container" idea concept is renamed to "Theme" across i18n values, MCP tool descriptions, and skill docs (the underlying
isContainerfield, keys, and tool names are unchanged). (#409)
v0.13.1
Added
- Stage-advance framework — Start Development & Yolo: A generic stage-advance framework replaces the elaboration-only path. Both idea-detail panels now expose a Start Development button (server preconditions + activity +
start_developmentwake) and a Yolo button (yolo_requestedwake) so a human can hand an idea straight to autonomous development from the UI. (#389, #404) - Conversational idea entry: The new-idea dialog gains a conversational mode — describe your idea to an agent and hand off directly into chat. The agent-name Select always shows, even with a single online agent. (#391)
- Conversational idea root session: Conversational idea creation now dispatches transactionally through
/api/ideas/conversational— it pre-creates the idea, an idea-anchored root session, and the first instruction in one step, via a pluggable dispatch surface. (#392) - One-click Resume for crash-exited daemon executions: Crash-interrupted executions (
interruptedReason=crash) are now manually resumable from the chat window and connection deck, with a crash-specific continue instruction injected into the resumed wake. Covers both Claude Code and Codex backends. (#390) - Graceful daemon shutdown + orphan-turn reconcile: The daemon now reports an outcome-aware turn exit on shutdown, the server reconciles orphan turns for dead daemons (and on new-generation daemon re-registration), turns gain a terminal
interruptedstate, and the daemon conversation surface renders interrupted turns. (#397, #398) chorus daemon install: A systemd supervisor unit generator for running the daemon as a background service, with quotedExecStarttokens and restart-on-reinstall. (#402)
Fixed
- iOS resume login-bounce: Middleware OIDC refresh failures are now non-destructive — middleware never destroys auth state. Browser auth is cookie-only (keepalive and the resume gate deleted;
sync-tokenis recovery-only), with last-resort refresh-token recovery after an iOS cookie purge and structured refresh-token diagnostics. Agent-presence polling pauses after consecutive dead-session 401s. (#400) - Daemon stop misreads a live daemon as stale after an NTP clock step: A boot-time NTP step shifted
ps lstart, sostartedAtstring-equality vetoed the pidfile match and cleared a live daemon as stale. (#401) - Daemon stale-PID identity:
stopnow identity-verifies pidfile liveness so recycled PIDs read as stale, adds astop --forceescape hatch + exit-code contract, and uses a busybox-compatiblepsfallback. (#390)
Changed
- Idea panel action row: Decluttered — Reassign and Yolo are now icon buttons with shadcn Tooltips. (#406)
Plugin
- OpenClaw plugin → 0.13.1: The OpenClaw plugin router now handles the daemon stage-advance wake events (
start_development,yolo_requested). Version bumped 0.11.1 → 0.13.1. (#405)
v0.13.0
Added
- Per-project resource mind-map: A new per-project graph view renders the Idea → Proposal → Document/Task lineage as a deterministic, collapsible mind-map tree (d3-hierarchy) on a Canvas-2D renderer that works on every viewport, including two-finger pinch and double-tap zoom on touch. Every node card shows the entity's status at a glance — ideas carry the 8-state derived badge that mirrors the idea tracker, proposals/tasks show native lifecycle status, documents show their type — updating live via the existing SSE full-refetch. A title search box auto-expands the ancestor hubs of every match, highlights hits while dimming the rest, and offers current/total count with prev/next navigation that centers each match (Enter / Shift+Enter step through, IME-guarded); clearing the query drops only the search visuals and leaves the located branches expanded. Desktop nodes gain a hover tooltip with the full untruncated title, and a compact top-right control card holds search, the type filter/legend, and expand-all (folding to an icon button on narrow viewports). (#376, #377, #378, #380, #383, #386)
Fixed
- Proposal approve/reject wakes hit a random cwd instead of the idea's session origin:
proposal_approved/proposal_rejectedmap to thetask_assignedturn trigger, so they missed the session-origin upgrade that was gated only onelaboration_verifiedand fell back to online-first (a random online cwd) instead of the connection where the idea's conversation lives. The upgrade is now generalized to the autonomous idea-anchored trigger family (task_assigned,elaboration,elaboration_verified), which also fixesidea_claimedand task wakes. (#381) - First-run P1000 when the embedded PGlite port was occupied: A first
chorusrun hit Prisma P1000 when a foreign Postgres already held the embedded PGlite port — the forked PGlite child died ofEADDRINUSEbut exited code 0, sowaitForTcpmistook the foreign listener for PGlite, printed a false "PGlite ready", and migrate failed auth (a residualDATABASE_URLhit the same wall). The launch is extracted into a pure, dependency-injectedcli/embedded-db.mjswith a pre-flight port probe and a child-exit latch that is fatal for any exit code. (#384) - @mention cwd picker wasn't keyboard-completable: The secondary cwd picker (
MentionInstancePickerDialog) opened with nothing selected, so the keyboard couldn't confirm and Pin was disabled until a click. It now default-selects the first cwd on open (Pin enabled immediately, roving focus lands on a concrete row), and Enter confirms the current selection — scoped to the list region so it never double-fires with the footer, and IME-guarded per the CLAUDE.md rule. (#385)
v0.12.1
Added
- Codex daemon backend (
chorus daemon --agent codex): A remote-dispatched wake can now spawn a local headless Codex instead of Claude Code. Codex generates its ownthread_id(persisted per-anchor forcodex exec resume), permission posture is subcommand-aware (yolo → bypass-approvals-and-sandbox; chorus → read-only sandbox), MCP comes from the user's~/.codex/config.tomlwith the daemon key passed via the configuredbearer_token_env_var, and interrupt parity is preserved via a detached process group. The Claude Code path is byte-unchanged. (#370) - Conflicting daemon connections warn + skip instead of silent takeover: A second
chorus daemonregistering at the same (agent, host, cwd) as a live different-process daemon previously upserted (silently took over) the connection row, racing two processes on the same dispatch/control channel. The server now detects a fresh different-process incumbent and returns a conflict that writes nothing; the daemon warns and permanently skips that cwd, exiting non-zero only if every declared path conflicts. Stale/crash incumbents and same-process reconnects still take over / refresh as before. (#372)
Fixed
- Skill bodies leaked into daemon transcripts: A loaded skill body is delivered to the headless Claude Code session as a synthetic user turn (
type:"user"+isSynthetic:true), and the block-level text filter kept it — leaking the full skill body into the Chorus transcript. These envelopes are now dropped (structural match only, so real human instructions and agent replies are never affected), with defense-in-depth stripping of<system-reminder>spans. (#373) - Daemon presence list jittered on every refresh: Connection order was driven by
lastSeenAt(which changes on each heartbeat), so equivalent refreshes reshuffled the agent list and per-cwd rows. Ordering is now online-first then by stable identity, withlastSeenAtdisplay-only; a defensive frontend comparator prevents re-introducing jitter. (#371) - Root route / login bounced already-authenticated users: After a long idle, reopening onto the root route (
/) could bounce a still-valid session to/login, and/loginnever checked auth state so the user was stranded on the form. The root route now uses the same prime-and-retry session contract as the dashboard layout (redirecting only on a true post-prime 401), and/loginredirects an already-authenticated visitor straight into the app. chorus loginclobbereddaemon.json:chorus loginand the daemon's TTY credential-completion path overwrote the entire~/.chorus/daemon.json, destroying pre-existingcwds/yoloAckAt(a crash-loop + re-prompt footgun when running the daemon as a boot service). Every config write now goes through a single read → shallow-merge → atomic write helper, and a loudclaude-not-found warning is emitted at startup. (#367)
Changed
- Landing page integrations refreshed: The "Plug Into Your Agent Stack" section now lists Claude Code, Codex, OpenClaw, and the universal skill as four equal cards (was three, no Codex), with corrected counts and capabilities (Codex backend, OpenClaw embedded-agent wake + interrupt/resume).
v0.12.0
Added
- Multi-path daemon — one daemon, many working directories: A single
chorus daemoncan now serve multiple working directories via--cwd/CHORUS_DAEMON_CWDS/daemon.json cwds:[], opening one independent connection per cwd with no project binding. Each spawn runs in its own cwd; resume pins to the origin (host, cwd) connection and cross-cwd resume is rejected rather than silently misrouted. (#353) - (agent, host, cwd) addressable daemon instances: Each (agent, host, cwd) is now individually visible and addressable across presence, @mention, task assignment, ad-hoc send, and the chat header. Path-first / host-conditional display with left/right truncation; presence is a collapsible per-cwd drill-down showing online instances only; pickers auto-pin a lone live instance and offer a secondary cwd picker when 2+ are live. A conversation whose origin cwd goes offline can be re-pointed to another online cwd of the same agent, preserving its
sessionId. (#354) - Idea-rooted pin-once-inherit (AgentInstance as a first-class actor):
AgentInstanceis promoted to a durable, third polymorphic assignee type (agent_instance), and the idea is the authoritative pin root — proposals / tasks / wakes for the same agent inherit the idea's pinned instance instead of each entity carrying its own pin. Soft (assignment) pins degrade gracefully to online-first when the instance is offline; hard (mention) pins stay notify-only. REST claim routes andchorus_pm_assign_taskaccept an optionalinstanceUuid. (#359) - Comment agent @mentions render as online-status badges: Agent @mentions in the comment area become interactive badges — name + online dot, a click popover with identity (and cwd/host for a pinned mention), and an owner-only, online-only "Open conversation" button that opens the daemon chat focused on the agent or pinned instance. User mentions and all other surfaces are unchanged. (#358)
- Cursor-based infinite-scroll comments:
UnifiedCommentsnow first-paints only the newest page and auto-loads older pages on scroll, with a burst-safe SSE merge that no longer reloads the whole list. Additive cursor mode inlistComments(selected bylimit); the offset path andchorus_get_commentsare byte-for-byte unchanged. (#360)
Fixed
- Pinned autonomous wakes hit the wrong cwd instance: A pinned @mention / task dispatch (and the
elaboration_verifiedproposal-writing wake) woke any online instance because the daemon-side live wake was an agent-wide broadcast. Wakes are now routed directionally to the resolved online target connection via adeliver_turncontrol ping; offline pin = notify-only, no wake. (#357) chorus daemondidn't shut down gracefully: The server's SIGINT/SIGTERM handlers were registered unconditionally and pre-empted the daemon's graceful stop (stale presence, misleading message). Signal handlers are now confined to the server launch path so a daemon/login process shuts down through its own path. (#356)- Instance picker: second cwd row unselectable: An id collision + label double-fire made the 2nd cwd unselectable once a conversation was open (and disabled mobile @mention "Pin instance"). Fixed across new-conversation, @mention (incl. mobile Pin), and assign. (#355)
- Assign Idea/Task modals overflowed short mobile viewports: Both assign modals now use a shared
ScrollableDialog(capped atmax-h-[85svh], pinned header/footer, single internal scroll region), keeping the Assign/Cancel buttons reachable with a soft keyboard. (#362) - @mention cwd picker overflowed on mobile: The
MentionInstancePickerDialoggains a mobile-safesvh-based layout with an internal-scroll list and is lifted above the idea detail panel's z-index. (#361)
Changed
- Daemon help & config documentation: Top-level
chorus --helpnow matches the yolo-default posture (with--chorus-onlyas the opt-out), the multi-path daemon and the full~/.chorus/daemon.jsonfield set are documented in README (en + zh), and the startup banner shows the resolveddaemon.jsonpath. (#363)
v0.11.1
Added
- Ship-time code-review gateway: A new read-only
code-revieweragent runs as the final AI-DLC gateway — after the last task of an idea-rooted proposal is verified, it reviews the idea's aggregate code change (cross-task integration, architecture consistency, security, regression, feature-level coverage) and posts one VERDICT comment on the idea. Advisory/behavioral like the proposal/task reviewers (it never changes the idea's stored status). Wired across all four plugin surfaces (Claude Code, Codex, OpenClaw, standalone); theon-post-verify-task.shhook gains a last-task-verify branch gated byenableCodeReviewer(default on) and bounded bymaxCodeReviewRounds(default 3). Workflow skills document the gateway and the FAIL → quick-dev fix-task loop. (#350) - Copy session ID in daemon chat: The daemon chat transcript header gains a "Copy session ID" button that copies the bare
claude --resumeanchor so a human can take a conversation over locally. Works for both idea-anchored and ad-hoc sessions; icon-only on mobile, icon + label on desktop, with accessible copy confirmation. (#348)
Changed
- Online agents rank first in @-mention candidates:
searchMentionablesnow enriches → sorts → slices (previously sliced before computing liveness, so a flood of matching users could cut online agents out before they were known to be online). Online agents sort ahead of offline agents and users, idle-first among online agents. Pure server-side; bothGET /api/mentionablesand the MCPchorus_search_mentionablesbenefit. (#349) - Project description renders as collapsible markdown: The dashboard project description now renders through the Streamdown markdown pipeline (previously a plain
<p>) and clamps to a fixed height with a Show more / Show less toggle. Clamping is by rendered height (not char-slicing) so markdown is never cut mid-token; the toggle only appears on actual overflow. (#351)
Plugin
- All plugin packages → 0.11.1: Lockstep bump across Claude Code (marketplace.json + plugin.json), Codex, OpenClaw, every skill
SKILL.mdon all four surfaces, and the standalonepublic/skill/distribution — carrying the code-review gateway. (#350)
v0.11.0
Added
- Chorus Daemon — run your local Claude Code as a Chorus agent: A new
chorus daemonCLI client mode (pluschorus login) authenticates as an agent, subscribes to the notification SSE stream, and on each wake (task assigned / @mention / elaboration / human instruction) spawns a local headlessclaude -pwired to the Chorus MCP server. No new npm deps (headless subprocess, not the Agent SDK; cross-platform). Sessions are deterministically anchored on the dispatched entity's direct idea uuid — humans can take over any run withclaude --resume <idea-uuid>, and a WakeQueue serializes per-anchor so two wakes never resume the same session at once. A headless guard forbidsAskUserQuestionand routes human-decision points back to Chorus. Ships with TTY credential completion, default-yolo posture (--chorus-onlyfor restricted), a startup banner, per-wake lifecycle logs, and-ddetached background mode (stop/status/restart/logs). (#317, #318, #325, #341, + CLI UX follow-ups) - Agent Connections — live daemon observability + control: A sidebar presence pill → popover → "View all" chat modal for watching and steering daemon agents, backed by a DB-backed, cross-instance
DaemonConnectionregistry (self-reported clientType/host/version, generation-fenced liveness) and a persistent per-connectionDaemonExecutionstate (running/queued,execution:{connectionUuid}SSE channel, deep links). Each session is a persistent conversation: every wake is a turn on aDaemonSessionwith live transcript relay (message-level pagination), continuation pinned to the origin connection. Humans can inject free-text instructions (origin-only precise delivery) and interrupt / resume a running run via a server→daemon reverse control channel (sticky interrupted status, two-stage process-tree kill). Ad-hoc conversations are first-class. Empty states carry anpx @chorus-aidlc/chorus daemonconnect CTA. (#319, #320, #322–#327, #330–#337, #342, #343) - Verify Elaborate button wakes the daemon PM agent: A human-clickable "Verify Elaborate" resolves an Idea's elaboration from the UI and wakes the assigned daemon PM agent to write the proposal — closing the Reversed Conversation loop. New user-side
elaboration_verifiedwake, distinct from the unchanged agent-onlychorus_pm_validate_elaboration. (#335) - Agent online presence in the @-mention dropdown: Each agent candidate shows a green presence dot and a status line ("N active" / "Idle"), sourced from the daemon-connection registry, owner-scoped and batched. (#324)
Changed
- Daemon defaults to full-autonomy (yolo) mode: The
chorus daemonposture defaults to yolo with a prominent banner warning instead of an interactive confirmation;--chorus-only(orCHORUS_CHORUS_ONLY=1) reclaims the restrictedmcp__chorus__*-only posture. - README CLI & Daemon usage guide: New Quick Start section documenting daemon setup (currently Claude Code only).
Fixed
- Dashboard idea panel out of sync on soft navigation: Notification / SSE-toast / search / presence idea links changed the URL but never opened or switched the detail panel. Selection now derives from
useSearchParams()with the SSR seed gated to first render, so deep-linking and closing a deep-linked panel both behave. (#340) - Lineage UI scroll/overflow defects: Fixed the set-parent picker's non-scrolling candidate list and long-title overflow across picker rows, breadcrumb, and grid-item wrappers. (#339)
- Daemon chat modal display: Mobile now fills the viewport edge-to-edge (input pinned to bottom), and wide markdown blocks (tables/code/URLs) are contained instead of overflowing horizontally. (#336)
Plugin
- OpenClaw plugin → bidirectional daemon parity: The OpenClaw plugin now implements the same bidirectional daemon protocol as the
chorusCLI host, re-mapped to the in-processrunEmbeddedAgenthost — shared pure-REST daemon client, reverse control channel (interrupt/resume/deliver_turn), turn-advance + execution-state + streaming transcript reporting, real mid-run interrupt via AbortController, and pending-turns backfill. The real OpenClaw SDK surface is now typed. (#338) - All plugin packages → 0.11.0: Lockstep bump across Claude Code (marketplace.json + plugin.json), Codex (plugin.json +
chorus-mcp-call.shclientInfo), OpenClaw (package.json), every skillSKILL.mdon all four surfaces, and the standalonepublic/skill/distribution.