{"id":27889,"plugin_id":"plugin_asdk_app_6aa944d20a3081919d9f65692616ff4d","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-08T06:23:45.395Z","digest":"53e2651263cd7833b3dd688660c89aabecff5206fc8d7c1e734cf2d5385ca4d9","against":null,"payload":{"description":"Connect a missing Omneky ad channel or OpenAI Ads / PostHog / Google Drive for the signed-in brand. Use when get_channel_connection_status is disconnected or the user asks to link an ad account, Facebook Page, Pinterest, X Ads (twitter), PostHog, or Drive. Intent keywords: connect ads, OAuth URL, link ad account, Facebook page, Pinterest, Twitter, X Ads, OpenAI Ads, PostHog, Google Drive, disconnect Drive.","included_files":[],"name":"omneky-self-connect","skill_md_contents":"---\nname: omneky-self-connect\ndescription: >-\n  Connect a missing Omneky ad channel or OpenAI Ads / PostHog / Google Drive\n  for the signed-in brand. Use when get_channel_connection_status is\n  disconnected or the user asks to link an ad account, Facebook Page,\n  Pinterest, X Ads (twitter), PostHog, or Drive. Intent keywords: connect\n  ads, OAuth URL, link ad account, Facebook page, Pinterest, Twitter, X Ads,\n  OpenAI Ads, PostHog, Google Drive, disconnect Drive.\n---\n\n# Omneky self-connect\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\nAttach authorized ad accounts and optional brand connectors so later\n`launch_*` / asset flows can succeed. Browser OAuth (or one-shot API key\nforward for OpenAI Ads / PostHog) is user-completed; this skill never\ncollects secrets into free chat beyond what the tool schema requires, and\nnever invents disconnect tools that are not on `tools/list`.\n\n## When to use\n\n- Channel is disconnected and the user wants to launch or manage ads\n- User asks to connect Meta / Google / TikTok / LinkedIn / Reddit /\n  Pinterest / X Ads (`twitter`), OpenAI Ads, PostHog, or Google Drive\n- After `get_channel_connection_status` or `list_connector_statuses` shows\n  a gap blocking a requested workflow\n\n## When not to use\n\n- Not HubSpot / Semrush / Ahrefs / GSC **connect** — those are status +\n  reads only on this surface (see `omneky-analytics`). Users connect them\n  in brand settings.\n- Not OpenAI Ads / managed-Meta **launches** — connect ≠ launch. There is\n  no `launch_openai_*` / `launch_omneky_managed_*` on public `/mcp`.\n- Not Datadog / Shopify / GTM / invented connectors\n- Not for pausing / budgeting (→ `omneky-pause-budget`) or launching\n  (→ `omneky-launch-manage`)\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. Never ask the user to paste a JWT or API key into chat.\n\n## Non-negotiable output / safety contract\n\n- Wire name for X Ads is **`twitter`**, never `x`.\n- Hand the user the OAuth / connect URL; they finish in the browser. Do not\n  claim the channel is connected until a status re-check says so.\n- OpenAI Ads / PostHog keys are forwarded **once** by the tool and never\n  logged back — do not echo keys into chat.\n- Destructive disconnects (`disconnect_posthog`, `disconnect_google_drive`)\n  need an Approve widget / explicit confirm; prefer leave-connected unless\n  the user asked to disconnect.\n- Never invent Pinterest / Twitter disconnect tools if absent from\n  `tools/list`.\n- After connect, offer next step: launch (`omneky-launch-manage`) or\n  verify with a read-only list (`get_campaigns`).\n\n## Staged workflow\n\n### Stage 1 — Resolve brand\n\n1. If `brand_id` unknown: `list_brands` → brand picker → `get_brand_details`.\n2. Snapshot: `list_connector_statuses`.\n\n### Stage 2 — Paid-media channel connect (Meta / Google / TikTok / LinkedIn / Reddit / Pinterest / X)\n\n1. `get_channel_connection_status` with the correct `channel`\n   (`facebook` / `google` / `tiktok` / `linkedin` / `reddit` /\n   `pinterest` / `twitter`). Pinterest also has\n   `get_pinterest_connection_status`.\n2. If disconnected: `get_channel_connect_url` — show the URL; end turn if\n   waiting on the user.\n3. After the user says they finished OAuth: `list_authorized_ad_accounts`.\n   For Meta also `list_authorized_facebook_pages` when a Page is required.\n4. Confirm which account (and Page) to attach via widget / one question.\n5. `link_ad_channel_account` with the chosen ids.\n6. Re-check `get_channel_connection_status` / `list_connector_statuses`.\n\n### Stage 3 — OpenAI Ads\n\n1. `get_openai_ads_connection_status`.\n2. If connecting: `connect_openai_ads` with the user-provided API key\n   (schema-required; do not store or reprint).\n3. Re-check status. Remind: connect ≠ launch.\n\n### Stage 4 — PostHog\n\n1. `get_posthog_connection_status`.\n2. Connect: `connect_posthog` with personal `phx_…` key (not `phc_…`) and\n   host `us.posthog.com` or `eu.posthog.com`.\n3. Disconnect only on explicit Approve: `disconnect_posthog`.\n\n### Stage 5 — Google Drive\n\n1. `get_google_drive_connection_status`.\n2. Connect: `get_google_drive_connect_url` → user OAuth → re-check.\n3. Disconnect only on explicit Approve: `disconnect_google_drive`.\n\n### Stage 6 — Hand off\n\n- Ready to launch → `omneky-launch-manage` / `omneky-meta-launch`\n- Channel-only questions → `omneky-channel-connect` (thin channel path)\n- Failures → `omneky-failure-modes`\n\n## Failure boundaries\n\n| Failure | Required response |\n| --- | --- |\n| 401 / unauthorized | Host re-OAuth; never paste JWT. |\n| OAuth URL opened but status still disconnected | Wait; re-check status once; do not re-link blindly with stale ids. |\n| User has multiple authorized accounts | Picker / one question; do not pick silently. |\n| Meta missing Page | `list_authorized_facebook_pages` then include page on `link_ad_channel_account`. |\n| User said `channel=x` | Correct to `twitter` and proceed. |\n| HubSpot/Semrush/Ahrefs/GSC “connect” request | Explain status+read only; point to brand settings; use analytics skill for queries. |\n| Disconnect without confirm | Show Approve / Deny; do not call disconnect yet. |\n| Invented disconnect / launch tool missing | Refuse; stay on `tools/list` names. |\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}