Skip to content

Releases: Chorus-AIDLC/Chorus

v0.14.2

Choose a tag to compare

@ChenNima ChenNima released this 19 Jul 05:05
c08357a

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 ProjectVisit model (per user × project, lastVisitedAt + nullable pinnedAt) 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/list cost 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, null directIdeaUuid" lineage gap (a pre-directIdeaUuid server 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 openspec to set it up) ($chorus on 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

Choose a tag to compare

@ChenNima ChenNima released this 16 Jul 08:07
274a7ea

Added

  • Amazon Kiro CLI integration (4th plugin surface): A Chorus plugin for Amazon Kiro CLI — installed via a one-shot install-kiro.sh that merges loose .kiro/{agents,skills,steering,settings} templates (the Chorus MCP server, eight chorus-* workflow skills, a chorus main agent with session-lifecycle hooks, and three read-only reviewer subagents) into your Kiro config, global or --workspace-local. Paired with a --agent kiro daemon backend (wake / resume / interrupt / transcript) so a remote dispatch can drive a local Kiro headlessly. Targets Kiro CLI v2. Documented in docs/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 @mention inheriting 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 ### References step + wake-prompt nudge), and reference notes are 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 install drops credentials under systemd: The install path now persists + validates CHORUS_URL / CHORUS_API_KEY into daemon.json for the boot service (systemd --user clean-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

Choose a tag to compare

@ChenNima ChenNima released this 11 Jul 14:47
a0fb7c0

Added

  • Dark mode across the entire app: A light/dark/system theme (next-themes, .dark class on <html>, default = system, per-device chorus-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-matched dark: variants for status colors; the three surfaces dark: can't reach were handled explicitly — inline-style colors (CSS-var + scoped .dark rule), the project graph <canvas> (live .dark read + MutationObserver repaint), and @xyflow/react's unlayered chrome (colorMode prop). 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 ReferenceArtifact entity so external evidence (docs, reference repos, issue/PR threads, papers/blogs) can be attached to ideas, proposals, and tasks and read back inline. REST GET/POST /api/references + GET/PATCH/DELETE /api/references/[uuid] (gated on document:read/document:write, no new permission bit), MCP chorus_add_reference / update_reference / remove_reference plus inline references[] 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 --primary token (adapts to light/dark with zero per-theme JS). Programmatic navigation is covered via a shared use-progress-router hook. (#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

Choose a tag to compare

@ChenNima ChenNima released this 09 Jul 03:12
1edf156

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 single createProposal choke 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 /ideas panel 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 isContainer field, keys, and tool names are unchanged). (#409)

v0.13.1

Choose a tag to compare

@ChenNima ChenNima released this 07 Jul 01:42
bd9e6a7

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_development wake) and a Yolo button (yolo_requested wake) 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 interrupted state, 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 quoted ExecStart tokens 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-token is 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, so startedAt string-equality vetoed the pidfile match and cleared a live daemon as stale. (#401)
  • Daemon stale-PID identity: stop now identity-verifies pidfile liveness so recycled PIDs read as stale, adds a stop --force escape hatch + exit-code contract, and uses a busybox-compatible ps fallback. (#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

Choose a tag to compare

@ChenNima ChenNima released this 02 Jul 07:59
a41e9e5

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_rejected map to the task_assigned turn trigger, so they missed the session-origin upgrade that was gated only on elaboration_verified and 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 fixes idea_claimed and task wakes. (#381)
  • First-run P1000 when the embedded PGlite port was occupied: A first chorus run hit Prisma P1000 when a foreign Postgres already held the embedded PGlite port — the forked PGlite child died of EADDRINUSE but exited code 0, so waitForTcp mistook the foreign listener for PGlite, printed a false "PGlite ready", and migrate failed auth (a residual DATABASE_URL hit the same wall). The launch is extracted into a pure, dependency-injected cli/embedded-db.mjs with 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

Choose a tag to compare

@ChenNima ChenNima released this 29 Jun 05:17
72190b2

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 own thread_id (persisted per-anchor for codex exec resume), permission posture is subcommand-aware (yolo → bypass-approvals-and-sandbox; chorus → read-only sandbox), MCP comes from the user's ~/.codex/config.toml with the daemon key passed via the configured bearer_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 daemon registering 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, with lastSeenAt display-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 /login never 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 /login redirects an already-authenticated visitor straight into the app.
  • chorus login clobbered daemon.json: chorus login and the daemon's TTY credential-completion path overwrote the entire ~/.chorus/daemon.json, destroying pre-existing cwds / 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 loud claude-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

Choose a tag to compare

@ChenNima ChenNima released this 27 Jun 02:05
a6a93ee

Added

  • Multi-path daemon — one daemon, many working directories: A single chorus daemon can 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): AgentInstance is 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 and chorus_pm_assign_task accept an optional instanceUuid. (#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: UnifiedComments now 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 in listComments (selected by limit); the offset path and chorus_get_comments are byte-for-byte unchanged. (#360)

Fixed

  • Pinned autonomous wakes hit the wrong cwd instance: A pinned @mention / task dispatch (and the elaboration_verified proposal-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 a deliver_turn control ping; offline pin = notify-only, no wake. (#357)
  • chorus daemon didn'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 at max-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 MentionInstancePickerDialog gains a mobile-safe svh-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 --help now matches the yolo-default posture (with --chorus-only as the opt-out), the multi-path daemon and the full ~/.chorus/daemon.json field set are documented in README (en + zh), and the startup banner shows the resolved daemon.json path. (#363)

v0.11.1

Choose a tag to compare

@ChenNima ChenNima released this 22 Jun 09:07
56f5363

Added

  • Ship-time code-review gateway: A new read-only code-reviewer agent 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); the on-post-verify-task.sh hook gains a last-task-verify branch gated by enableCodeReviewer (default on) and bounded by maxCodeReviewRounds (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 --resume anchor 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: searchMentionables now 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; both GET /api/mentionables and the MCP chorus_search_mentionables benefit. (#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.md on all four surfaces, and the standalone public/skill/ distribution — carrying the code-review gateway. (#350)

v0.11.0

Choose a tag to compare

@ChenNima ChenNima released this 21 Jun 14:28
ff582b9

Added

  • Chorus Daemon — run your local Claude Code as a Chorus agent: A new chorus daemon CLI client mode (plus chorus login) authenticates as an agent, subscribes to the notification SSE stream, and on each wake (task assigned / @mention / elaboration / human instruction) spawns a local headless claude -p wired 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 with claude --resume <idea-uuid>, and a WakeQueue serializes per-anchor so two wakes never resume the same session at once. A headless guard forbids AskUserQuestion and routes human-decision points back to Chorus. Ships with TTY credential completion, default-yolo posture (--chorus-only for restricted), a startup banner, per-wake lifecycle logs, and -d detached 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 DaemonConnection registry (self-reported clientType/host/version, generation-fenced liveness) and a persistent per-connection DaemonExecution state (running/queued, execution:{connectionUuid} SSE channel, deep links). Each session is a persistent conversation: every wake is a turn on a DaemonSession with 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 a npx @chorus-aidlc/chorus daemon connect 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_verified wake, distinct from the unchanged agent-only chorus_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 daemon posture defaults to yolo with a prominent banner warning instead of an interactive confirmation; --chorus-only (or CHORUS_CHORUS_ONLY=1) reclaims the restricted mcp__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 chorus CLI host, re-mapped to the in-process runEmbeddedAgent host — 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.sh clientInfo), OpenClaw (package.json), every skill SKILL.md on all four surfaces, and the standalone public/skill/ distribution.