← OmnekyCONTENT HISTORY

Update to Omneky

Snapshot Oct 8, 2026 · 06:23 UTC · version 2.0.0

Collection source: downloaded plugin package.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "description": "Generate, edit, or resize Omneky paid-media image and video ads, grounded in the brand product catalogue when the brief is product-specific. Use when the user wants a new image ad, a multi-scene product video, an edit of an existing creative, or another aspect ratio (9:16, 4:5, Stories, Reels). Intent keywords: turn this product URL into video ads, generate image ads for this product, image ad, product video, creative, catalogue, edit ad, resize ad, Meta creative, TikTok video, Reels, credits.",
  "included_files": [],
  "name": "omneky-creative",
  "skill_md_contents": "---\nname: omneky-creative\ndescription: >-\n  Generate, edit, or resize Omneky paid-media image and video ads, grounded\n  in the brand product catalogue when the brief is product-specific. Use\n  when the user wants a new image ad, a multi-scene product video, an edit\n  of an existing creative, or another aspect ratio (9:16, 4:5, Stories,\n  Reels). Intent keywords: turn this product URL into video ads, generate\n  image ads for this product, image ad, product video, creative, catalogue,\n  edit ad, resize ad, Meta creative, TikTok video, Reels, credits.\n---\n\n# Omneky creative\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\nPaid-media image and multi-scene product video generation plus sync edit /\nresize on `https://mcp.omneky.com/mcp`. Ground product-specific briefs in the\ncatalogue. Never claim success without a completed status or sync result URL.\n\n## When to use\n\n- New static image ads or multi-scene product video commercials\n- Edit copy, layout, or style on an existing finished ad\n- Resize a paid-media creative into another placement (9:16, 4:5, 16:9)\n- Product-specific briefs that need the brand catalogue first\n\n## When not to use\n\n- Launching the finished creative → `omneky-launch-manage` after\n  `register_creative_for_launch` (Approve before launch)\n- ROAS / CTR → `omneky-analytics`\n- Creating / updating catalogue products → `omneky-catalogue`\n- Central-only names (`trigger_ac_ad_generation`,\n  `trigger_multi_scene_product_video`, sibling video triggers, UGC,\n  `edit_video`, `trigger_product_video_v2`) — clients use public aliases below\n- Thin single-path asks may use `omneky-image-ads` /\n  `omneky-product-video` / `omneky-edit-resize` instead\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- Generate / Cancel / Approve turns: end the turn after the choice UI (or plain chat); mutate only after affirmative Generate / Approve.\n- Never invent tokens; OAuth is host-managed.\n- Prefer runtime `tools/list` when it differs from skill hardcoding.\n\n## Non-negotiable output / safety contract\n\n- **Credit callout before paid generation**: image ads typically **~5**\n  credits; multi-scene product videos typically **~30**, charged when the job\n  is submitted. Show Generate / Cancel (host UI preferred; else plain chat).\n  Billing gating: `omneky-failure-modes` § Billing tools absent —\n  call balance only when listed; if absent, state operational cost, proceed\n  after user confirms, rely on `credit_insufficient` as the hard gate.\n- `credit_insufficient` ⇒ render **did not start** — relay that; do not retry;\n  upgrade path via billing skill **when those tools are listed**.\n- Never claim success without `get_generation_status` completion (async) or a\n  sync tool’s returned URL (`edit_image` / `resize_ad` / `resize_image`).\n- On hosts with MCP Apps widgets (ChatGPT): the widget owns\n  `poll_image_generation` / `poll_video_generation` / `sync_generation_group`\n  — do **not** call those as the agent and do not loop\n  `get_generation_status` in one turn. On text-only hosts: stop after\n  submit; on the next user message call `get_generation_status(job_id,\n  kind=…)` **once**.\n- Ask whether the creative is for a **specific product** or the **brand in\n  general**. Product-specific: catalogue grounding. Brand-general:\n  `get_brand_details` assets only.\n- Unique `gpt_ad_gen_id` per image job (`<short-slug>-<uuid4>`), never reused.\n  Ambiguous submit recovery: `omneky-failure-modes` § Ambiguous paid submit\n  recovery (status with that key as `job_id`; on `not_found` wait/ask —\n  do **not** auto-mint a new key).\n- **Video:** `fetch_product_video_narratives` returns **slim cards** with a\n  minted `narrative_id` (may also echo `id`); full narrative is persisted\n  server-side. On pick, prefer `generate_product_video` with\n  **`narrative_id`** (server hydrates segments). Full `narrative` with\n  `video_gen.segments` is still OK if available — prefer the id. Do not\n  invent partial narratives or fake ids.\n- Thin/string picks without a resolvable id → `narrative_unresolved` (no\n  job, no credits) — re-fetch; never invent; never silent Generate Now.\n- Generate Now: **omit both** `narrative_id` and `narrative`; pass\n  `target_duration` 10–30 (default **12**). Optional `hook` for Generate\n  Now only.\n- Prefer runtime `tools/list` over skill hardcoding when schemas differ.\n- `environment_setting` / `location_url` is optional **HTTPS image URL** only\n  — never scene prose; omit if no URL; never invent a URL.\n- Resizes are **not charged** (adapt already-paid creative) — follow\n  `omneky-failure-modes` § Resize / edit charge. No “premium resize tiers”.\n- Prefer pause-ready launch handoff; never auto-launch after gen.\n\n## Staged workflow\n\n### Stage 1 — Brand + credits + brief type\n\n1. Resolve brand: `list_brands` / picker / `get_brand_details`.\n2. `get_current_user` when `user_id` is required.\n3. If `get_account_credit_balance` is on `tools/list` and balance unknown,\n   call it. Else follow `omneky-failure-modes` § Billing tools absent.\n4. Credit callout (image ~5 / video ~30) with Generate / Cancel (host UI or\n   plain chat). End turn after Cancel or while waiting for Generate.\n5. Ask product-specific vs brand-general if unclear.\n\n### Stage 2 — Catalogue grounding (product-specific)\n\n1. `list_brand_products` / `get_product_details`.\n2. For image gens, pass **one** product library image URL in `user_assets`\n   when possible. Quality drops with more than two assets per ad — send more\n   only when the user explicitly asks.\n3. If the product has **no library images** and the user did not supply\n   imagery: **do not** call `generate_image_ad` — ask for another product,\n   an upload, or a brand-general brief (empty-asset jobs often fail).\n\n### Stage 3 — Image ads\n\n1. `generate_image_ad` with `ad_concept` (full prompt — no separate `prompt`\n   arg), required `gpt_ad_gen_id` / `brand_id` / `brand_name` / `company_id` /\n   `user_id`, and unique `gpt_ad_gen_id` (`<short-slug>-<uuid4>`).\n2. Remember the intended key. Tool returns `job_id` immediately — not a\n   finished image.\n3. Widget host: let widget poll. Text host: one\n   `get_generation_status(job_id, kind=\"image\")` on a later turn.\n4. Ambiguous timeout after possible submit: `omneky-failure-modes`\n   § Ambiguous paid submit recovery (status with `gpt_ad_gen_id` as\n   `job_id`; on `not_found` wait ~30–60s and/or ask user — do not auto\n   mint a new key).\n5. Variants: `omneky-edit-resize` (`edit_image`, `resize_ad`,\n   `resize_image`).\n\n### Stage 4 — Video ads (narrative select → generate)\n\n1. `fetch_product_video_narratives` when you need narrative options.\n   Present **slim cards** (`narrative_id` / `id`, title, hook, duration,\n   description). Do **not** auto-trigger video.\n2. Wait for the user to pick a card (host UI / plain chat / one question);\n   end turn. Keep the chosen **`narrative_id`**.\n3. `generate_product_video` with that **`narrative_id`** and orientation:\n   `9:16` → `portrait`, `16:9` → `landscape`, `1:1` → `square`.\n   Server hydrates `video_gen.segments`. Prefer omitting the fat\n   `narrative` blob when the id is available. A full `narrative` with\n   non-empty `video_gen.segments` is still OK if you have it — prefer id.\n   Also pass required top-level: `product_image_urls`, `product_name`,\n   `product_description`, `orientation`, `brand_id`, `company_id`.\n4. If `error=narrative_unresolved`: re-fetch and pick again. No job started,\n   no credits. Do not invent segments; do not silent Generate Now.\n5. Generate Now (no picked story): **omit both** `narrative_id` and\n   `narrative`. Pass `target_duration` 10–30 (default **12**; 10–15 short\n   invent, 16–30 longform). Optional `hook`. Generate Now invents a\n   commercial; it is **not** animation.\n6. Same poll rule as images with `kind=\"video\"`.\n\n### Stage 5 — Edit and resize (sync — no poll)\n\n1. `edit_image` — change an existing finished ad (natural language). Returns\n   edited URL when done (often 30–120s). **No** `job_id` / status poll.\n2. `resize_ad` — marketing aspect-ratio outpaint; returns `resized_ad_url`.\n   **Not charged** (adapt already-paid creative).\n3. `resize_image` — explicit pixel dimensions; prefer `resize_ad` for\n   placements. **Not charged.**\n4. Follow `omneky-failure-modes` § Resize / edit charge. Do not invent\n   premium resize tiers or balance-before-resize. If live `tools/list` text\n   changes later, follow the live tool text.\n\n### Stage 6 — Register + launch handoff\n\n1. Persist chat creative when launching later:\n   `register_creative_for_launch` (also accepted:\n   `register_ad_instance_item`).\n2. Hand off to `omneky-launch-manage` / `omneky-meta-launch` with Approve\n   before any `launch_*` (`omneky-failure-modes` § Approval / plain-chat\n   fallback). Default paused.\n\n## Failure boundaries\n\n| Failure | Required response |\n| --- | --- |\n| `credit_insufficient` | Did not start; billing / upgrade if tools present; else Omneky app; no retry. |\n| Billing tools absent | `omneky-failure-modes` § Billing tools absent. |\n| Ambiguous paid submit | `omneky-failure-modes` § Ambiguous paid submit recovery. |\n| Empty product imagery | Do not generate; ask for assets / other product / brand-general. |\n| Agent called widget poll tools | Stop; leave polling to widget / one status peek next turn. |\n| Looping `get_generation_status` in one turn | Forbidden; one peek per follow-up. |\n| Thin / invented narrative without resolvable id | Forbidden — prefer `narrative_id` from fetch (or full object with segments). |\n| `narrative_unresolved` | Re-fetch narratives; no credit charge. Never invent; never silent Generate Now. |\n| Live `tools/list` schema differs | Prefer live schema over skill hardcoding. |\n| Prose in `environment_setting` | Omit or pass HTTPS URL only. |\n| Invented Central trigger names | Refuse; use public `generate_*` / `fetch_product_video_narratives`. |\n| Premium resize / balance-before-resize | Forbidden — § Resize / edit charge. |\n| Auto-launch after gen | Forbidden; Approve + paused default via launch-manage. |\n| Claim success without URL / completed status | Forbidden. |\n\n## Batching and media limits\n\n- Prefer **one** strong product image in `user_assets` per image ad. More than\n  two assets per ad usually hurts quality unless the user explicitly wants a\n  multi-image collage.\n- For multiple image concepts, submit separate `generate_image_ad` jobs with\n  **distinct** `gpt_ad_gen_id` values. Do not reuse ids.\n- Do not start a large unpaid speculative batch — credit callout must reflect\n  the count (≈5 × image jobs, ≈30 × multi-scene video jobs).\n- On widget hosts, `sync_generation_group` is widget-owned so one iframe can\n  track siblings — the agent must not call it.\n- Never mix sync edit/resize polling with async gen polling rules.\n\n## Sibling map\n\n| Need | Skill |\n| --- | --- |\n| Image-only | `omneky-image-ads` |\n| Video-only | `omneky-product-video` |\n| Edit / resize only | `omneky-edit-resize` |\n| Credits | `omneky-credit-balance` / `omneky-billing` |\n| Launch after gen | `omneky-launch-manage` / `omneky-meta-launch` |\n| Catalogue grounding | `omneky-catalogue` / `omneky-product-import` |\n| Shared recoveries | `omneky-failure-modes` |\n"
}

SHA-256 of public snapshot: 34778b0788f214b1e81a2ca3f8e7cc53b4dc646550fcee52c23175aba7a0b827