Provisions a Jurassic Ninja (JN) site and configures it as the Maestro lab store.
Site creation is only possible through the jurassic-ninja ContextA8C MCP, so this
skill drives that part; everything after "site exists and its password is known" is
handled by .maestro/scripts/setup-jn-store.sh, which a developer can also run by
hand against a site created in a browser.
-
Make sure the WordPress.com account is available. The script needs a test account
to connect Jetpack to, and it cannot prompt when run by an agent because there is no
terminal attached; it will exit with a message naming what is missing.
If .env.local has no MAESTRO_WOO_LAB_WPCOM_EMAIL / MAESTRO_WOO_LAB_WPCOM_PASSWORD,
stop and ask the user to either add those two lines themselves, or run the script
directly in their own terminal, where it prompts without echoing:
.maestro/scripts/setup-jn-store.sh --site <domain>.jurassic.ninja
Do not ask the user to paste a password into the conversation, and never pass one as a
command-line argument.
-
Check whether setup is already usable. If .maestro/.env.local exists, probe the
store in one bash call that sources the file, so no credential is read into the chat:
( set -a; . .maestro/.env.local; set +a
curl -s -o /dev/null -w '%{http_code}' \
-u "${MAESTRO_WOO_LAB_CONSUMER_KEY:-$MAESTRO_WOO_CONSUMER_KEY}:${MAESTRO_WOO_LAB_CONSUMER_SECRET:-$MAESTRO_WOO_CONSUMER_SECRET}" \
"$MAESTRO_WOO_LAB_JETPACK_STORE_URL/wp-json/wc/v3/products?per_page=1" )
A 200 means the store is alive and the keys work; report that and stop, unless the
user passed --fresh. Anything else means the store is gone or expired: continue, and
reuse the existing WP.com account lines rather than asking for them again.
-
Provision two sites. The lab store, and a WooCommerce site without Jetpack for
login_no_jetpack:
provision-site features: {"woocommerce":"true","woocommerce-import-sample-data":"true","jetpack":"true"}
provision-site features: {"woocommerce":"true","jetpack":"false"}
Note both returned domains.
-
Fetch their passwords.
list-sites domain: <domain>, include_passwords: true, include_config: true
JN_PASSWORD in the returned config is both the wp-admin and the SSH password. The
admin username is demo.
Do not echo these values in your reply.
-
Configure the stores. Pass the passwords through the environment so they never land
in ps output:
JN_SSH_PASS='<lab JN_PASSWORD>' JN_NO_JETPACK_SSH_PASS='<no-Jetpack JN_PASSWORD>' \
.maestro/scripts/setup-jn-store.sh --site <lab domain> --no-jetpack-site <no-Jetpack domain>
The script waits for JN to finish provisioning (it answers HTTP before its plugins
finish installing), connects Jetpack, creates the API keys, and writes
.maestro/.env.local.
This assumes .env.local already has MAESTRO_WOO_LAB_WPCOM_EMAIL and
MAESTRO_WOO_LAB_WPCOM_PASSWORD. If it does not, see step 0.
-
Report the store URL and blog ID. Do not print any credential.
The doctor should report all credentials present. Scoping by tag is deliberate: with
--profile phone-full it also demands the negative-login fixtures, which this skill does
not provision, and reports them missing.
A fresh store has the WooCommerce sample products, and the script adds 25 completed
orders, one customer and a maestro10 coupon, so the product, order and dashboard flows
run against it.