← OmnekyCONTENT HISTORYWHAT CHANGED · RULE-BASED ANALYSIS
Update to Omneky
Snapshot Oct 8, 2026 · 06:23 UTC · version 2.0.0
Collection source: downloaded plugin package.
First saved snapshot
No earlier snapshot is available to establish a change.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"description": "Launch and manage Omneky paid-media ads on Meta/Facebook, Google Ads, TikTok, LinkedIn, Reddit, Pinterest, and X Ads (Twitter). Use when the user wants to create, pause, budget, retarget, or delete campaigns, or attach a catalogue/creative to a live ad account. Intent keywords: paid media, Meta ads, Facebook ads, Instagram, Google PMax, Demand Gen, TikTok ads, LinkedIn ads, Reddit ads, Pinterest ads, X Ads, Twitter ads, launch Meta sales ads, ROAS, launch campaign, pause ad, budget, targeting, product catalogue, Approve launch.",
"included_files": [],
"name": "omneky-launch-manage",
"skill_md_contents": "---\nname: omneky-launch-manage\ndescription: >-\n Launch and manage Omneky paid-media ads on Meta/Facebook, Google Ads,\n TikTok, LinkedIn, Reddit, Pinterest, and X Ads (Twitter). Use when the\n user wants to create, pause, budget, retarget, or delete campaigns, or\n attach a catalogue/creative to a live ad account. Intent keywords: paid\n media, Meta ads, Facebook ads, Instagram, Google PMax, Demand Gen,\n TikTok ads, LinkedIn ads, Reddit ads, Pinterest ads, X Ads, Twitter ads,\n launch Meta sales ads, ROAS, launch campaign, pause ad, budget,\n targeting, product catalogue, Approve launch.\n---\n\n# Omneky launch and manage\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\nCreate and operate paid-media campaigns across connected channels with\n**Approve-before-mutate** discipline. Default new launches to **PAUSED**.\nPrefer pause over delete. X Ads wire name is **`twitter`**, never `x`.\n\n## When to use\n\n- Launch, pause, resume, budget, or retarget paid-media campaigns\n- Meta / Facebook / Instagram, Google Ads, TikTok, LinkedIn, Reddit,\n Pinterest, or X Ads\n- Attach a catalogue product or chat-generated creative to an existing\n campaign or ad set\n- Connect a missing ad account (delegate detail to `omneky-self-connect`)\n\n## When not to use\n\n- ROAS / CTR / spend reporting → `omneky-analytics`\n- Generating or editing creatives → `omneky-creative` (then return here)\n- Catalogue SKU writes → `omneky-catalogue`\n- Inventing Central-only or OpenAI Ads **launch** names (`launch_openai_*`,\n managed-Meta launch tools)\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 turns: end the turn after Approve / Deny / Edit (host UI or plain chat); mutate only next turn after Approve. Never invent a fake summary-widget tool; never stall for a widget that did not appear.\n- Never invent tokens; OAuth is host-managed.\n\n## Non-negotiable output / safety contract\n\n- Before any `launch_*`, `set_ad_entity_status` / `set_ad_budget` /\n `update_ad_targeting` / `delete_*`: show a one-card summary\n (`Brand · Channel · Objective · Budget · Paused|Live · Creative`) with\n **Approve / Deny / Edit** via host-native confirmation / MCP Apps /\n `request_user_decision` when available; otherwise **plain-chat fallback**\n (`omneky-failure-modes` § Approval / plain-chat fallback). End the turn.\n Mutate only next turn after affirmative Approve (or clear yes).\n- Default `status_on_launch` / `configured_status` to **`PAUSED`** unless the\n user explicitly asked to go live.\n- Prefer **pause** over **delete**. Deletes: first offer Pause instead /\n Delete permanently / Cancel; then a **second** Approve confirm.\n- Prefer `set_ad_entity_status` over deprecated `set_ad_status`.\n- Prefer `request_user_decision` over deprecated `ask_user` when that tool\n is on `tools/list` and fields are missing / `needs_user_decision`. Else\n plain-chat questions. Never dump `clarification_needed` JSON; never\n auto-retry failed writes same turn.\n- Hierarchy: Campaign → Ad Set (`ad_group`) → Ad. Creative is an asset on\n the Ad (`ad_specs`), never on the campaign. Status/budget tools do not\n add ads.\n- Confirm channel connected before launch; else `omneky-self-connect`.\n- After success: post-launch next steps (host UI or plain chat) — Check\n status / Pull 7d metrics / Done (metrics via `omneky-analytics`).\n- Keep decision options to ≤3 when possible.\n\n## Staged workflow\n\n### Stage 1 — Brand + intent\n\n1. Resolve brand (`list_brands` / picker) → `get_brand_details`.\n2. Confirm live launch vs creative-only. Creative-only → `omneky-creative`\n first (credit callouts image ~5 / video ~30).\n3. Catalogue product when relevant: `list_brand_products` /\n `get_product_details`.\n\n### Stage 2 — Channel readiness\n\n1. `get_channel_connection_status` (X: `channel=\"twitter\"`; Pinterest also\n `get_pinterest_connection_status`).\n2. `get_channel_budget` / `minimum_budget_for_objective`.\n3. Optional: `reach_estimate` for targeting size questions.\n4. Optional: `get_ad_custom_properties` for custom conversion definitions.\n5. Disconnected → `get_channel_connect_url` path via `omneky-self-connect` /\n `omneky-channel-connect`.\n\n### Stage 3 — Targeting pre-calls\n\n| Channel | Required pre-call | Notes |\n| --- | --- | --- |\n| Meta / Facebook | none | Inline `targeting`: countries / age_min / age_max |\n| Google PMax | none | Set `link_url`; Google places automatically |\n| Google Demand Gen | `search_google_countries` | Pass values as `targeting_fragments` |\n| LinkedIn | `search_ad_targeting` `types=[\"locations\"]` | Must include `urn:li:adTargetingFacet:locations`; `start_date` on new group |\n| TikTok | `get_tiktok_location_ids` | `location_ids` required on ad group |\n| Reddit | none | Inline `targeting`; `bid_value` microcurrency (dollars × 1e6) |\n| X Ads | none | Wire name `twitter` |\n| Pinterest | none | `get_pinterest_*` list helpers |\n\n### Stage 4 — Creative attach\n\n1. Chat creative → `register_creative_for_launch` (alias\n `register_ad_instance_item`) before launch when required.\n2. Confirm copy, CTA, landing URL.\n\n### Stage 5 — Approve (exclusive-tool turn)\n\n1. Show summary Approve / Deny / Edit (host UI when available; else\n plain-chat card — `omneky-failure-modes` § Approval / plain-chat\n fallback).\n2. **End the turn.** Do not call `launch_*` yet.\n\n### Stage 6 — Launch (next turn after Approve)\n\nCall the matching tool with paused default. Existing campaign:\n`campaign_spec={\"id\": …}`. Existing ad set: `ad_group_spec={\"id\": …}`.\n\n**Meta / Facebook:** `launch_facebook_sales_ad`,\n`launch_facebook_leads_ad`, `launch_facebook_awareness_ad`,\n`launch_facebook_traffic_ad`, `launch_facebook_video_views_ad`\n(Meta-focused detail also in `omneky-meta-launch`).\n\n**Google:** `launch_google_performance_max_ad`,\n`launch_google_demand_gen_ad`.\n\n**LinkedIn:** `launch_linkedin_brand_awareness_ad`,\n`launch_linkedin_website_visits_ad`, `launch_linkedin_conversions_ad`,\n`launch_linkedin_engagement_ad`.\n\n**Reddit:** `launch_reddit_awareness_ad`, `launch_reddit_traffic_ad`,\n`launch_reddit_conversions_ad`, `launch_reddit_leads_ad`,\n`launch_reddit_video_views_ad`.\n\n**TikTok:** `launch_tiktok_traffic_ad`, `launch_tiktok_video_views_ad`,\n`launch_tiktok_conversions_ad`, `launch_tiktok_leads_ad`.\n\n**X Ads (`twitter`):** `launch_twitter_awareness_ad`,\n`launch_twitter_traffic_ad`, `launch_twitter_engagements_ad`,\n`launch_twitter_followers_ad`, `launch_twitter_video_views_ad`.\n\n**Pinterest:** `launch_pinterest_awareness_ad`,\n`launch_pinterest_traffic_ad`, `launch_pinterest_sales_ad`,\n`launch_pinterest_leads_ad`, `launch_pinterest_video_views_ad`.\n\nNo Omneky-managed Meta / OpenAI **launch** tools. OpenAI Ads can be\n*connected* (`connect_openai_ads`); do not invent `launch_openai_*`.\n\n### Stage 7 — Manage existing\n\n**Inspect:** `get_campaigns`, `get_ad_groups` (pass `campaign_id` — unscoped\nbrand-wide lists can time out), `get_ads`, `get_channel_budget`,\n`minimum_budget_for_objective`, `get_campaign_ad_group_names`.\nPinterest: `get_pinterest_campaigns` / `get_pinterest_ad_groups` /\n`get_pinterest_ads`.\n\n**Mutate (after Approve):** `set_ad_entity_status`, `set_ad_budget`,\n`update_ad_targeting` (Facebook-only retarget),\n`set_pinterest_entity_status`.\n\n**Delete (dual confirm):** `delete_campaign`, `delete_ad_group`,\n`delete_ads`.\n\nSpecialized pause/budget path: `omneky-pause-budget`.\n\n### Stage 8 — Post-launch\n\nNext-steps (host UI or plain chat): Check status / Pull 7d metrics\n(`omneky-analytics`) / Done.\n\n## Failure boundaries\n\n| Failure | Required response |\n| --- | --- |\n| Mutate without Approve | Forbidden — show summary (host UI or plain chat) and end turn. |\n| Invented summary-widget tool | Forbidden — `omneky-failure-modes` § Approval / plain-chat fallback. |\n| Disconnected channel | Self-connect / channel-connect; do not invent launch. |\n| LinkedIn / TikTok / Google DG 400 | Run required targeting pre-call; see `omneky-failure-modes`. |\n| `needs_user_decision` | `request_user_decision` if listed; else plain chat; no auto-retry. |\n| Unscoped `get_ad_groups` timeout | Pass `campaign_id`; narrow. |\n| User said go live but widget still paused | Confirm explicitly before ACTIVE. |\n| Delete request | Pause-first offer; dual Approve for delete. |\n| `channel=x` | Correct to `twitter`. |\n| Reddit $ budgets entered as dollars in `bid_value` | Convert to microcurrency. |\n| OpenAI Ads launch request | Connect only; no public launch tool. |\n\n## Channel gotchas\n\n- Reddit `bid_value` is microcurrency (dollars × 1,000,000). $5/day = `5000000`.\n- LinkedIn `start_date` is required when creating a new campaign group.\n- Facebook lead ads: set `lead_gen_form_id` on ad specs for native forms.\n- Google Demand Gen needs `search_google_countries` → `targeting_fragments`.\n- TikTok needs `get_tiktok_location_ids` → `location_ids`.\n- Pinterest list/status helpers exist alongside generic getters.\n- OpenAI Ads: `connect_openai_ads` / `get_openai_ads_connection_status` only —\n connect ≠ launch.\n- Drive assets: `get_google_drive_connect_url` via `omneky-self-connect`.\n\n## Sibling map\n\n| Need | Skill |\n| --- | --- |\n| Meta-only | `omneky-meta-launch` |\n| Pause / budget only | `omneky-pause-budget` |\n| Connect channel | `omneky-self-connect` / `omneky-channel-connect` |\n| Creatives | `omneky-creative` |\n| Metrics after launch | `omneky-analytics` |\n| Failures | `omneky-failure-modes` |\n"
}SHA-256 of public snapshot: 840d4e7ec7af4aba2ad2ddc9ef9d36f21bfa9cca87a913688e9ddba38f066eed