Claude Skill

campaign-manager

Plan and run multichannel campaigns with an editorial calendar, asset tracking, and post-mortems. Use for any coordinated marketing push across channels.

LLM Mart · 0 points · 0 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download navinspire-ia-navin-navin_skills_campaign-manager-e9c73a3.zip · 3 KB
Part of navinspire-ia/navin — 182 skills

Install

skills CLI npx skills add https://github.com/Navinspire-ia/navin/tree/main/navin/skills/campaign-manager
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install navinspire-ia-navin@llmmart
Git git clone https://github.com/Navinspire-ia/navin.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole navinspire-ia/navin collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

Campaign Manager

Turn strategy into a shipped campaign: brief, message house, calendar, assets, launch checklist, report. Senior bar: measurable KPIs, UTM hygiene, no invented ROAS.

AWS media templates + Montage tools

If the turn includes media references (runtime context MEDIA TEMPLATE (AWS) or MEDIA REFERENCES (AWS), up to 6 per turn):

  • Use the local files as the brand / product visual base (family + tag + format).
  • With several references, COMBINE them into one output: each plays the role of its family (style = look, character = face, color = palette, element = product, location = set, structure = layout, camera = lens, effects = finish, stock = subject). Never produce one output per reference.
  • Pass the downloaded files to generate_image (reference_images) / generate_video (reference_image), and keep the reference aspect ratio.
  • The files are ALREADY materialized under .navin/resources/media-templates/ (see the runtime context local paths). Never re-download the s3 urls yourself.
  • If the AWS master is missing, the runtime auto-falls back to the official preview still (<id>-preview.jpg): use that still as the reference. NEVER fabricate placeholder media (ffmpeg lavfi, solid colors, drawtext).
  • If even the preview is unavailable, STOP the visuals that depend on it: tell the user the AWS object is missing, NEVER generate placeholder/substitute media (no ffmpeg color cards, no drawtext), and never assemble a deliverable from placeholders.

Marketing produces the campaign (offer, ICP, CTA, channels). For pixels and motion, call Montage generation tools: generate_image, generate_video, generate_music, generate_speech, montage(action=assemble|package|render|stock_search). Gate every final still with visual_qa before delivery. Never claim those tools are unavailable.

When to use

  • Coordinated launches or always-on campaigns across channels
  • 360° studio requests that need a plan + assets

When not to use

  • Single ad creative with no plan (ad-creative-generator)
  • Pure brand voice definition (brand-voice-manager)

Campaign brief (always first)

## Campaign: <name>
- Objective + KPI target (metric, baseline, target, window)
- Audience / persona
- Offer + CTA
- Key message / message house (promise, proof, CTA)
- Funnel role per channel (TOFU/MOFU/BOFU)
- Channels + why each exists
- Budget / resources (or "organic only")
- Dates: start / end
- Assets needed: [list with owners]
- Tracking: UTM plan + landing URL

Validate with:

python navin/skills/campaign-manager/scripts/check_campaign_brief.py marketing/campaigns/<name>-brief.md

Message house

Layer Content
Promise one-sentence value
Pillars 3 proof themes
Proof case, number, demo (real only)
CTA single primary action

Workflow

  1. Write the brief; run the checker; get user validation when stakes are high.
  2. Build editorial calendar: channel × date × asset (marketing/campaigns/<name>.md).
  3. Produce assets via specialists: copywriting-agent, social-media-manager, ad-creative-generator, email-marketing, image/video tools. Pages use the Marketing super render stack (ui-ux-pro-max: Motion + Lenis + Embla + Lucide + Three.js / R3F / drei, --stack threejs, designed scene). Decks use presentation-designer (no extra npm, no WebGL). Never GSAP, Locomotive, Spline, Lottie spam, particles, Three.js wallpaper, Theatre, Barba.
  4. Pre-flight: UTMs, landing live, brand voice, legal claims, then visual_qa with placement sizes, ratio, safe zones and authoritative product/brand references. Rework WARN/BLOCK and never auto-deliver BLOCK assets.
  5. During: note what to monitor (user supplies ad accounts/analytics); do not invent live metrics.
  6. Post-mortem within a week of end: results vs target (from user data), what worked, reusable assets.

Calendar format

| Date | Channel | Asset | Funnel | Status | Owner | UTM / Link | KPI |

Rules

  • Every outbound link carries UTM (source/medium/campaign[/content]).
  • No channel joins without a specific goal and KPI.
  • Never invent CPC/ROAS/CVR; label estimates or require Ads/GA exports.
  • Archive post-mortems for the next campaign.

Anti-patterns

  • Channel laundry lists with no message house
  • Assets without CTA or landing
  • "Awareness" with no measurable proxy
Files (navin)
  • scripts
    • check_campaign_brief.py 1.5 KB
      #!/usr/bin/env python3
      # Copyright (c) 2026-present Navinspire IA
      # SPDX-License-Identifier: AGPL-3.0-only
      
      """Validate a marketing campaign brief for required senior-desk fields.
      
      Accepts a markdown file. Looks for required section keywords (case-insensitive).
      Exit 0 if all present; exit 1 with missing list otherwise.
      """
      
      from __future__ import annotations
      
      import re
      import sys
      from pathlib import Path
      
      REQUIRED = [
          ("objective", re.compile(r"objective|objectif|kpi", re.I)),
          ("audience", re.compile(r"audience|persona|cible|icp", re.I)),
          ("offer_cta", re.compile(r"\boffer\b|offre|\bcta\b|call to action", re.I)),
          ("message", re.compile(r"key message|message house|message cl[eé]|promise", re.I)),
          ("channels", re.compile(r"channel|canal|canaux", re.I)),
          ("dates", re.compile(r"date|timeline|start|end|calendrier", re.I)),
          ("assets", re.compile(r"asset|livrable|deliverable", re.I)),
          ("tracking", re.compile(r"utm|tracking|mesure|measurement|analytics", re.I)),
      ]
      
      
      def main() -> None:
          if len(sys.argv) < 2:
              print("Usage: check_campaign_brief.py brief.md", file=sys.stderr)
              raise SystemExit(2)
          path = Path(sys.argv[1])
          text = path.read_text(encoding="utf-8")
          missing = [name for name, pattern in REQUIRED if not pattern.search(text)]
          if missing:
              print("BRIEF INCOMPLETE - missing:")
              for name in missing:
                  print(f"- {name}")
              raise SystemExit(1)
          print(f"BRIEF OK: {path} (all required fields detected)")
      
      
      if __name__ == "__main__":
          main()
      
  • SKILL.md 4.6 KB
    ---
    name: campaign-manager
    description: Plan and run multichannel campaigns with an editorial calendar, asset tracking, and post-mortems. Use for any coordinated marketing push across channels.
    metadata: {"navin":{"emoji":"🗓️","category":"marketing"}}
    ---
    
    # Campaign Manager
    
    Turn strategy into a shipped campaign: brief, message house, calendar, assets, launch checklist, report. Senior bar: measurable KPIs, UTM hygiene, no invented ROAS.
    
    ## AWS media templates + Montage tools
    
    If the turn includes media references (runtime context `MEDIA TEMPLATE (AWS)` or `MEDIA REFERENCES (AWS)`, up to 6 per turn):
    
    - Use the local files as the brand / product visual base (family + tag + format).
    - With several references, COMBINE them into one output: each plays the role of its family (style = look, character = face, color = palette, element = product, location = set, structure = layout, camera = lens, effects = finish, stock = subject). Never produce one output per reference.
    - Pass the downloaded files to `generate_image` (`reference_images`) / `generate_video` (`reference_image`), and keep the reference aspect ratio.
    - The files are ALREADY materialized under `.navin/resources/media-templates/` (see the runtime context local paths). Never re-download the s3 urls yourself.
    - If the AWS master is missing, the runtime auto-falls back to the official preview still (`<id>-preview.jpg`): use that still as the reference. NEVER fabricate placeholder media (ffmpeg lavfi, solid colors, drawtext).
    - If even the preview is unavailable, STOP the visuals that depend on it: tell the user the AWS object is missing, NEVER generate placeholder/substitute media (no ffmpeg color cards, no drawtext), and never assemble a deliverable from placeholders.
    
    Marketing produces the campaign (offer, ICP, CTA, channels). For pixels and motion, call Montage generation tools: `generate_image`, `generate_video`, `generate_music`, `generate_speech`, `montage(action=assemble|package|render|stock_search)`. Gate every final still with `visual_qa` before delivery. Never claim those tools are unavailable.
    
    ## When to use
    
    - Coordinated launches or always-on campaigns across channels
    - 360° studio requests that need a plan + assets
    
    ## When not to use
    
    - Single ad creative with no plan (`ad-creative-generator`)
    - Pure brand voice definition (`brand-voice-manager`)
    
    ## Campaign brief (always first)
    
    ```markdown
    ## Campaign: <name>
    - Objective + KPI target (metric, baseline, target, window)
    - Audience / persona
    - Offer + CTA
    - Key message / message house (promise, proof, CTA)
    - Funnel role per channel (TOFU/MOFU/BOFU)
    - Channels + why each exists
    - Budget / resources (or "organic only")
    - Dates: start / end
    - Assets needed: [list with owners]
    - Tracking: UTM plan + landing URL
    ```
    
    Validate with:
    
    ```bash
    python navin/skills/campaign-manager/scripts/check_campaign_brief.py marketing/campaigns/<name>-brief.md
    ```
    
    ## Message house
    
    | Layer | Content |
    |-------|---------|
    | Promise | one-sentence value |
    | Pillars | 3 proof themes |
    | Proof | case, number, demo (real only) |
    | CTA | single primary action |
    
    ## Workflow
    
    1. Write the brief; run the checker; get user validation when stakes are high.
    2. Build editorial calendar: channel × date × asset (`marketing/campaigns/<name>.md`).
    3. Produce assets via specialists: `copywriting-agent`, `social-media-manager`, `ad-creative-generator`, `email-marketing`, image/video tools. Pages use the Marketing super render stack (`ui-ux-pro-max`: Motion + Lenis + Embla + Lucide + Three.js / R3F / drei, `--stack threejs`, designed scene). Decks use `presentation-designer` (no extra npm, no WebGL). Never GSAP, Locomotive, Spline, Lottie spam, particles, Three.js wallpaper, Theatre, Barba.
    4. Pre-flight: UTMs, landing live, brand voice, legal claims, then `visual_qa`
       with placement sizes, ratio, safe zones and authoritative product/brand
       references. Rework WARN/BLOCK and never auto-deliver BLOCK assets.
    5. During: note what to monitor (user supplies ad accounts/analytics); do not invent live metrics.
    6. Post-mortem within a week of end: results vs target (from user data), what worked, reusable assets.
    
    ## Calendar format
    
    ```markdown
    | Date | Channel | Asset | Funnel | Status | Owner | UTM / Link | KPI |
    ```
    
    ## Rules
    
    - Every outbound link carries UTM (source/medium/campaign[/content]).
    - No channel joins without a specific goal and KPI.
    - Never invent CPC/ROAS/CVR; label estimates or require Ads/GA exports.
    - Archive post-mortems for the next campaign.
    
    ## Anti-patterns
    
    - Channel laundry lists with no message house
    - Assets without CTA or landing
    - "Awareness" with no measurable proxy
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related