--- name: upgrade-agent-native description: >- Bring an older Agent Native app or workspace current. Use when updating @agent-native/core, fixing a broken upgrade, or when tempted to patch or override core/dispatch packages to make an old branch run. scope: dev metadata: internal: true --- # Upgrade Agent Native ## Rule When an older Agent Native app/branch needs to run on current packages, use `agent-native upgrade`. Never "fix" upgrade breakage with `pnpm.overrides`, `patchedDependencies`, `resolutions`, local patches, or edits under `node_modules/@agent-native/*` — especially not against `@agent-native/core` or `@agent-native/dispatch`. ## Why Agents often respond to a failed core bump by inventing framework patches and dispatch behavior overrides. That hides the real app-level break, drifts from upstream, and makes the next upgrade worse. The supported path is bump → install → refresh scaffold skills → verify, then fix **app** code only. ## How 1. **Preview migration codemods first** ```bash npx @agent-native/core@latest upgrade --codemods ``` Codemods are preview-by-default: read the diff before applying it. Do not manually edit imports before running this command; the migration manifest is the source of truth for renamed specifiers and symbols. 2. **Apply the reviewed codemods, then run the upgrade** ```bash npx @agent-native/core@latest upgrade --codemods --yes npx @agent-native/core@latest upgrade ``` Or from an already-installed CLI: `pnpm exec agent-native upgrade` / `agent-native upgrade`. What it does: - Blocks (unless `--force`) when `@agent-native/*` overrides/patches exist - Rewrites non-local `@agent-native/*` dependency pins to `latest` - Runs the package manager install - Runs `skills update scaffold --project` - Runs `typecheck` when the project has that script 3. **Pull upstream template changes (optional, separate from the bump)** `agent-native upgrade` moves package versions. It never touches files that were copied out of a template at scaffold time, so template fixes and improvements do not arrive with a bump. ```bash agent-native template status # recorded ref vs latest, drift counts agent-native template diff # what upstream changed, read-only agent-native template sync # 3-way merge it into the app ``` `sync` defaults to the ref matching the installed `@agent-native/core`, so run it after `upgrade`. It merges per file against a pristine baseline stored in `refs/agent-native/template-baseline/`; files upstream did not touch are left alone, and real collisions get conflict markers. After resolving markers, run `agent-native template accept` — the baseline deliberately does not advance past an unresolved merge. Apps scaffolded before provenance existed have no baseline. Create one with `agent-native template baseline` before the first sync. 4. **If upgrade or typecheck fails** - Read the concrete error - Fix **app** source, actions, config, or env — not framework packages - Re-run `agent-native upgrade` or `pnpm typecheck` - Stop and ask the user if you cannot fix the app-level error Intentional app-level UI customization is a separate workflow. Read `customizing-agent-native` when the product needs to own a selectively copied component; do not use that path to reproduce framework runtime behavior or hide version skew. 5. **Dry-run / partial runs** ```bash agent-native upgrade --dry-run agent-native upgrade --skip-verify agent-native upgrade --skip-install # package.json bumps only agent-native doctor --only migration-manifest ``` `migration-manifest` has no opt-out. Run it in CI before upgrading to find imports that will break, then use `npx @agent-native/core@latest upgrade --codemods` to preview the supported rewrite. ## Don't - Don't add `pnpm.overrides`, `overrides`, `resolutions`, or `patchedDependencies` for any `@agent-native/*` package - Don't edit `node_modules/@agent-native/core` or `node_modules/@agent-native/dispatch` - Don't invent local "dispatch behavior" shims to paper over version skew - Don't keep iterating with more framework patches after a failed install - Don't skip `skills update scaffold --project` after a core bump (the upgrade command does this for you) ## Related Skills - **self-modifying-code** — Tier 4: framework packages are off limits - **agent-native-docs** — version-matched docs after the bump - **customizing-agent-native** — intentional app-owned UI copies, not upgrade patches - **portability** — keep app code provider-agnostic across upgrades