
Description
Verifies and provisions Wix-side setup required before import. Use after codegen when setup-requirements.md must be validated or executed against the target site.
SKILL.md
rp-execute-setup
Verify that required Wix-side setup exists and is ready for import.
Purpose
This skill validates the prerequisites discovered by rp-setup-discovery. It can also drive the setup work when the environment and permissions allow it.
Required inputs
migrations/<project>/setup-requirements.mdmigrations/<project>/config/wix.envor equivalent environment values- access to the target Wix environment or to exported evidence from that environment
Config
Prefer project-local config over ad hoc shell state. config/wix.env should exist before
setup verification/provisioning and contain:
WIX_SITE_ID=
WIX_AUTH_TOKEN=
If either required value is missing after loading config plus process env, halt to needs-user with the missing key name. Never print the token.
Treat migrations/<project>/config/*.env as secret-bearing once they may contain real
values. Do not verify them with whole-file reads that echo contents into tool output.
Only check existence plus present / blank / missing status for required keys.
Workflow
- Resolve the active project.
- Read the setup requirements artifact.
- Verify each required app, collection, schema, field, and permission.
- Record pass, fail, or blocked status for each item.
- If execution is allowed, perform missing setup steps carefully and re-verify.
- Save the verification results.
Provisioning — exhaust programmatic options before declaring anything "manual"
Default to provisioning via API. Do not label a requirement "manual" or "owner action" until you have confirmed no API can do it.
Transport (interim decision): setup provisioning writes — app installs, Wix Data enablement, collection/field creation — may be performed by the agent via the Wix MCP (
CallWixSiteAPI) for now. This differs from import, which must run the generated script and never use MCP as its write transport (rp-execute-import→ "Execute the generated scripts — never an agentic MCP flow"). The reason setup is treated differently: it's a small, finite, mostly one-time set of calls with little per-project logic (the variance is which apps/collections — data, not code), not a bulk restartable pipeline. This is an interim choice; other options (e.g. a shared, parameterized provisioner library inrp-target-wixdriven bysetup-requirements.md) are still under discussion. The approval gate is unchanged: no setup write before the user accepts the execution plan.
If the Wix MCP / CallWixSiteAPI transport expected for setup verification/provisioning
is missing from the runtime, treat that as a prerequisite gap before assuming you must
work blind:
- first try to ensure the Wix MCP is installed/connected in the current runtime
- if the environment supports connector/plugin install flows, use them
- otherwise halt to needs-user with exact install/connect instructions for the Wix MCP and explain which setup verification/provisioning capabilities are blocked without it
Only proceed in a docs-only/read-only posture when the MCP is genuinely unavailable and the step can still produce useful non-destructive output.
Concrete mechanisms:
- Installing / enabling Wix apps (Blog, Members, etc.) IS automatable. Use the
App Installation API:
- Pre-check with
POST /apps-installer-service/v1/app-instance/is-permitted-to-install(read-only) to see whether the identity may install the app. - If permitted, install with
POST /apps-installer-service/v1/app-instance/install. Body (all fields required — confirmed by live 400s):{ appInstance: { appDefId, enabled: true }, tenant: { tenantType: "SITE", id: <siteId> }, installType: "INSTALL_TYPE_SITE", appsInstallOptions: {} }. (Theis-permitted-to-installpre-check uses a different, oneof-based body and is informational only — if its validation fights you, skip it and rely on/install.) - List current state with
GET /apps-installer-service/v1/app-instances.
- Ground
appDefIdfrom the official "Apps Created by Wix" table (/docs/api-reference/articles/work-with-wix-apis/platform/about-apps-created-by-wix), NOT from a docs example — e.g. the install-app example uses1380b703-…, which is Wix eCommerce, not Blog. Installing the wrong app on a live site is a real hazard; verify the ID maps to the app you intend.
- Pre-check with
- Wix Data / CMS collections (the
WDE0110: Wix Code not enabledcase). Enable Wix Data by installing the Wix Data appappDefId e593b0bd-b783-45b8-97c2-873d42aacaf4via the App Installation API (same/installbody shape as any other app; it also auto-installs a dependency app1a711f05-2040-47df-a9f0-4f9cddb4c3c6). Once installed, plain RESTPOST /wix-data/v2/collectionscreates NATIVE collections with noWDE0110— no code editor toggle, no custom app needed. Verified live 2026-06-10 on a fresh free site (install → 200; collection create → 200collectionType: NATIVE).- This is the preferred path. The older data-collections-extension app (authoring a
custom app that declares collections, FR-005) is now a fallback — only needed if
you must declare collection schemas at install time, and it still can't express
REFERENCEfields (FR-004; add those after install viacreate-field). - Note: the standalone "Wix CMS" app (
appDefId 675bbcef-…) is not installable (is-permitted-to-install→false) — do not use it; usee593b0bd-….
- This is the preferred path. The older data-collections-extension app (authoring a
custom app that declares collections, FR-005) is now a fallback — only needed if
you must declare collection schemas at install time, and it still can't express
- Import crosswalk collection (idempotency, FR-010). Native blog/CMS entities have no
client-settable source id and Wix rewrites slugs, so a re-run can't dedupe without a
side table. After enabling Wix Data, provision a native
ImportCrosswalkcollection (POST /wix-data/v2/collections) with fieldsentityType(TEXT),sourceId(TEXT),targetId(TEXT),targetType(TEXT). The generated importer seeds from it (queryAllDataItems) before writing and records each created entity, so continues/re-runs skip done records instead of creating duplicates. Provision this whenever the plan writes native entities that must be idempotent. If upstream artifacts still call thisMigrationRefs, normalize them here rather than creating both collections. - Genuinely manual (no API exists): upgrading the storage plan, generating external-system credentials (e.g. a WordPress Application Password), and account-level billing. These are the only categories that may be reported as manual — and only after confirming no API covers them.
Artifact to create or update
migrations/<project>/setup-verification.md
Verification output format
For each requirement capture:
- requirement name
- expected state
- observed state
- status: passed, failed, blocked
- remediation needed
Optional media reachability verification
When the migration includes media import by source URL, check whether discovered media
URLs are publicly reachable by Wix. If the source URL is localhost, 127.0.0.1, or a
private-only host, mark media import as blocked or deferred, but do not block
unrelated non-media entities. This is optional setup and, as far as we know today, affects
only Wix Media import.
Record the user's chosen path in setup-verification.md:
- Tunnel media URLs: ask the user to expose the source through a public HTTPS tunnel,
then use that URL for
WP_BASE_URL/SOURCE_URLor rewrite media URLs to that base. - Skip/defer media: proceed only if the execution plan clearly says media and any media-dependent references (hero images, galleries, downloads) will be skipped or deferred.
Ngrok quick setup for macOS:
brew install ngrok
ngrok config add-authtoken "<YOUR_AUTHTOKEN>"
ngrok http 8090
export WP_BASE_URL=https://<id>.ngrok-free.app
Runtime policy
Split this skill's work by side effect:
- Verification is read-only — checking what's installed, what's missing, and what's genuinely manual. It runs before the execution-plan acceptance gate and feeds the plan.
- Provisioning writes — installing apps, enabling Wix Data (via the data-collections enabler), creating collections, adding fields — happen only after the user accepts the execution plan. No site write before acceptance. Once accepted, the "Migrate" consent covers the individual writes, so don't re-prompt per app/collection. Halt to needs-user only for genuinely manual items (storage-plan upgrade) or a missing/invalid credential.
Guardrails
- Never report setup as complete without evidence.
- Before marking an item blocked or manual, confirm no API can perform it (see Provisioning above). Reserve "manual" for storage/billing/external-credential steps.
- If credentials or permissions are genuinely missing, mark the item blocked and state the exact API that was refused and why.
- Do not start import execution from this skill.
More skills from the skills repository
View all 16 skillsrp-discovery
discover source platform schema for migration
Jul 1Data ModelingDocumentationMigrationrp-execute-import
execute migration pipelines to Wix
Jul 1Data PipelineMigrationWixrp-import-codegen
generate migration code for Wix
Jul 1AutomationData EngineeringMigrationWixrp-mapper
map source entities to Wix targets
Jul 1Data ModelingMigrationWixrp-orchestration
orchestrate Wix site migrations
Jul 1AutomationDeploymentMigrationWixrp-setup-discovery
set up Wix environment prerequisites
Jul 1ConfigurationData ModelingWix
More from Wix
View publisherrp-source-wordpress
capture data from WordPress and WooCommerce
skills
Jul 1Data EngineeringREST APIWooCommerceWordPressrp-target-wix
validate Wix API write operations
skills
Jul 1API DevelopmentTestingWixwix-app
build Wix CLI app extensions
skills
Apr 16BackendCLIFrontendWixwix-auth
authenticate with Wix APIs
skills
Jul 7API DevelopmentAuthWixwix-design-system
build UIs with Wix Design System
skills
Apr 29DesignDesign SystemFrontendUI Components +1