Skip to content
Back to skills

Open Migrate

ASecurity

Migrate settings between AI coding tools (Claude Code, Codex CLI, Cursor, Grok Build) — rules, skills, subagents, hooks, permissions. Also undoes a migration by run-id. Use when the user asks to move or import settings from one AI coding tool to another, or to roll one back.

  • 2 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 5, 2026
ai-agentsgosecurity

Works with

  • claude code
  • cursor
  • cli

Security analysis

A100/100

Scanned September 5, 2026

npx -y skills add chakki-the-potato/open-migrate --skill open-migrate --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Open Migrate?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Open Migrate
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/chakki-the-potato-open-migrate/badge)](https://www.skillsdirectory.com/skills/chakki-the-potato-open-migrate)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: open-migrate
description: Migrate settings between AI coding tools (Claude Code, Codex CLI, Cursor, Grok Build) — rules, skills, subagents, hooks, permissions. Also undoes a migration by run-id. Use when the user asks to move or import settings from one AI coding tool to another, or to roll one back.
user-invocable: true
---

# open-migrate — move settings between AI coding tools

Migrate one tool's configuration into another. Both tools are inputs: you are told which to read from and which to write to, so never infer either from where this file is installed.

## Mode

`rollback` as the first argument is a different job, not a migration.

```
/open-migrate rollback <run-id>     undo one run
/open-migrate rollback              list runs and ask which
```

Read `core/rollback.md` and follow it instead of everything below. "undo the migration",
"revert what you just did", and the like mean the same thing — treat them as this mode and
confirm the run-id with the user before acting.

## 0. Resolve inputs

### 0-1. Source and destination

Two values decide everything: where the settings come from and where they go. Read what the user gave you, then ask for the rest.

| What you were given | What to do |
|---|---|
| **Both** — `/open-migrate codex claude` | Proceed. Source `codex`, destination `claude` |
| **One** — `/open-migrate codex` | Take it as the **source** and ask only for the destination |
| **Neither** — `/open-migrate` | Ask for the source, then the destination |

**Positional order is source first**, matching the word order of "migrate from X to Y". So a lone positional argument is the source.

**Wording overrides position.** If the request says which direction it means, believe it — "move my settings **into** claude" makes `claude` the destination even though it appears alone, and "migrate **from** codex" makes `codex` the source. Only fall back on position when the wording says nothing.

Some tools substitute arguments into `$ARGUMENTS`; Cursor does not, so read the message body as well.

Ask one at a time, and confirm both back to the user before moving on — a wrong direction writes settings into the wrong home. Never guess, and never assume the tool you are running inside is either one.

When asking, list what is actually on the machine — check whether `~/.claude`, `~/.codex`, `~/.cursor`, and `~/.grok` exist and present what you find. Existence only: do not open anything inside them. That keeps this compatible with test mode, where reading a real home is forbidden — knowing a directory is there tells you what to offer without pulling real configuration into the run.

Offer tools that are not installed as destinations too, noting that their home will be created; migrating into a tool before installing it is a normal thing to want.

Valid values: `claude`, `codex`, `cursor`, `grok`. Source and destination must differ. If either has no doc under `core/tools/`, say support is planned and stop.

### 0-2. Scope

Ask what to migrate when the user has not said:

- **Home only** — the tool's own configuration directory. The default.
- **A named project** — that repository's per-project configuration as well.
- **Every project** — discovery per procedure.md's "Project scope" section.

### 0-3. Roots

- Source root = the source doc's default home, unless the user names a path.
- Destination root = the destination doc's default home, unless the user names a path.
- Project root = whatever the scope answer produced.

**If either root is not that tool's real home, this is a test-mode run** — a path given for the source counts just as much as one given for the destination. Test mode means every home path in the tool docs is resolved against the root you were given, and the real home is never read or written. procedure.md's "Path resolution in test mode" has the full rules; you read it in step 1, before anything is written, so it is enough here to notice that a custom root was supplied and carry that fact forward.

## 1. Load knowledge (relative to this file's directory, all required)

1. `core/security.md` — the policy that overrides everything
2. `core/procedure.md` — the execution procedure
3. `core/tools/<source>.md` — how to read and convert the source
4. `core/tools/<destination>.md` — how to write to the destination
5. If any of those delegates a rule to another tool's doc (for example "apply codex.md's permission conversion rules directly"), **read that doc too.** Skipping the delegation leaves you with half the rules.

## 2. Execute

Follow procedure.md's Scan → Plan → Confirm → Apply → Report, in order.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.