Skip to main content
Source attribution. This page reflects samples/migration-zombie/README.md in the usezombie repo. The zombie is currently README-only — it is a design reference, not yet an install target. Follow zombiectl install migration-zombie progress in the repo.
Mechanical code migrations, run autonomously overnight. Bump Node 18→22. Convert CommonJS to ESM. Move from Express to Hono. Mongoose to Drizzle. Jest to Vitest. Point it at a repo with a migration spec. Go to sleep. Wake up to a PR.

What it does

  • Loads a migration playbook (built-in or user-provided).
  • Explores the repo, enumerates every file that needs changing.
  • Plans the migration in dependency order.
  • Makes changes, runs the test suite after each step, rolls back if tests break.
  • Iterates until done or the step budget is exhausted.
  • Opens a PR with a clean commit history — one commit per migration step.

Built-in playbooks

PlaybookWhat it does
node-major-bumpNode 18→20, 20→22. Handles common breakage.
cjs-to-esmCommonJS to ESM migration.
jest-to-vitestTesting framework swap.
express-to-honoHTTP framework port.
mongoose-to-drizzleORM swap, schema-preserving.
cra-to-viteCreate React App to Vite.
Custom playbooks are a single YAML file describing replacements, import rewrites, test-pass criteria.

Why not just Devin

Devin is a generalist. Migration Zombie is narrow and structured:
  • Playbook-driven — step-by-step, each step individually verifiable.
  • Runs to completion or stops cleanly — no “mostly done” PRs.
  • Flat pricing ($29 / migration), not per-token.
  • Can run on your own runner — the code stays on your box.

Example run

zombie migrate --playbook jest-to-vitest github.com/me/my-app

[00:00] Loaded playbook: jest-to-vitest (v1.3.0)
[00:01] Analysing repo... 47 test files, 3 jest configs
[00:04] Plan:
          1. Swap jest for vitest in package.json
          2. Rewrite jest.config.* to vitest.config.ts
          3. Rewrite test imports (jest → vitest)
          4. Fix snapshot format differences
          5. Run full suite
[00:06] Step 1/5 ... ok
...
[01:42] Full suite passes. Opening PR.

Tools and policy

Authored as one SKILL.md + one TRIGGER.md. The tools the zombie invokes — git, shell, github — are named in TRIGGER.md. Policy lives as prose inside SKILL.md: “clone into a sandbox; make one commit per migration step; run the test suite after every step and roll back on failure; never force-push; open a draft PR, never merge it.” Credential: a GitHub token with repo scope. Worker placement is cloud with at least 2 GiB RAM. See samples/migration-zombie/README.md in the repo for the full manifest.