plugins/motherduck-skills-claude/skills/motherduck-migrate-to-motherduck/SKILL.md
Plan a migration onto MotherDuck. Use when moving from Snowflake, Redshift, PostgreSQL, dbt-heavy stacks, or lakehouse tooling and the key decisions are target pattern, cutover slices, validation, rollback, and native-versus-DuckLake posture.
npx skillsauth add motherduckdb/agent-skills motherduck-migrate-to-motherduckInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use this skill when the user needs a migration plan from another warehouse, PostgreSQL estate, or mixed analytics stack onto MotherDuck.
This is a use-case skill. It orchestrates motherduck-connect, motherduck-explore, motherduck-load-data, motherduck-model-data, motherduck-query, and motherduck-ducklake.
Always determine this before writing a migration plan.
Also capture the source-side shape:
If no server is active, ask for representative source and target schemas before finalizing the migration plan.
pg_duckdb, or DuckLake.pg_duckdb when extending an existing PostgreSQL estate is the least disruptive pathWhen this skill produces a native DuckDB (md:) connection, watermark it with custom_user_agent=agent-skills/2.2.0(harness-<harness>;llm-<llm>). If metadata is missing, fall back to harness-unknown and llm-unknown.
The output of this skill should be:
If the caller explicitly asks for structured JSON, return raw JSON only with no Markdown fences or prose before/after it. This is mainly for automated tests, regression checks, or downstream tooling that needs a stable machine-readable shape. Normal human-facing use of the skill can stay in prose unless JSON is explicitly requested.
Use this exact top-level shape when JSON is requested:
{
"summary": {},
"assumptions": [],
"implementation_plan": [],
"validation_plan": [],
"risks": []
}
references/MIGRATION_PLAYBOOK.md -- preserved detailed migration guidance that used to live in this skillreferences/MIGRATION_VALIDATION.md -- validation checks and comparison helpersartifacts/migration_validation_example.py -- MotherDuck-backed Python example for source-vs-target validation and variance reportingartifacts/migration_validation_example.ts -- TypeScript companion artifact with the same validation output contractRun it with:
uv run --with duckdb python skills/motherduck-migrate-to-motherduck/artifacts/migration_validation_example.py
Run the same validation flow against temporary MotherDuck databases:
MOTHERDUCK_ARTIFACT_USE_MOTHERDUCK=1 \
uv run --with duckdb python skills/motherduck-migrate-to-motherduck/artifacts/migration_validation_example.py
Validate the TypeScript companion artifact:
uv run scripts/test_typescript_artifacts.py
motherduck-connect -- choose the connection path for the target systemmotherduck-explore -- inspect the target-side MotherDuck workspacemotherduck-load-data -- bulk movement and raw landing patternsmotherduck-model-data -- shape the target analytical modelmotherduck-query -- port and validate critical SQLmotherduck-ducklake -- only when open-table-format requirements are explicitdevelopment
Connect to MotherDuck from any application. Use when setting up database connectivity via the Postgres endpoint (recommended), pg_duckdb, native DuckDB API, or JDBC. Covers connection strings, authentication, SSL, and environment variable configuration.
development
Connect to MotherDuck from any application. Use when setting up database connectivity via the Postgres endpoint (recommended), pg_duckdb, native DuckDB API, or JDBC. Covers connection strings, authentication, SSL, and environment variable configuration.
development
Connect to MotherDuck from any application. Use when setting up database connectivity via the Postgres endpoint (recommended), pg_duckdb, native DuckDB API, or JDBC. Covers connection strings, authentication, SSL, and environment variable configuration.
data-ai
Create and manage MotherDuck data shares for zero-copy data distribution. Use when sharing databases with team members, other organizations, or making data publicly available.