Skip to content
CompozyOS RuntimeMigration

Migrate from v0.2.15

Complete command, configuration, extension, SDK, and clean-state migration guide for CompozyOS v0.3.

Audience
Operators running durable agent work
Focus
Migration guidance shaped for scanability, day-two clarity, and operator context.

Migrate from Compozy v0.2.15 to CompozyOS v0.3

CompozyOS v0.3 is a hard cut, not an in-place compatibility release. It keeps the compozy binary and the .compozy/tasks/ task format, but replaces the workflow runner with a daemon-owned agent operating system. Runtime databases, command names, extension contracts, and review behavior do not carry forward automatically.

This guide uses v0.2.15 (8f8908afd70c731b815e20282bacad05aa026827) as the legacy baseline. Back up your global and workspace .compozy/ directories before changing installations.

1. Command map

Install the v0.3 beta through one of the beta paths. Replace beta.N with the published prerelease number when using the versioned Go command. Homebrew still serves v0.2 during the beta window and is therefore not an upgrade path.

npm install -g @compozy/cli@beta

curl -fsSL https://compozy.com/install.sh | \
  sh -s -- --version v0.3.0-beta.N

go install github.com/compozy/compozy@v0.3.0-beta.N

Workspace-scoped v0.3 commands infer the active workspace in this order: positional workspace ref, --workspace, COMPOZY_WORKSPACE, validated session identity, then the current working directory. Run commands anywhere under a registered workspace root. Use --workspace <id|name|path> only to override that context.

The primary delivery mappings are:

v0.2.15v0.3 betaNotes
compozy tasks run democompozy loop run --name software-delivery --input slug=demoRun from the project tree. Uses the bundled delivery Loop and the existing .compozy/tasks/demo/ tree.
--task-runtime type=frontend,ide=codex,model=gpt-5.5-codex,reasoning-effort=xhigh--runtime type=frontend:codex/gpt-5.5-codex@xhigh--runtime is repeatable. It also accepts worker=, judge=, id=, and complexity= selectors.
--dry-run--dry-runThe v0.3 plan reports effective input values and origins and creates no run.
--auto-commit--input auto_commit=trueSupported by both bundled dev-cycle Loops. Neither Loop pushes.
compozy reviews fix <task>compozy loop run --name review-and-fix --input task_name=<task>Run from the project tree. A Compozy reviewer agent authors a new round before fixers run; provider-fetched rounds are not imported.
compozy reviews watch <task> --pr <N>Same review-and-fix command aboveSemantic change: there is no PR polling, CodeRabbit fetch, thread resolution, or push tail. --pr and --provider have no replacement.
compozy exec "prompt"compozy session new --agent <name>, then compozy session prompt <id> "prompt"Run from the project tree. v0.3 makes the durable session explicit; use events, status, wait, stop, and resume for control.
compozy agents list / agents inspect <name>compozy agent list / compozy agent info <name>v0.3 agent definitions are daemon-managed resources, not setup assets.
compozy mcp-servecompozy mcp serveRun from the project tree. The relay binds the inferred workspace; --workspace overrides it.
compozy workspaces list/show/register/unregistercompozy workspace list/info/add/removeUse IDs or explicit roots returned by the daemon. The old resolve verb has no direct command replacement.
compozy daemon startcompozy install, then compozy statusinstall bootstraps the supervised runtime. Use daemon relaunch for an installed daemon.
compozy daemon status/stopcompozy status / compozy daemon stopStructured output is available with -o json.
compozy upgradecompozy updateA beta build tracks newer v0.3 beta releases, never the v0.2 stable line.
compozy ext list/install/enable/disable/doctorcompozy extension list/install/enable/disable/status plus compozy doctorExtension manifests and SDK contracts are API-incompatible; reinstall or port extensions instead of reusing old directories.
compozy runs watch <id>compozy loop status --run-id <id> or the printed /loop-runs/<id> URLRun from the project tree. Legacy run IDs do not exist in the new database; for sessions use status, events, and wait.
compozy runs attach <id>No TUI replacementUse structured status/events and the web run page.
compozy runs purgeNo bulk compatibility verbStart with clean v0.3 runtime state. Remove individual session history with session remove when appropriate.
compozy syncNo replacement requiredLoop task import and daemon resource registration happen through their owning runtime surfaces.
compozy archiveNo replacementMove completed task folders manually only after preserving the evidence your repository requires.
compozy tasks validateRemoved; no loop validate replacementloop validate validates a Loop definition, not legacy task files. Do not substitute it in scripts or bundled process guidance.
compozy migrateRun the v0.2 command before upgrading, only for XML-era task/review artifactsThis is the old XML-to-frontmatter converter. It is not compozy migrate config.

The complete v0.2 flag-family disposition is:

Legacy flag familyv0.3 disposition
tasks run: positional slug, --name--name software-delivery --input slug=<slug>; the Loop name and task slug are separate values.
--ide, --model, --reasoning-effort, repeatable --task-runtimeExpress worker/judge or task rules with repeatable --runtime. Unsupported legacy providers are not aliased.
--format, common structured outputUse global -o with human, json, jsonl, or toon.
--dry-run, --auto-commitRetained as --dry-run and --input auto_commit=<bool>.
--multiple, --parallel, --parallel-limitDeferred. Start separate Loop runs in explicitly isolated workspaces/worktrees.
--parallel-tasks and hidden conflict-resolver flagsDeferred. The bundled Loop intentionally executes its task fan-out with max_parallel: 1.
--include-completed, --recursive, --skip-validation, --forceRemoved. The bundled importer owns task selection; there is no bypass flag. Fork and publish a custom Loop when a different contract is required.
--attach, --ui, --stream, --detachTUI attach is removed. Use the final-line web URL, loop status, run events over HTTP/UDS/SSE, or structured output.
--add-dir, --tail-lines, --access-mode, --timeout, --max-retries, --retry-backoff-multiplierNo direct invocation flags. Model execution policy in agent definitions, sandbox/config policy, or a custom Loop node's timeout and retry.
--recovery, --no-recovery, --recovery-ide, --recovery-model, --recovery-reasoning, --recovery-max-attemptsRemoved. The legacy recovery agent has no v0.3 replacement. Use Loop retry/no-progress/terminal state and operator-driven reruns.
reviews fetch: --provider, --pr, --name, --roundExternal fetch is removed. task_name is the only required review target; round allocation is automatic.
reviews fix: --name, --round, --agent, --batch-size, --concurrent, --include-resolved, common runtime/recovery/attach flagsUse task_name, optional fixer, optional auto_commit, and --runtime; other flags have no direct replacement.
reviews watch: fetch flags plus --auto-push, --push-remote, --push-branch, --poll-interval, --quiet-period, --max-rounds, --review-timeout, --until-cleanRemoved with provider watch semantics. Run review-and-fix once; push is operator or outer-Loop work.
exec: prompt/stdin, --agent, --prompt-file, --format, --persist, --run-id, --tui, --extensions, runtime/retry/stall flagsSplit across session new, session prompt, session lifecycle commands, agent/provider config, and extension policy. There is no flag-for-flag compatibility layer.
setup: --agent, --skill, --global, --copy, --list, --yesThe external-CLI symlink/copy installer is removed. Use daemon-managed agent/skill surfaces and the bundled dev-cycle extension.
migrate, sync, archive: --root-dir, --name, --tasks-dir, --reviews-dir, --dry-run, --formatOnly the old XML converter remains relevant before upgrade. Sync/archive behavior has no v0.3 command equivalent.

2. Configuration translation contract

The live config migrator is deferred, so this is both the manual mapping and the future Task 14 contract. Apply global and workspace changes separately. v0.3 precedence is per-run value, then workspace [loops.inputs.<loop>], then global input default, then the Loop definition default. Explicit false, 0, and valid empty strings remain present values.

v0.2.15 sourcev0.3 target or disposition
defaults.ideExpand, after provider mapping, to loops.defaults.{delivery,watch}.runtime_defaults.{worker,judge}.provider.
defaults.modelExpand to loops.defaults.{delivery,watch}.runtime_defaults.{worker,judge}.model.
defaults.reasoning_effortExpand to loops.defaults.{delivery,watch}.runtime_defaults.{worker,judge}.reasoning for low, medium, high, xhigh, or max.
defaults.timeoutsession.limits.timeout.
defaults.auto_commitloops.inputs.software-delivery.auto_commit and loops.inputs.review-and-fix.auto_commit.
defaults.by_complexity.<level>.<field>Ordered delivery runtime_rules with match.complexity; levels are low, medium, high, and critical, and fields are ide, model, and reasoning_effort.
tasks.run.task_runtime_rules[]Ordered delivery runtime_rules with match.type. The persisted legacy schema supported type selectors only.
defaults.{output_format,access_mode,tail_lines,add_dirs,max_retries,retry_backoff_multiplier}Dropped; no runtime-config destination.
defaults.stall.{enabled,timeout,child_timeout,terminal_command_timeout,retries}Dropped; use Loop retry/no-progress/terminal-state contracts instead.
tasks.typesDropped.
tasks.run.{include_completed,recursive,output_format,run_multiple_mode,run_multiple_parallel_limit,tui}Dropped; the bundled Loop owns task selection and has no TUI.
tasks.run.parallel.{enabled,max_concurrency}Dropped; dependency-wave execution is deferred.
tasks.run.parallel.conflict_resolver.{enabled,ide,model,reasoning_effort,max_attempts,validation_command}Dropped; the worktree conflict resolver is deferred with parallel task execution.
fix_reviews.{concurrent,batch_size,include_resolved,output_format,tui}Dropped; v0.3 review is agent-authored and the bundled Loop owns batching.
fetch_reviews.{provider,nitpicks}Dropped; v0.3 fetches no external reviews.
watch_reviews.{auto_push,push_remote,poll_interval,quiet_period,max_rounds,review_timeout,until_clean,push_branch}Dropped; there is no provider watch, thread resolution, or push tail.
exec.{ide,model,output_format,reasoning_effort,access_mode,timeout,tail_lines,add_dirs,auto_commit,max_retries,retry_backoff_multiplier,verbose,tui,persist}Dropped; create and configure explicit sessions instead.
exec.stall.{enabled,timeout,child_timeout,terminal_command_timeout,retries}Dropped.
runs.{default_attach_mode,keep_terminal_days,keep_max,shutdown_drain_timeout}Dropped; legacy history is not imported.
recovery.{enabled,ide,model,reasoning_effort,max_attempts}Dropped; the recovery agent is removed.
sound.{enabled,on_completed,on_failed,on_parked}Dropped; no v0.3 destination.

Provider mapping is exact: codex → codex, claude → claude, cursor-agent → cursor, opencode → opencode, pi → pi, gemini → gemini, copilot → copilot, and kiro → kiro. Drop droid, devin, and legacy-only reasoning ultra as unsupported_destination_value; never silently alias or weaken them. The v0.2 schema had no persisted defaults.provider or defaults.pr, so do not fabricate either.

You can manage an input default manually now:

cd /absolute/project/root

compozy config set loops.inputs.software-delivery.auto_commit false \
  --scope workspace

compozy config get loops.inputs.software-delivery.auto_commit

compozy config unset loops.inputs.software-delivery.auto_commit \
  --scope workspace

These commands use cwd discovery. Set COMPOZY_WORKSPACE for a shell-wide override or pass --workspace <id|name|path> for a one-command override.

HTTP and UDS expose exact-scope inspect, replace, set, and delete operations under /api/workspaces/{workspace_id}/loops/{name}/input-defaults. Configured values are checked against the named Loop only during dry-run or submission, because Loops can enroll dynamically.

3. Config migrator status

compozy migrate config does not ship in this task or in the current v0.3 beta. Backup, idempotent rewrite, legacy-state first-boot probing, and the executable translation report are deferred to Task 14. Do not run that command, build automation around it, or assume the daemon will read v0.2 config as a fallback.

Until Task 14 ships:

  1. Back up ~/.compozy/ and each <workspace>/.compozy/ directory.
  2. Translate the config manually with the table above into a fresh v0.3 config.
  3. Move legacy-owned agents/ and extensions/ directories out of the colliding .compozy/ namespace. Do not let v0.3 enroll their old formats.
  4. Start v0.3 with clean runtime state; do not copy global.db, daemon sockets, locks, logs, run directories, or other v0.2 state into the new runtime.
  5. Keep the backup until the beta journey and required task evidence have been verified.

The old v0.2 compozy migrate command is unrelated. It converts XML-tagged task and review artifacts into frontmatter. If your task tree still contains <task_context> or <review_context>, run the v0.2.15 converter before replacing the CLI. The future migrate config command is not a replacement for that artifact conversion.

4. Where the skills went

The v0.3 dev-cycle extension bundles exactly nine retained process skills:

  • cy-create-prd
  • cy-create-techspec
  • cy-create-tasks
  • cy-execute-task
  • cy-workflow-memory
  • cy-review-round
  • cy-fix-reviews
  • cy-final-verify
  • git-rebase

They are versioned resources of the extension and are exposed through the runtime's skill/resource surfaces. The legacy compozy skill is retired; the new official skills/compozy/ guide is the runtime and contributor manual, not one of the nine dev-cycle process skills.

The v0.2 compozy setup helper copied or symlinked public skills and reusable AGENT.md files into external agent-CLI homes. v0.3 has no equivalent external-CLI installer. Use compozy skill for daemon-managed local or marketplace skills, compozy agent for runtime agent definitions, and compozy extension for versioned extension resources. Copying the old installed files forward does not make them compatible.

Process guidance must not call tasks validate: that command is removed and loop validate checks Loop definitions, not task artifacts. Use the validation gates that the selected Loop and repository actually provide.

5. Deferred and removed surfaces

This table is the exhaustive legacy-surface ledger. “Removed” means no compatibility alias, route, loader, or hidden fallback ships in v0.3.

v0.2.15 surfaceStatus in v0.3Successor or workaround
tasks run basic deliveryReplacedBundled software-delivery Loop.
--parallel-tasks dependency wavesDeferredRun serially; a custom Loop may model explicit safe fan-out.
--multiple / --parallel worktree isolationDeferredCreate explicit worktrees/workspaces and start separate runs.
Tasks-run five-step wizardRemovedSupply explicit loop run flags and inspect --dry-run -o json.
TUI cockpit, runs attach, and --attach uiRemovedUse the web run page, structured CLI, HTTP/UDS, and SSE.
tasks validateRemovedNo substitute. loop validate is a different invariant.
reviews fetch/list/show/fix/watch verb familyRemoved as commandsreview-and-fix is the only bundled review journey; inspect its reviews-NNN/ files and run status.
External review fetch/resolve, CodeRabbit/nitpicks, provider provenance, PR polling, auto-pushRemovedReviews are authored by a Compozy reviewer agent. Push manually or from an outer Loop after review.
Legacy review-provider extension abstraction and hooksRemovedNo v0.3 external review-provider API.
Recovery agent and recovery flags/configRemovedUse Loop retry/no-progress/terminal outcomes and an explicit rerun or operator intervention.
Cost-aware task budgetsDeferredLoop token/wall-clock budgets exist, but no legacy cost-aware per-task compatibility mapping exists.
Agent-per-task rulesDeferredUse imported task runtime frontmatter or --runtime id=<task>:...; agent identity remains Loop-owned.
External-CLI skill/setup installerRemovedUse daemon-managed skill, agent, and extension-resource surfaces.
Reusable-agent setup assetsRemovedRe-author runtime agent definitions through compozy agent; do not copy legacy setup state.
compozy ext command and old manifest APIReplaced incompatiblyPort to the v0.3 manifest/SDK and manage with compozy extension.
compozy migrate XML converterLegacy-onlyRun v0.2.15 before upgrading when XML-era artifacts exist.
compozy migrate configDeferred to Task 14Use the manual matrix and clean-state procedure in this guide.
sync / archiveRemovedRuntime owners ingest their own resources; archive task folders manually when safe.
runs watch / runs purgeRemovedUse Loop/session-specific lifecycle surfaces; legacy run history restarts cleanly.
exec ad-hoc runnerReplaced by explicit sessionsUse session new plus session prompt and lifecycle commands.
/ legacy workflow dashboardReplacedThe v0.3 root is the operating-system home.
/memory and /memory/:slugReplaced incompatiblyUse /knowledge and /settings/memory; old page URLs do not redirect.
/reviews, /reviews/:slug/:round, /reviews/:slug/:round/:issueIdRemovedUse /loops/review-and-fix, /loop-runs/:runId, and on-disk review artifacts.
/runs and /runs/:runIdReplaced incompatiblyUse /loop-runs, /loop-runs/:runId, /session/:id, or task-run routes according to owner.
/workflowsReplaced/loops.
/workflows/:slug/specReplaced/loops/:name and /loops/:name/editor.
/workflows/:slug/tasks and /workflows/:slug/tasks/:taskIdReplaced incompatibly/tasks and /tasks/:id; Loop definitions and durable tasks are separate resources.
Public Go facade compozy.go and pkg/compozy/{events,runs}RemovedPin v0.2.x for library use; v0.3 is an executable/runtime product.
Public Go extension SDK sdk/extensionRemoved as public compatibility APIPort against the private, version-matched sdk/go workspace in this repository.
Public npm @compozy/extension-sdk@0.1.xFrozen, no v0.3 registry successorPin 0.1.x for old extensions; current development uses the private sdk/typescript workspace.
Public npm @compozy/create-extension@0.1.xFrozen, no v0.3 registry successorPin 0.1.x for old scaffolds; current development uses the private sdk/create-extension workspace.
cy-capture-decisions extension and skillRemovedNo bundled v0.3 successor; preserve its decision files as repository artifacts if still useful.
cy-idea-factory extension and skillRemovedNo bundled v0.3 successor. Recreate the process outside the runtime if required.
cy-qa-workflow extensionRemovedUse the repository's current QA skills/process; no compatibility extension is enrolled.
Legacy compozy bundled skillRetiredUse the new official runtime guide plus the nine dev-cycle skills.
Nine retained process skillsMovedBundled resources of the dev-cycle extension.
Legacy daemon DB, run artifacts, sockets, locks, logs, and state directoriesNot migratedStart with clean v0.3 state; retain backups only for forensic reference.

The web route mapping is a semantic mapping, not a redirect promise. v0.3 intentionally ships no legacy route aliases.

Legacy README anchor disposition

The v0.2 README accumulated inbound links from package registries, search results, and external articles. The v0.3 front door keeps each semantic successor at the matching heading. Removed pipeline-era sections have no empty heading stub; their disposition is explicit here.

v0.2 headingInbound anchorv0.3 disposition
Highlights#-highlightsPreserved at README Highlights.
Installation#-installationPreserved at README Installation.
Homebrew#homebrewNo successor during beta. Homebrew remains on deprecated v0.2 until v0.3.0 stable.
NPM#npmPreserved at README NPM, now @compozy/cli@beta.
Go#goPreserved at README Go, with the explicit v0.3 beta version.
From Source#from-sourcePreserved at README From Source, using the root build target.
How It Works#-how-it-worksPreserved at README How It Works.
Daemon Runtime Model#daemon-runtime-modelPreserved at the daemon-owned runtime explanation.
Task Schema v2#task-schema-v2Preserved at the task-to-Loop migration explanation.
Config Files#-config-filesPreserved at README Config Files.
Reusable Agents#reusable-agentsPreserved at README Reusable Agents.
Extensions#-extensionsPreserved at README Extensions.
SDK support#sdk-supportPreserved at the v0.3 SDK boundary.
Extension CLI#extension-cliPreserved at the current extension commands.
Learn more#learn-morePreserved at the extension documentation links.
Ad Hoc Exec#-ad-hoc-execNo successor. Use explicit durable sessions; see the removed-surface ledger above.
Quick Start#-quick-startPreserved at the v0.3 first-session flow.
1. Install skills#1-install-skillsNo successor as a numbered pipeline step. Skills are daemon-managed resources in v0.3.
2. (Optional) Create an Issue#2-optional-create-an-issueNo successor. Issue creation is outside the v0.3 runtime quick start.
3. Create a PRD#3-create-a-prdNo successor in the README. The retained dev-cycle skill owns this optional process.
4. Create a TechSpec#4-create-a-techspecNo successor in the README. The retained dev-cycle skill owns this optional process.
5. Break down into tasks#5-break-down-into-tasksNo successor in the README. Durable tasks are created through current task surfaces.
6. Execute tasks#6-execute-tasksNo successor. The v0.2 pipeline runner is replaced by Loops.
7. Review#7-reviewNo successor. Provider-backed review commands were removed.
8. Fix review issues#8-fix-review-issuesNo successor. Use the bundled review-and-fix Loop.
9. Iterate and ship#9-iterate-and-shipNo successor. Shipping policy belongs to each repository.
Skills#-skillsPreserved at README Skills.
Workflow Memory#-workflow-memoryPreserved at the current scoped-memory explanation.
Supported Agents#-supported-agentsPreserved at the runtime/provider explanation.
CLI Reference#-cli-referencePreserved at the generated CLI reference link.
Development#-developmentPreserved at README Development.
Star History#star-historyPreserved at the repository widget.
Contributing#-contributingPreserved at README Contributing.
License#-licensePreserved at README License.

6. License metadata correction

Compozy remained MIT-licensed. Some old distribution metadata incorrectly stamped artifacts as BSL-1.1; v0.3 corrects that metadata to match the repository's MIT license. This is a distribution metadata correction, not a relicense.

7. Go library and SDK close-out

v0.3 is distributed as the CompozyOS binary and runtime, not as a compatibility release of the old public Go library. Code importing the root facade, pkg/compozy/events, pkg/compozy/runs, or the old Go extension SDK will not compile against v0.3. Pin the final v0.2.x module while you maintain that integration, or redesign it against v0.3 CLI/HTTP/UDS/tool/extension contracts.

The public npm extension packages remain on their v0.1.x line. They are not overwritten with the API-incompatible v0.3 workspaces. Repository contributors may use sdk/go, sdk/typescript, and sdk/create-extension at the exact repository version; those workspaces are private and are not a registry compatibility promise.

8. Domain, channels, and clean state

https://compozy.com serves the v0.3 site from the single cut. The former domain retires without a redirect layer. Legacy source and release collateral remain on the legacy/v0.2 branch.

During the beta window:

  • use @compozy/cli@beta, the hosted installer with an explicit v0.3 beta, or versioned go install;
  • do not use Homebrew for v0.3 — the formula remains on the deprecated v0.2 stable line until the post-beta 0.3.0 stable release;
  • a beta self-update follows newer v0.3 prereleases, not npm latest or the v0.2 stable line.

Start runtime history clean. Preserve committable task artifacts under .compozy/tasks/, translate configuration manually, and do not carry daemon databases or legacy extension/setup directories into the new runtime. The task schema remains useful; runtime state does not.

For Git, keep authored task/config artifacts according to your repository policy and ignore runtime state inside the shared directory. At minimum, review rules for:

.compozy/compozy.db
.compozy/workspace.toml
.compozy/daemon.sock
.compozy/daemon.lock
.compozy/logs/
.compozy/cache/

Do not ignore the entire .compozy/ directory when the repository commits .compozy/tasks/, Loop definitions, skills, agents, or workspace configuration. After backup and manual translation, run a dry delivery plan first, inspect the reported input origins/runtime provenance, then start the real run and follow the final-line /loop-runs/<id> URL.

On this page