Run the full campaign pipeline by chaining three skills in order. The owner approves at each handoff — never roll past a gate without explicit confirmation.
Parse arguments:
--lookback (default 90d) — how far back to look for the revenue dip
After Step 1 approval, trigger the canva-creator skill workflow:
Take the approved brief from Step 1 as input.
Build the posting calendar matched to the brief's priorities.
Generate on-brand Canva assets for each post (apply each on screen for owner approval before moving on).
Draft caption copy for each post.
Stage the scheduled send in HubSpot (do NOT send — staging only).
Present the staged campaign to the owner. Wait for explicit "approved, send to segment X" before Step 3.
Step 3 — Audience segmentation (lead-triage)
After Step 2 approval, trigger the lead-triage skill workflow:
Pull HubSpot contacts that match the campaign's target segment (from the approved brief).
Score by engagement, company fit, urgency markers.
Produce two deliverables:
Bulk send list — the segment receiving the staged campaign from Step 2
High-priority call list — top 5 leads the owner should call personally with talking points
Block calendar time for the call list.
Present both lists. Wait for explicit "send" before pushing the HubSpot campaign live.
Approval gates (must hold)
Never auto-progress between steps. Each handoff requires explicit owner approval.
Never send the HubSpot campaign without the owner's "send" command in Step 3.
If any connector is unreachable (QuickBooks, PayPal, Canva, HubSpot), stop, report which connector failed, and ask whether to retry or abort.
Output
End the run with a one-paragraph recap: revenue dip identified, posts generated, segment size, calls booked. Link to the HubSpot campaign URL once sent.
How to use it
Copy the folder
Take anthropics/run-campaign from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
Check the name does not clash
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.