{"id":27875,"plugin_id":"plugin_asdk_app_6aa944d20a3081919d9f65692616ff4d","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-08T06:23:45.246Z","digest":"098615bf682aea2431d2767d91198790e4ac2056a61b7ccbb8ef220a7997f39b","against":null,"payload":{"description":"Maintain the Omneky brand product catalogue: list products, fetch details, create or update SKUs, and import a product-page URL. Use when the user wants to add, update, or inspect catalogue products before a paid-media launch or creative. Intent keywords: list my products, turn this product URL into, product catalogue, catalog, SKU, PDP, scrape product, import URL, product images, merchandise, upsert product.","included_files":[],"name":"omneky-catalogue","skill_md_contents":"---\nname: omneky-catalogue\ndescription: >-\n  Maintain the Omneky brand product catalogue: list products, fetch details,\n  create or update SKUs, and import a product-page URL. Use when the user\n  wants to add, update, or inspect catalogue products before a paid-media\n  launch or creative. Intent keywords: list my products, turn this product\n  URL into, product catalogue, catalog, SKU, PDP, scrape product, import URL,\n  product images, merchandise, upsert product.\n---\n\n# Omneky product catalogue\n\n## Activation analytics\n\nIf the host exposes a skill-activation / analytics hook, call it once per new user request with this skill name; otherwise skip silently. Never invent a tracking tool. Omneky MCP does **not** expose `track_skill_activation`.\n\n## Purpose\n\nRead and write the brand product catalogue that grounds product-specific\ncreatives and launches. There is **no product-delete tool** on this public\nsurface.\n\n## When to use\n\n- List or inspect products for a brand before a launch or creative\n- Add a product by hand (name, description, images, URL)\n- Update an existing completed product or its PDP URL\n- Import a single product page (identify → scrape → confirm → finalize)\n\n## When not to use\n\n- ROAS / CTR / spend → `omneky-analytics`\n- Launching the product onto Meta / Google / TikTok →\n  `omneky-launch-manage` after `product_id` + imagery exist\n- Generating image/video from the product → `omneky-creative` /\n  `omneky-image-ads` / `omneky-product-video`\n- Listing / category URLs without classify — always\n  `identify_product_from_url` first (see `omneky-product-import`)\n\n## OpenAI runtime contract\n\n- Use only tools from the current OpenAI host + Omneky MCP (`https://mcp.omneky.com/mcp`). Never invent tools.\n- Prefer native ChatGPT / host widgets and question UI for decisions. Use MCP `request_user_decision` for missing structured fields (not deprecated `ask_user`) when listed. Else follow `omneky-failure-modes` § Approval / plain-chat fallback.\n- When intake is incomplete, ask **one** concise chat question. Never invent a question tool.\n- Approval / Generate turns: end the turn after Approve / Deny (or Generate / Cancel) via host UI or plain chat; mutate only after affirmative Approve / Generate. Never invent a fake widget tool.\n- Never invent tokens; OAuth is host-managed.\n\n## Non-negotiable output / safety contract\n\n- Prefer numeric `brand_id` when thumbnails matter.\n- Confirm create / update fields with the user before writes when they asked\n  to confirm, or when fields are ambiguous — use `request_user_decision` or\n  a host Approve widget; end turn after the widget.\n- Scrape drafts: complete with `finalize_scraped_product`, **not**\n  `upsert_brand_product`.\n- `scrape_product_from_url` creates a **new draft** each successful start —\n  do not spam scrapes.\n- No public product-delete — say so if asked; do not invent one.\n- Do not launch or charge creative credits from this skill.\n\n## Staged workflow\n\n### Stage 1 — Resolve brand\n\n1. If `brand_id` unknown: `list_brands` → picker → `get_brand_details` when\n   logo / colors / `company_id` are needed.\n\n### Stage 2 — Read\n\n1. List: `list_brand_products` (`brand_id`).\n2. One product: `get_product_details` (also accepted: `fetch_product_details`)\n   with `brand_id` + `product_id`.\n\n### Stage 3 — Create or update (manual)\n\n1. New product: `create_product` **or** `upsert_brand_product` /\n   `update_brand_product` without `product_id`. Confirm fields first.\n2. Update completed product: `upsert_brand_product` with `product_id`. Pass\n   current `product_name` / `product_description` when leaving them unchanged.\n3. URL only: `update_product_url`.\n\n### Stage 4 — Import from URL (delegate detail)\n\nFollow `omneky-product-import` stages, summarized:\n\n1. `identify_product_from_url` — skip scrape on listing/category pages.\n2. `scrape_product_from_url` — if `status=pending`, retry later same\n   `brand_id` + url; no tight loop this turn.\n3. Confirm fields + selected images with the user (widget / one question).\n4. `finalize_scraped_product`.\n\n### Stage 5 — Hand off\n\n- Image ads → `omneky-image-ads` / `omneky-creative`\n- Product video → `omneky-product-video`\n- Launch → `omneky-launch-manage` (paused by default; Approve first)\n\n## Failure boundaries\n\n| Failure | Required response |\n| --- | --- |\n| Listing/category URL | Stop scrape; ask for a single PDP URL. |\n| `status=pending` scrape | Later retry same args; no tight poll. |\n| User asks to delete product | Explain no public delete tool. |\n| Ambiguous update fields | `request_user_decision` / Approve; no silent overwrite. |\n| Missing imagery for later gen | Tell user before creative handoff; do not pretend assets exist. |\n| Auth / brand errors | `omneky-failure-modes` / `omneky-getting-started`. |\n\n## Sibling map\n\n| Need | Skill |\n| --- | --- |\n| URL import detail | `omneky-product-import` |\n| Image/video from product | `omneky-creative` / `omneky-image-ads` / `omneky-product-video` |\n| Launch product ads | `omneky-launch-manage` |\n| Failures / pending scrape | `omneky-failure-modes` |\n\n## Tool alias notes\n\nPrefer canonical names when both appear on `tools/list`:\n\n- `get_product_details` (also accepted: `fetch_product_details`)\n- `upsert_brand_product` (also accepted: `update_brand_product`)\n- `finalize_scraped_product` for scrape drafts (not upsert)\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}