Skip to content
All releases
CHANGELOG

v0.3.0-beta.21

Profiles add an explicit owner to work, Goals become manageable by agents, and Loops gain more precise routing and recovery. This beta also adopts ecosystem skill sources and consolidates task delivery under…

BETAPerformance Improvements · 1Features · 9Bug Fixes · 15Testing · 1

This beta introduces Profiles, agent-manageable Goals, conjunctive runtime routing, and ecosystem skill sources. It also consolidates task delivery into one Loop and hardens session, profile, and Loop recovery.

⚡ Performance Improvements

  • Delegate full gates to pull request CI (#476)

🎉 Features

  • Profiles — the who-is-working dimension (#457)
  • Combine settings update actions (#461)
  • Replace environment path with worktree icon (#463)
  • Group session tool calls (#466)
  • Restore agent-manageable Goal orchestration (#470)
  • Support conjunctive runtime routing (#475)
  • Expand profile identity customization (#484)
  • Absorb ecosystem skill folders and expose skills back (#488)
  • Merge spec-cycle task delivery loops (#491)

🐛 Bug Fixes

  • Close profiles regressions after PR 457 (#459)
  • Make sessions dock contextual (#468)
  • Classify settled spawned TTL cleanup correctly (#469)
  • Restore reliable session message copy (#460)
  • Add runtime provider tooltips (#464)
  • Close windows when sessions are deleted (#465)
  • Route command palette entities directly (#467)
  • Preserve worktree binding during reconciliation (#456)
  • Harden profile-scoped runtime and web flows (#481)
  • Keep inactive loop routes out of task projection (#483)
  • Harden Loop recovery and expose execution truth (#492)
  • Publish npm packages with trusted identity (#495)
  • Accept setup-node OIDC placeholder
  • Preserve web assets in release module
  • Remove npm token from release recovery

🧪 Testing

  • Fix failing tests

Release Notes

Profiles add an explicit owner to work, Goals become manageable by agents, and Loops gain more precise routing and recovery. This beta also adopts ecosystem skill sources and consolidates task delivery under implement-tasks.

Breaking Changes

Update requests now use an ordered targets list

The update mutation now accepts targets instead of the singular target, so one operation can apply the Runtime update, the App update, or both in that order. The contract is consistent across HTTP, UDS, generated clients, Settings, and the desktop update flow. (#461)

  • Valid values are ["runtime"], ["app"], and ["runtime", "app"].
  • Empty lists, duplicates, reversed ordering, and the removed target field are rejected.
  • Callers using the old field must migrate to targets; there is no compatibility alias.

Ecosystem skill folders become managed sources

CompozyOS can discover skills from .agents/skills, optional .claude/skills, configured source roots, and installed extensions, then present them through one catalog with origin and exposure state. Skills can be exposed to other tools through managed links without copying their contents. (#488)

  • skills.sources selects supported ecosystem roots and skills.custom_sources adds explicit roots.
  • The built-in compozy source is always active; agents is enabled by default, claude is opt-in, and custom sources default to an empty list. Existing .agents/skills libraries are discovered after updating without a manual migration.
  • compozy skill sources, expose, and unexpose manage discovery and exposure through the CLI, with matching API and native-tool reads.
  • File watching refreshes discovered skills as source folders change.
  • compozy skill inspect is removed; use compozy skill info. There is no compatibility alias.

One task-delivery Loop with two execution modes

implement-tasks now owns both task-delivery paths. Its default per-task mode keeps one isolated code_implementer session per Task; mode=orchestrated uses the bundled orchestrator agent to spawn, prompt, verify, and stop one bounded worker per Task. (#491)

  • Four optional runtime inputs choose the conductor, backend workers, frontend workers, and every other worker. Task-frontmatter runtime fields still win over these run inputs.
  • compozy spawn now accepts provider, model, reasoning-effort, and speed overrides, so orchestrated workers preserve the selected runtime choice.
  • Goal output contracts now require the runtime's complete|blocked vocabulary, and Goal prompts receive the authored output schema.
  • The bundled spec-cycle extension moves to 0.5.0 with the consolidated Loop inventory.
  • The standalone orchestrate-tasks Loop and its docs/catalog entry are removed. Operator-side [loops.inputs.orchestrate-tasks] config blocks are now inert and should be deleted; move any desired values under [loops.inputs.implement-tasks] and set mode = "orchestrated".

Features

Profiles add a who-is-working dimension

Profiles introduce an ownership dimension across sessions, Tasks, Loops, worktrees, memory, credentials, resources, extensions, and client state. Switching profile changes the work you read without moving workspace files or restarting the daemon; All profiles provides an explicitly labeled aggregate view. Profiles separate work context and are not a security boundary. (#457, #459, #481)

  • Create, rename, archive, unarchive, delete, select, list, update, and read the current profile through the CLI, HTTP, UDS, and Web.
  • Agents can read the catalog and current selection through compozy__profile_list and compozy__profile_current.
  • Credentials, resources, extension enablement, notification presets, and configuration overlays resolve with profile ownership.
  • Session windows, deep links, live streams, reconnects, and workspace selection retain their profile and workspace identity.

Profile identity is visible and editable

Profiles can use catalog-backed Lucide icons, searchable emoji with skin tones, and custom colors. The switcher supports direct editing, and compact owner identity now appears across sessions, the command palette, workspaces, and desktop surfaces. Unknown Lucide slugs fail validation instead of silently rendering a fallback. (#484)

Agents can manage Goals through every public runtime surface

Goal operations are now structured and agent-manageable through compozy__goal_control, HTTP, UDS, compozy session goal, and Web. The shared contract supports set, replace, status, pause, resume, and clear while enforcing same-workspace lineage and cycle checks. Spawned Goal work preserves provider, model, reasoning-effort, and speed choices. (#470)

Runtime routing can match type and complexity together

Loop runtime rules can match both Task type and complexity. Specificity is deterministic—id wins over type + complexity, then type, then complexity—and matching runtime fields merge independently, with later equal-specificity rules winning per field. (#475)

Session navigation and transcript controls are more direct

  • Message copy works for text already received while generation continues and reports success or failure; before the first copyable token it remains disabled, and packaged desktop clipboard writes use a trusted Electron boundary. (#460)
  • The composer shows its environment or worktree as a compact control with the full value in a tooltip. (#463)
  • Provider and model identities expose accessible tooltips, including sign-in requirements. (#464)
  • Consecutive tool calls are grouped in the session transcript without hiding their individual state. (#466)
  • Command-palette results open the selected entity directly in the correct workspace. (#467)
  • The Sessions dock action opens a new session when needed or focuses the most recently used session. (#468)

Fixes

Session ownership and cleanup preserve durable state

  • Boot reconciliation preserves the persisted worktree binding for existing sessions. (#456)
  • Deleting a session removes its windows from all layouts and desktop states, including pinned, minimized, stacked, and tiled windows, without affecting unrelated workspaces. (#465)
  • Spawned-session cleanup treats an already settled prompt as a clean completion; only an in-flight prompt is classified as a timeout. (#469)
  • Profile-scoped navigation, session streams, reconnects, and restart recovery preserve profile and workspace ownership. (#459, #481)

Loop recovery reports the execution that actually happened

Inactive routes remain visible as route_not_taken but no longer create phantom Tasks or dependencies. Recovery validates persisted executed-definition bytes, isolates an invalid snapshot instead of blocking healthy coordinators, and makes Goal cleanup and binding allocation safe under replay. (#483, #492)

  • reattempt_strategy = "halt" stops automatic succession after a failed generation while preserving explicit reruns.
  • Terminal runs record completed_at, so their duration no longer grows after completion.
  • Explicit reruns understand the selected node's dependency closure and no longer treat unrelated pending cells as part of that rerun.
  • Inspect, dry-run, status, CLI, HTTP, UDS, native tools, and Web expose effective configuration together with the source of each field.

Compare v0.3.0-beta.20...v0.3.0-beta.21

Contributors
Release assets

30 files published by the GitHub release workflow.

Browse downloads