RoutineOSBeta
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.

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.

SourceWhat you give itStatus
n8nA workflow file, one https link, or a gallery template idBuilt, converted by code. Migrate from n8n
WindmillA flow exported as OpenFlow JSON (YAML is refused)Built, converted by code. Migrate from Windmill
ZapierYour description of the Zap: trigger, steps in order, filters, delaysGuided path only. There is no parser because the export format is undocumented. Migrate from 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.

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. ConvertGive 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 code0 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.mdIt 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 installRun pack validate, then pack install, then the normal lint and permission check.
  5. Run it once, report-onlyCheck 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.

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. For the Zapier side, read the Zapier comparison. For Windmill, read the Windmill migrate guide.

The report

What MIGRATION.md contains

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

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

Start with the workflow you have

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