Migration: v0.4.11 → v0.4.12
Status (2026-05-24): v0.4.12 closes the v0.4 arc. The web stack, the in-tree subject backends, the five in-tree provider mirrors, and the
llm-cli-wrappercrate are all deleted from this repo. The replacements live as standalone plugins under launchapp-dev and must be installed before the daemon will start.
If you are upgrading from v0.4.11 (or any earlier v0.4.x) this is the patch where the daemon stops shipping with bundled providers, subjects, and a web server. You will need to run one post-upgrade command (animus plugin install-defaults) before the daemon will boot. After that, day-to-day operation is unchanged.
TL;DR: stop the daemon → upgrade the binary →
animus plugin install-defaults --include-subjects --include-transports→animus daemon preflight→animus daemon start --autonomous.
What changed
| Change | Impact |
|---|---|
| In-tree web stack deleted (~9K LOC) | animus web serve now spawns installed transport_backend + web_ui plugins and errors out if none are present |
| In-tree subject backends deleted (~1000 LOC) | Daemon will refuse to start without at least one subject_backend plugin installed; install animus-subject-default for kind=task and animus-subject-requirements for kind=requirement |
| In-tree provider mirrors deleted (5 providers) | Daemon will refuse to start without at least one provider plugin installed |
llm-cli-wrapper crate deleted (~5,882 LOC) | Internal refactor; user-visible only if you path-depended on the crate |
| Daemon preflight on startup | animus daemon start runs a plugin-presence check before booting. Default posture: refuse to start, with the exact animus plugin install ... fix command in the error |
Phase-level idempotency field | Crash recovery for phases without an explicit idempotency: idempotent annotation now lands as Blocked with an actionable hint rather than silently re-running |
ANIMUS_DAEMON_DISABLE_BUILTIN_TASK_ADAPTER + _REQUIREMENTS_ADAPTER env vars | Now no-ops. Use ANIMUS_DAEMON_DISABLE_SUBJECT_PLUGINS=1 if you need to disable subject discovery entirely |
animus web serve no longer boots an in-process axum server | Requires animus-transport-http, animus-transport-graphql, and animus-web-ui plugins installed |
This is the largest single-release surface change since the v0.3 → v0.4 rename. It is intentional: every backend is now a plugin, and the daemon treats them uniformly.
Migration steps
1. Stop the running daemon
animus daemon stopStop the daemon in every project where you have it running before upgrading the binary. The v0.4.11 daemon and the v0.4.12 daemon do not share state about plugin requirements; running a stale daemon against a new CLI will surface confusing errors.
2. Upgrade the animus binary
Pick whichever path matches how you installed v0.4.11:
# Upstream installer (macOS)
curl -fsSL https://raw.githubusercontent.com/launchapp-dev/animus-cli/main/scripts/install.sh | bash
# Or pin to v0.4.12 explicitly
ANIMUS_VERSION=v0.4.12 curl -fsSL https://raw.githubusercontent.com/launchapp-dev/animus-cli/main/scripts/install.sh | bashIf you built from source:
cd path/to/animus-cli
git fetch origin
git checkout v0.4.12
cargo install --path crates/orchestrator-cli --lockedNo Homebrew formula or crates.io publish yet —
cargo install animusfrom crates.io is not wired up. Track the animus-cli releases page for whichever distribution channel ends up canonical.
Verify:
animus --version # should print v0.4.123. Install the default plugin set
This is the one new step that v0.4.12 introduces. Without it, the daemon will refuse to start.
animus plugin install-defaults --include-subjects --include-transportsWhat this installs:
| Group | Plugins | Required for |
|---|---|---|
| Providers (always) | animus-provider-{claude,codex,gemini,opencode,oai} v0.2.1 | Any daemon start — at least one provider must be installed |
--include-subjects | animus-subject-{default,requirements,linear,sqlite,markdown} v0.1.0 | animus subject --kind <kind> for task, requirement, and the three plug-in backends |
--include-transports | animus-transport-{http,graphql} + animus-web-ui | animus web serve and animus web open |
The command is idempotent: it skips plugins that are already installed. It uses the same install pipeline as animus plugin install, so cosign signature verification and integrity checks apply uniformly.
If you only use a subset of providers (e.g. Claude only) and want a leaner install, install them one at a time instead:
animus plugin install launchapp-dev/animus-provider-claude
animus plugin install launchapp-dev/animus-subject-default
animus plugin install launchapp-dev/animus-subject-requirements4. (Optional) Install the OAI Responses API agent provider
If you use the OpenAI Responses API agent loop (not the plain chat completions endpoint), pull in the agent-shaped provider as well:
animus plugin install launchapp-dev/animus-provider-oai-agent@v0.1.1Or include it in the bulk install:
animus plugin install-defaults --include-oai-agent --include-subjects --include-transports5. Verify with daemon preflight
animus daemon preflightThis prints the installed-vs-required matrix and exits non-zero if any required role is unsatisfied. The error message includes the exact animus plugin install ... command to fix each gap. JSON envelope is animus.daemon.preflight.v1 if you want to script around it (animus daemon preflight --json).
Expected output when everything is satisfied:
Daemon preflight OK
provider: 5 installed (claude, codex, gemini, opencode, oai)
subject: 5 installed (default, requirements, linear, sqlite, markdown)
transport+ui: 3 installed (transport-http, transport-graphql, web-ui)6. Start the daemon
animus daemon start --autonomousanimus daemon start runs the same preflight check before booting. If preflight already passed in step 5, no plugins will be downloaded here.
If you want the daemon to install missing plugins on its own (less deterministic, but useful for one-shot dev boxes):
animus daemon start --autonomous --auto-installEscape hatch for dev iteration when you're knowingly running without the required plugins:
animus daemon start --autonomous --skip-preflight--skip-preflight is not recommended for production — you will get runtime errors from the first request that needs a missing backend.
What auto-resume does for in-flight workflows
If you upgrade while a workflow is mid-execution (rare but real for long-running phases), v0.4.12 will try to resume it on the new daemon:
- The daemon writes
<phase>.session.jsonfor every in-flight phase ({ provider, session_id, status }). - On restart, the scheduler attempts
provider.resume_agentthrough the plugin that originally ran the phase. - If the provider plugin supports session resume (Claude, Codex, OpenCode), the phase picks up where it left off.
- If the provider does not support session resume, or the plugin is not installed on the new daemon, the workflow is marked Blocked with an explicit reason. You can then inspect, re-run, or cancel it manually.
The default posture is "block and ask the operator" rather than "silently re-run and burn API credits". To force-resume a blocked workflow after you've decided it's safe:
animus workflow resume <workflow-id> --forceIdempotency annotations on workflow YAML
v0.4.12 adds a new phase-level field:
phases:
implementation:
mode: agent
agent: default
directive: "Implement production code."
idempotency: idempotent # or: sideeffecting, unknown| Value | Meaning | Crash-recovery behavior |
|---|---|---|
idempotent | Safe to retry; re-running produces the same observable effect | Auto-retried on daemon restart |
sideeffecting | Mutates external state (push, merge, deploy, webhook fire) | Blocked on crash; operator must decide |
unknown (default) | Not yet classified | Blocked on crash; operator must decide |
Existing workflow YAML without an idempotency: field defaults to unknown and will be Blocked on the first crash-recovery cycle. This is deliberate: the v0.4.11 behavior was to silently re-run any phase on restart, which burned API credits and occasionally double-pushed branches.
Options:
- Annotate. Walk each phase in your custom workflows and mark
idempotent(most agent phases, most read-only command phases) orsideeffecting(anything that pushes, merges, opens a PR, fires a webhook). One-time edit per workflow. - Leave unannotated. Phases default to
unknown→ blocked on crash. Useanimus workflow resume <id> --forcewhen you decide it's safe. - Mix. Annotate the safe phases, leave the risky ones as
unknown. Recommended for production pipelines.
Bundled workflow templates (task-queue, conductor, direct-workflow) ship with sensible defaults already in place. No action needed if you only use the bundled templates.
Env var deprecations
| Env var | v0.4.11 behavior | v0.4.12 behavior |
|---|---|---|
ANIMUS_DAEMON_DISABLE_BUILTIN_TASK_ADAPTER | Skipped the in-tree task subject adapter | No-op. The in-tree adapter no longer exists. Install or remove animus-subject-default instead |
ANIMUS_DAEMON_DISABLE_BUILTIN_REQUIREMENTS_ADAPTER | Skipped the in-tree requirements subject adapter | No-op. Install or remove animus-subject-requirements instead |
ANIMUS_DAEMON_DISABLE_SUBJECT_PLUGINS | (did not exist) | New. Set to 1 to skip subject discovery entirely (escape hatch for debugging plugin issues; daemon will refuse most subject operations) |
ANIMUS_DAEMON_DISABLE_TRIGGERS | Same | Unchanged |
ANIMUS_PROVIDER_DISABLE_PLUGIN | Forced fallback to in-tree provider backends | Removed (silently ignored). The in-tree provider backends are gone and the env var no longer affects dispatch in any way. Install missing provider plugins, remove a bad plugin with animus plugin uninstall --name <name>, or move its binary out of discovery |
If you have any of the deprecated env vars set in your shell config, CI, systemd unit, or Docker compose file, remove them. They will not cause errors — they are silently ignored — but they will mislead the next operator who reads the file.
animus web behavior
v0.4.11: animus web serve booted an embedded axum HTTP server with the React UI compiled in.
v0.4.12: animus web serve discovers installed transport_backend and web_ui plugins, spawns them, and opens the browser. If the required plugins are not installed, you get:
error: web serve requires transport + UI plugins
run: animus plugin install-defaults --include-transportsTo install:
animus plugin install-defaults --include-transportsThis installs animus-transport-http, animus-transport-graphql, and animus-web-ui from their respective releases. After install:
animus web serve
animus web open # also opens the browserThe user-facing UX is unchanged once the plugins are installed.
Rollback procedure
If v0.4.12 surfaces a blocker you need to work around, you can roll back to v0.4.11. The plugin-extraction work is not reversible at the data layer in the sense that installed plugins keep working under v0.4.11 too — v0.4.11 simply prefers the in-tree backends when both are available.
# Stop the v0.4.12 daemon
animus daemon stop
# Reinstall v0.4.11
ANIMUS_VERSION=v0.4.11 curl -fsSL https://raw.githubusercontent.com/launchapp-dev/animus-cli/main/scripts/install.sh | bash
# Verify
animus --version # should print v0.4.11
# Start the v0.4.11 daemon — no preflight on this version
animus daemon start --autonomousThe installed plugins under ~/.animus/plugins/ remain in place and will be re-used when you upgrade back to v0.4.12. The v0.4.11 daemon ignores the new idempotency field on workflow YAML (forward-compatible).
If rollback is needed because of a workflow that the v0.4.12 daemon Blocked on crash recovery, the recommended path is:
animus workflow resume <id> --forceunder v0.4.12 (the explicit override exists for exactly this).- Only roll back if
--forceresume itself surfaces a bug.
Quick smoke test after migration
animus --version # v0.4.12
animus plugin list # at least 1 provider + 2 subjects + (optional) transports
animus daemon preflight # all required roles satisfied
animus daemon start --autonomous
animus daemon health # responds Healthy
animus subject list --kind task # routes through animus-subject-default plugin
animus web serve # spawns transport + ui plugins, opens browserIf any step fails, animus doctor runs a broader environment check and prints actionable remediation.
Where to ask for help
- Animus core repo: launchapp-dev/animus-cli
- Previous migration guide:
v0.3-to-v0.4.md - Plugin ecosystem index: launchapp-dev plugin repos (18 repos as of v0.4.12)
- CHANGELOG:
CHANGELOG.mdfor the full v0.4.12 entry - Upgrade guide (cross-version):
docs/guides/upgrading.md