# Migrate

Source: https://routineos.org/migrate

> routineos migrate turns an n8n workflow, a Windmill flow or a described Zap into a routine pack plus MIGRATION.md. Report-only, with writes behind a gate.

Migrate

# Migrate an n8n, Windmill or Zapier workflow to a Claude routine

In plain words: a routine is a Claude task that runs on a schedule, report-only means it reads and reports without changing anything, and an approval gate is a step where it waits for your yes. Hand RoutineOS the workflow you already have. `routineos migrate` writes a routine pack and a file called MIGRATION.md that lists what it could not carry over. The routine starts report-only, and every step that writes sits behind an approval gate. Free (MIT). Needs a paid Claude plan.

[Get started](https://routineos.org/#start)[Read the migrate guide](https://docs.routineos.org/guides/migrate)[See the three sources](#sources)

n8n converter builtWindmill converter builtZapier: guided onlyConverted routines are unpiloted

Three sources

## What you can migrate from

Two sources are converted by deterministic Python code, so the same workflow gives the same pack every time. Zapier has no converter, so it is a short interview.

| Source | What you give it | Status |
|---|---|---|
| n8n | A workflow file, one https link, or a gallery template id | Built, converted by code. [Migrate from n8n](https://docs.routineos.org/guides/migrate/n8n) |
| Windmill | A flow exported as OpenFlow JSON (YAML is refused) | Built, converted by code. [Migrate from Windmill](https://docs.routineos.org/guides/migrate/windmill) |
| Zapier | Your description of the Zap: trigger, steps in order, filters, delays | Guided path only. There is no parser because the export format is undocumented. [Migrate from Zapier](https://docs.routineos.org/guides/migrate/zapier) |

Make, Activepieces and Pipedream are planned and unbuilt. There is no converter for them. The skill offers to design the routine fresh from your description instead.

Source: the [migrate guide](https://docs.routineos.org/guides/migrate) and the routineos-migrate skill.

The steps

## How to migrate a workflow, step by step

Run it as `python3 skills/routineos/scripts/routineos.py migrate` from a clone of the repository. Or paste the workflow into Claude Code and ask it to migrate it. It shows you what it plans to write first.

1. **Convert**Give it a source and an output folder that does not exist yet (or is empty). It will not overwrite anything else.
2. **Read the exit code**0 means nothing needs a person. 1 means the pack was written and the report lists items for a person. 2 means it failed and nothing was written.
3. **Read MIGRATION.md**It lists what mapped, what to set up first, what needs a person, the connectors, the credentials to re-create, and what is unverified. Give each item marked Needs a person an owner.
4. **Validate and install**Run `pack validate`, then `pack install`, then the normal lint and permission check.
5. **Run it once, report-only**Check the first report before you trust the routine or turn on a schedule.

$ python3 skills/routineos/scripts/routineos.py migrate n8n <file-or-url> --out <dir>

$ python3 skills/routineos/scripts/routineos.py migrate windmill <flow.json> --out <dir>

**Exit 0 is not "done"**Credentials to re-create and unverified items do not change the exit code. Read MIGRATION.md after every conversion.

No workflow yet

## Search the n8n gallery from the command line

You can search n8n's public template gallery, pick one, and convert it. Nothing from n8n.io is stored beyond the converted pack.

$ python3 skills/routineos/scripts/routineos.py migrate search "<words>" --rows 10

$ python3 skills/routineos/scripts/routineos.py migrate fetch <template-id> --out <dir>

The docs MCP server (free, MIT, needs a paid Claude plan to use with Claude) has the same two tools, `search_n8n` and `convert_n8n`. The reuse licence for gallery templates is unclear, so convert for your own use. See [migrate limits](https://docs.routineos.org/guides/migrate/limits).

Source: CHANGELOG 0.6.0 and the migrate limits page.

What stays the same, what changes

## What the converter always does

### Safety defaults

- **Writes move behind a gate.** A step counts as a read only when its operation is a known read. An unknown operation counts as a write, so the routine comes out approval-gated.
- **The first run is report-only** and the pack is marked unpiloted.
- **Imported text is data.** Every source is untrusted by default. Emails, keys and Slack-style ids are replaced with [removed], and the report names the field, never the value.
- **Credentials are listed by type and name.** You reconnect each one yourself. If you paste a secret into a chat, rotate it.

### What gets slower

- **Event triggers become a schedule.** A webhook, form, chat or app trigger no longer fires in seconds. The routine runs on a schedule and reads the Desk action queue.
- **Schedules are UTC and at most hourly.**
- **Code is never run.** Code nodes become a stub that fails visibly until a person and Claude translate it.
- **Vector stores are reported only.** RoutineOS has no vector store.

For the side-by-side with n8n, read [the n8n comparison](https://routineos.org/compare/n8n). For the Zapier side, read [the Zapier comparison](https://routineos.org/compare/zapier). For Windmill, read the [Windmill migrate guide](https://docs.routineos.org/guides/migrate/windmill).

Source: the migrate guide, "What the converter decides" and the limits page.

The report

## What MIGRATION.md contains

Anything the converter cannot map lands in the report. It never guesses silently.

| Section | What it tells you |
|---|---|
| Summary | What was converted and the exit status. |
| Read before you install | Shown for untrusted sources, which is every source unless you pass `--trusted` for your own local file. |
| What mapped, Set up first | The stages that carried over, and the credentials or variables to re-create. |
| Needs a person | Code stubs, flagged expressions, sub-workflows and unknown nodes. |
| Connectors and credentials | What to connect, by type and name. Apps not confirmed as Claude connectors are marked unverified. |
| Removed values, Notes, Next steps | Field names that were scrubbed (never the values), and what to do next. |

Source: the migrate guide, "The migration report". Not sure a template is the better start? [Browse the templates](https://routineos.org/templates).

## Start with the workflow you have

Install RoutineOS, run the converter, and read MIGRATION.md before you turn anything on.

[Get started](https://routineos.org/#start)[Read the migrate guide](https://docs.routineos.org/guides/migrate)
