ai-marketing-kit-orchestrator
Skill by ara.so — Marketing Skills collection.
ai-marketing-kit is a collection of 26 production-ready marketing skills for AI agents. Each skill is a SKILL.md file that teaches agents how to execute specific marketing tasks — from SEO setup and analytics configuration to video editing, paid ads, and lead generation. Built for Claude Code, Cursor, Codex, and any SKILL.md-compatible agent.
Installation
Claude Code (Plugin - Recommended)
/plugin marketplace add crealwork/ai-marketing-kit
/plugin install ai-marketing-kit@sundayable
Claude Code (Skills Only)
git clone https://github.com/crealwork/ai-marketing-kit
cp -r ai-marketing-kit/skills/* ~/.claude/skills/
Manual Installation (Any Agent)
git clone https://github.com/crealwork/ai-marketing-kit
# Copy skills/* to your agent's skills directory
After installation, run the kit-onboarding skill first:
User: "set up my marketing kit"
This creates foundational files (DESIGN.md, BRAND-VOICE.md, CLAUDE.md) that all other skills reference for brand consistency.
Skill Categories
Groundwork
kit-onboarding — Bootstrap brand tokens, voice guidelines, and agent configuration
publish-checklist — Pre-deploy SEO head optimization (favicons, OG tags, titles, canonical)
seo-geo-setup — Search engine registration (Google, Naver, Bing) + GEO for AI search citations
analytics-setup — GA4 + GTM + Clarity configuration with conversion events and UTM tracking
crm-connect — Universal CRM integration (HubSpot, Pipedrive, Close, Attio, Airtable)
Content Creation
carousel-generator — Instagram/Threads card carousels (research → branded design → PNG)
ppt-slide-generator — 16:9 presentation decks with two-stage review
print-design — Posters, flyers, business cards with press-ready PDF output
brand-guide — Extract brand systems from websites or logos
humanizer — Remove AI patterns from English/Korean prose
content-repurpose — Cross-platform content adaptation (Threads ↔ LinkedIn)
image-gen — Marketing images via Higgsfield CLI (gpt-image-2), A/B variants by default
thumbnail-maker — Video thumbnails with 4+ A/B variants, text overlays
Video Production
youtube-edit-kit — Basic editing (silence cuts, captions, SRT, vertical formats) using ffmpeg + faster-whisper
longform-to-content — Long recording → edited video + 4-8 Shorts + thumbnails
ad-video — 15-60s promotional videos with motion graphics, A/B variants required
Publishing & Distribution
organic-social — Multi-platform publishing/scheduling via Zernio
paid-ads — Campaign management across 7 platforms with budget approval gates
e-blast-newsletter — Email campaigns via Resend (3,000/month free tier)
b2b-cold-email — Cold outreach sequences via Instantly.ai
lead-magnet — Create lead magnets with Google Sheets database integration
cyrano — Pre-meeting research briefs with cited sources
Strategy & Coaching
dans-advice — Realistic marketing prescriptions with actionable next steps
yc-office-hours — YC-style validation for ideas and GTM strategies
go-viral-or-die — Viral/stunt marketing ideation
first-principles-coach — Challenge assumptions on pricing, product, growth
Configuration
Environment Variables
Set these only for skills you actively use:
# Email & Outreach
export RESEND_API_KEY="re_xxxxx" # e-blast-newsletter (free tier)
export INSTANTLY_API_KEY="inst_xxxxx" # b2b-cold-email
# Social & Ads
export ZERNIO_API_KEY="zern_xxxxx" # organic-social, paid-ads
# Image Generation
# Run: higgsfield auth login # image-gen, thumbnail-maker
# Cyrano Delivery (optional, pick one)
export CYRANO_SLACK_WEBHOOK="https://hooks.slack.com/services/xxx"
export CYRANO_TELEGRAM_TOKEN="bot_xxxxx"
export CYRANO_SMTP_PASS="smtp_password"
# CRM (varies by provider, skill guides setup)
export HUBSPOT_API_KEY="hub_xxxxx"
export PIPEDRIVE_API_TOKEN="pipe_xxxxx"
Never hardcode keys in files. The kit reads exclusively from environment variables.
Brand Configuration Files
After running kit-onboarding, these files drive brand consistency:
DESIGN.md — Brand tokens (colors, fonts, spacing, logo usage)
BRAND-VOICE.md — Tone, vocabulary, content guidelines
CLAUDE.md — Agent configuration and workflow preferences
Skills automatically reference these files. Example from carousel-generator:
def load_brand_tokens():
"""Read color palette and fonts from DESIGN.md"""
with open("DESIGN.md") as f:
design = f.read()
colors = extract_colors(design) # {"primary": "#FF5733", ...}
fonts = extract_fonts(design) # {"heading": "Inter Bold", ...}
return colors, fonts
Key Workflows
First-Time Setup
# 1. Install kit
# 2. User says: "set up my marketing kit"
# 3. kit-onboarding skill activates:
def onboard_marketing_kit():
questions = [
"What's your brand name?",
"Primary brand color (hex)?",
"Who is your target audience?",
"Tone: formal, casual, or playful?",
]
answers = interview_user(questions)
# Generate foundational files
create_design_md(answers)
create_brand_voice_md(answers)
create_claude_md()
confirm("✓ Marketing kit ready. Try: 'create an Instagram carousel about X'")
Creating Social Content
# User: "create a 5-slide carousel about our new feature"
# carousel-generator activates:
def generate_carousel(topic, slide_count=5):
# 1. Research phase
research = gather_research(topic)
# 2. Load brand
colors, fonts = load_brand_tokens()
voice = load_brand_voice()
# 3. Generate slides
slides = []
for i in range(slide_count):
content = write_slide_copy(research, i, voice)
design = design_slide(content, colors, fonts)
slides.append(design)
# 4. Review gate
show_preview(slides)
if user_approves():
export_slides_to_png(slides)
return "✓ Carousel saved to outputs/carousel_*.png"
Setting Up Analytics
# User: "set up analytics for my site"
# analytics-setup activates:
def setup_analytics(domain):
steps = []
# GA4
ga4_id = create_ga4_property(domain)
ga4_snippet = generate_ga4_code(ga4_id)
steps.append(f"Add to <head>:\n{ga4_snippet}")
# GTM
gtm_id = create_gtm_container(domain)
gtm_snippet = generate_gtm_code(gtm_id)
steps.append(f"Add GTM:\n{gtm_snippet}")
# Clarity
clarity_id = setup_clarity(domain)
steps.append(f"Clarity project: {clarity_id}")
# Conversion events
events = ["sign_up", "purchase", "trial_start"]
configure_ga4_events(ga4_id, events)
return format_installation_guide(steps)
Publishing Content (with approval gates)
# User: "post this to Instagram and LinkedIn"
# organic-social activates:
def publish_multi_platform(content, platforms):
import os
import requests
# 1. Show preview
preview = format_preview(content, platforms)
show(preview)
# 2. APPROVAL GATE (required for anything that leaves the machine)
approval = ask_user("Publish to Instagram and LinkedIn? (yes/no)")
if approval.lower() != "yes":
return "❌ Publish cancelled"
# 3. Execute via Zernio
api_key = os.getenv("ZERNIO_API_KEY")
headers = {"Authorization": f"Bearer {api_key}"}
for platform in platforms:
payload = {
"platform": platform,
"content": content["text"],
"media_urls": content.get("images", []),
"schedule": content.get("schedule") # None = publish now
}
response = requests.post(
"https://api.zernio.com/v1/publish",
json=payload,
headers=headers
)
if response.status_code != 200:
return f"❌ {platform} failed: {response.text}"
return "✓ Published to Instagram, LinkedIn"
Running Paid Ads (with budget approval)
# User: "run a Facebook ad for our landing page"
# paid-ads activates:
def create_paid_ad_campaign(platform, objective, target_url):
# 1. Generate A/B creative variants (required)
creatives = generate_ad_creatives(objective, count=2)
# 2. Show preview + budget
preview = format_ad_preview(creatives, platform)
show(preview)
# 3. BUDGET APPROVAL GATE (required for spend actions)
budget_info = ask_user("Budget per day (USD)? Duration (days)?")
daily_budget = budget_info["daily"]
duration = budget_info["duration"]
total_spend = daily_budget * duration
confirmation = ask_user(
f"Spend ${total_spend} on {platform} over {duration} days? (yes/no)"
)
if confirmation.lower() != "yes":
return "❌ Campaign cancelled"
# 4. Create campaign via Zernio
api_key = os.getenv("ZERNIO_API_KEY")
campaign_id = create_campaign_via_api(
api_key, platform, creatives, daily_budget, duration, target_url
)
return f"✓ Campaign {campaign_id} live on {platform}"
Safety Rules (Kit-Wide)
All skills enforce these constraints:
- Spend approval — Any action that costs money (ads, budget changes) requires explicit user approval with platform + budget + duration
- Publish approval — Any action that leaves the machine (sends, posts, activations) needs an explicit "go"
- No blind retries — On timeouts, list results first; never auto-retry (prevents double-charges, double-posts)
- Image policy — All image/video generation uses Higgsfield CLI (gpt-image-2); no silent fallbacks; A/B variants for performance visuals
Example enforcement:
def enforce_approval_gate(action_type, details):
if action_type in ["spend", "publish", "send"]:
preview = format_preview(details)
show(preview)
response = ask_user(f"Proceed with {action_type}? (yes/no)")
if response.lower() != "yes":
raise UserCancelled(f"{action_type} cancelled by user")
return True
Common Patterns
Reading Brand Files
def load_brand_context():
"""Load brand tokens and voice for consistent output"""
design = read_file("DESIGN.md")
voice = read_file("BRAND-VOICE.md")
return {
"colors": extract_colors(design),
"fonts": extract_fonts(design),
"tone": extract_tone(voice),
"vocabulary": extract_vocabulary(voice),
}
Generating A/B Variants
def generate_ab_variants(base_content, count=2):
"""Performance content (ads, thumbnails) always ships as A/B sets"""
variants = []
for i in range(count):
variant = create_variant(base_content, variation_seed=i)
variants.append(variant)
show_comparison(variants)
return variants
External API Calls (with error handling)
import os
import requests
def call_external_api(endpoint, payload):
api_key = os.getenv("REQUIRED_API_KEY")
if not api_key:
return "❌ Missing REQUIRED_API_KEY environment variable"
try:
response = requests.post(
endpoint,
json=payload,
headers={"Authorization": f"Bearer {api_key}"},
timeout=30
)
response.raise_for_status()
return response.json()
except requests.Timeout:
return "❌ API timeout — list current state, do not retry blindly"
except requests.HTTPError as e:
return f"❌ API error: {e.response.status_code} {e.response.text}"
Troubleshooting
Skills Not Loading
# Verify skills directory
ls ~/.claude/skills/
# Should see: kit-onboarding.md, carousel-generator.md, etc.
# Re-copy if missing
cp -r ai-marketing-kit/skills/* ~/.claude/skills/
Missing Environment Variables
# Skills fail gracefully with clear errors:
# "❌ Missing RESEND_API_KEY — set via: export RESEND_API_KEY=re_xxxxx"
# Check loaded vars
echo $RESEND_API_KEY
echo $ZERNIO_API_KEY
Brand Files Not Found
# Run onboarding first
# User: "set up my marketing kit"
# Or create manually:
touch DESIGN.md BRAND-VOICE.md CLAUDE.md
Image Generation Failures
# Authenticate Higgsfield CLI
higgsfield auth login
# Test generation
higgsfield generate "test image" --model gpt-image-2
# Skills will report: "❌ Higgsfield CLI failed: [error details]"
# No silent fallback to other image sources
Approval Gates Not Triggering
Skills must explicitly call approval for spend/publish actions. If bypassed:
# Correct pattern:
enforce_approval_gate("publish", preview_data)
execute_publish()
# Incorrect (will be caught in review):
execute_publish() # ❌ Missing approval gate
Extending the Kit
Adding Custom Skills
Create custom-skill.md in ~/.claude/skills/:
---
name: custom-marketing-automation
description: Your custom marketing task
triggers:
- do my custom task
---
# custom-marketing-automation
## Implementation
```python
def custom_task():
# Load brand context like other skills
brand = load_brand_context()
# Your logic here
...
# Enforce approval for external actions
enforce_approval_gate("publish", preview)
### Overriding Brand Tokens
Edit `DESIGN.md` directly:
```markdown
# DESIGN.md
## Colors
- Primary: #FF5733
- Secondary: #3498DB
## Fonts
- Heading: Inter Bold
- Body: Inter Regular
Skills auto-reload on file changes.
License
MIT — use, fork, or hand to your agent.
Built by Sundayable — AI + Revenue Growth Team for Small Business