You are an assistant that executes this skill workflow for the user.
You MUST execute the required tool workflow and return the output in the required format sections. Do not skip required steps and do not replace the required report/template with a short summary.
Goal
Prevent pushes sent by mistake or poorly written: a workflow with preview,
review, validation, send, and receipt confirmation. This skill is for
shop-wide broadcasts to all eligible push recipients.
Access contract
API shape
shop_create_push_broadcast accepts:
message (required): notification body, max 255 characters.
schedule (optional): send: "now" or send: "at" with
send_at including timezone offset, e.g. 2026-05-28T09:30+02:00.
action (optional): tap action. Default is open_app.
Supported action types include open_app, external_link, section,
and product_url.
The response returns only {result, generated_in} — no broadcast ID, no
recipient count. Delivery is asynchronous to opted-in devices.
For targeted shop pushes to specific customers or prospects, use
shop-push-targeted instead.
Input contract
message (required): the push text the user will read. Keep it
concise (< 150 characters recommended) since the full string is the
notification body on device.
schedule (optional): immediate by default. For delayed sends, ask for
the exact local date/time and timezone offset if missing.
action (optional): what opens when the user taps the notification.
- Optional audience-estimate toggle: whether to call
shop_list_customers first to show the user an approximate registered
base before sending.
Required Tool Workflow (strict order)
Follow the sequence below exactly when those tools are available for the request context.
- Resolve tap action:
- Product action: call
shop_list_products when the product is named;
fuzzy-match by title/slug and use product_slug. Never use
section_id/item_id for products.
- Section action: call
cms_list_cms_sections first with types
article, photo, video, sound, maps, agenda; if no
match is found, call cms_list_sections with those types plus
commerce. Ask the user to pick if ambiguous.
- External link: require a standard
https://... URL.
- Draft: compose the
message and render it to the user in a
"what the end user will see" format.
- Spellcheck: flag obvious typos, placeholder text ("test",
"lorem"), and over-long content.
- Audience estimate (optional): call
shop_list_customers to show
approximate reach. This is an estimate of the registered customer
base, not the opted-in push audience — flag this to the user.
- Explicit confirmation: "Confirm send?"
shop_create_push_broadcast with message, optional schedule, and
optional action.
- On failure, surface the structured error (
code, hint,
retryable) and retry only once if retryable=true.
- Confirm the send with a summary based on the tool response.
Tools used
shop_create_push_broadcast
shop_list_customers (optional, for audience estimate)
shop_list_products (optional, for product tap actions)
cms_list_cms_sections, cms_list_sections (optional, for section tap actions)
Output contract (exact sections required)
The final answer MUST include all sections shown in this output template, in the same order.
## Push broadcast — draft
💬 **Message**: "Sale -20% this weekend — until Sunday 11:59 PM on the Summer collection"
⏱️ **Send**: now
🔗 **Tap action**: product "Summer tote" (slug: summer-tote)
🎯 **Target**: all opted-in shop app users (registered base est.: 8,320)
→ Confirm send? (yes/no)
---
## Push sent ✅
- Accepted by API (result: ok, generated_in: 142 ms)
- Note: the API does not return a broadcast ID or a delivery count;
delivery is asynchronous to opted-in devices (a subset of the
registered base).
Do not replace this output with a one-line answer.
Guardrails (hard rules)
- No automatic sends without user validation.
- Reject empty
message or placeholder content ("test", "lorem").
- Keep
message <= 255 characters; recommend < 150 characters.
- If the send fails, do not loop — surface the error as-is.
- If the registered-customer estimate exceeds a threshold
(e.g. 10,000), require a reinforced confirmation.
- For delayed sends,
schedule.send_at MUST include the MCP client
user's timezone offset, e.g. 2026-05-28T09:30+02:00. Do not send a
naive datetime and do not pre-convert it to UTC.
- Shop push broadcasts do not support platform targeting. If requested,
say it is not available for shop push notifications.
- For
product_url, resolve the product and pass product_slug.
- For section actions, never pass custom app deep links such as
section://; provide section_id and let the tool resolve the public
URL, or provide a known https://... URL/path.
Next possible actions
- Run
shop-traffic-report in 24h to measure the push's impact on
launches/sessions.
- Run
shop-best-sellers if the push targeted a specific product or
collection.
- Run
shop-promo-campaign if the send implies a discount that's not
yet created.
1---2name: shop-push-broadcast3description: Prepare and send a shop push notification broadcast: drafting, scheduling, tap action, dry-run, send. The push is NEVER sent without explicit confirmation. Use by default whenever the user wants to announce something to all shoppers with a push or shop notification, even indirectly or with approximate wording. Prefer this skill over raw MCP tools when it reasonably fits. Skip only if the user explicitly asks not to use this skill/workflow.4---56You are an assistant that executes this skill workflow for the user.78You MUST execute the required tool workflow and return the output in the required format sections. Do not skip required steps and do not replace the required report/template with a short summary.910## Goal1112Prevent pushes sent by mistake or poorly written: a workflow with preview,13review, validation, send, and receipt confirmation. This skill is for14shop-wide broadcasts to all eligible push recipients.1516## Access contract1718- `READ_WRITE`.1920## API shape2122`shop_create_push_broadcast` accepts:2324- `message` (required): notification body, max 255 characters.25- `schedule` (optional): `send: "now"` or `send: "at"` with26 `send_at` including timezone offset, e.g. `2026-05-28T09:30+02:00`.27- `action` (optional): tap action. Default is `open_app`.28 Supported action types include `open_app`, `external_link`, `section`,29 and `product_url`.3031The response returns only `{result, generated_in}` — no broadcast ID, no32recipient count. Delivery is asynchronous to opted-in devices.3334For targeted shop pushes to specific customers or prospects, use35`shop-push-targeted` instead.3637## Input contract3839- `message` (required): the push text the user will read. Keep it40 concise (< 150 characters recommended) since the full string is the41 notification body on device.42- `schedule` (optional): immediate by default. For delayed sends, ask for43 the exact local date/time and timezone offset if missing.44- `action` (optional): what opens when the user taps the notification.45- Optional audience-estimate toggle: whether to call46 `shop_list_customers` first to show the user an approximate registered47 base before sending.4849## Required Tool Workflow (strict order)5051Follow the sequence below exactly when those tools are available for the request context.52531. **Resolve tap action**:54 - Product action: call `shop_list_products` when the product is named;55 fuzzy-match by title/slug and use `product_slug`. Never use56 `section_id`/`item_id` for products.57 - Section action: call `cms_list_cms_sections` first with types58 `article`, `photo`, `video`, `sound`, `maps`, `agenda`; if no59 match is found, call `cms_list_sections` with those types plus60 `commerce`. Ask the user to pick if ambiguous.61 - External link: require a standard `https://...` URL.622. **Draft**: compose the `message` and render it to the user in a63 "what the end user will see" format.643. **Spellcheck**: flag obvious typos, placeholder text ("test",65 "lorem"), and over-long content.664. **Audience estimate** (optional): call `shop_list_customers` to show67 approximate reach. This is an estimate of the registered customer68 base, not the opted-in push audience — flag this to the user.695. **Explicit confirmation**: "Confirm send?"706. `shop_create_push_broadcast` with `message`, optional `schedule`, and71 optional `action`.727. On failure, surface the structured error (`code`, `hint`,73 `retryable`) and retry only once if `retryable=true`.748. Confirm the send with a summary based on the tool response.7576## Tools used7778- `shop_create_push_broadcast`79- `shop_list_customers` (optional, for audience estimate)80- `shop_list_products` (optional, for product tap actions)81- `cms_list_cms_sections`, `cms_list_sections` (optional, for section tap actions)8283## Output contract (exact sections required)8485The final answer MUST include all sections shown in this output template, in the same order.8687```markdown88## Push broadcast — draft8990💬 **Message**: "Sale -20% this weekend — until Sunday 11:59 PM on the Summer collection"91⏱️ **Send**: now92🔗 **Tap action**: product "Summer tote" (slug: summer-tote)93🎯 **Target**: all opted-in shop app users (registered base est.: 8,320)9495→ Confirm send? (yes/no)9697---9899## Push sent ✅100- Accepted by API (result: ok, generated_in: 142 ms)101- Note: the API does not return a broadcast ID or a delivery count;102 delivery is asynchronous to opted-in devices (a subset of the103 registered base).104```105106Do not replace this output with a one-line answer.107108## Guardrails (hard rules)109110- **No automatic sends** without user validation.111- Reject empty `message` or placeholder content ("test", "lorem").112- Keep `message` <= 255 characters; recommend < 150 characters.113- If the send fails, do not loop — surface the error as-is.114- If the registered-customer estimate exceeds a threshold115 (e.g. 10,000), require a reinforced confirmation.116- For delayed sends, `schedule.send_at` MUST include the MCP client117 user's timezone offset, e.g. `2026-05-28T09:30+02:00`. Do not send a118 naive datetime and do not pre-convert it to UTC.119- Shop push broadcasts do not support platform targeting. If requested,120 say it is not available for shop push notifications.121- For `product_url`, resolve the product and pass `product_slug`.122- For section actions, never pass custom app deep links such as123 `section://`; provide `section_id` and let the tool resolve the public124 URL, or provide a known `https://...` URL/path.125126## Next possible actions127- Run `shop-traffic-report` in 24h to measure the push's impact on128 launches/sessions.129- Run `shop-best-sellers` if the push targeted a specific product or130 collection.131- Run `shop-promo-campaign` if the send implies a discount that's not132 yet created.