Migrate to v3

Guild Stack v3.0.0 renames and folds the command surface. The old names do not break silently: each one prints its new spelling and exits. This page gets a v2 user current, and keeps the older v1 → v2 guide for projects that still need it.

Before and after: Guild Stack v2's 22 commands and 110 host-indexed skills fold into 13 commands plus 11 print-only aliases and 17 assembler skills in v3.
Open full size

Guild Stack v3.0.0 is the current stable release. Most of the change is in the command and skill surface: fewer, larger entries with sub-verbs.

What changed

Areav2v3
Commands22 command files13 active commands; sub-verbs are arguments
Dropped command names11 separate commands11 print-only aliases, deleted after one stable cut
Host-indexed skills11017 assemblers that load chapters on demand

On Codex, the package exposes the skills under .agents/skills/guild/**.

Step 1: update the plugin

Re-run the installer with --update. It re-renders and reinstalls every host that has an install receipt under ~/.guild/receipts/:

curl -fsSL https://guildstack.dev/install.sh | bash -s -- --update

Then start a new host session so it loads the new commands and skills.

Step 2: switch to the new command spellings

The old names still exist, but they only print the new spelling and exit. They run nothing. Update your scripts, notes, and habits now:

v2v3
/guild:adopt/guild:init adopt
/guild:audit/guild:maintain audit
/guild:dashboard/guild:status dashboard
/guild:evolve/guild:maintain evolve
/guild:fix/guild:maintain fix
/guild:goal/guild:plan goal
/guild:migrate/guild:config migrate
/guild:models/guild:config models
/guild:resume/guild:status resume
/guild:rollback/guild:maintain rollback
/guild:stats/guild:status stats

The new /guild:maintain gc sweeps durable state and scratch files. /guild:config migrate is still the v1 → v2 layout migration; it is not a v2 → v3 step.

Step 3: ask for behavior, not old skill names

Many v2 skills are now chapters inside one of the 17 assemblers. The assembler loads the chapter when your request needs it.

v2 skillv3 home
verify-donechapter of guild-quality
context-assemble, tdd, worktrees, finish-branch, loop-implement, dispatching-parallel-agentschapters of guild-execute-plan
loop-clarify, product-explorechapters of guild-brainstorm
loop-plan-review, product-define, product-templatechapters of guild-plan
ops-release, ops-monitoring, ops-incident, ops-rollback, ops-maintenancechapters of guild-operations
learn-map, learn-graph, learn-knowledge, learn-onboard, learn-diff, learn-explain, learn-harvestchapters of guild-learn
wiki-ingest, wiki-query, wiki-lint, decisionschapters of guild-wiki
codex-review, review-brokerchapters of guild-review
systematic-debugchapter of guild-diagnose
rollback-skill, auditchapters of guild-evolve
writing-skillschapter of guild-create-skill
learning-checkpointchapter of guild-reflect

The full list of the 17 is on the skill surface page.

Release channels

The main branch holds the bare stable version (X.Y.Z). The next branch is the beta channel (X.Y.Z-beta.N). After the v3.0.0 release, next reopened at 3.1.0-beta.1.

From v1?

The v1 → v2 migration guide is kept as a historical page. For a v1 project, /guild:config migrate inspects and migrates the v1 layout; dry-run is the default mode.

Migrate from v1 to v2 (historical)

This page is kept for history. It describes the v1 to v2 move. If you run v2 today, follow Migrate from v2 to v3 instead.

Guild Stack v2 is the clean command surface for the gated specialist workflow: six phase verbs, one --rigor profile, .guild/settings.json, opt-in initiatives, host-adapted execution, and evidence under .guild/.

v1v2
SurfaceNested command names (guild-team, guild-wiki, guild-evolve...), .guild/config.yml, and host assumptions baked into copy.Flat /guild:<verb> commands, one .guild/settings.json with closed-key validation, and 16 canonical hosts with receipt-backed Support labels.

FAST PATH

StepDo thisProof or safety check
1Run /guild:migrateDefault mode is dry-run; it writes a migration report and does not convert live state.
2Read the reportConfirm whether the tree is v1, v2, mixed, corrupt, or empty.
3Replace v1 command namesUse the command panel below; bare /guild is not a v2 command.
4Convert configMove .guild/config.yml into .guild/settings.json; unknown keys are rejected.
5Recheck hostsUse current Support labels and /hosts, not v1 assumptions.
6Migrate only when readyRun /guild:migrate --mode=migrate for the snapshot-first conversion.
/guild:migrate

Default /guild:migrate is a dry run. It detects the current .guild/ shape, prints the conversion plan, and writes only the migration report. Use /guild:migrate --mode=migrate only after you are ready for the snapshot-first conversion.

What Changed Conceptually

v1 exposed a long linear spine. v2 keeps that work, but organizes it as one state machine with six phases:

init -> ideate -> plan -> build -> qa -> ops

The linear entrypoint remains /guild:guild [brief]; it walks the lifecycle and surfaces gates as it goes. Phase entrypoints are /guild:init, /guild:ideate, /guild:plan, /guild:build, /guild:qa, and /guild:ops. Bare /guild is not a command.

Initiatives are opt-in. A one-off run is still first-class. Guild Stack asks before attaching a run to an initiative, and D8 initiative closure keeps three separate legs: execution verified, release readiness resolved, and documentation sync resolved.

Command Migration Panel

v1 commandv2 replacementWhat changed
/guild:guild [brief] with loop/review tuning flags/guild:guild [brief] plus phase verbsmain entry remains; phase detection and gates are surfaced
/guild:guild-team propose/guild:planteam composition moved inside Planning
/guild:guild-team show/guild:statusstatus shows active team/run state
/guild:guild-team editedit at the plan/team gateediting is an approval-gate response
/guild:guild-team --allow-larger(nothing; the cap is gone)teams are uncapped and user-approved; --team-size=N survives only as a concurrency hint, and allow_larger is a warned no-op
`/guild:guild-wiki ingestquerylint`
/guild:guild-evolve/guild:evolveredundant command prefix dropped
/guild:guild-rollback/guild:rollbackredundant command prefix dropped
/guild:guild-stats/guild:statsredundant command prefix dropped
/guild:guild-audit/guild:auditredundant command prefix dropped
/guild:guild-diagnose/guild:fixverb renamed; diagnose skill remains internal
/guild:guild-init design-era name/guild:initphase command
/guild:guild-initiative ... design-era name/guild:initiative ...opt-in initiative command

Removed names do not execute work in v2.0. Unknown subcommands print usage help and exit non-zero.

Flag Migration Panel

Use --rigor=quick|standard|deep for the normal upgrade path. It expands the common loop, cap, and review posture and prints the expanded profile before the first gate.

v1 flagv2 equivalent
--loops=<...>still accepted; prefer --rigor or settings.json loops
--loop-cap=Nstill accepted; persistent key is loop_cap
--codex-cap=Nstill accepted; persistent key is codex_cap
--codex-review--review=cross
--auto-approve=spec-and-plan--auto-approve=spec,plan
--auto-approve=implementation--auto-approve=build
--auto-approve=allstill accepted; hard-set approvals still ask
--restart as the first argument/guild:resume --restart
--deep-scan on init--learn or defaults.auto_learn: true

Config Migration Panel

v2 uses one config file:

.guild/settings.json

The v1 .guild/config.yml reader was removed in v2.0. If config.yml is still present, run /guild:migrate; do not assume runtime reads it.

v1 configv2 configNotes
loops:loops: or rigor:prefer rigor; loops is a power-user override
loop_cap:loop_cap:same setting name
codex_cap:codex_cap:same setting name
codex_review: truereview: "cross"cross-host review posture
codex_review: falsereview: "local"same-host/local posture
auto_approve: noneauto_approve: []no soft gates pre-cleared
auto_approve: spec-and-planauto_approve: ["spec", "plan"]split token list
auto_approve: implementationauto_approve: ["build"]build token
auto_approve: allauto_approve: ["all"]hard-set approvals still ask
defaults.agent_team: trueagent_mode: "team"top-level key
defaults.agent_team: falseagent_mode: "subagent"top-level key
absent team defaultagent_mode: "auto"default resolver behavior

Unknown keys are rejected by validation. No config key turns wiki promotion into an automatic path; knowledge promotion remains human-gated.

Host Migration Panel

Do not carry v1 host assumptions forward. v2 uses 16 canonical host targets through one adapter contract, but hosts do not all expose identical runtime behavior. The same lifecycle, artifacts, gates, and receipts are the goal; host capability gaps degrade with an observable on-disk signal.

Support labelMeaning
Supportedcommitted verification receipt exists
Supported (beta)installable target exists; operator-box receipt is pending
Supported (app)app surface uses a degraded bootstrap or enqueue path
Supported (connector)connector path with serial/enqueue behavior and approval needs

The Support label is presentation language. Shipped reality still comes from the evidence-derived public state and committed receipts. Recheck current host claims on Host support, especially for app and connector surfaces.

Roster Migration Panel (v2.2)

The v2.2 roster change, shipped on the beta (next) channel, replaces the host-registered specialist roster with two registered machinery agents (advisor, developer) plus 15 read-only domain specialist type templates at templates/specialists/<role>.md. A domain specialist now joins a team as a project instance under .guild/agents/, minted deterministically from the template library. Groups, default tiers, and trigger boundaries are unchanged.

Existing projects with team files that still point at shipped domain agents (definition_source: shipped entries) are fixed with one command:

npx tsx <plugin>/scripts/roster-resolve.ts migrate-team-roster --cwd .

It mints the missing instances and re-points the team entries; machinery entries are untouched. Re-composing the phase team achieves the same result. Optionally, mint <role> --host-native also projects an instance into .claude/agents/ for Claude host-native routing; the projection is marker-stamped and never clobbers a hand-authored file.

Knowledge, Quality, And Operations

The canonical durable knowledge store is .guild/wiki/**. The KnowledgeGraph, knowledge-links, recall projections, and optional .guild/index.sqlite are derived and rebuildable. Learning writes proposals and candidates. It does not promote wiki pages, decisions, skills, agents, or policy by itself.

/guild:qa and /guild:ops are shipped v2 phase entrypoints, not reserved notices. Quality computes release readiness from discovered evidence. Operations executes runbook classes such as release, monitoring, incident, rollback, and maintenance. Incident and rollback are never autonomous, and destructive, network, and spend steps always ask.

Verification checklist

A migration is not proven by renamed commands alone. Before retiring the v1 path:

  • Keep the dry-run migration report and the pre-migration snapshot.
  • Validate .guild/settings.json and confirm each migrated key has the intended value.
  • Replace removed command names and test the current command surface.
  • Recheck the selected host against current support evidence and capability limits.
  • Complete one bounded project run that references an approved spec, team, and plan, then inspect its handoff, review, verification, and trace receipts.
  • Keep the rollback snapshot until the verified run and its docs or support claims have been reviewed.

Compatibility Window And Independent Rollback

Public compatibility shims and explicit v1 normalized event mappings remain available through at least one full stable release after the first stable release containing the converged boundary. They are not removed in that same release.

Rollback is boundary-specific:

  • Adapter rollback: restore the previous conformant host adapter or factory binding without changing lifecycle authority.
  • Transport rollback: restore a prior transport port or refuse the transition; no host-specific path may bypass lifecycle policy.
  • Consumer rollback: restore the previous copied release contract together with its digest pin. Benchmark and website reject mismatched bytes and never import plugin source.

Receipts remain append-only throughout. Removing a compatibility shim requires a later release-bound side-by-side replay, independent adapter and transport rollback proof, preserved receipts, reconciled D8 documentation, and updated consumer pins.

How an old name keeps working

The 11 old spellings are not shims around the new commands. Each one is a real command file in the package whose only behavior is to print the new spelling and exit — it dispatches nothing, so a stale script cannot half-run a renamed verb. The alias files are listed in a checked-in allowlist, and they are scheduled for deletion after one stable cut.

Version channels back this up: main holds the stable version and next the beta, so a stable install gets one released surface — the 13 commands plus the print-only alias files, exactly as the release shipped them — rather than a moving mix of beta renames. How a release crosses from next to main, and the evidence it must carry, is on Conformance and evidence.