{"id":65505,"plugin_id":"plugin_asdk_app_6ac6737d221c8191bdfdd0ba7ff735fb","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-27T06:07:35.234Z","digest":"5314756001a5e8053127f3986908ad7c88ded824e943e7a2f2ebbcf436f3ffbf","against":null,"payload":{"description":"Show how the user's Cheerful influencer campaigns are doing: emails sent, replies, reply rate and opt-ins per campaign, which campaign is behind and why, and how many replies are waiting on the user. Read-only. Use when the user asks \"how are my campaigns doing\", \"campaign report\", \"which campaign has the lowest reply rate\", \"which campaign is behind\", \"how many opt-ins do I have\", \"what's my reply rate\", or \"give me a campaign update\".","included_files":[{"relative_path":"agents/openai.yaml","size_in_bytes":538}],"name":"cheerful-campaign-pulse","skill_md_contents":"---\nname: cheerful-campaign-pulse\ndescription: \"Show how the user's Cheerful influencer campaigns are doing: emails sent, replies, reply rate and opt-ins per campaign, which campaign is behind and why, and how many replies are waiting on the user. Read-only. Use when the user asks \\\"how are my campaigns doing\\\", \\\"campaign report\\\", \\\"which campaign has the lowest reply rate\\\", \\\"which campaign is behind\\\", \\\"how many opt-ins do I have\\\", \\\"what's my reply rate\\\", or \\\"give me a campaign update\\\".\"\n---\n\n# Campaign pulse\n\nSends, replies and opt-ins across the user's campaigns, the one that is behind, and what is\nwaiting on them. Read-only: it changes nothing and spends no credits.\n\n## Step 0: Check the connection\n\nIf a Cheerful tool is unavailable, or a call answers \"Tool not found\" or asks to reconnect, stop\nand tell the user: \"Connect Cheerful from the plugin page, then ask me again.\" Don't retry.\n\n## Read this first: what the data can and can't tell you\n\n- **Rates need a base.** A campaign with 2 sent and 0 replies is \"too early to tell\", not \"the\n  worst\". Call a campaign behind only when it has sent enough to compare (about 10+), and say how\n  many were sent either way.\n- **Paused is not broken.** A paused campaign stopped sending; its replies still count.\n- **Teammates' campaigns are included.** If a campaign carries `owner_email`, say whose it is.\n- **\"Not found\" can mean \"not yours\".** If a campaign can't be opened, list the campaigns again\n  instead of guessing; it may belong to someone who hasn't shared it.\n- **These are outreach numbers, not spend.** For credits use `billing_usage`, and report credits,\n  never dollars.\n\n## Workflow\n\n1. **All campaigns.** Call `campaign_read` with `action=\"index\"` and `include_stats=true`. For each\n   campaign take sent, replies, opt-ins and status, and work out the reply rate (replies ÷ sent).\n2. **Account totals.** Call `campaign_report` with `action=\"account\"` for the account-wide reply\n   rate, opt-in rate and recent opt-ins.\n3. **The one that matters.** If the user named a campaign, use it. Otherwise pick the campaign\n   with the lowest reply rate among those with enough sends (see above). Call `campaign_report`\n   with `action=\"campaign\"` and its `campaign_id` for the funnel and the sending timeline. For\n   \"give me a summary of <campaign>\", use `action=\"summary\"` instead: the same report plus the\n   replies waiting on the user and the top posts, in one call.\n4. **Why.** Explain from the numbers only: few emails sent yet, sending stopped (paused, or the\n   timeline goes flat), replies but few opt-ins (the offer), or no replies at all (the opener or\n   the creator fit). Don't invent causes the data doesn't show.\n5. **Waiting on the user.** Call `inbox_read` with `action=\"counts\"` (and the `campaign_id` if one\n   campaign is in focus). `pending` is replies waiting on the user; `outbox` is sent and waiting\n   on the creator. If `capped` is true, say \"100+\". A missing count means \"couldn't count right\n   now\".\n\n## Output layout\n\nIn ChatGPT the report appears as a campaign card automatically. After the card, write at most 2\nsentences: the campaign that is behind and the likeliest reason, then one next step. Don't repeat\nthe card's numbers in prose.\n\nWhere no card is shown (for example in Codex), use this layout:\n\n```\n**2 campaigns · 6 emails sent · 50% reply rate · 2 opted in**\n\n| Campaign | Status | Sent | Replies | Reply rate | Opted in |\n|---|---|---|---|---|---|\n| Spring Skincare Seeding | paused | 4 | 3 | 75% | 2 |\n| Vegan Snacks Launch | paused | 2 | 0 | 0% | 0 |\n\n**Behind:** Vegan Snacks Launch — 2 sent and no replies yet, so it's too early to judge; sending stopped on Sep 25.\n**Waiting on you:** 0 replies need an answer.\n**Next:** \"Who replied to Spring Skincare Seeding?\"\n```\n\n## Rules\n\n- Plain language: no ids, field names, status codes or \"tool\" in the reply.\n- Pausing, resuming or editing a live campaign happens in Cheerful at https://app.cheerful.ai.\n  Point there for those, without promising anything will be sent. A new campaign can be set up\n  here when `create_campaign_draft` is listed.\n- Don't promote plans or purchases.\n- Don't round 0 replies into \"low\"; say \"no replies yet\".\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}