← Files OmnekyARCHIVED FILE

skills/omneky-performance-movers/SKILL.md

3.55 KB · Oct 8, 2026 · 06:23 UTC

↓ Download file

See the change to this file →

---
name: omneky-performance-movers
description: >-
  Find which ads to make more of: performance movers, ROAS/CTR leaders, and
  creative recommendations. Keywords: which ads, ROAS, CTR, movers,
  recommendations, leaderboard, what rose, what fell, make more of.
---

# Performance movers

## Activation analytics

If 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`.

## Purpose

Fast read-only path for “what rose / fell?” and “which creatives should I
make more of?” grounded in movers + recommendations + optional drill-downs.

## When to use

- Which ads / campaigns / creatives improved or declined vs the prior period
- Leaderboard / “what should I scale?” questions
- Follow-on from a thin analytics ask that is clearly mover-centric

## When not to use

- Full multi-connector / GSC / HubSpot deep dives → `omneky-analytics`
- Mutations (pause / budget / launch) → launch-manage / pause-budget
- Inventing causal “lift” scores without tool support

## OpenAI runtime contract

- Use only tools from the current OpenAI host + Omneky MCP (`https://mcp.omneky.com/mcp`). Never invent tools.
- 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.
- When intake is incomplete, ask **one** concise chat question. Never invent a question tool.
- 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.
- Never invent tokens; OAuth is host-managed.

## Non-negotiable output / safety contract

- Brand-scoped and read-only.
- Coverage first: `check_reporting_data_available` before treating empty as zero.
- Prefer `get_performance_movers` (not deprecated `get_trending`).
- Prefer `get_performance_breakdown` for ranked drill-down (not deprecated
  `get_dimension_summary`).
- Never invent metrics; never sum `selected_conversion_metric_value` across channels.
- Summarize winners and losers with evidence.

## Staged workflow

### Stage 1 — Brand + coverage

1. Resolve brand (`list_brands` / picker) if needed; `get_current_user` when required.
2. Confirm date window.
3. `check_reporting_data_available`.

### Stage 2 — Movers

1. `get_performance_movers` for up / down vs prior period.
2. Present a short leaderboard (top gains / top drops) with channel labels.

### Stage 3 — Drill / recommend

1. Optional: `get_daily_metrics` for a nominated entity’s trend.
2. Optional: `get_performance_breakdown` for creative / campaign ranks.
3. Optional: `search_reporting_values` to resolve names → ids.
4. When they ask what to change or test next: `get_recommendations`
   (tight window; timeout → narrow, no identical retry).

### Stage 4 — Hand off

- “Make more like winner X” → `omneky-creative` / `omneky-image-ads` /
  `omneky-product-video`
- “Pause the losers” → `omneky-pause-budget` (Approve before mutate)
- Broader reporting → `omneky-analytics`

## Failure boundaries

| Failure | Required response |
| --- | --- |
| Empty movers | Coverage check; explain gap; do not invent ranks. |
| Recommendations timeout | Narrow window; stop identical retry. |
| Cross-channel conversion sum | Refuse; channel-group. |
| User requests pause mid-read | Hand off; Approve widget required. |

SHA-256: e202fc434b00224c7116e68e6d872ad0042013601b7f9ddd6ea73b0038247192