Hand the migration to your agent.
The Graftport CLI plus a bundled skill turn any coding agent into a migration engineer. It investigates source data, drafts and publishes JSONata mappings, runs sandbox dry-runs, and triages failures. Anything that costs real money stays human-gated.
The same loop a migration engineer runs,
done by your agent.
Two installs. Any agent.
The CLI is a normal Python package on PyPI. The skill is a Markdown document that teaches your coding agent how to use it — the iterative mapping workflow, every validation error code, and the JSONata patterns that fix each one. One install command writes the skill to the right place for whichever agent you run.
The CLI
Every Graftport action is exposed as a JSON-on-stdout command. Auth via the same OAuth loopback flow as gh auth login --web. Read-only by default; cost-incurring actions print a live estimate to stderr and block on a human yes.
uv tool install graftport graftport auth login graftport migrations list
The skill
Auto-detects which coding agents are installed for your user and writes the right file for each. Claude Code, Claude Desktop, Windsurf land instantly. Cursor and Copilot need a one-time paste of the same skill text.
graftport skill install # detects Claude Code, Claude Desktop, Windsurf # writes ~/.claude/skills/graftport-migration-engineer/ # and the Windsurf global-rules block
The agent never spends your money.
State-changing actions split into two tiers. The bundled skill explicitly forbids the agent from passing --yes on any gated command. The agent composes the command, prints the cost, and stops. You decide whether to ship.
Agent-allowed
no gateMetadata write only; flags downstream records for re-load on the next run, which is itself gated.
Computes payloads against a sandbox without pushing to Shopify. Zero load cost, zero credit usage.
migrations, mappings, runs, records, source — list, show, status, failures.
Human-gated
interactive yesCosts Shopify API calls and platform credits per record loaded. Prints a live cost estimate to stderr; blocks on a yes.
Destructive — may lose in-flight work for already-loaded records.
Re-loads one record; small but real cost. Distinct exit code (3) on decline so scripts can branch.
One CLI. Every coding agent
already on your laptop.
An agent on a rail,
not a wild horse.
AI is good at the boring, iterative work that has clear feedback signals — exactly what migration mapping is. The CLI gives it a tight feedback loop. The skill gives it the playbook. The human-approval contract makes sure nobody wakes up to a Shopify bill nobody authorised.
Source samples, not guesses
The agent sees real source rows on every iteration, so mappings handle the long tail of weird data instead of the schema diagram's happy path.
Structured error codes
Validation returns codes like AMOUNT_MISMATCH and TYPE_COERCION. The bundled skill maps each one to the JSONata pattern that fixes it.
Versioned, never destructive
Every publish is an immutable mapping version. The agent can ship freely; rolling back to v3 is one click and one re-run.
Dry-run by default
The agent's start-a-run command always carries --dry-run unless you remove it. Nothing leaks into Shopify until you say so.
Distinct decline exit code
Gated commands exit 3 when you decline (vs 1 for failure). Your wrapping scripts can tell the difference, and the agent knows to stop and ask.
Read-only by design
Source-side credentials are read-only, and Graftport never writes back to Magento, WooCommerce, BigCommerce, or the source Shopify, regardless of who is driving.
The questions
agencies ask first.
Do not see yours? Email hello@graftport.com. We read every message.
Anything that has a shell tool. The CLI exposes every action as a JSON-on-stdout command, so Claude Code, Cursor, Windsurf, GitHub Copilot Workspace, Aider, and any custom agent that can run a shell command all work. No MCP server required.
Put your agent on the migration.
Create the migration in the app, install the CLI and the skill, and your coding agent picks up the migration-engineer role from there. Costly steps stay on you.